mirror of
https://gitlab.com/qemu-project/qemu
synced 2024-10-14 15:02:54 +00:00
ui: build curses, gtk and sdl as modules.
-----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iQIcBAABAgAGBQJanQRYAAoJEEy22O7T6HE46p0P/38Ux4Yd8HZUkdCFuvZ8AH7u KUe4/K6LZosvmt2nn8p7eSLLdOMWhkCd7EJfpAyjlkZTjk7VU+SFZNVajpIDy4pO mmbKu9F/au2mPzKpvGx+44OGRkY+s6l4WnSIzWHm/3M5MbKksqOqfRmcprIv+kNe z14bY8AecV47UC9/5tZu2Kfe5jlBajsVdP0ZMFM0ROgSJd7bUjyoVX7iBCyqHXuF BpKMbphTiFV2fQrAaKCooLiCD1JKqow42N8lfGg0ytxfBTBIJVuB7d6l6nVCZVxg fxogbE2ciLUx9cPm5X0jgfL+pXgSHiGCurtlWEDRb9DI1TTJlO/ssK/+vLBlKE9L qKVzDjaiXtieNZh1SK5zUOC0kDEr6LtfZLJG1o0Lqit0OV6/OS7Qq0T3/dOwmqWe 3V6HRV8CYJkUKn2QqREpE6jv2pFLuHEuoeyFfTE92pK4yS7pgZOfaKqq4FXy+cu3 wpWx/qmu1Mz5A8fnzNW+v6juhrgYxychRdkw7MWPjm0MDIaYcHV/Fp/yzlO4L1FE hEet5xXT48n/3/Cdj+ivFv6+4XELWMw09UUKEkZCHnSClA8UUZU9hbvsTXRqcAef TFO6s6t+c7Ya8tnsw4qNsk4lLVtMGp67L0Rfvh527ShxDHsRA/wl8PSyRUdQ7YlM l3MVmAnyZom8AR6EA/BG =Zc72 -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/kraxel/tags/ui-20180305-pull-request' into staging ui: build curses, gtk and sdl as modules. # gpg: Signature made Mon 05 Mar 2018 08:48:24 GMT # gpg: using RSA key 4CB6D8EED3E87138 # gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>" # gpg: aka "Gerd Hoffmann <gerd@kraxel.org>" # gpg: aka "Gerd Hoffmann (private) <kraxel@gmail.com>" # Primary key fingerprint: A032 8CFF B93A 17A7 9901 FE7D 4CB6 D8EE D3E8 7138 * remotes/kraxel/tags/ui-20180305-pull-request: ui/sdl: build as module audio: rename CONFIG_* to CONFIG_AUDIO_* ui/curses: build as module ui/gtk: build as module configure: opengl doesn't depend on x11 configure: add X11 vars to config-host.mak console: add ui module loading support console: add and use qemu_display_find_default egl-headless: switch over to new display registry curses: switch over to new display registry cocoa: switch over to new display registry sdl: switch over to new display registry console: add qemu display registry, add gtk Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
4ee02f53be
|
@ -109,6 +109,7 @@ common-obj-y += hw/
|
||||||
common-obj-y += replay/
|
common-obj-y += replay/
|
||||||
|
|
||||||
common-obj-y += ui/
|
common-obj-y += ui/
|
||||||
|
common-obj-m += ui/
|
||||||
common-obj-y += bt-host.o bt-vhci.o
|
common-obj-y += bt-host.o bt-vhci.o
|
||||||
bt-host.o-cflags := $(BLUEZ_CFLAGS)
|
bt-host.o-cflags := $(BLUEZ_CFLAGS)
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
common-obj-y = audio.o noaudio.o wavaudio.o mixeng.o
|
common-obj-y = audio.o noaudio.o wavaudio.o mixeng.o
|
||||||
common-obj-$(CONFIG_SDL) += sdlaudio.o
|
common-obj-$(CONFIG_AUDIO_SDL) += sdlaudio.o
|
||||||
common-obj-$(CONFIG_OSS) += ossaudio.o
|
common-obj-$(CONFIG_AUDIO_OSS) += ossaudio.o
|
||||||
common-obj-$(CONFIG_SPICE) += spiceaudio.o
|
common-obj-$(CONFIG_SPICE) += spiceaudio.o
|
||||||
common-obj-$(CONFIG_COREAUDIO) += coreaudio.o
|
common-obj-$(CONFIG_AUDIO_COREAUDIO) += coreaudio.o
|
||||||
common-obj-$(CONFIG_ALSA) += alsaaudio.o
|
common-obj-$(CONFIG_AUDIO_ALSA) += alsaaudio.o
|
||||||
common-obj-$(CONFIG_DSOUND) += dsoundaudio.o
|
common-obj-$(CONFIG_AUDIO_DSOUND) += dsoundaudio.o
|
||||||
common-obj-$(CONFIG_PA) += paaudio.o
|
common-obj-$(CONFIG_AUDIO_PA) += paaudio.o
|
||||||
common-obj-$(CONFIG_AUDIO_PT_INT) += audio_pt_int.o
|
common-obj-$(CONFIG_AUDIO_PT_INT) += audio_pt_int.o
|
||||||
common-obj-$(CONFIG_AUDIO_WIN_INT) += audio_win_int.o
|
common-obj-$(CONFIG_AUDIO_WIN_INT) += audio_win_int.o
|
||||||
common-obj-y += wavcapture.o
|
common-obj-y += wavcapture.o
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
#ifndef QEMU_AUDIO_INT_H
|
#ifndef QEMU_AUDIO_INT_H
|
||||||
#define QEMU_AUDIO_INT_H
|
#define QEMU_AUDIO_INT_H
|
||||||
|
|
||||||
#ifdef CONFIG_COREAUDIO
|
#ifdef CONFIG_AUDIO_COREAUDIO
|
||||||
#define FLOAT_MIXENG
|
#define FLOAT_MIXENG
|
||||||
/* #define RECIPROCAL */
|
/* #define RECIPROCAL */
|
||||||
#endif
|
#endif
|
||||||
|
|
31
configure
vendored
31
configure
vendored
|
@ -2520,9 +2520,8 @@ fi
|
||||||
|
|
||||||
##########################################
|
##########################################
|
||||||
# X11 probe
|
# X11 probe
|
||||||
x11_cflags=
|
|
||||||
x11_libs=-lX11
|
|
||||||
if $pkg_config --exists "x11"; then
|
if $pkg_config --exists "x11"; then
|
||||||
|
have_x11=yes
|
||||||
x11_cflags=$($pkg_config --cflags x11)
|
x11_cflags=$($pkg_config --cflags x11)
|
||||||
x11_libs=$($pkg_config --libs x11)
|
x11_libs=$($pkg_config --libs x11)
|
||||||
fi
|
fi
|
||||||
|
@ -2555,10 +2554,10 @@ if test "$gtk" != "no"; then
|
||||||
gtk_libs=$($pkg_config --libs $gtkpackage)
|
gtk_libs=$($pkg_config --libs $gtkpackage)
|
||||||
gtk_version=$($pkg_config --modversion $gtkpackage)
|
gtk_version=$($pkg_config --modversion $gtkpackage)
|
||||||
if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
|
if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
|
||||||
|
need_x11=yes
|
||||||
gtk_cflags="$gtk_cflags $x11_cflags"
|
gtk_cflags="$gtk_cflags $x11_cflags"
|
||||||
gtk_libs="$gtk_libs $x11_libs"
|
gtk_libs="$gtk_libs $x11_libs"
|
||||||
fi
|
fi
|
||||||
libs_softmmu="$gtk_libs $libs_softmmu"
|
|
||||||
gtk="yes"
|
gtk="yes"
|
||||||
elif test "$gtk" = "yes"; then
|
elif test "$gtk" = "yes"; then
|
||||||
feature_not_found "gtk" "Install gtk3-devel"
|
feature_not_found "gtk" "Install gtk3-devel"
|
||||||
|
@ -2808,7 +2807,6 @@ if test "$vte" != "no"; then
|
||||||
vte_cflags=$($pkg_config --cflags $vtepackage)
|
vte_cflags=$($pkg_config --cflags $vtepackage)
|
||||||
vte_libs=$($pkg_config --libs $vtepackage)
|
vte_libs=$($pkg_config --libs $vtepackage)
|
||||||
vteversion=$($pkg_config --modversion $vtepackage)
|
vteversion=$($pkg_config --modversion $vtepackage)
|
||||||
libs_softmmu="$vte_libs $libs_softmmu"
|
|
||||||
vte="yes"
|
vte="yes"
|
||||||
elif test "$vte" = "yes"; then
|
elif test "$vte" = "yes"; then
|
||||||
if test "$gtkabi" = "3.0"; then
|
if test "$gtkabi" = "3.0"; then
|
||||||
|
@ -2923,6 +2921,7 @@ if test "$sdl" = "yes" ; then
|
||||||
int main(void) { return 0; }
|
int main(void) { return 0; }
|
||||||
EOF
|
EOF
|
||||||
if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
|
if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
|
||||||
|
need_x11=yes
|
||||||
sdl_cflags="$sdl_cflags $x11_cflags"
|
sdl_cflags="$sdl_cflags $x11_cflags"
|
||||||
sdl_libs="$sdl_libs $x11_libs"
|
sdl_libs="$sdl_libs $x11_libs"
|
||||||
fi
|
fi
|
||||||
|
@ -3281,8 +3280,6 @@ EOF
|
||||||
unset IFS
|
unset IFS
|
||||||
if compile_prog "$curses_inc" "$curses_lib" ; then
|
if compile_prog "$curses_inc" "$curses_lib" ; then
|
||||||
curses_found=yes
|
curses_found=yes
|
||||||
QEMU_CFLAGS="$curses_inc $QEMU_CFLAGS"
|
|
||||||
libs_softmmu="$curses_lib $libs_softmmu"
|
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
@ -3778,9 +3775,9 @@ libs_softmmu="$libs_softmmu $fdt_libs"
|
||||||
|
|
||||||
if test "$opengl" != "no" ; then
|
if test "$opengl" != "no" ; then
|
||||||
opengl_pkgs="epoxy libdrm gbm"
|
opengl_pkgs="epoxy libdrm gbm"
|
||||||
if $pkg_config $opengl_pkgs x11; then
|
if $pkg_config $opengl_pkgs; then
|
||||||
opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
|
opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
|
||||||
opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
|
opengl_libs="$($pkg_config --libs $opengl_pkgs)"
|
||||||
opengl=yes
|
opengl=yes
|
||||||
if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
|
if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
|
||||||
gtk_gl="yes"
|
gtk_gl="yes"
|
||||||
|
@ -5984,7 +5981,7 @@ if test "$cap_ng" = "yes" ; then
|
||||||
fi
|
fi
|
||||||
echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
|
echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
|
||||||
for drv in $audio_drv_list; do
|
for drv in $audio_drv_list; do
|
||||||
def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
|
def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
|
||||||
echo "$def=y" >> $config_host_mak
|
echo "$def=y" >> $config_host_mak
|
||||||
done
|
done
|
||||||
echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
|
echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
|
||||||
|
@ -6036,8 +6033,13 @@ if test "$modules" = "yes"; then
|
||||||
echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
|
echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
|
||||||
echo "CONFIG_MODULES=y" >> $config_host_mak
|
echo "CONFIG_MODULES=y" >> $config_host_mak
|
||||||
fi
|
fi
|
||||||
|
if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
|
||||||
|
echo "CONFIG_X11=y" >> $config_host_mak
|
||||||
|
echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
|
||||||
|
echo "X11_LIBS=$x11_libs" >> $config_host_mak
|
||||||
|
fi
|
||||||
if test "$sdl" = "yes" ; then
|
if test "$sdl" = "yes" ; then
|
||||||
echo "CONFIG_SDL=y" >> $config_host_mak
|
echo "CONFIG_SDL=m" >> $config_host_mak
|
||||||
echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
|
echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
|
||||||
echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
|
echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
|
||||||
echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
|
echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
|
||||||
|
@ -6046,7 +6048,9 @@ if test "$cocoa" = "yes" ; then
|
||||||
echo "CONFIG_COCOA=y" >> $config_host_mak
|
echo "CONFIG_COCOA=y" >> $config_host_mak
|
||||||
fi
|
fi
|
||||||
if test "$curses" = "yes" ; then
|
if test "$curses" = "yes" ; then
|
||||||
echo "CONFIG_CURSES=y" >> $config_host_mak
|
echo "CONFIG_CURSES=m" >> $config_host_mak
|
||||||
|
echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
|
||||||
|
echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
|
||||||
fi
|
fi
|
||||||
if test "$pipe2" = "yes" ; then
|
if test "$pipe2" = "yes" ; then
|
||||||
echo "CONFIG_PIPE2=y" >> $config_host_mak
|
echo "CONFIG_PIPE2=y" >> $config_host_mak
|
||||||
|
@ -6143,7 +6147,7 @@ if test "$glib_subprocess" = "yes" ; then
|
||||||
echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
|
echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
|
||||||
fi
|
fi
|
||||||
if test "$gtk" = "yes" ; then
|
if test "$gtk" = "yes" ; then
|
||||||
echo "CONFIG_GTK=y" >> $config_host_mak
|
echo "CONFIG_GTK=m" >> $config_host_mak
|
||||||
echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
|
echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
|
||||||
echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
|
echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
|
||||||
echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
|
echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
|
||||||
|
@ -6194,6 +6198,7 @@ fi
|
||||||
if test "$vte" = "yes" ; then
|
if test "$vte" = "yes" ; then
|
||||||
echo "CONFIG_VTE=y" >> $config_host_mak
|
echo "CONFIG_VTE=y" >> $config_host_mak
|
||||||
echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
|
echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
|
||||||
|
echo "VTE_LIBS=$vte_libs" >> $config_host_mak
|
||||||
fi
|
fi
|
||||||
if test "$virglrenderer" = "yes" ; then
|
if test "$virglrenderer" = "yes" ; then
|
||||||
echo "CONFIG_VIRGL=y" >> $config_host_mak
|
echo "CONFIG_VIRGL=y" >> $config_host_mak
|
||||||
|
|
|
@ -53,6 +53,7 @@ typedef enum {
|
||||||
#define trace_init(function) module_init(function, MODULE_INIT_TRACE)
|
#define trace_init(function) module_init(function, MODULE_INIT_TRACE)
|
||||||
|
|
||||||
#define block_module_load_one(lib) module_load_one("block-", lib)
|
#define block_module_load_one(lib) module_load_one("block-", lib)
|
||||||
|
#define ui_module_load_one(lib) module_load_one("ui-", lib)
|
||||||
|
|
||||||
void register_module_init(void (*fn)(void), module_init_type type);
|
void register_module_init(void (*fn)(void), module_init_type type);
|
||||||
void register_dso_module_init(void (*fn)(void), module_init_type type);
|
void register_dso_module_init(void (*fn)(void), module_init_type type);
|
||||||
|
|
|
@ -433,36 +433,18 @@ void surface_gl_setup_viewport(QemuGLShader *gls,
|
||||||
int ww, int wh);
|
int ww, int wh);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* sdl.c */
|
typedef struct QemuDisplay QemuDisplay;
|
||||||
#ifdef CONFIG_SDL
|
|
||||||
void sdl_display_early_init(DisplayOptions *opts);
|
|
||||||
void sdl_display_init(DisplayState *ds, DisplayOptions *opts);
|
|
||||||
#else
|
|
||||||
static inline void sdl_display_early_init(DisplayOptions *opts)
|
|
||||||
{
|
|
||||||
/* This must never be called if CONFIG_SDL is disabled */
|
|
||||||
error_report("SDL support is disabled");
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
static inline void sdl_display_init(DisplayState *ds, DisplayOptions *opts)
|
|
||||||
{
|
|
||||||
/* This must never be called if CONFIG_SDL is disabled */
|
|
||||||
error_report("SDL support is disabled");
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* cocoa.m */
|
struct QemuDisplay {
|
||||||
#ifdef CONFIG_COCOA
|
DisplayType type;
|
||||||
void cocoa_display_init(DisplayState *ds, DisplayOptions *opts);
|
void (*early_init)(DisplayOptions *opts);
|
||||||
#else
|
void (*init)(DisplayState *ds, DisplayOptions *opts);
|
||||||
static inline void cocoa_display_init(DisplayState *ds, DisplayOptions *opts)
|
};
|
||||||
{
|
|
||||||
/* This must never be called if CONFIG_COCOA is disabled */
|
void qemu_display_register(QemuDisplay *ui);
|
||||||
error_report("Cocoa support is disabled");
|
bool qemu_display_find_default(DisplayOptions *opts);
|
||||||
abort();
|
void qemu_display_early_init(DisplayOptions *opts);
|
||||||
}
|
void qemu_display_init(DisplayState *ds, DisplayOptions *opts);
|
||||||
#endif
|
|
||||||
|
|
||||||
/* vnc.c */
|
/* vnc.c */
|
||||||
void vnc_display_init(const char *id);
|
void vnc_display_init(const char *id);
|
||||||
|
@ -473,42 +455,7 @@ int vnc_display_pw_expire(const char *id, time_t expires);
|
||||||
QemuOpts *vnc_parse(const char *str, Error **errp);
|
QemuOpts *vnc_parse(const char *str, Error **errp);
|
||||||
int vnc_init_func(void *opaque, QemuOpts *opts, Error **errp);
|
int vnc_init_func(void *opaque, QemuOpts *opts, Error **errp);
|
||||||
|
|
||||||
/* curses.c */
|
|
||||||
#ifdef CONFIG_CURSES
|
|
||||||
void curses_display_init(DisplayState *ds, DisplayOptions *opts);
|
|
||||||
#else
|
|
||||||
static inline void curses_display_init(DisplayState *ds, DisplayOptions *opts)
|
|
||||||
{
|
|
||||||
/* This must never be called if CONFIG_CURSES is disabled */
|
|
||||||
error_report("curses support is disabled");
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* input.c */
|
/* input.c */
|
||||||
int index_from_key(const char *key, size_t key_length);
|
int index_from_key(const char *key, size_t key_length);
|
||||||
|
|
||||||
/* gtk.c */
|
|
||||||
#ifdef CONFIG_GTK
|
|
||||||
void early_gtk_display_init(DisplayOptions *opts);
|
|
||||||
void gtk_display_init(DisplayState *ds, DisplayOptions *opts);
|
|
||||||
#else
|
|
||||||
static inline void gtk_display_init(DisplayState *ds, DisplayOptions *opts)
|
|
||||||
{
|
|
||||||
/* This must never be called if CONFIG_GTK is disabled */
|
|
||||||
error_report("GTK support is disabled");
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void early_gtk_display_init(DisplayOptions *opts)
|
|
||||||
{
|
|
||||||
/* This must never be called if CONFIG_GTK is disabled */
|
|
||||||
error_report("GTK support is disabled");
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* egl-headless.c */
|
|
||||||
void egl_headless_init(DisplayOptions *opts);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -2,3 +2,7 @@ obj-y += translate.o op_helper.o helper.o cpu.o
|
||||||
obj-y += ucf64_helper.o
|
obj-y += ucf64_helper.o
|
||||||
|
|
||||||
obj-$(CONFIG_SOFTMMU) += softmmu.o
|
obj-$(CONFIG_SOFTMMU) += softmmu.o
|
||||||
|
|
||||||
|
# Huh? Uses curses directly instead of using ui/console.h interfaces ...
|
||||||
|
helper.o-cflags := $(CURSES_CFLAGS)
|
||||||
|
helper.o-libs := $(CURSES_LIBS)
|
||||||
|
|
|
@ -11,14 +11,16 @@ common-obj-y += keymaps.o console.o cursor.o qemu-pixman.o
|
||||||
common-obj-y += input.o input-keymap.o input-legacy.o
|
common-obj-y += input.o input-keymap.o input-legacy.o
|
||||||
common-obj-$(CONFIG_LINUX) += input-linux.o
|
common-obj-$(CONFIG_LINUX) += input-linux.o
|
||||||
common-obj-$(CONFIG_SPICE) += spice-core.o spice-input.o spice-display.o
|
common-obj-$(CONFIG_SPICE) += spice-core.o spice-input.o spice-display.o
|
||||||
common-obj-$(CONFIG_SDL) += sdl.mo
|
|
||||||
common-obj-$(CONFIG_COCOA) += cocoa.o
|
common-obj-$(CONFIG_COCOA) += cocoa.o
|
||||||
common-obj-$(CONFIG_CURSES) += curses.o
|
|
||||||
common-obj-$(CONFIG_VNC) += $(vnc-obj-y)
|
common-obj-$(CONFIG_VNC) += $(vnc-obj-y)
|
||||||
common-obj-$(call lnot,$(CONFIG_VNC)) += vnc-stubs.o
|
common-obj-$(call lnot,$(CONFIG_VNC)) += vnc-stubs.o
|
||||||
common-obj-$(CONFIG_GTK) += gtk.o
|
|
||||||
common-obj-$(if $(CONFIG_WIN32),n,$(if $(CONFIG_SDL),y,$(CONFIG_GTK))) += x_keymap.o
|
|
||||||
|
|
||||||
|
common-obj-$(CONFIG_X11) += x_keymap.o
|
||||||
|
x_keymap.o-cflags := $(X11_CFLAGS)
|
||||||
|
x_keymap.o-libs := $(X11_LIBS)
|
||||||
|
|
||||||
|
# ui-sdl module
|
||||||
|
common-obj-$(CONFIG_SDL) += sdl.mo
|
||||||
ifeq ($(CONFIG_SDLABI),1.2)
|
ifeq ($(CONFIG_SDLABI),1.2)
|
||||||
sdl.mo-objs := sdl.o sdl_zoom.o
|
sdl.mo-objs := sdl.o sdl_zoom.o
|
||||||
endif
|
endif
|
||||||
|
@ -31,6 +33,17 @@ endif
|
||||||
sdl.mo-cflags := $(SDL_CFLAGS)
|
sdl.mo-cflags := $(SDL_CFLAGS)
|
||||||
sdl.mo-libs := $(SDL_LIBS)
|
sdl.mo-libs := $(SDL_LIBS)
|
||||||
|
|
||||||
|
# ui-gtk module
|
||||||
|
common-obj-$(CONFIG_GTK) += gtk.mo
|
||||||
|
gtk.mo-objs := gtk.o
|
||||||
|
gtk.mo-cflags := $(GTK_CFLAGS) $(VTE_CFLAGS)
|
||||||
|
gtk.mo-libs := $(GTK_LIBS) $(VTE_LIBS)
|
||||||
|
|
||||||
|
common-obj-$(CONFIG_CURSES) += curses.mo
|
||||||
|
curses.mo-objs := curses.o
|
||||||
|
curses.mo-cflags := $(CURSES_CFLAGS)
|
||||||
|
curses.mo-libs := $(CURSES_LIBS)
|
||||||
|
|
||||||
ifeq ($(CONFIG_OPENGL),y)
|
ifeq ($(CONFIG_OPENGL),y)
|
||||||
common-obj-y += shader.o
|
common-obj-y += shader.o
|
||||||
common-obj-y += console-gl.o
|
common-obj-y += console-gl.o
|
||||||
|
@ -38,17 +51,13 @@ common-obj-y += egl-helpers.o
|
||||||
common-obj-y += egl-context.o
|
common-obj-y += egl-context.o
|
||||||
common-obj-$(CONFIG_OPENGL_DMABUF) += egl-headless.o
|
common-obj-$(CONFIG_OPENGL_DMABUF) += egl-headless.o
|
||||||
ifeq ($(CONFIG_GTK_GL),y)
|
ifeq ($(CONFIG_GTK_GL),y)
|
||||||
common-obj-$(CONFIG_GTK) += gtk-gl-area.o
|
gtk.mo-objs += gtk-gl-area.o
|
||||||
else
|
else
|
||||||
common-obj-$(CONFIG_GTK) += gtk-egl.o
|
gtk.mo-objs += gtk-egl.o
|
||||||
|
gtk.mo-libs += $(OPENGL_LIBS)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
gtk.o-cflags := $(GTK_CFLAGS) $(VTE_CFLAGS)
|
|
||||||
gtk-egl.o-cflags := $(GTK_CFLAGS) $(VTE_CFLAGS)
|
|
||||||
gtk-gl-area.o-cflags := $(GTK_CFLAGS) $(VTE_CFLAGS)
|
|
||||||
|
|
||||||
gtk-egl.o-libs += $(OPENGL_LIBS)
|
|
||||||
shader.o-libs += $(OPENGL_LIBS)
|
shader.o-libs += $(OPENGL_LIBS)
|
||||||
console-gl.o-libs += $(OPENGL_LIBS)
|
console-gl.o-libs += $(OPENGL_LIBS)
|
||||||
egl-helpers.o-libs += $(OPENGL_LIBS)
|
egl-helpers.o-libs += $(OPENGL_LIBS)
|
||||||
|
|
14
ui/cocoa.m
14
ui/cocoa.m
|
@ -1683,7 +1683,7 @@ static void addRemovableDevicesMenuItems(void)
|
||||||
qapi_free_BlockInfoList(pointerToFree);
|
qapi_free_BlockInfoList(pointerToFree);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cocoa_display_init(DisplayState *ds, DisplayOptions *opts)
|
static void cocoa_display_init(DisplayState *ds, DisplayOptions *opts)
|
||||||
{
|
{
|
||||||
COCOA_DEBUG("qemu_cocoa: cocoa_display_init\n");
|
COCOA_DEBUG("qemu_cocoa: cocoa_display_init\n");
|
||||||
|
|
||||||
|
@ -1713,3 +1713,15 @@ void cocoa_display_init(DisplayState *ds, DisplayOptions *opts)
|
||||||
*/
|
*/
|
||||||
addRemovableDevicesMenuItems();
|
addRemovableDevicesMenuItems();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QemuDisplay qemu_display_cocoa = {
|
||||||
|
.type = DISPLAY_TYPE_COCOA,
|
||||||
|
.init = cocoa_display_init,
|
||||||
|
};
|
||||||
|
|
||||||
|
static void register_cocoa(void)
|
||||||
|
{
|
||||||
|
qemu_display_register(&qemu_display_cocoa);
|
||||||
|
}
|
||||||
|
|
||||||
|
type_init(register_cocoa);
|
||||||
|
|
59
ui/console.c
59
ui/console.c
|
@ -2180,6 +2180,65 @@ PixelFormat qemu_default_pixelformat(int bpp)
|
||||||
return pf;
|
return pf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QemuDisplay *dpys[DISPLAY_TYPE__MAX];
|
||||||
|
|
||||||
|
void qemu_display_register(QemuDisplay *ui)
|
||||||
|
{
|
||||||
|
assert(ui->type < DISPLAY_TYPE__MAX);
|
||||||
|
dpys[ui->type] = ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool qemu_display_find_default(DisplayOptions *opts)
|
||||||
|
{
|
||||||
|
static DisplayType prio[] = {
|
||||||
|
DISPLAY_TYPE_GTK,
|
||||||
|
DISPLAY_TYPE_SDL,
|
||||||
|
DISPLAY_TYPE_COCOA
|
||||||
|
};
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE(prio); i++) {
|
||||||
|
if (dpys[prio[i]] == NULL) {
|
||||||
|
ui_module_load_one(DisplayType_lookup.array[prio[i]]);
|
||||||
|
}
|
||||||
|
if (dpys[prio[i]] == NULL) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
opts->type = prio[i];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void qemu_display_early_init(DisplayOptions *opts)
|
||||||
|
{
|
||||||
|
assert(opts->type < DISPLAY_TYPE__MAX);
|
||||||
|
if (opts->type == DISPLAY_TYPE_NONE) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (dpys[opts->type] == NULL) {
|
||||||
|
ui_module_load_one(DisplayType_lookup.array[opts->type]);
|
||||||
|
}
|
||||||
|
if (dpys[opts->type] == NULL) {
|
||||||
|
error_report("Display '%s' is not available.",
|
||||||
|
DisplayType_lookup.array[opts->type]);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
if (dpys[opts->type]->early_init) {
|
||||||
|
dpys[opts->type]->early_init(opts);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void qemu_display_init(DisplayState *ds, DisplayOptions *opts)
|
||||||
|
{
|
||||||
|
assert(opts->type < DISPLAY_TYPE__MAX);
|
||||||
|
if (opts->type == DISPLAY_TYPE_NONE) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
assert(dpys[opts->type] != NULL);
|
||||||
|
dpys[opts->type]->init(ds, opts);
|
||||||
|
}
|
||||||
|
|
||||||
void qemu_chr_parse_vc(QemuOpts *opts, ChardevBackend *backend, Error **errp)
|
void qemu_chr_parse_vc(QemuOpts *opts, ChardevBackend *backend, Error **errp)
|
||||||
{
|
{
|
||||||
int val;
|
int val;
|
||||||
|
|
14
ui/curses.c
14
ui/curses.c
|
@ -435,7 +435,7 @@ static const DisplayChangeListenerOps dcl_ops = {
|
||||||
.dpy_text_cursor = curses_cursor_position,
|
.dpy_text_cursor = curses_cursor_position,
|
||||||
};
|
};
|
||||||
|
|
||||||
void curses_display_init(DisplayState *ds, DisplayOptions *opts)
|
static void curses_display_init(DisplayState *ds, DisplayOptions *opts)
|
||||||
{
|
{
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
if (!isatty(1)) {
|
if (!isatty(1)) {
|
||||||
|
@ -456,3 +456,15 @@ void curses_display_init(DisplayState *ds, DisplayOptions *opts)
|
||||||
|
|
||||||
invalidate = 1;
|
invalidate = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QemuDisplay qemu_display_curses = {
|
||||||
|
.type = DISPLAY_TYPE_CURSES,
|
||||||
|
.init = curses_display_init,
|
||||||
|
};
|
||||||
|
|
||||||
|
static void register_curses(void)
|
||||||
|
{
|
||||||
|
qemu_display_register(&qemu_display_curses);
|
||||||
|
}
|
||||||
|
|
||||||
|
type_init(register_curses);
|
||||||
|
|
|
@ -164,7 +164,12 @@ static const DisplayChangeListenerOps egl_ops = {
|
||||||
.dpy_gl_update = egl_scanout_flush,
|
.dpy_gl_update = egl_scanout_flush,
|
||||||
};
|
};
|
||||||
|
|
||||||
void egl_headless_init(DisplayOptions *opts)
|
static void early_egl_headless_init(DisplayOptions *opts)
|
||||||
|
{
|
||||||
|
display_opengl = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void egl_headless_init(DisplayState *ds, DisplayOptions *opts)
|
||||||
{
|
{
|
||||||
QemuConsole *con;
|
QemuConsole *con;
|
||||||
egl_dpy *edpy;
|
egl_dpy *edpy;
|
||||||
|
@ -188,3 +193,16 @@ void egl_headless_init(DisplayOptions *opts)
|
||||||
register_displaychangelistener(&edpy->dcl);
|
register_displaychangelistener(&edpy->dcl);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QemuDisplay qemu_display_egl = {
|
||||||
|
.type = DISPLAY_TYPE_EGL_HEADLESS,
|
||||||
|
.early_init = early_egl_headless_init,
|
||||||
|
.init = egl_headless_init,
|
||||||
|
};
|
||||||
|
|
||||||
|
static void register_egl(void)
|
||||||
|
{
|
||||||
|
qemu_display_register(&qemu_display_egl);
|
||||||
|
}
|
||||||
|
|
||||||
|
type_init(register_egl);
|
||||||
|
|
17
ui/gtk.c
17
ui/gtk.c
|
@ -2297,7 +2297,7 @@ static void gd_create_menus(GtkDisplayState *s)
|
||||||
|
|
||||||
static gboolean gtkinit;
|
static gboolean gtkinit;
|
||||||
|
|
||||||
void gtk_display_init(DisplayState *ds, DisplayOptions *opts)
|
static void gtk_display_init(DisplayState *ds, DisplayOptions *opts)
|
||||||
{
|
{
|
||||||
VirtualConsole *vc;
|
VirtualConsole *vc;
|
||||||
|
|
||||||
|
@ -2407,7 +2407,7 @@ void gtk_display_init(DisplayState *ds, DisplayOptions *opts)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void early_gtk_display_init(DisplayOptions *opts)
|
static void early_gtk_display_init(DisplayOptions *opts)
|
||||||
{
|
{
|
||||||
/* The QEMU code relies on the assumption that it's always run in
|
/* The QEMU code relies on the assumption that it's always run in
|
||||||
* the C locale. Therefore it is not prepared to deal with
|
* the C locale. Therefore it is not prepared to deal with
|
||||||
|
@ -2450,3 +2450,16 @@ void early_gtk_display_init(DisplayOptions *opts)
|
||||||
type_register(&char_gd_vc_type_info);
|
type_register(&char_gd_vc_type_info);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QemuDisplay qemu_display_gtk = {
|
||||||
|
.type = DISPLAY_TYPE_GTK,
|
||||||
|
.early_init = early_gtk_display_init,
|
||||||
|
.init = gtk_display_init,
|
||||||
|
};
|
||||||
|
|
||||||
|
static void register_gtk(void)
|
||||||
|
{
|
||||||
|
qemu_display_register(&qemu_display_gtk);
|
||||||
|
}
|
||||||
|
|
||||||
|
type_init(register_gtk);
|
||||||
|
|
24
ui/sdl.c
24
ui/sdl.c
|
@ -901,17 +901,7 @@ static const DisplayChangeListenerOps dcl_ops = {
|
||||||
.dpy_cursor_define = sdl_mouse_define,
|
.dpy_cursor_define = sdl_mouse_define,
|
||||||
};
|
};
|
||||||
|
|
||||||
void sdl_display_early_init(DisplayOptions *opts)
|
static void sdl1_display_init(DisplayState *ds, DisplayOptions *o)
|
||||||
{
|
|
||||||
if (opts->has_gl && opts->gl) {
|
|
||||||
fprintf(stderr,
|
|
||||||
"SDL1 display code has no opengl support.\n"
|
|
||||||
"Please recompile qemu with SDL2, using\n"
|
|
||||||
"./configure --enable-sdl --with-sdlabi=2.0\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void sdl_display_init(DisplayState *ds, DisplayOptions *o)
|
|
||||||
{
|
{
|
||||||
int flags;
|
int flags;
|
||||||
uint8_t data = 0;
|
uint8_t data = 0;
|
||||||
|
@ -1023,3 +1013,15 @@ void sdl_display_init(DisplayState *ds, DisplayOptions *o)
|
||||||
|
|
||||||
atexit(sdl_cleanup);
|
atexit(sdl_cleanup);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QemuDisplay qemu_display_sdl1 = {
|
||||||
|
.type = DISPLAY_TYPE_SDL,
|
||||||
|
.init = sdl1_display_init,
|
||||||
|
};
|
||||||
|
|
||||||
|
static void register_sdl1(void)
|
||||||
|
{
|
||||||
|
qemu_display_register(&qemu_display_sdl1);
|
||||||
|
}
|
||||||
|
|
||||||
|
type_init(register_sdl1);
|
||||||
|
|
17
ui/sdl2.c
17
ui/sdl2.c
|
@ -751,7 +751,7 @@ static const DisplayChangeListenerOps dcl_gl_ops = {
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void sdl_display_early_init(DisplayOptions *o)
|
static void sdl2_display_early_init(DisplayOptions *o)
|
||||||
{
|
{
|
||||||
assert(o->type == DISPLAY_TYPE_SDL);
|
assert(o->type == DISPLAY_TYPE_SDL);
|
||||||
if (o->has_gl && o->gl) {
|
if (o->has_gl && o->gl) {
|
||||||
|
@ -761,7 +761,7 @@ void sdl_display_early_init(DisplayOptions *o)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void sdl_display_init(DisplayState *ds, DisplayOptions *o)
|
static void sdl2_display_init(DisplayState *ds, DisplayOptions *o)
|
||||||
{
|
{
|
||||||
int flags;
|
int flags;
|
||||||
uint8_t data = 0;
|
uint8_t data = 0;
|
||||||
|
@ -861,3 +861,16 @@ void sdl_display_init(DisplayState *ds, DisplayOptions *o)
|
||||||
|
|
||||||
atexit(sdl_cleanup);
|
atexit(sdl_cleanup);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static QemuDisplay qemu_display_sdl2 = {
|
||||||
|
.type = DISPLAY_TYPE_SDL,
|
||||||
|
.early_init = sdl2_display_early_init,
|
||||||
|
.init = sdl2_display_init,
|
||||||
|
};
|
||||||
|
|
||||||
|
static void register_sdl1(void)
|
||||||
|
{
|
||||||
|
qemu_display_register(&qemu_display_sdl2);
|
||||||
|
}
|
||||||
|
|
||||||
|
type_init(register_sdl1);
|
||||||
|
|
72
vl.c
72
vl.c
|
@ -2094,7 +2094,6 @@ static void parse_display(const char *p)
|
||||||
const char *opts;
|
const char *opts;
|
||||||
|
|
||||||
if (strstart(p, "sdl", &opts)) {
|
if (strstart(p, "sdl", &opts)) {
|
||||||
#ifdef CONFIG_SDL
|
|
||||||
dpy.type = DISPLAY_TYPE_SDL;
|
dpy.type = DISPLAY_TYPE_SDL;
|
||||||
while (*opts) {
|
while (*opts) {
|
||||||
const char *nextopt;
|
const char *nextopt;
|
||||||
|
@ -2155,10 +2154,6 @@ static void parse_display(const char *p)
|
||||||
}
|
}
|
||||||
opts = nextopt;
|
opts = nextopt;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
error_report("SDL support is disabled");
|
|
||||||
exit(1);
|
|
||||||
#endif
|
|
||||||
} else if (strstart(p, "vnc", &opts)) {
|
} else if (strstart(p, "vnc", &opts)) {
|
||||||
if (*opts == '=') {
|
if (*opts == '=') {
|
||||||
vnc_parse(opts + 1, &error_fatal);
|
vnc_parse(opts + 1, &error_fatal);
|
||||||
|
@ -2167,22 +2162,10 @@ static void parse_display(const char *p)
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
} else if (strstart(p, "egl-headless", &opts)) {
|
} else if (strstart(p, "egl-headless", &opts)) {
|
||||||
#ifdef CONFIG_OPENGL_DMABUF
|
|
||||||
display_opengl = 1;
|
|
||||||
dpy.type = DISPLAY_TYPE_EGL_HEADLESS;
|
dpy.type = DISPLAY_TYPE_EGL_HEADLESS;
|
||||||
#else
|
|
||||||
error_report("egl support is disabled");
|
|
||||||
exit(1);
|
|
||||||
#endif
|
|
||||||
} else if (strstart(p, "curses", &opts)) {
|
} else if (strstart(p, "curses", &opts)) {
|
||||||
#ifdef CONFIG_CURSES
|
|
||||||
dpy.type = DISPLAY_TYPE_CURSES;
|
dpy.type = DISPLAY_TYPE_CURSES;
|
||||||
#else
|
|
||||||
error_report("curses support is disabled");
|
|
||||||
exit(1);
|
|
||||||
#endif
|
|
||||||
} else if (strstart(p, "gtk", &opts)) {
|
} else if (strstart(p, "gtk", &opts)) {
|
||||||
#ifdef CONFIG_GTK
|
|
||||||
dpy.type = DISPLAY_TYPE_GTK;
|
dpy.type = DISPLAY_TYPE_GTK;
|
||||||
while (*opts) {
|
while (*opts) {
|
||||||
const char *nextopt;
|
const char *nextopt;
|
||||||
|
@ -2214,10 +2197,6 @@ static void parse_display(const char *p)
|
||||||
}
|
}
|
||||||
opts = nextopt;
|
opts = nextopt;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
error_report("GTK support is disabled");
|
|
||||||
exit(1);
|
|
||||||
#endif
|
|
||||||
} else if (strstart(p, "none", &opts)) {
|
} else if (strstart(p, "none", &opts)) {
|
||||||
dpy.type = DISPLAY_TYPE_NONE;
|
dpy.type = DISPLAY_TYPE_NONE;
|
||||||
} else {
|
} else {
|
||||||
|
@ -4328,18 +4307,16 @@ int main(int argc, char **argv, char **envp)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (dpy.type == DISPLAY_TYPE_DEFAULT && !display_remote) {
|
if (dpy.type == DISPLAY_TYPE_DEFAULT && !display_remote) {
|
||||||
#if defined(CONFIG_GTK)
|
if (!qemu_display_find_default(&dpy)) {
|
||||||
dpy.type = DISPLAY_TYPE_GTK;
|
|
||||||
#elif defined(CONFIG_SDL)
|
|
||||||
dpy.type = DISPLAY_TYPE_SDL;
|
|
||||||
#elif defined(CONFIG_COCOA)
|
|
||||||
dpy.type = DISPLAY_TYPE_COCOA;
|
|
||||||
#elif defined(CONFIG_VNC)
|
|
||||||
vnc_parse("localhost:0,to=99,id=default", &error_abort);
|
|
||||||
#else
|
|
||||||
dpy.type = DISPLAY_TYPE_NONE;
|
dpy.type = DISPLAY_TYPE_NONE;
|
||||||
|
#if defined(CONFIG_VNC)
|
||||||
|
vnc_parse("localhost:0,to=99,id=default", &error_abort);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (dpy.type == DISPLAY_TYPE_DEFAULT) {
|
||||||
|
dpy.type = DISPLAY_TYPE_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
if ((no_frame || alt_grab || ctrl_grab) && dpy.type != DISPLAY_TYPE_SDL) {
|
if ((no_frame || alt_grab || ctrl_grab) && dpy.type != DISPLAY_TYPE_SDL) {
|
||||||
error_report("-no-frame, -alt-grab and -ctrl-grab are only valid "
|
error_report("-no-frame, -alt-grab and -ctrl-grab are only valid "
|
||||||
|
@ -4351,14 +4328,7 @@ int main(int argc, char **argv, char **envp)
|
||||||
"ignoring option");
|
"ignoring option");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dpy.type == DISPLAY_TYPE_GTK) {
|
qemu_display_early_init(&dpy);
|
||||||
early_gtk_display_init(&dpy);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dpy.type == DISPLAY_TYPE_SDL) {
|
|
||||||
sdl_display_early_init(&dpy);
|
|
||||||
}
|
|
||||||
|
|
||||||
qemu_console_early_init();
|
qemu_console_early_init();
|
||||||
|
|
||||||
if (dpy.has_gl && dpy.gl && display_opengl == 0) {
|
if (dpy.has_gl && dpy.gl && display_opengl == 0) {
|
||||||
|
@ -4684,25 +4654,9 @@ int main(int argc, char **argv, char **envp)
|
||||||
qemu_register_reset(restore_boot_order, g_strdup(boot_order));
|
qemu_register_reset(restore_boot_order, g_strdup(boot_order));
|
||||||
}
|
}
|
||||||
|
|
||||||
ds = init_displaystate();
|
|
||||||
|
|
||||||
/* init local displays */
|
/* init local displays */
|
||||||
switch (dpy.type) {
|
ds = init_displaystate();
|
||||||
case DISPLAY_TYPE_CURSES:
|
qemu_display_init(ds, &dpy);
|
||||||
curses_display_init(ds, &dpy);
|
|
||||||
break;
|
|
||||||
case DISPLAY_TYPE_SDL:
|
|
||||||
sdl_display_init(ds, &dpy);
|
|
||||||
break;
|
|
||||||
case DISPLAY_TYPE_COCOA:
|
|
||||||
cocoa_display_init(ds, &dpy);
|
|
||||||
break;
|
|
||||||
case DISPLAY_TYPE_GTK:
|
|
||||||
gtk_display_init(ds, &dpy);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* must be after terminal init, SDL library changes signal handlers */
|
/* must be after terminal init, SDL library changes signal handlers */
|
||||||
os_setup_signal_handling();
|
os_setup_signal_handling();
|
||||||
|
@ -4717,12 +4671,6 @@ int main(int argc, char **argv, char **envp)
|
||||||
qemu_spice_display_init();
|
qemu_spice_display_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_OPENGL_DMABUF
|
|
||||||
if (dpy.type == DISPLAY_TYPE_EGL_HEADLESS) {
|
|
||||||
egl_headless_init(&dpy);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (foreach_device_config(DEV_GDB, gdbserver_start) < 0) {
|
if (foreach_device_config(DEV_GDB, gdbserver_start) < 0) {
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue