mirror of
https://git.yoctoproject.org/poky-contrib
synced 2025-05-08 15:42:17 +08:00
lib/classes/conf: refactor qemu.bbclass functions into library functions
Move the functions in qemu.bbclass to meta/lib/oe/qemu.py as they are generally useful. The qemu.bbclass is still kept, and recipes can continue to use functions from it, though they have become wrapper functions on qemu.py functions. Note that the QEMU_OPTIONS settings are still kept in qemu.bbclass. This sets a clear barrier for people to use qemu user mode. (From OE-Core rev: 7b3563b3b3901c96c3e498799a83ab8cabcf84b4) Signed-off-by: Chen Qi <Qi.Chen@windriver.com> Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
c07ded97d7
commit
0d5afd1778
@ -10,48 +10,13 @@
|
||||
#
|
||||
|
||||
def qemu_target_binary(data):
|
||||
package_arch = data.getVar("PACKAGE_ARCH")
|
||||
qemu_target_binary = (data.getVar("QEMU_TARGET_BINARY_%s" % package_arch) or "")
|
||||
if qemu_target_binary:
|
||||
return qemu_target_binary
|
||||
|
||||
target_arch = data.getVar("TARGET_ARCH")
|
||||
if target_arch in ("i486", "i586", "i686"):
|
||||
target_arch = "i386"
|
||||
elif target_arch == "powerpc":
|
||||
target_arch = "ppc"
|
||||
elif target_arch == "powerpc64":
|
||||
target_arch = "ppc64"
|
||||
elif target_arch == "powerpc64le":
|
||||
target_arch = "ppc64le"
|
||||
|
||||
return "qemu-" + target_arch
|
||||
return oe.qemu.qemu_target_binary(data)
|
||||
|
||||
def qemu_wrapper_cmdline(data, rootfs_path, library_paths):
|
||||
import string
|
||||
return oe.qemu.qemu_wrapper_cmdline(data, rootfs_path, library_paths)
|
||||
|
||||
qemu_binary = qemu_target_binary(data)
|
||||
if qemu_binary == "qemu-allarch":
|
||||
qemu_binary = "qemuwrapper"
|
||||
|
||||
qemu_options = data.getVar("QEMU_OPTIONS") or ""
|
||||
|
||||
return "PSEUDO_UNLOAD=1 " + qemu_binary + " " + qemu_options + " -L " + rootfs_path\
|
||||
+ " -E LD_LIBRARY_PATH=" + ":".join(library_paths) + " "
|
||||
|
||||
# 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):
|
||||
libdir = rootfs_path + data.getVar("libdir", False)
|
||||
base_libdir = rootfs_path + data.getVar("base_libdir", False)
|
||||
|
||||
return qemu_wrapper_cmdline(data, rootfs_path, [libdir, base_libdir]) + rootfs_path + binary
|
||||
return oe.qemu.qemu_run_binary(data, rootfs_path, binary)
|
||||
|
||||
# QEMU_EXTRAOPTIONS is not meant to be directly used, the extensions are
|
||||
# PACKAGE_ARCH, *NOT* overrides.
|
||||
@ -59,6 +24,5 @@ def qemu_run_binary(data, rootfs_path, binary):
|
||||
# enough and a PACKAGE_ARCH specific -cpu option is needed (hence we have to do
|
||||
# this dance). For others (e.g. arm) a -cpu option is not necessary, since the
|
||||
# qemu-arm default CPU supports all required architecture levels.
|
||||
|
||||
QEMU_OPTIONS = "-r ${OLDEST_KERNEL} ${@d.getVar("QEMU_EXTRAOPTIONS:tune-%s" % d.getVar('TUNE_PKGARCH')) or ""}"
|
||||
QEMU_OPTIONS[vardeps] += "QEMU_EXTRAOPTIONS:tune-${TUNE_PKGARCH}"
|
||||
|
@ -10,6 +10,6 @@ __path__ = extend_path(__path__, __name__)
|
||||
# Modules with vistorcode need to go first else anything depending on them won't be
|
||||
# processed correctly (e.g. qa)
|
||||
BBIMPORTS = ["qa", "data", "path", "utils", "types", "package", "packagedata", \
|
||||
"packagegroup", "sstatesig", "lsb", "cachedpath", "license", \
|
||||
"packagegroup", "sstatesig", "lsb", "cachedpath", "license", "qemu", \
|
||||
"reproducible", "rust", "buildcfg", "go", "spdx30_tasks", "spdx_common", \
|
||||
"cve_check"]
|
||||
|
54
meta/lib/oe/qemu.py
Normal file
54
meta/lib/oe/qemu.py
Normal file
@ -0,0 +1,54 @@
|
||||
#
|
||||
# Copyright OpenEmbedded Contributors
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
#
|
||||
|
||||
def qemu_target_binary(d):
|
||||
package_arch = d.getVar("PACKAGE_ARCH")
|
||||
qemu_target_binary = (d.getVar("QEMU_TARGET_BINARY_%s" % package_arch) or "")
|
||||
if qemu_target_binary:
|
||||
return qemu_target_binary
|
||||
|
||||
target_arch = d.getVar("TARGET_ARCH")
|
||||
if target_arch in ("i486", "i586", "i686"):
|
||||
target_arch = "i386"
|
||||
elif target_arch == "powerpc":
|
||||
target_arch = "ppc"
|
||||
elif target_arch == "powerpc64":
|
||||
target_arch = "ppc64"
|
||||
elif target_arch == "powerpc64le":
|
||||
target_arch = "ppc64le"
|
||||
|
||||
return "qemu-" + target_arch
|
||||
|
||||
def qemu_wrapper_cmdline(d, rootfs_path, library_paths, qemu_options=None):
|
||||
import string
|
||||
|
||||
package_arch = d.getVar("PACKAGE_ARCH")
|
||||
if package_arch == "all":
|
||||
return "false"
|
||||
|
||||
qemu_binary = qemu_target_binary(d)
|
||||
if qemu_binary == "qemu-allarch":
|
||||
qemu_binary = "qemuwrapper"
|
||||
|
||||
if qemu_options == None:
|
||||
qemu_options = d.getVar("QEMU_OPTIONS") or ""
|
||||
|
||||
return "PSEUDO_UNLOAD=1 " + qemu_binary + " " + qemu_options + " -L " + rootfs_path\
|
||||
+ " -E LD_LIBRARY_PATH=" + ":".join(library_paths) + " "
|
||||
|
||||
# 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(d, rootfs_path, binary):
|
||||
libdir = rootfs_path + d.getVar("libdir", False)
|
||||
base_libdir = rootfs_path + d.getVar("base_libdir", False)
|
||||
|
||||
return qemu_wrapper_cmdline(d, rootfs_path, [libdir, base_libdir]) + rootfs_path + binary
|
Loading…
x
Reference in New Issue
Block a user