generic-poky/meta/classes/qemu.bbclass
Richard Purdie b813bdebb3 qemu/libc-package: Fix qemu option handling
The 'overrides' here are PACKAGE_ARCH based and hence not overrides
as such and the _append wasn't working in many cases. This adjusts the
code to use PACKAGE_ARCH as the accessor and ensures the variables
work as expected. This fixes various segfaults and ensures postinsts
run at build time rather than on the target system.

The bug was introduced in http://git.yoctoproject.org/cgit.cgi/poky/commit/?id=7efad8a1b56df6ee07c12ad360c0493d7b1d6d23.

(From OE-Core rev: 219e793907406eabf632e784e3a11ab9acb77cfb)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2014-12-05 18:01:08 +00:00

52 lines
2.1 KiB
Text

#
# This class contains functions for recipes that need QEMU or test for its
# existence.
#
def qemu_target_binary(data):
target_arch = data.getVar("TARGET_ARCH", True)
if target_arch in ("i486", "i586", "i686"):
target_arch = "i386"
elif target_arch == "powerpc":
target_arch = "ppc"
elif target_arch == "powerpc64":
target_arch = "ppc64"
return "qemu-" + target_arch
#
# Next function will return a string containing the command that is needed to
# to run a certain binary through qemu. For example, in order to make a certain
# postinstall scriptlet run at do_rootfs time and running the postinstall is
# architecture dependent, we can run it through qemu. For example, in the
# postinstall scriptlet, we could use the following:
#
# ${@qemu_run_binary(d, '$D', '/usr/bin/test_app')} [test_app arguments]
#
def qemu_run_binary(data, rootfs_path, binary):
qemu_binary = qemu_target_binary(data)
if qemu_binary == "qemu-allarch":
qemu_binary = "qemuwrapper"
libdir = rootfs_path + data.getVar("libdir", False)
base_libdir = rootfs_path + data.getVar("base_libdir", False)
qemu_options = data.getVar("QEMU_OPTIONS", True)
return "PSEUDO_UNLOAD=1 " + qemu_binary + " " + qemu_options + " -L " + rootfs_path\
+ " -E LD_LIBRARY_PATH=" + libdir + ":" + base_libdir + " "\
+ rootfs_path + binary
# QEMU_EXTRAOPTIONS is not meant to be directly used, the extensions are
# PACKAGE_ARCH, not overrides and hence have to do this dance. Simply being arch
# specific isn't good enough.
QEMU_OPTIONS = "-r ${OLDEST_KERNEL} ${@d.getVar("QEMU_EXTRAOPTIONS_%s" % d.getVar('PACKAGE_ARCH', True), True) or ""}"
QEMU_EXTRAOPTIONS_iwmmxt = " -cpu pxa270-c5"
QEMU_EXTRAOPTIONS_armv6 = " -cpu arm1136"
QEMU_EXTRAOPTIONS_armv7a = " -cpu cortex-a8"
QEMU_EXTRAOPTIONS_e500v2 = " -cpu e500v2"
QEMU_EXTRAOPTIONS_e500mc = " -cpu e500mc"
QEMU_EXTRAOPTIONS_e5500 = " -cpu e5500"
QEMU_EXTRAOPTIONS_e5500-64b = " -cpu e5500"
QEMU_EXTRAOPTIONS_e6500 = " -cpu e6500"
QEMU_EXTRAOPTIONS_e6500-64b = " -cpu e6500"
QEMU_EXTRAOPTIONS_ppc7400 = " -cpu 7400"