mbox series

[v8,00/24] Make Pixman an optional dependency

Message ID 20231107071915.2459115-1-marcandre.lureau@redhat.com
Headers show
Series Make Pixman an optional dependency | expand

Message

Marc-André Lureau Nov. 7, 2023, 7:18 a.m. UTC
From: Marc-André Lureau <marcandre.lureau@redhat.com>

Hi,

QEMU system emulators can be made to compile and work without Pixman.

Only a few devices and options actually require it (VNC, Gtk, Spice for ex) and
will have to be compiled out.

However, most of QEMU graphics-related code is based on pixman_image_t and
format. If we want to provide mostly compatible QEMU machines with or without
Pixman, all we need to do is to have a small compatibility header with just the
bare minimum for those types (see "ui: add pixman-compat.h"). There are a
limited number of operations related to geometry that are slightly better
implemented in QEMU (without Pixman, see "virtio-gpu: replace PIXMAN for
region/rect test").

Without this simple compatibility header approach, QEMU at runtime becomes a
very different emulator (without graphics device/board, display etc) and full of
"if PIXMAN" conditions in the code. This is a much worse outcome imho, compared
to this small header maintainance and compatibility story.

Fixes:
https://gitlab.com/qemu-project/qemu/-/issues/1172

v8:
- rebased
- replace "hw/display: make ATI_VGA depend on PIXMAN" with
  "hw/display/ati: allow compiling without PIXMAN"
- add some r-b

v7:
- make FULOONG depend on VT82C686
- various r-b/a-b

v6:
- add "build-sys: drop needless warning pragmas for old pixman"
- rename pixman-compat.h -> pixman-minimal.h
- add "vl: drop needless -spice checks"
- add "qemu-options: define -vnc only #ifdef CONFIG_VNC"
- add "vl: simplify display_remote logic"
- in "vl: move display early init before default devices", rename the introduced
  function qemu_setup_display()
- adapt "hw/sm501: allow compiling without PIXMAN" following Zoltan review,
  using warn_report(), droping Error argument
- various r-b/a-b

v5:
- fixed "vl: move display early init before default devices" patch

v4:
- added "vl: move display early init before default devices" patch
- code style fixes
- a-b from Zoltan

v3:
- improve transient meson condition in first patch (Paolo)
- use muxed console as fallback by default (Paolo)
- make pixman-compat.h closer to original API
- keep "x-pixman" property for sm501 (Zoltan)

Marc-André Lureau (24):
  build-sys: add a "pixman" feature
  build-sys: drop needless warning pragmas for old pixman
  ui: compile out some qemu-pixman functions when !PIXMAN
  ui: add pixman-minimal.h
  vl: drop needless -spice checks
  qemu-options: define -vnc only #ifdef CONFIG_VNC
  vl: simplify display_remote logic
  vl: move display early init before default devices
  ui/console: allow to override the default VC
  ui/vc: console-vc requires PIXMAN
  qmp/hmp: disable screendump if PIXMAN is missing
  virtio-gpu: replace PIXMAN for region/rect test
  ui/console: when PIXMAN is unavailable, don't draw placeholder msg
  vhost-user-gpu: skip VHOST_USER_GPU_UPDATE when !PIXMAN
  ui/gl: opengl doesn't require PIXMAN
  ui/vnc: VNC requires PIXMAN
  ui/spice: SPICE/QXL requires PIXMAN
  ui/gtk: -display gtk requires PIXMAN
  ui/dbus: do not require PIXMAN
  arm/kconfig: XLNX_ZYNQMP_ARM depends on PIXMAN
  hw/sm501: allow compiling without PIXMAN
  hw/mips: FULOONG depends on VT82C686
  hw/display/ati: allow compiling without PIXMAN
  build-sys: make pixman actually optional

 meson.build                   |  25 ++++-
 qapi/ui.json                  |   3 +-
 include/ui/console.h          |   2 +
 include/ui/pixman-minimal.h   | 195 ++++++++++++++++++++++++++++++++++
 include/ui/qemu-pixman.h      |  15 +--
 include/ui/rect.h             |  59 ++++++++++
 hw/display/ati.c              |  16 ++-
 hw/display/ati_2d.c           |  11 +-
 hw/display/sm501.c            |  46 +++++---
 hw/display/vhost-user-gpu.c   |   2 +
 hw/display/virtio-gpu.c       |  30 ++----
 system/vl.c                   |  84 ++++++++-------
 ui/console-vc-stubs.c         |  33 ++++++
 ui/console.c                  |  19 ++++
 ui/dbus-listener.c            |  90 +++++++++++-----
 ui/qemu-pixman.c              |   6 ++
 ui/ui-hmp-cmds.c              |   2 +
 ui/ui-qmp-cmds.c              |   2 +
 ui/vnc-stubs.c                |  12 ---
 Kconfig.host                  |   3 +
 hmp-commands.hx               |   2 +
 hw/arm/Kconfig                |   3 +-
 hw/display/Kconfig            |   7 +-
 hw/display/meson.build        |   4 +-
 hw/mips/Kconfig               |   1 +
 meson_options.txt             |   2 +
 qemu-options.hx               |   2 +
 scripts/meson-buildoptions.sh |   3 +
 ui/meson.build                |  22 ++--
 29 files changed, 560 insertions(+), 141 deletions(-)
 create mode 100644 include/ui/pixman-minimal.h
 create mode 100644 include/ui/rect.h
 create mode 100644 ui/console-vc-stubs.c