]> code.ossystems Code Review - openembedded-core.git/commitdiff
bitbake: machine specific sysroots implementation
authorDongxiao Xu <dongxiao.xu@intel.com>
Tue, 18 Jan 2011 08:18:42 +0000 (16:18 +0800)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Tue, 25 Jan 2011 12:25:46 +0000 (12:25 +0000)
This commit changes the sysroots path to be machine specific.

Changes includes:

1) STAGING_DIR_TARGET and STRAGING_DIR_HOST points to machine specific
paths.

2) task stamp files. Adding ${MACHINE} info into stamp files for
do_populate_sysroots and do_package tasks. Add a BB_STAMPTASK_BLACKLIST
to keep native, nativesdk, crosssdk, and cross-canadian stamp unchanged.

3) siteconfig path. Separate the site config path for different machines
to avoid one machine adopting the cache file of another machine.

4) sstate. Add machine name to sstate manifest file.
Change relocation code for sstate paths since sysroot is machine.
Keep native, nativesdk, crosssdk, and cross-canadian unchanged.

5) toolchain scripts. Change the environment path to point to machine
specific sysroots in toolchain scripts bbclass.

6) Relocate la files when populating to a different machine of the same
architecture.

7) Exclude STAGING_DIR_TARGET and STAGING_DIR_HOST parameter from sstate
siginfo since they contain ${MACHINE} information.

Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com>
12 files changed:
meta/classes/bootimg.bbclass
meta/classes/cross-canadian.bbclass
meta/classes/cross.bbclass
meta/classes/crosssdk.bbclass
meta/classes/native.bbclass
meta/classes/nativesdk.bbclass
meta/classes/package.bbclass
meta/classes/siteconfig.bbclass
meta/classes/sstate.bbclass
meta/classes/staging.bbclass
meta/classes/toolchain-scripts.bbclass
meta/conf/bitbake.conf

