bitbake/sstate: Implement a lookup function to speed up setscene processing
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
This commit is contained in:
parent
2d93cb0a0d
commit
35d095c282
|
@ -453,6 +453,8 @@ class Cache:
|
||||||
if not self.getVar('BROKEN', file_name, True) and not self.getVar('EXCLUDE_FROM_WORLD', file_name, True):
|
if not self.getVar('BROKEN', file_name, True) and not self.getVar('EXCLUDE_FROM_WORLD', file_name, True):
|
||||||
cacheData.possible_world.append(file_name)
|
cacheData.possible_world.append(file_name)
|
||||||
|
|
||||||
|
cacheData.hashfn[file_name] = self.getVar('BB_HASHFILENAME', file_name, True)
|
||||||
|
|
||||||
# Touch this to make sure its in the cache
|
# Touch this to make sure its in the cache
|
||||||
self.getVar('__BB_DONT_CACHE', file_name, True)
|
self.getVar('__BB_DONT_CACHE', file_name, True)
|
||||||
self.getVar('__VARIANTS', file_name, True)
|
self.getVar('__VARIANTS', file_name, True)
|
||||||
|
@ -545,6 +547,7 @@ class CacheData:
|
||||||
self.preferred = {}
|
self.preferred = {}
|
||||||
self.tasks = {}
|
self.tasks = {}
|
||||||
self.basetaskhash = {}
|
self.basetaskhash = {}
|
||||||
|
self.hashfn = {}
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Indirect Cache variables
|
Indirect Cache variables
|
||||||
|
|
|
@ -757,7 +757,8 @@ class RunQueue:
|
||||||
self.cfgData = cfgData
|
self.cfgData = cfgData
|
||||||
self.rqdata = RunQueueData(self, cooker, cfgData, dataCache, taskData, targets)
|
self.rqdata = RunQueueData(self, cooker, cfgData, dataCache, taskData, targets)
|
||||||
|
|
||||||
self.stamppolicy = bb.data.getVar("BB_STAMP_POLICY", cfgData, 1) or "perfile"
|
self.stamppolicy = bb.data.getVar("BB_STAMP_POLICY", cfgData, True) or "perfile"
|
||||||
|
self.hashvalidate = bb.data.getVar("BB_HASHCHECK_FUNCTION", cfgData, True) or None
|
||||||
|
|
||||||
self.state = runQueuePrepare
|
self.state = runQueuePrepare
|
||||||
|
|
||||||
|
@ -1326,6 +1327,29 @@ class RunQueueExecuteScenequeue(RunQueueExecute):
|
||||||
if len(self.sq_revdeps[task]) == 0:
|
if len(self.sq_revdeps[task]) == 0:
|
||||||
self.runq_buildable[task] = 1
|
self.runq_buildable[task] = 1
|
||||||
|
|
||||||
|
if self.rq.hashvalidate:
|
||||||
|
sq_hash = []
|
||||||
|
sq_hashfn = []
|
||||||
|
sq_fn = []
|
||||||
|
sq_task = []
|
||||||
|
for task in range(len(self.sq_revdeps)):
|
||||||
|
realtask = self.rqdata.runq_setscene[task]
|
||||||
|
fn = self.rqdata.taskData.fn_index[self.rqdata.runq_fnid[realtask]]
|
||||||
|
sq_fn.append(fn)
|
||||||
|
sq_hashfn.append(self.rqdata.dataCache.hashfn[fn])
|
||||||
|
sq_hash.append(self.rqdata.runq_hash[realtask])
|
||||||
|
sq_task.append(self.rqdata.runq_task[realtask])
|
||||||
|
|
||||||
|
call = self.rq.hashvalidate + "(sq_fn, sq_task, sq_hash, sq_hashfn, d)"
|
||||||
|
locs = { "sq_fn" : sq_fn, "sq_task" : sq_task, "sq_hash" : sq_hash, "sq_hashfn" : sq_hashfn, "d" : self.cooker.configuration.data }
|
||||||
|
valid = bb.utils.better_eval(call, locs)
|
||||||
|
for task in range(len(self.sq_revdeps)):
|
||||||
|
if task not in valid:
|
||||||
|
bb.msg.debug(2, bb.msg.domain.RunQueue, "No package found so skipping setscene task %s" % (self.rqdata.get_user_idstring(task)))
|
||||||
|
self.task_failoutright(task)
|
||||||
|
|
||||||
|
#print(str(valid))
|
||||||
|
|
||||||
bb.msg.note(1, bb.msg.domain.RunQueue, "Executing setscene Tasks")
|
bb.msg.note(1, bb.msg.domain.RunQueue, "Executing setscene Tasks")
|
||||||
|
|
||||||
self.rq.state = runQueueSceneRun
|
self.rq.state = runQueueSceneRun
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
DEPLOYDIR = "${WORKDIR}/deploy-${PN}"
|
DEPLOYDIR = "${WORKDIR}/deploy-${PN}"
|
||||||
SSTATETASKS += "do_deploy"
|
SSTATETASKS += "do_deploy"
|
||||||
do_deploy[sstate-name] = "deploy-${PN}"
|
do_deploy[sstate-name] = "deploy"
|
||||||
do_deploy[sstate-inputdirs] = "${DEPLOYDIR}"
|
do_deploy[sstate-inputdirs] = "${DEPLOYDIR}"
|
||||||
do_deploy[sstate-outputdirs] = "${DEPLOY_DIR_IMAGE}"
|
do_deploy[sstate-outputdirs] = "${DEPLOY_DIR_IMAGE}"
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,8 @@ SSTATE_PKG = "${SSTATE_DIR}/${SSTATE_PKGNAME}"
|
||||||
|
|
||||||
SSTATE_SCAN_CMD ?= "find ${SSTATE_BUILDDIR} \( -name "*.la" -o -name "*-config" \) -type f"
|
SSTATE_SCAN_CMD ?= "find ${SSTATE_BUILDDIR} \( -name "*.la" -o -name "*-config" \) -type f"
|
||||||
|
|
||||||
|
BB_HASHFILENAME = "${SSTATE_PKGNAME}"
|
||||||
|
|
||||||
python () {
|
python () {
|
||||||
if bb.data.inherits_class('native', d):
|
if bb.data.inherits_class('native', d):
|
||||||
bb.data.setVar('SSTATE_PKGARCH', bb.data.getVar('BUILD_ARCH', d), d)
|
bb.data.setVar('SSTATE_PKGARCH', bb.data.getVar('BUILD_ARCH', d), d)
|
||||||
|
@ -313,3 +315,27 @@ sstate_unpack_package () {
|
||||||
cd ${SSTATE_INSTDIR}
|
cd ${SSTATE_INSTDIR}
|
||||||
tar -xvzf ${SSTATE_PKG}
|
tar -xvzf ${SSTATE_PKG}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BB_HASHCHECK_FUNCTION = "sstate_checkhashes"
|
||||||
|
|
||||||
|
def sstate_checkhashes(sq_fn, sq_task, sq_hash, sq_hashfn, d):
|
||||||
|
ret = []
|
||||||
|
# This needs to go away, FIXME
|
||||||
|
mapping = {
|
||||||
|
"do_populate_sysroot" : "populate-sysroot",
|
||||||
|
"do_package_write_ipk" : "deploy-ipk",
|
||||||
|
"do_package_write_deb" : "deploy-deb",
|
||||||
|
"do_package_write_rpm" : "deploy-rpm",
|
||||||
|
"do_package" : "package",
|
||||||
|
"do_deploy" : "deploy",
|
||||||
|
}
|
||||||
|
|
||||||
|
for task in range(len(sq_fn)):
|
||||||
|
sstatefile = bb.data.expand("${SSTATE_DIR}/" + sq_hashfn[task] + "_" + mapping[sq_task[task]] + ".tgz", d)
|
||||||
|
sstatefile= sstatefile.replace("${BB_TASKHASH}", sq_hash[task])
|
||||||
|
#print("Checking for %s" % sstatefile)
|
||||||
|
if os.path.exists(sstatefile):
|
||||||
|
ret.append(task)
|
||||||
|
|
||||||
|
return ret
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue