qemu: Add an option to remove host sdl/gl checking

Add an PACKAGECONFIG in qemu to disable GL acceleration:
* By default configure try best to enable GL acceleration and fail when missing
  host dependency(libSDL and libGL).
* End user can also choose to turn off GL capability, thus remove the host
  dependence in building.

[YOCTO #2407] got fixed.

(From OE-Core rev: cfa93553e17057a1ea9d81e3a415fc8260c54067)

Signed-off-by: Zhai Edwin <edwin.zhai@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Zhai Edwin 2012-05-29 16:30:33 +08:00 committed by Richard Purdie
parent 7a619c235f
commit d63298e566
5 changed files with 203 additions and 32 deletions

View File

@ -0,0 +1,31 @@
Add a dummy option for GL acceleration to pass the configure when there is no
GL acceleration patch. The parsing function will be filled by following
opengl-disable-option.patch.
Upstream-Status: Inappropriate [other] - depends on GL patch
Signed-off-by: Zhai Edwin <edwin.zhai@intel.com>
Index: qemu-0.15.1/configure
===================================================================
--- qemu-0.15.1.orig/configure 2012-05-14 21:23:34.000000000 +0800
+++ qemu-0.15.1/configure 2012-05-14 21:23:36.000000000 +0800
@@ -179,6 +179,7 @@
smartcard_nss=""
usb_redir=""
opengl=""
+gl_accel="yes"
guest_agent="yes"
# parse CC options first
@@ -739,6 +740,10 @@
;;
--enable-opengl) opengl="yes"
;;
+ --disable-gl-accel) gl_accel="no"
+ ;;
+ --enable-gl-accel) gl_accel="yes"
+ ;;
--*dir)
;;
--disable-rbd) rbd="no"

View File

