From 42545ffbb37f2646a2a8c20999c21d3300e24f59 Mon Sep 17 00:00:00 2001 From: Mark Hatle Date: Fri, 22 Jun 2012 18:44:06 -0500 Subject: populate_sdk: enable basic multilib support In order to enable basic multilib support for the export of an SDK image, a number of minor changes had to be made: The value of MULTIMACH_TARGET_SYS needs to be variable. This way we can define the value to the appropriate multilib. (Also in some cases the default PACKAGE_ARCH is set to MACHINE_ARCH which is incorrect for the SDK.) Add a companion REAL_MULTIMACH_TARGET_SYS, based on code from meta-environment, to allow for this. We have to convert the do_populate_sdk into a python call, and then break up the previous items into three parts. * Image construction * Setup of environment files * Generation of the tarball Then we can iterate over the multilibs to populate the environment files. Finally, matching changes were needed in the toolchain-scripts file. And what I presume is an optimization of immediate evaluation for TOOLCHAIN_CONFIGSITE_NOCACHE and ..._SYSROOTCACHE needed to be done at runtime, otherwise the wrong values may be used. Signed-off-by: Mark Hatle --- meta/classes/populate_sdk_base.bbclass | 42 ++++++++++++++++++++++++++++++---- meta/classes/toolchain-scripts.bbclass | 16 ++++++++----- 2 files changed, 48 insertions(+), 10 deletions(-) (limited to 'meta/classes') diff --git a/meta/classes/populate_sdk_base.bbclass b/meta/classes/populate_sdk_base.bbclass index 6508bd96cd..6dc66fbbbe 100644 --- a/meta/classes/populate_sdk_base.bbclass +++ b/meta/classes/populate_sdk_base.bbclass @@ -16,6 +16,10 @@ TOOLCHAIN_OUTPUTNAME ?= "${SDK_NAME}-toolchain-${DISTRO_VERSION}" SDK_RDEPENDS = "${TOOLCHAIN_TARGET_TASK} ${TOOLCHAIN_HOST_TASK}" SDK_DEPENDS = "virtual/fakeroot-native sed-native" +# We want the MULTIARCH_TARGET_SYS to point to the TUNE_PKGARCH, not PACKAGE_ARCH as it +# could be set to the MACHINE_ARCH +REAL_MULTIMACH_TARGET_SYS = "${TUNE_PKGARCH}${TARGET_VENDOR}-${TARGET_OS}" + PID = "${@os.getpid()}" EXCLUDE_FROM_WORLD = "1" @@ -27,7 +31,33 @@ python () { runtime_mapping_rename("TOOLCHAIN_TARGET_TASK", d) } -fakeroot do_populate_sdk() { +fakeroot python do_populate_sdk() { + bb.build.exec_func("populate_sdk_image", d) + + # Handle multilibs in the SDK environment, siteconfig, etc files... + localdata = bb.data.createCopy(d) + + # make sure we only use the WORKDIR value from 'd', or it can change + localdata.setVar('WORKDIR', d.getVar('WORKDIR', True)) + + # make sure we only use the SDKTARGETSYSROOT value from 'd' + localdata.setVar('SDKTARGETSYSROOT', d.getVar('SDKTARGETSYSROOT', True)) + + # Process DEFAULTTUNE + bb.build.exec_func("create_sdk_files", localdata) + + variants = d.getVar("MULTILIB_VARIANTS", True) or "" + for item in variants.split(): + # Load overrides from 'd' to avoid having to reset the value... + overrides = d.getVar("OVERRIDES", False) + ":virtclass-multilib-" + item + localdata.setVar("OVERRIDES", overrides) + bb.data.update_data(localdata) + bb.build.exec_func("create_sdk_files", localdata) + + bb.build.exec_func("tar_sdk", d) +} + +fakeroot populate_sdk_image() { rm -rf ${SDK_OUTPUT} mkdir -p ${SDK_OUTPUT} @@ -54,15 +84,19 @@ fakeroot do_populate_sdk() { # Link the ld.so.cache file into the hosts filesystem ln -s /etc/ld.so.cache ${SDK_OUTPUT}/${SDKPATHNATIVE}/etc/ld.so.cache +} +fakeroot create_sdk_files() { # Setup site file for external use - toolchain_create_sdk_siteconfig ${SDK_OUTPUT}/${SDKPATH}/site-config-${MULTIMACH_TARGET_SYS} + toolchain_create_sdk_siteconfig ${SDK_OUTPUT}/${SDKPATH}/site-config-${REAL_MULTIMACH_TARGET_SYS} - toolchain_create_sdk_env_script + toolchain_create_sdk_env_script ${SDK_OUTPUT}/${SDKPATH}/environment-setup-${REAL_MULTIMACH_TARGET_SYS} # Add version information - toolchain_create_sdk_version ${SDK_OUTPUT}/${SDKPATH}/version-${MULTIMACH_TARGET_SYS} + toolchain_create_sdk_version ${SDK_OUTPUT}/${SDKPATH}/version-${REAL_MULTIMACH_TARGET_SYS} +} +fakeroot tar_sdk() { # Package it up mkdir -p ${SDK_DEPLOY} cd ${SDK_OUTPUT} diff --git a/meta/classes/toolchain-scripts.bbclass b/meta/classes/toolchain-scripts.bbclass index 2099c4def8..bedcd612fe 100644 --- a/meta/classes/toolchain-scripts.bbclass +++ b/meta/classes/toolchain-scripts.bbclass @@ -1,15 +1,19 @@ inherit siteinfo +# We want to be able to change the value of MULTIMACH_TARGET_SYS, because it +# doesn't always match our expectations... but we default to the stock value +REAL_MULTIMACH_TARGET_SYS ?= "${MULTIMACH_TARGET_SYS}" + # This function creates an environment-setup-script for use in a deployable SDK toolchain_create_sdk_env_script () { # Create environment setup script - script=${SDK_OUTPUT}/${SDKPATH}/environment-setup-${MULTIMACH_TARGET_SYS} + script=${1:-${SDK_OUTPUT}/${SDKPATH}/environment-setup-${REAL_MULTIMACH_TARGET_SYS}} rm -f $script touch $script - echo 'export PATH=${SDKPATHNATIVE}${bindir_nativesdk}:${SDKPATHNATIVE}${bindir_nativesdk}/${MULTIMACH_TARGET_SYS}:$PATH' >> $script + echo 'export PATH=${SDKPATHNATIVE}${bindir_nativesdk}:${SDKPATHNATIVE}${bindir_nativesdk}/${REAL_MULTIMACH_TARGET_SYS}:$PATH' >> $script echo 'export PKG_CONFIG_SYSROOT_DIR=${SDKTARGETSYSROOT}' >> $script echo 'export PKG_CONFIG_PATH=${SDKTARGETSYSROOT}${libdir}/pkgconfig' >> $script - echo 'export CONFIG_SITE=${SDKPATH}/site-config-${MULTIMACH_TARGET_SYS}' >> $script + echo 'export CONFIG_SITE=${SDKPATH}/site-config-${REAL_MULTIMACH_TARGET_SYS}' >> $script echo 'export CC=${TARGET_PREFIX}gcc' >> $script echo 'export CXX=${TARGET_PREFIX}g++' >> $script echo 'export GDB=${TARGET_PREFIX}gdb' >> $script @@ -36,7 +40,7 @@ toolchain_create_sdk_env_script () { # This function creates an environment-setup-script in the TMPDIR which enables # a OE-core IDE to integrate with the build tree toolchain_create_tree_env_script () { - script=${TMPDIR}/environment-setup-${MULTIMACH_TARGET_SYS} + script=${TMPDIR}/environment-setup-${REAL_MULTIMACH_TARGET_SYS} rm -f $script touch $script echo 'export PATH=${PATH}' >> $script @@ -103,8 +107,8 @@ toolchain_create_sdk_env_script_for_installer () { } #we get the cached site config in the runtime -TOOLCHAIN_CONFIGSITE_NOCACHE := "${@siteinfo_get_files(d, True)}" -TOOLCHAIN_CONFIGSITE_SYSROOTCACHE := "${STAGING_DATADIR}/${TARGET_SYS}_config_site.d" +TOOLCHAIN_CONFIGSITE_NOCACHE = "${@siteinfo_get_files(d, True)}" +TOOLCHAIN_CONFIGSITE_SYSROOTCACHE = "${STAGING_DATADIR}/${TARGET_SYS}_config_site.d" TOOLCHAIN_NEED_CONFIGSITE_CACHE = "${TCLIBC} ncurses" #This function create a site config file -- cgit 1.2.3-korg