index f4949f55bd7238d5d4b84438e9a846bfb78508e4..49ee85ea7241dcbb4612cb0eaa06e92004ec1270 100644 (file)
@@ -49,7 +49,7 @@ inherit syslinux
                
 build_boot_bin() {
        install -d ${HDDDIR}
-       install -m 0644 ${STAGING_DIR}/${MACHINE}${HOST_VENDOR}-${HOST_OS}/kernel/bzImage \
+       install -m 0644 ${STAGING_DIR_HOST}/kernel/bzImage \
        ${HDDDIR}/vmlinuz
 
        if [ -n "${INITRD}" ] && [ -s "${INITRD}" ]; then 
@@ -83,7 +83,7 @@ build_boot_bin() {
 
                # Install the kernel
 
-               install -m 0644 ${STAGING_DIR}/${MACHINE}${HOST_VENDOR}-${HOST_OS}/kernel/bzImage \
+               install -m 0644 ${STAGING_DIR_HOST}/kernel/bzImage \
                        ${ISODIR}/vmlinuz
 
                # Install the configuration files
index 3f3a24dd578031b9ea17e4d6e7fc5cb1c7639a43..993f831a54b672dbad56d46ef79bacf83e891123 100644 (file)
@@ -30,7 +30,6 @@ MULTIMACH_TARGET_SYS = "${MULTIMACH_ARCH}${HOST_VENDOR}-${HOST_OS}"
 INHIBIT_DEFAULT_DEPS = "1"
 
 STAGING_DIR_HOST = "${STAGING_DIR}/${HOST_SYS}-nativesdk"
-STAGING_DIR_TARGET = "${STAGING_DIR}/${OLD_PACKAGE_ARCH}${TARGET_VENDOR}-${TARGET_OS}"
 
 TOOLCHAIN_OPTIONS = " --sysroot=${STAGING_DIR}/${HOST_ARCH}-nativesdk${HOST_VENDOR}-${HOST_OS}"
 
@@ -82,3 +81,5 @@ export PKG_CONFIG_SYSROOT_DIR = "${STAGING_DIR_HOST}"
 # Cross-canadian packages need to pull in nativesdk dynamic libs
 SHLIBSDIR = "${STAGING_DIR}/${SDK_ARCH}-nativesdk${SDK_VENDOR}-${BUILD_OS}/shlibs"
 
+do_populate_sysroot[stamp-extra-info] = ""
+do_package[stamp-extra-info] = ""
index 6d7c7cd4636dc3eb1651c080bc34c38f27022c6e..2564505d6a2871ec4963427488b306229d92e522 100644 (file)
@@ -20,6 +20,11 @@ HOST_OS = "${BUILD_OS}"
 HOST_PREFIX = "${BUILD_PREFIX}"
 HOST_CC_ARCH = "${BUILD_CC_ARCH}"
 
+STAGING_DIR_HOST = "${STAGING_DIR}/${BASEPKG_HOST_SYS}"
+
+export PKG_CONFIG_DIR = "${STAGING_DIR}/${BASE_PACKAGE_ARCH}${TARGET_VENDOR}-${TARGET_OS}${libdir}/pkgconfig"
+export PKG_CONFIG_SYSROOT_DIR = "${STAGING_DIR}/${BASE_PACKAGE_ARCH}${TARGET_VENDOR}-${TARGET_OS}"
+
 CPPFLAGS = "${BUILD_CPPFLAGS}"
 CFLAGS = "${BUILD_CFLAGS}"
 CXXFLAGS = "${BUILD_CFLAGS}"
index 23db163ba613ef357588faac3aa3147329f7ecaa..08ba82376741e3cede1ef19557e6b186a8c962f4 100644 (file)
@@ -18,3 +18,5 @@ target_base_libdir = "${SDKPATHNATIVE}${base_libdir_nativesdk}"
 target_prefix = "${SDKPATHNATIVE}${prefix_nativesdk}"
 target_exec_prefix = "${SDKPATHNATIVE}${exec_prefix_nativesdk}"
 
+do_populate_sysroot[stamp-extra-info] = ""
+do_package[stamp-extra-info] = ""
index aec7fe38a917b954c892f0ca8ff317b4fad6000c..545a73eb8bc3fa05c573549649526adf8e953e19 100644 (file)
@@ -120,3 +120,5 @@ do_package_write_ipk[noexec] = "1"
 do_package_write_deb[noexec] = "1"
 do_package_write_rpm[noexec] = "1"
 
+do_populate_sysroot[stamp-extra-info] = ""
+do_package[stamp-extra-info] = ""
index 154bd827b676af0c27058588283e1157aac35fe7..587a907c44e3ab914c6c104091a20907f164d250 100644 (file)
@@ -19,6 +19,8 @@ python () {
 
 #STAGING_DIR_HOST = "${STAGING_DIR}/${HOST_SYS}-nativesdk"
 #STAGING_DIR_TARGET = "${STAGING_DIR}/${BASEPKG_TARGET_SYS}-nativesdk"
+STAGING_DIR_HOST = "${STAGING_DIR}/${BASEPKG_HOST_SYS}"
+STAGING_DIR_TARGET = "${STAGING_DIR}/${BASEPKG_TARGET_SYS}"
 
 HOST_ARCH = "${SDK_ARCH}"
 HOST_VENDOR = "${SDK_VENDOR}"
@@ -79,4 +81,5 @@ python __anonymous () {
     bb.data.setVar("OVERRIDES", bb.data.getVar("OVERRIDES", d, False) + ":virtclass-nativesdk", d)
 }
 
-
+do_populate_sysroot[stamp-extra-info] = ""
+do_package[stamp-extra-info] = ""
index 8e7fa26f72521d78df5d24e5bcd155add8c81748..1b950bb6178bc8a60dfbd811a1b07035b62d67ce 100644 (file)
@@ -1094,6 +1094,7 @@ do_package[sstate-plaindirs] = "${PKGD} ${PKGDEST}"
 do_package[sstate-inputdirs] = "${PKGDESTWORK} ${SHLIBSWORKDIR}"
 do_package[sstate-outputdirs] = "${PKGDATA_DIR} ${SHLIBSDIR}"
 do_package[sstate-lockfile] = "${PACKAGELOCK}"
+do_package[stamp-extra-info] = "${MACHINE}"
 do_package_setscene[dirs] = "${STAGING_DIR}"
 
 python do_package_setscene () {
index 5edc0d6a0bae892503d41033c72ddb8d7e113dde..0813c2543ecad7dc48082d3cfd26aac8a855889c 100644 (file)
@@ -13,10 +13,10 @@ python siteconfig_do_siteconfig () {
 EXTRASITECONFIG ?= ""
 
 siteconfig_do_siteconfig_gencache () {
-       mkdir -p ${WORKDIR}/site_config
+       mkdir -p ${WORKDIR}/site_config_${MACHINE}
        gen-site-config ${FILE_DIRNAME}/site_config \
-               >${WORKDIR}/site_config/configure.ac
-       cd ${WORKDIR}/site_config
+               >${WORKDIR}/site_config_${MACHINE}/configure.ac
+       cd ${WORKDIR}/site_config_${MACHINE}
        autoconf
         CONFIG_SITE="" ${EXTRASITECONFIG} ./configure ${CONFIGUREOPTS} --cache-file ${PN}_cache
        sed -n -e "/ac_cv_c_bigendian/p" -e "/ac_cv_sizeof_/p" \
index 38f2bb99e6b27c0efd5a90427622c659c0d7ffd7..807e8e39aa19062e5d5615da4e78c6351ba87441 100644 (file)
@@ -1,7 +1,7 @@
 SSTATE_VERSION = "1"
 
 SSTATE_MANIFESTS = "${TMPDIR}/sstate-control"
-SSTATE_MANFILEBASE = "${SSTATE_MANIFESTS}/manifest-${SSTATE_PKGARCH}-"
+SSTATE_MANFILEBASE = "${SSTATE_MANIFESTS}/manifest-${SSTATE_MANMACH}-"
 SSTATE_MANFILEPREFIX = "${SSTATE_MANFILEBASE}${PN}"
 
 
@@ -14,15 +14,22 @@ SSTATE_SCAN_CMD ?= "find ${SSTATE_BUILDDIR} \( -name "*.la" -o -name "*-config"
 
 BB_HASHFILENAME = "${SSTATE_PKGNAME}"
 
+SSTATE_MANMACH ?= "${SSTATE_PKGARCH}"
+
 python () {
     if bb.data.inherits_class('native', d):
         bb.data.setVar('SSTATE_PKGARCH', bb.data.getVar('BUILD_ARCH', d), d)
-    elif bb.data.inherits_class('cross', d) or bb.data.inherits_class('crosssdk', d):
+    elif bb.data.inherits_class('cross', d):
+        bb.data.setVar('SSTATE_PKGARCH', bb.data.expand("${BUILD_ARCH}_${BASE_PACKAGE_ARCH}", d), d)
+        bb.data.setVar('SSTATE_MANMACH', bb.data.expand("${BUILD_ARCH}_${MACHINE}", d), d)
+    elif bb.data.inherits_class('crosssdk', d):
         bb.data.setVar('SSTATE_PKGARCH', bb.data.expand("${BUILD_ARCH}_${BASE_PACKAGE_ARCH}", d), d)
     elif bb.data.inherits_class('nativesdk', d):
         bb.data.setVar('SSTATE_PKGARCH', bb.data.expand("${SDK_ARCH}", d), d)
     elif bb.data.inherits_class('cross-canadian', d):
         bb.data.setVar('SSTATE_PKGARCH', bb.data.expand("${SDK_ARCH}_${BASE_PACKAGE_ARCH}", d), d)
+    else:
+        bb.data.setVar('SSTATE_MANMACH', bb.data.expand("${MACHINE}", d), d)
 
     # These classes encode staging paths into their scripts data so can only be
     # reused if we manipulate the paths
@@ -147,10 +154,14 @@ def sstate_installpkg(ss, d):
     fixmefn =  sstateinst + "fixmepath"
     if os.path.isfile(fixmefn):
         staging = bb.data.getVar('STAGING_DIR', d, True)
+        staging_target = bb.data.getVar('STAGING_DIR_TARGET', d, True)
+        staging_host = bb.data.getVar('STAGING_DIR_HOST', d, True)
         fixmefd = open(fixmefn, "r")
         fixmefiles = fixmefd.readlines()
         fixmefd.close()
         for file in fixmefiles:
+            os.system("sed -i -e s:FIXMESTAGINGDIRTARGET:%s:g %s" % (staging_target, sstateinst + file))
+            os.system("sed -i -e s:FIXMESTAGINGDIRHOST:%s:g %s" % (staging_host, sstateinst + file))
             os.system("sed -i -e s:FIXMESTAGINGDIR:%s:g %s" % (staging, sstateinst + file))
 
     for state in ss['dirs']:
@@ -248,6 +259,35 @@ python sstate_cleanall() {
              sstate_clean(shared_state, d)
 }
 
+def sstate_hardcode_path(d):
+       # Need to remove hardcoded paths and fix these when we install the
+       # staging packages.
+       sstate_scan_cmd = bb.data.getVar('SSTATE_SCAN_CMD', d, True)
+       p = os.popen("%s" % sstate_scan_cmd)
+       file_list = p.read()
+
+       if file_list == "":
+               p.close()
+               return
+
+       staging = bb.data.getVar('STAGING_DIR', d, True)
+       staging_target = bb.data.getVar('STAGING_DIR_TARGET', d, True)
+       staging_host = bb.data.getVar('STAGING_DIR_HOST', d, True)
+       sstate_builddir = bb.data.getVar('SSTATE_BUILDDIR', d, True)
+
+       for i in file_list.split('\n'):
+               if bb.data.inherits_class('native', d) or bb.data.inherits_class('nativesdk', d) or bb.data.inherits_class('crosssdk', d) or bb.data.inherits_class('cross-canadian', d):
+                       cmd = "sed -i -e s:%s:FIXMESTAGINGDIR:g %s" % (staging, i)
+               elif bb.data.inherits_class('cross', d):
+                       cmd = "sed -i -e s:%s:FIXMESTAGINGDIRTARGET:g %s \
+                               sed -i -e s:%s:FIXMESTAGINGDIR:g %s" % (staging_target, i, staging, i)
+               else:
+                       cmd = "sed -i -e s:%s:FIXMESTAGINGDIRHOST:g %s" % (staging_host, i)
+
+               os.system(cmd)
+               os.system("echo %s | sed -e 's:%s::' >> %sfixmepath" % (i, sstate_builddir, sstate_builddir))
+       p.close()
+
 def sstate_package(ss, d):
     import oe.path
 
@@ -273,6 +313,7 @@ def sstate_package(ss, d):
 
     bb.data.setVar('SSTATE_BUILDDIR', sstatebuild, d)
     bb.data.setVar('SSTATE_PKG', sstatepkg, d)
+    sstate_hardcode_path(d)
     bb.build.exec_func('sstate_create_package', d)
     
     bb.siggen.dump_this_task(sstatepkg + ".siginfo", d)
@@ -337,13 +378,6 @@ python sstate_task_postfunc () {
 # set as SSTATE_BUILDDIR
 #
 sstate_create_package () {
-       # Need to remove hardcoded paths and fix these when we install the
-       # staging packages.
-       for i in `${SSTATE_SCAN_CMD}` ; do \
-               sed -i -e s:${STAGING_DIR}:FIXMESTAGINGDIR:g $i
-               echo $i | sed -e 's:${SSTATE_BUILDDIR}::' >> ${SSTATE_BUILDDIR}fixmepath
-       done
-
        cd ${SSTATE_BUILDDIR}
        tar -cvzf ${SSTATE_PKG} *
 
index 72d77e2b5489f4a03b0da93b1f3e61f084ab2099..2ef8f29b7516c5dc1006c46fac2521d66649cc64 100644 (file)
@@ -92,6 +92,7 @@ SSTATETASKS += "do_populate_sysroot"
 do_populate_sysroot[sstate-name] = "populate-sysroot"
 do_populate_sysroot[sstate-inputdirs] = "${SYSROOT_DESTDIR}"
 do_populate_sysroot[sstate-outputdirs] = "${STAGING_DIR_HOST}/"
+do_populate_sysroot[stamp-extra-info] = "${MACHINE}"
 
 python do_populate_sysroot_setscene () {
        sstate_setscene(d)
index 5ec0e8a4a915e24324611602de2a58a86f664ba0..b2165bc2751dc8d1977fdc68b43b8edfe53cef6e 100644 (file)
@@ -49,8 +49,8 @@ toolchain_create_tree_env_script () {
        echo 'export TARGET_PREFIX=${TARGET_PREFIX}' >> $script
        echo 'export CONFIGURE_FLAGS="--target=${TARGET_SYS} --host=${TARGET_SYS} --build=${BUILD_SYS}"' >> $script
        if [ "${TARGET_OS}" = "darwin8" ]; then
-               echo 'export TARGET_CFLAGS="-I${STAGING_DIR}${TARGET_SYS}${includedir}"' >> $script
-               echo 'export TARGET_LDFLAGS="-L${STAGING_DIR}${TARGET_SYS}${libdir}"' >> $script
+               echo 'export TARGET_CFLAGS="-I${STAGING_DIR}${MACHINE}${includedir}"' >> $script
+               echo 'export TARGET_LDFLAGS="-L${STAGING_DIR}${MACHINE}${libdir}"' >> $script
                # Workaround darwin toolchain sysroot path problems
                cd ${SDK_OUTPUT}${SDKTARGETSYSROOT}/usr
                ln -s /usr/local local
index 1c6c7e5f12c842a3b1e2ef6d39bf66ae54eda7fc..db09c7519176ffde74540355d388939d47d85bfd 100644 (file)
@@ -280,7 +280,7 @@ STAGING_DATADIR_NATIVE = "${STAGING_DIR_NATIVE}${datadir_native}"
 
 # This should really be MULTIMACH_HOST_SYS but that breaks "all" and machine 
 # specific packages - hack around it for now.
-STAGING_DIR_HOST = "${STAGING_DIR}/${BASEPKG_HOST_SYS}"
+STAGING_DIR_HOST = "${STAGING_DIR}/${MACHINE}"
 STAGING_BINDIR = "${STAGING_DIR_HOST}${bindir}"
 STAGING_LIBDIR = "${STAGING_DIR_HOST}${libdir}"
 STAGING_INCDIR = "${STAGING_DIR_HOST}${includedir}"
@@ -292,7 +292,7 @@ STAGING_PYDIR = "${STAGING_DIR}/lib/python2.4"
 
 # This should really be MULTIMACH_TARGET_SYS but that breaks "all" and machine 
 # specific packages - hack around it for now.
-STAGING_DIR_TARGET = "${STAGING_DIR}/${BASEPKG_TARGET_SYS}"
+STAGING_DIR_TARGET = "${STAGING_DIR}/${MACHINE}"
 STAGING_DIR_TCBOOTSTRAP = "${STAGING_DIR_TARGET}-tcbootstrap"
 
 # Setting DEPLOY_DIR outside of TMPDIR is helpful, when you are using
@@ -316,7 +316,7 @@ SDKPATHNATIVE = "${SDKPATH}/sysroots/${SDK_SYS}"
 ##################################################################
 
 OLDEST_KERNEL = "2.4.0"
-STAGING_KERNEL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/kernel"
+STAGING_KERNEL_DIR = "${STAGING_DIR_HOST}/kernel"
 
 ##################################################################
 # Specific image creation and rootfs population info.
@@ -601,10 +601,10 @@ SLOT = "0"
 
 # Other
 
-export PKG_CONFIG_DIR = "${STAGING_DIR}/${BASE_PACKAGE_ARCH}${TARGET_VENDOR}-${TARGET_OS}${libdir}/pkgconfig"
+export PKG_CONFIG_DIR = "${STAGING_DIR_HOST}/${libdir}/pkgconfig"
 export PKG_CONFIG_PATH = "${PKG_CONFIG_DIR}:${STAGING_DATADIR}/pkgconfig"
 export PKG_CONFIG_LIBDIR = "${PKG_CONFIG_DIR}"
-export PKG_CONFIG_SYSROOT_DIR = "${STAGING_DIR}/${BASE_PACKAGE_ARCH}${TARGET_VENDOR}-${TARGET_OS}"
+export PKG_CONFIG_SYSROOT_DIR = "${STAGING_DIR_HOST}"
 export PKG_CONFIG_DISABLE_UNINSTALLED = "yes"
 
 export QMAKE_MKSPEC_PATH = "${STAGING_DATADIR_NATIVE}/qmake"
@@ -735,5 +735,5 @@ TRANSLATED_TARGET_ARCH ??= ${TARGET_ARCH}
 # Setup our default hash policy
 BB_SIGNATURE_HANDLER ?= "basic"
 BB_HASHTASK_WHITELIST ?= "(.*-cross$|.*-native$|.*-cross-initial$|.*-cross-intermediate$|^virtual:native:.*|^virtual:nativesdk:.*)"
-BB_HASHBASE_WHITELIST ?= "TMPDIR FILE PATH PWD BB_TASKHASH BBPATH DL_DIR SSTATE_DIR THISDIR FILESEXTRAPATHS FILE_DIRNAME HOME LOGNAME SHELL TERM USER FILESPATH USERNAME"
+BB_HASHBASE_WHITELIST ?= "TMPDIR FILE PATH PWD BB_TASKHASH BBPATH DL_DIR SSTATE_DIR THISDIR FILESEXTRAPATHS FILE_DIRNAME HOME LOGNAME SHELL TERM USER FILESPATH USERNAME STAGING_DIR_HOST STAGING_DIR_TARGET"