@ -1,15 +1,33 @@
Considering relocation, qemu-nativesdk is independent of host library except
libGL. Normal method like 'cat > $TMPC' doesn't work, so we check the library
directly.
Upstream-Status: Inappropriate [configuration]
Index: qemu-0.14.0/Makefile.target
Index: qemu-0.15.1/configure
===================================================================
--- qemu-0.14.0.orig/Makefile.target 2011-04-04 12:12:19.142871742 +0100
+++ qemu-0.14.0/Makefile.target 2011-04-04 12:12:21.772871742 +0100
@@ -362,7 +362,7 @@
monitor.o: hmp-commands.h qmp-commands.h
-LIBS += -lGL -lGLU
+LIBS += -lGL
$(obj-y) $(obj-$(TARGET_BASE_ARCH)-y): $(GENERATED_HEADERS)
--- qemu-0.15.1.orig/configure 2012-05-25 18:26:05.000000000 +0800
+++ qemu-0.15.1/configure 2012-05-29 09:43:27.000000000 +0800
@@ -2032,15 +2032,13 @@
exit 1;
fi
- gl_accel_libs="-lGL -lGLU"
- cat > $TMPC << EOF
-#include <X11/Xlib.h>
-#include <GL/gl.h>
-#include <GL/glx.h>
-#include <GL/glu.h>
-int main(void) { GL_VERSION; return 0; }
-EOF
- if compile_prog "" "-lGL -lGLU" ; then
+ gl_accel_libs="-lGL"
+ libgl='no'
+ test -e /usr/lib/libGL.so && libgl='yes'
+ test -e /usr/lib64/libGL.so && libgl='yes'
+ test -e /usr/lib/*-linux-gnu/libGL.so && libgl='yes'
+
+ if test "$libgl" = "yes" ; then
gl_accel=yes
libs_softmmu="$gl_accel_libs $libs_softmmu"
else

View File

@ -0,0 +1,137 @@
Add an option gl-accel to disable GL acceleration:
* When enabled, configure try best to enable GL acceleration and fail when
missing host dependency(libSDL and libGL), which is the default.
* When disabled, end user choose to turn off GL capability, thus remove the
host dependence in building.
Upstream-Status: Inappropriate [other] - depends on GL patch
Signed-off-by: Zhai Edwin <edwin.zhai@intel.com>
Index: qemu-0.15.1/Makefile.target
===================================================================
--- qemu-0.15.1.orig/Makefile.target 2012-05-29 11:20:04.000000000 +0800
+++ qemu-0.15.1/Makefile.target 2012-05-29 11:20:04.000000000 +0800
@@ -80,13 +80,16 @@
endif
libobj-$(CONFIG_NEED_MMU) += mmu.o
ifndef CONFIG_LINUX_USER
+ifdef CONFIG_GL_ACCEL
libobj-$(TARGET_I386) += helper_opengl.o opengl_exec.o
libobj-$(TARGET_X86_64) += helper_opengl.o opengl_exec.o
else
-ifdef CONFIG_SDL
libobj-$(TARGET_I386) += dummygl.o
libobj-$(TARGET_X86_64) += dummygl.o
-endif
+endif #CONFIG_GL_ACCEL
+else
+libobj-$(TARGET_I386) += dummygl.o
+libobj-$(TARGET_X86_64) += dummygl.o
endif #CONFIG_LINUX_USER
libobj-$(TARGET_ARM) += dummygl.o
libobj-$(TARGET_MIPS) += dummygl.o
@@ -262,8 +265,10 @@
obj-i386-$(CONFIG_SPICE) += qxl.o qxl-logger.o qxl-render.o
ifeq ($(TARGET_BASE_ARCH), i386)
+ifdef CONFIG_GL_ACCEL
QEMU_CFLAGS += -DTARGET_OPENGL_OK
endif
+endif
# shared objects
obj-ppc-y = ppc.o
@@ -409,8 +414,6 @@
monitor.o: hmp-commands.h qmp-commands.h
-LIBS += -lGL -lGLU
-
$(obj-y) $(obj-$(TARGET_BASE_ARCH)-y): $(GENERATED_HEADERS)
obj-y += $(addprefix ../, $(common-obj-y))
Index: qemu-0.15.1/configure
===================================================================
--- qemu-0.15.1.orig/configure 2012-05-29 11:20:03.000000000 +0800
+++ qemu-0.15.1/configure 2012-05-29 11:20:04.000000000 +0800
@@ -2021,6 +2021,39 @@
fi
fi
+#####################################################
+# GL acceleration probe depending on gl, glu and sdl
+if test "$gl_accel" != "no" ; then
+ if test "$sdl" = "no" ; then
+ gl_accel=no
+ echo "libSDL and header no found to build opengl acceleration for qemu-native.
+ Ubuntu package names are: libsdl1.2-dev.
+ Fedora package names are: SDL-devel."
+ exit 1;
+ fi
+
+ gl_accel_libs="-lGL -lGLU"
+ cat > $TMPC << EOF
+#include <X11/Xlib.h>
+#include <GL/gl.h>
+#include <GL/glx.h>
+#include <GL/glu.h>
+int main(void) { GL_VERSION; return 0; }
+EOF
+ if compile_prog "" "-lGL -lGLU" ; then
+ gl_accel=yes
+ libs_softmmu="$gl_accel_libs $libs_softmmu"
+ else
+ feature_not_found "gl_accel"
+ gl_accel=no
+ gl_accel_libs=
+ echo "libGL.so and libGLU.so not found to build opengl acceleration for qemu-native.
+ Ubuntu package names are: libgl1-mesa-dev, libglu1-mesa-dev and libsdl1.2-dev.
+ Fedora package names are: mesa-libGL mesa-libGLU SDL-devel."
+ exit 1;
+ fi
+fi
+
#
# Check for xxxat() functions when we are building linux-user
# emulator. This is done because older glibc versions don't
@@ -2722,6 +2755,7 @@
echo "nss used $smartcard_nss"
echo "usb net redir $usb_redir"
echo "OpenGL support $opengl"
+echo "GL acceleration support $gl_accel"
echo "build guest agent $guest_agent"
if test $sdl_too_old = "yes"; then
@@ -3025,6 +3059,10 @@
echo "CONFIG_OPENGL=y" >> $config_host_mak
fi
+if test "$gl_accel" = "yes" ; then
+ echo "CONFIG_GL_ACCEL=y" >> $config_host_mak
+fi
+
# XXX: suppress that
if [ "$bsd" = "yes" ] ; then
echo "CONFIG_BSD=y" >> $config_host_mak
Index: qemu-0.15.1/qemu-char.c
===================================================================
--- qemu-0.15.1.orig/qemu-char.c 2012-05-29 11:20:03.000000000 +0800
+++ qemu-0.15.1/qemu-char.c 2012-05-29 11:20:04.000000000 +0800
@@ -2387,7 +2387,6 @@
return d->outbuf_size;
}
-#define TARGET_OPENGL_OK
#if defined(TARGET_OPENGL_OK)
static uint8_t buffer[32];
static int buffer_len;
@@ -2447,7 +2446,7 @@
return chr;
}
#else
-#define qemu_chr_open_opengl() 0
+#define qemu_chr_open_opengl NULL
#endif
QemuOpts *qemu_chr_parse_compat(const char *label, const char *filename)

View File

@ -19,26 +19,6 @@ EXTRA_OECONF += "--target-list=${@get_qemu_target_list(d)} --disable-werror --di
inherit autotools
# For our gl powered QEMU you need libGL and SDL headers
do_configure_prepend_virtclass-native() {
libgl='no'
libsdl='no'
test -e /usr/lib/libGL.so -a -e /usr/lib/libGLU.so && libgl='yes'
test -e /usr/lib64/libGL.so -a -e /usr/lib64/libGLU.so && libgl='yes'
test -e /usr/lib/*-linux-gnu/libGL.so -a -e /usr/lib/*-linux-gnu/libGLU.so && libgl='yes'
test -e /usr/lib/pkgconfig/sdl.pc -o -e /usr/lib64/pkgconfig/sdl.pc -o -e /usr/include/SDL/SDL.h && libsdl='yes'
if [ "$libsdl" != 'yes' -o "$libgl" != 'yes' ]; then
echo "You need libGL.so and libGLU.so to exist in your library path and the development headers for SDL installed to build qemu-native.
Ubuntu package names are: libgl1-mesa-dev, libglu1-mesa-dev and libsdl1.2-dev.
Fedora package names are: mesa-libGL mesa-libGLU SDL-devel."
exit 1;
fi
}
do_configure() {
# Handle distros such as CentOS 5 32-bit that do not have kvm support
KVMOPTS="--disable-kvm"
@ -57,6 +37,9 @@ do_install () {
install -m 0755 ${WORKDIR}/powerpc_rom.bin ${D}${datadir}/qemu
}
PACKAGECONFIG ??= "gl"
PACKAGECONFIG[gl] = "--enable-gl-accel,--disable-gl-accel,,"
DEPENDS_virtclass-native = "zlib-native alsa-lib-native glib-2.0-native"
DEPENDS_virtclass-nativesdk = "zlib-nativesdk libsdl-nativesdk glib-2.0-nativesdk \
${@base_contains('DISTRO_FEATURES', 'x11', 'qemugl-nativesdk', '', d)}"

View File

@ -3,7 +3,7 @@ require qemu.inc
LIC_FILES_CHKSUM = "file://COPYING;md5=441c28d2cf86e15a37fa47e15a72fbac \
file://COPYING.LIB;endline=24;md5=c04def7ae38850e7d3ef548588159913"
PR = "r7"
PR = "r8"
FILESPATH = "${FILE_DIRNAME}/qemu-${PV}"
FILESDIR = "${WORKDIR}"
@ -19,6 +19,7 @@ SRC_URI = "\
file://larger_default_ram_size.patch \
file://arm-bgr.patch \
file://a4d1f142542935b90d2eb30f3aead4edcf455fe6.patch \
file://dummy-gl-config.patch \
"
# Only use the GL passthrough patches for native/nativesdk versions
@ -31,6 +32,7 @@ QEMUGLPATCHES = "\
file://qemugl-fix.patch \
file://opengl-sdl-fix.patch \
file://opengl-args-copy-fix.patch \
file://opengl-disable-option.patch \
"
SRC_URI_append_virtclass-native = "\