summaryrefslogtreecommitdiffstats
path: root/meta/classes/sstate.bbclass
diff options
context:
space:
mode:
authorDongxiao Xu <dongxiao.xu@intel.com>2011-01-18 16:18:42 +0800
committerRichard Purdie <richard.purdie@linuxfoundation.org>2011-01-25 12:25:46 +0000
commit7f41f1a8888a1f7f091101d19b9b0c4787f5a6fc (patch)
treeba2afa60ca17a84860545e0c871ffce34b57839a /meta/classes/sstate.bbclass
parentb0df35f47fb79dc149504bd66d1186b3276f9510 (diff)
downloadpoky-7f41f1a8888a1f7f091101d19b9b0c4787f5a6fc.tar.gz
bitbake: machine specific sysroots implementation
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>
Diffstat (limited to 'meta/classes/sstate.bbclass')
-rw-r--r--meta/classes/sstate.bbclass52
1 files changed, 43 insertions, 9 deletions
diff --git a/meta/classes/sstate.bbclass b/meta/classes/sstate.bbclass
index 38f2bb99e6..807e8e39aa 100644
--- a/meta/classes/sstate.bbclass
+++ b/meta/classes/sstate.bbclass
@@ -1,7 +1,7 @@
1SSTATE_VERSION = "1" 1SSTATE_VERSION = "1"
2 2
3SSTATE_MANIFESTS = "${TMPDIR}/sstate-control" 3SSTATE_MANIFESTS = "${TMPDIR}/sstate-control"
4SSTATE_MANFILEBASE = "${SSTATE_MANIFESTS}/manifest-${SSTATE_PKGARCH}-" 4SSTATE_MANFILEBASE = "${SSTATE_MANIFESTS}/manifest-${SSTATE_MANMACH}-"
5SSTATE_MANFILEPREFIX = "${SSTATE_MANFILEBASE}${PN}" 5SSTATE_MANFILEPREFIX = "${SSTATE_MANFILEBASE}${PN}"
6 6
7 7
@@ -14,15 +14,22 @@ SSTATE_SCAN_CMD ?= "find ${SSTATE_BUILDDIR} \( -name "*.la" -o -name "*-config"
14 14
15BB_HASHFILENAME = "${SSTATE_PKGNAME}" 15BB_HASHFILENAME = "${SSTATE_PKGNAME}"
16 16
17SSTATE_MANMACH ?= "${SSTATE_PKGARCH}"
18
17python () { 19python () {
18 if bb.data.inherits_class('native', d): 20 if bb.data.inherits_class('native', d):
19 bb.data.setVar('SSTATE_PKGARCH', bb.data.getVar('BUILD_ARCH', d), d) 21 bb.data.setVar('SSTATE_PKGARCH', bb.data.getVar('BUILD_ARCH', d), d)
20 elif bb.data.inherits_class('cross', d) or bb.data.inherits_class('crosssdk', d): 22 elif bb.data.inherits_class('cross', d):
23 bb.data.setVar('SSTATE_PKGARCH', bb.data.expand("${BUILD_ARCH}_${BASE_PACKAGE_ARCH}", d), d)
24 bb.data.setVar('SSTATE_MANMACH', bb.data.expand("${BUILD_ARCH}_${MACHINE}", d), d)
25 elif bb.data.inherits_class('crosssdk', d):
21 bb.data.setVar('SSTATE_PKGARCH', bb.data.expand("${BUILD_ARCH}_${BASE_PACKAGE_ARCH}", d), d) 26 bb.data.setVar('SSTATE_PKGARCH', bb.data.expand("${BUILD_ARCH}_${BASE_PACKAGE_ARCH}", d), d)
22 elif bb.data.inherits_class('nativesdk', d): 27 elif bb.data.inherits_class('nativesdk', d):
23 bb.data.setVar('SSTATE_PKGARCH', bb.data.expand("${SDK_ARCH}", d), d) 28 bb.data.setVar('SSTATE_PKGARCH', bb.data.expand("${SDK_ARCH}", d), d)
24 elif bb.data.inherits_class('cross-canadian', d): 29 elif bb.data.inherits_class('cross-canadian', d):
25 bb.data.setVar('SSTATE_PKGARCH', bb.data.expand("${SDK_ARCH}_${BASE_PACKAGE_ARCH}", d), d) 30 bb.data.setVar('SSTATE_PKGARCH', bb.data.expand("${SDK_ARCH}_${BASE_PACKAGE_ARCH}", d), d)
31 else:
32 bb.data.setVar('SSTATE_MANMACH', bb.data.expand("${MACHINE}", d), d)
26 33
27 # These classes encode staging paths into their scripts data so can only be 34 # These classes encode staging paths into their scripts data so can only be
28 # reused if we manipulate the paths 35 # reused if we manipulate the paths
@@ -147,10 +154,14 @@ def sstate_installpkg(ss, d):
147 fixmefn = sstateinst + "fixmepath" 154 fixmefn = sstateinst + "fixmepath"
148 if os.path.isfile(fixmefn): 155 if os.path.isfile(fixmefn):
149 staging = bb.data.getVar('STAGING_DIR', d, True) 156 staging = bb.data.getVar('STAGING_DIR', d, True)
157 staging_target = bb.data.getVar('STAGING_DIR_TARGET', d, True)
158 staging_host = bb.data.getVar('STAGING_DIR_HOST', d, True)
150 fixmefd = open(fixmefn, "r") 159 fixmefd = open(fixmefn, "r")
151 fixmefiles = fixmefd.readlines() 160 fixmefiles = fixmefd.readlines()
152 fixmefd.close() 161 fixmefd.close()
153 for file in fixmefiles: 162 for file in fixmefiles:
163 os.system("sed -i -e s:FIXMESTAGINGDIRTARGET:%s:g %s" % (staging_target, sstateinst + file))
164 os.system("sed -i -e s:FIXMESTAGINGDIRHOST:%s:g %s" % (staging_host, sstateinst + file))
154 os.system("sed -i -e s:FIXMESTAGINGDIR:%s:g %s" % (staging, sstateinst + file)) 165 os.system("sed -i -e s:FIXMESTAGINGDIR:%s:g %s" % (staging, sstateinst + file))
155 166
156 for state in ss['dirs']: 167 for state in ss['dirs']:
@@ -248,6 +259,35 @@ python sstate_cleanall() {
248 sstate_clean(shared_state, d) 259 sstate_clean(shared_state, d)
249} 260}
250 261
262def sstate_hardcode_path(d):
263 # Need to remove hardcoded paths and fix these when we install the
264 # staging packages.
265 sstate_scan_cmd = bb.data.getVar('SSTATE_SCAN_CMD', d, True)
266 p = os.popen("%s" % sstate_scan_cmd)
267 file_list = p.read()
268
269 if file_list == "":
270 p.close()
271 return
272
273 staging = bb.data.getVar('STAGING_DIR', d, True)
274 staging_target = bb.data.getVar('STAGING_DIR_TARGET', d, True)
275 staging_host = bb.data.getVar('STAGING_DIR_HOST', d, True)
276 sstate_builddir = bb.data.getVar('SSTATE_BUILDDIR', d, True)
277
278 for i in file_list.split('\n'):
279 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):
280 cmd = "sed -i -e s:%s:FIXMESTAGINGDIR:g %s" % (staging, i)
281 elif bb.data.inherits_class('cross', d):
282 cmd = "sed -i -e s:%s:FIXMESTAGINGDIRTARGET:g %s \
283 sed -i -e s:%s:FIXMESTAGINGDIR:g %s" % (staging_target, i, staging, i)
284 else:
285 cmd = "sed -i -e s:%s:FIXMESTAGINGDIRHOST:g %s" % (staging_host, i)
286
287 os.system(cmd)
288 os.system("echo %s | sed -e 's:%s::' >> %sfixmepath" % (i, sstate_builddir, sstate_builddir))
289 p.close()
290
251def sstate_package(ss, d): 291def sstate_package(ss, d):
252 import oe.path 292 import oe.path
253 293
@@ -273,6 +313,7 @@ def sstate_package(ss, d):
273 313
274 bb.data.setVar('SSTATE_BUILDDIR', sstatebuild, d) 314 bb.data.setVar('SSTATE_BUILDDIR', sstatebuild, d)
275 bb.data.setVar('SSTATE_PKG', sstatepkg, d) 315 bb.data.setVar('SSTATE_PKG', sstatepkg, d)
316 sstate_hardcode_path(d)
276 bb.build.exec_func('sstate_create_package', d) 317 bb.build.exec_func('sstate_create_package', d)
277 318
278 bb.siggen.dump_this_task(sstatepkg + ".siginfo", d) 319 bb.siggen.dump_this_task(sstatepkg + ".siginfo", d)
@@ -337,13 +378,6 @@ python sstate_task_postfunc () {
337# set as SSTATE_BUILDDIR 378# set as SSTATE_BUILDDIR
338# 379#
339sstate_create_package () { 380sstate_create_package () {
340 # Need to remove hardcoded paths and fix these when we install the
341 # staging packages.
342 for i in `${SSTATE_SCAN_CMD}` ; do \
343 sed -i -e s:${STAGING_DIR}:FIXMESTAGINGDIR:g $i
344 echo $i | sed -e 's:${SSTATE_BUILDDIR}::' >> ${SSTATE_BUILDDIR}fixmepath
345 done
346
347 cd ${SSTATE_BUILDDIR} 381 cd ${SSTATE_BUILDDIR}
348 tar -cvzf ${SSTATE_PKG} * 382 tar -cvzf ${SSTATE_PKG} *
349 383