1
0
mirror of https://git.yoctoproject.org/poky synced 2026-06-07 15:09:50 +00:00

qemu: split the native version into usermode and system parts

The rationale is to streamline the overall build.

The system parts are only needed to run target images, and so can be
built towards the end of the build process. At the same time, the
system parts may need gtk+-native and mesa-native which add significantly
to the build time.

On the other hand, the usermode parts have almost no dependencies
and can be built quickly. They are needed at recipes build time to
run target binaries, and so are required quite early in the typical
build process.

(From OE-Core rev: 4a558a5f2db68538e0edad798ddf48eb9510a7d6)

Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Alexander Kanavin
2019-02-27 18:47:31 +01:00
committed by Richard Purdie
parent 80d29f1cb1
commit 48522906a2
11 changed files with 141 additions and 93 deletions
+3 -3
View File
@@ -310,9 +310,9 @@ CONVERSION_DEPENDS_zip = "zip-native"
CONVERSION_DEPENDS_sum = "mtd-utils-native"
CONVERSION_DEPENDS_bmap = "bmap-tools-native"
CONVERSION_DEPENDS_u-boot = "u-boot-tools-native"
CONVERSION_DEPENDS_vmdk = "qemu-native"
CONVERSION_DEPENDS_vdi = "qemu-native"
CONVERSION_DEPENDS_qcow2 = "qemu-native"
CONVERSION_DEPENDS_vmdk = "qemu-system-native"
CONVERSION_DEPENDS_vdi = "qemu-system-native"
CONVERSION_DEPENDS_qcow2 = "qemu-system-native"
CONVERSION_DEPENDS_base64 = "coreutils-native"
RUNNABLE_IMAGE_TYPES ?= "ext2 ext3 ext4"
+2
View File
@@ -609,6 +609,8 @@ RECIPE_MAINTAINER_pn-python3-subunit = "Derek Straka <derek@asterius.io>"
RECIPE_MAINTAINER_pn-python3-testtools = "Derek Straka <derek@asterius.io>"
RECIPE_MAINTAINER_pn-qemu = "Richard Purdie <richard.purdie@linuxfoundation.org>"
RECIPE_MAINTAINER_pn-qemu-helper-native = "Richard Purdie <richard.purdie@linuxfoundation.org>"
RECIPE_MAINTAINER_pn-qemu-native = "Richard Purdie <richard.purdie@linuxfoundation.org>"
RECIPE_MAINTAINER_pn-qemu-system-native = "Richard Purdie <richard.purdie@linuxfoundation.org>"
RECIPE_MAINTAINER_pn-qemuwrapper-cross = "Richard Purdie <richard.purdie@linuxfoundation.org>"
RECIPE_MAINTAINER_pn-quilt = "Robert Yang <liezhi.yang@windriver.com>"
RECIPE_MAINTAINER_pn-quilt-native = "Robert Yang <liezhi.yang@windriver.com>"
@@ -4,6 +4,7 @@ DISABLE_STATIC ?= " --disable-static"
DISABLE_STATIC_pn-qemu = ""
DISABLE_STATIC_pn-qemu-native = ""
DISABLE_STATIC_pn-nativesdk-qemu = ""
DISABLE_STATIC_pn-qemu-system-native = ""
# pciutils fails build
DISABLE_STATIC_pn-pciutils = ""
# libcap aborts on unrecognised option
+5 -2
View File
@@ -43,8 +43,7 @@ PARALLEL_MAKE = ""
S = "${WORKDIR}/git"
DEPENDS_class-native="util-linux-native iasl-native qemu-native"
DEPENDS_class-native="util-linux-native iasl-native"
DEPENDS_class-target="ovmf-native"
DEPENDS_append = " nasm-native"
@@ -232,6 +231,10 @@ FILES_ovmf-shell-efi = " \
efi/ \
"
DEPLOYDEP = ""
DEPLOYDEP_class-target = "qemu-system-native:do_populate_sysroot"
do_deploy[depends] += "${DEPLOYDEP}"
do_deploy() {
}
do_deploy[cleandirs] = "${DEPLOYDIR}"
@@ -1,6 +1,6 @@
SUMMARY = "Helper utilities needed by the runqemu script"
LICENSE = "GPLv2"
RDEPENDS_${PN} = "qemu-native"
RDEPENDS_${PN} = "qemu-system-native"
PR = "r1"
LIC_FILES_CHKSUM = "file://${WORKDIR}/tunctl.c;endline=4;md5=ff3a09996bc5fff6bc5d4e0b4c28f999"
@@ -20,5 +20,5 @@ do_install() {
install tunctl ${D}${bindir}/
}
DEPENDS += "qemu-native"
DEPENDS += "qemu-system-native"
addtask addto_recipe_sysroot after do_populate_sysroot before do_build
@@ -0,0 +1,17 @@
inherit native
require qemu.inc
SRC_URI_append = " \
file://0012-fix-libcap-header-issue-on-some-distro.patch \
file://0013-cpus.c-Add-error-messages-when-qemi_cpu_kick_thread-.patch \
"
EXTRA_OECONF_append = " --python=python2.7"
EXTRA_OEMAKE_append = " LD='${LD}' AR='${AR}' OBJCOPY='${OBJCOPY}' LDFLAGS='${LDFLAGS}'"
LDFLAGS_append = " -fuse-ld=bfd"
do_install_append() {
${@bb.utils.contains('PACKAGECONFIG', 'gtk+', 'make_qemu_wrapper', '', d)}
}
@@ -0,0 +1,9 @@
BPN = "qemu"
DEPENDS = "glib-2.0-native zlib-native"
require qemu-native.inc
EXTRA_OECONF_append = " --target-list=${@get_qemu_usermode_target_list(d)} --disable-tools --disable-blobs --disable-guest-agent"
PACKAGECONFIG ??= ""
@@ -0,0 +1,23 @@
BPN = "qemu"
require qemu-native.inc
# As some of the files installed by qemu-native and qemu-system-native
# are the same, we depend on qemu-native to get the full installation set
# and avoid file clashes
DEPENDS = "glib-2.0-native zlib-native pixman-native qemu-native"
EXTRA_OECONF_append = " --target-list=${@get_qemu_system_target_list(d)}"
PACKAGECONFIG ??= "fdt alsa kvm"
# Handle distros such as CentOS 5 32-bit that do not have kvm support
PACKAGECONFIG_remove = "${@'kvm' if not os.path.exists('/usr/include/linux/kvm.h') else ''}"
do_install_append() {
install -Dm 0755 ${WORKDIR}/powerpc_rom.bin ${D}${datadir}/qemu
# The following is also installed by qemu-native
rm -f ${D}${datadir}/qemu/trace-events-all
rm -rf ${D}${datadir}/qemu/keymaps
}
@@ -20,3 +20,9 @@ def get_qemu_target_list(d):
if 'linux' not in tos:
return softmmuonly + ''.join([arch + "-softmmu" + "," for arch in archs]).rstrip(',')
return softmmuonly + linuxuseronly + ''.join([arch + "-linux-user" + "," + arch + "-softmmu" + "," for arch in archs]).rstrip(',')
def get_qemu_usermode_target_list(d):
return ",".join(filter(lambda i: "-linux-user" in i, get_qemu_target_list(d).split(',')))
def get_qemu_system_target_list(d):
return ",".join(filter(lambda i: "-linux-user" not in i, get_qemu_target_list(d).split(',')))
+60 -37
View File
@@ -1,12 +1,59 @@
SUMMARY = "Fast open source processor emulator"
HOMEPAGE = "http://qemu.org"
LICENSE = "GPLv2 & LGPLv2.1"
DEPENDS = "glib-2.0 zlib pixman"
RDEPENDS_${PN}_class-target += "bash"
RDEPENDS_${PN}-ptest = "bash make"
LIC_FILES_CHKSUM = "file://COPYING;md5=441c28d2cf86e15a37fa47e15a72fbac \
file://COPYING.LIB;endline=24;md5=c04def7ae38850e7d3ef548588159913"
SRC_URI = "https://download.qemu.org/${BPN}-${PV}.tar.xz \
file://powerpc_rom.bin \
file://0001-sdl.c-allow-user-to-disable-pointer-grabs.patch \
file://0002-qemu-Add-missing-wacom-HID-descriptor.patch \
file://0003-Add-subpackage-ptest-which-runs-all-unit-test-cases-.patch \
file://run-ptest \
file://0004-qemu-Add-addition-environment-space-to-boot-loader-q.patch \
file://0005-qemu-disable-Valgrind.patch \
file://0006-qemu-Limit-paths-searched-during-user-mode-emulation.patch \
file://0007-qemu-native-set-ld.bfd-fix-cflags-and-set-some-envir.patch \
file://0008-chardev-connect-socket-to-a-spawned-command.patch \
file://0009-apic-fixup-fallthrough-to-PIC.patch \
file://0010-linux-user-Fix-webkitgtk-hangs-on-32-bit-x86-target.patch \
file://0011-Revert-linux-user-fix-mmap-munmap-mprotect-mremap-sh.patch \
file://0001-Add-a-missing-X11-include.patch \
file://0001-egl-headless-add-egl_create_context.patch \
"
UPSTREAM_CHECK_REGEX = "qemu-(?P<pver>\d+(\.\d+)+)\.tar"
SRC_URI[md5sum] = "fb687ce0b02d3bf4327e36d3b99427a8"
SRC_URI[sha256sum] = "6a0508df079a0a33c2487ca936a56c12122f105b8a96a44374704bef6c69abfc"
COMPATIBLE_HOST_mipsarchn32 = "null"
COMPATIBLE_HOST_mipsarchn64 = "null"
do_install_append() {
# Prevent QA warnings about installed ${localstatedir}/run
if [ -d ${D}${localstatedir}/run ]; then rmdir ${D}${localstatedir}/run; fi
}
do_compile_ptest() {
make buildtest-TESTS
}
do_install_ptest() {
cp -rL ${B}/tests ${D}${PTEST_PATH}
find ${D}${PTEST_PATH}/tests -type f -name "*.[Sshcod]" | xargs -i rm -rf {}
cp ${S}/tests/Makefile.include ${D}${PTEST_PATH}/tests
# Don't check the file genreated by configure
sed -i -e '/wildcard config-host.mak/d' \
-e '$ {/endif/d}' ${D}${PTEST_PATH}/tests/Makefile.include
}
require qemu-targets.inc
inherit pkgconfig bluetooth
BBCLASSEXTEND = "native nativesdk"
inherit pkgconfig bluetooth ptest
# QEMU_TARGETS is overridable variable
QEMU_TARGETS ?= "arm aarch64 i386 mips mipsel mips64 mips64el ppc riscv32 riscv64 sh4 x86_64"
@@ -25,15 +72,9 @@ EXTRA_OECONF = " \
--with-confsuffix=/${BPN} \
--disable-strip \
--disable-werror \
--target-list=${@get_qemu_target_list(d)} \
--extra-cflags='${CFLAGS}' \
${PACKAGECONFIG_CONFARGS} \
"
EXTRA_OECONF_append_class-native = " --python=python2.7"
EXTRA_OEMAKE_append_class-native = " LD='${LD}' AR='${AR}' OBJCOPY='${OBJCOPY}' LDFLAGS='${LDFLAGS}'"
LDFLAGS_append_class-native = " -fuse-ld=bfd"
export LIBTOOL="${HOST_SYS}-libtool"
@@ -56,25 +97,6 @@ do_install () {
oe_runmake 'DESTDIR=${D}' install
}
make_qemu_wrapper() {
gdk_pixbuf_module_file=`pkg-config --variable=gdk_pixbuf_cache_file gdk-pixbuf-2.0`
for tool in `ls ${D}${bindir}/qemu-system-*`; do
create_wrapper $tool \
GDK_PIXBUF_MODULE_FILE=$gdk_pixbuf_module_file \
FONTCONFIG_PATH=/etc/fonts \
GTK_THEME=Adwaita
done
}
do_install_append_class-native() {
${@bb.utils.contains('PACKAGECONFIG', 'gtk+', 'make_qemu_wrapper', '', d)}
}
do_install_append_class-nativesdk() {
${@bb.utils.contains('PACKAGECONFIG', 'gtk+', 'make_qemu_wrapper', '', d)}
}
# The following fragment will create a wrapper for qemu-mips user emulation
# binary in order to work around a segmentation fault issue. Basically, by
# default, the reserved virtual address space for 32-on-64 bit is set to 4GB.
@@ -89,15 +111,16 @@ do_install_append() {
}
# END of qemu-mips workaround
PACKAGECONFIG ??= " \
fdt sdl kvm \
${@bb.utils.filter('DISTRO_FEATURES', 'alsa xen', d)} \
"
PACKAGECONFIG_class-native ??= "fdt alsa kvm"
PACKAGECONFIG_class-nativesdk ??= "fdt sdl kvm"
make_qemu_wrapper() {
gdk_pixbuf_module_file=`pkg-config --variable=gdk_pixbuf_cache_file gdk-pixbuf-2.0`
# Handle distros such as CentOS 5 32-bit that do not have kvm support
PACKAGECONFIG_class-native_remove = "${@'kvm' if not os.path.exists('/usr/include/linux/kvm.h') else ''}"
for tool in `ls ${D}${bindir}/qemu-system-*`; do
create_wrapper $tool \
GDK_PIXBUF_MODULE_FILE=$gdk_pixbuf_module_file \
FONTCONFIG_PATH=/etc/fonts \
GTK_THEME=Adwaita
done
}
# Disable kvm on targets that do not support it
PACKAGECONFIG_remove_darwin = "kvm"
+13 -49
View File
@@ -1,58 +1,22 @@
BBCLASSEXTEND = "nativesdk"
require qemu.inc
inherit ptest
DEPENDS = "glib-2.0 zlib pixman"
RDEPENDS_${PN}-ptest = "bash make"
RDEPENDS_${PN}_class-target += "bash"
LIC_FILES_CHKSUM = "file://COPYING;md5=441c28d2cf86e15a37fa47e15a72fbac \
file://COPYING.LIB;endline=24;md5=c04def7ae38850e7d3ef548588159913"
EXTRA_OECONF_append_class-target = " --target-list=${@get_qemu_target_list(d)}"
EXTRA_OECONF_append_class-nativesdk = " --target-list=${@get_qemu_target_list(d)}"
SRC_URI = "https://download.qemu.org/${BPN}-${PV}.tar.xz \
file://powerpc_rom.bin \
file://0001-sdl.c-allow-user-to-disable-pointer-grabs.patch \
file://0002-qemu-Add-missing-wacom-HID-descriptor.patch \
file://0003-Add-subpackage-ptest-which-runs-all-unit-test-cases-.patch \
file://run-ptest \
file://0004-qemu-Add-addition-environment-space-to-boot-loader-q.patch \
file://0005-qemu-disable-Valgrind.patch \
file://0006-qemu-Limit-paths-searched-during-user-mode-emulation.patch \
file://0007-qemu-native-set-ld.bfd-fix-cflags-and-set-some-envir.patch \
file://0008-chardev-connect-socket-to-a-spawned-command.patch \
file://0009-apic-fixup-fallthrough-to-PIC.patch \
file://0010-linux-user-Fix-webkitgtk-hangs-on-32-bit-x86-target.patch \
file://0011-Revert-linux-user-fix-mmap-munmap-mprotect-mremap-sh.patch \
file://0001-Add-a-missing-X11-include.patch \
file://0001-egl-headless-add-egl_create_context.patch \
"
UPSTREAM_CHECK_REGEX = "qemu-(?P<pver>\d+(\.\d+)+)\.tar"
SRC_URI_append_class-native = " \
file://0012-fix-libcap-header-issue-on-some-distro.patch \
file://0013-cpus.c-Add-error-messages-when-qemi_cpu_kick_thread-.patch \
"
SRC_URI[md5sum] = "fb687ce0b02d3bf4327e36d3b99427a8"
SRC_URI[sha256sum] = "6a0508df079a0a33c2487ca936a56c12122f105b8a96a44374704bef6c69abfc"
COMPATIBLE_HOST_mipsarchn32 = "null"
COMPATIBLE_HOST_mipsarchn64 = "null"
do_install_append() {
# Prevent QA warnings about installed ${localstatedir}/run
if [ -d ${D}${localstatedir}/run ]; then rmdir ${D}${localstatedir}/run; fi
install -Dm 0755 ${WORKDIR}/powerpc_rom.bin ${D}${datadir}/qemu
do_install_append_class-nativesdk() {
${@bb.utils.contains('PACKAGECONFIG', 'gtk+', 'make_qemu_wrapper', '', d)}
}
do_compile_ptest() {
make buildtest-TESTS
}
PACKAGECONFIG ??= " \
fdt sdl kvm \
${@bb.utils.filter('DISTRO_FEATURES', 'alsa xen', d)} \
"
PACKAGECONFIG_class-nativesdk ??= "fdt sdl kvm"
do_install_ptest() {
cp -rL ${B}/tests ${D}${PTEST_PATH}
find ${D}${PTEST_PATH}/tests -type f -name "*.[Sshcod]" | xargs -i rm -rf {}
cp ${S}/tests/Makefile.include ${D}${PTEST_PATH}/tests
# Don't check the file genreated by configure
sed -i -e '/wildcard config-host.mak/d' \
-e '$ {/endif/d}' ${D}${PTEST_PATH}/tests/Makefile.include
}