1
0
mirror of https://git.yoctoproject.org/poky synced 2026-05-08 05:09:24 +00:00

populate_sdk_ext: Introduce mechanism to keep nativesdk* sstate in esdk

When doing a devtool build-sdk from within an esdk all nativesdk
components would be rebuilt. This patch introduces SDK_INCLUDE_NATIVESDK
flag to toggle the inclusion of nativesdk packages when creating the
esdk sstate

Currently locked-sigs.inc is generated during do_sdk_depends which
doesn't pull in nativesdk packages. Generating another locked-sigs.inc
in do_populate_sdk_ext and pruning it to only nativesdk* packages by
using a modified version of the already existing function
prune_locked_sigs and merging it with the current locked-sigs.inc
Also adding SDK_INCLUDE_NATIVESDK tasklistfn to the logic surrounding
setting tasklist file to not prune esdk sstate during creation

[YOCTO #13261]

(From OE-Core rev: d046afd12e1c209b29dca6ba402b9aa14680c5ce)

Signed-off-by: Jaewon Lee <jaewon.lee@xilinx.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Jaewon Lee
2019-09-17 17:37:33 -07:00
committed by Richard Purdie
parent b418ececee
commit 88db9e41c1
2 changed files with 33 additions and 3 deletions
+27 -1
View File
@@ -20,6 +20,7 @@ SDK_EXT_task-populate-sdk-ext = "-ext"
SDK_EXT_TYPE ?= "full"
SDK_INCLUDE_PKGDATA ?= "0"
SDK_INCLUDE_TOOLCHAIN ?= "${@'1' if d.getVar('SDK_EXT_TYPE') == 'full' else '0'}"
SDK_INCLUDE_NATIVESDK ?= "0"
SDK_RECRDEP_TASKS ?= ""
@@ -401,9 +402,27 @@ python copy_buildsystem () {
excluded_targets = get_sdk_install_targets(d, images_only=True)
sigfile = d.getVar('WORKDIR') + '/locked-sigs.inc'
lockedsigs_pruned = baseoutpath + '/conf/locked-sigs.inc'
#nativesdk-only sigfile to merge into locked-sigs.inc
sdk_include_nativesdk = (d.getVar("SDK_INCLUDE_NATIVESDK") == '1')
nativesigfile = d.getVar('WORKDIR') + '/locked-sigs_nativesdk.inc'
nativesigfile_pruned = d.getVar('WORKDIR') + '/locked-sigs_nativesdk_pruned.inc'
if sdk_include_nativesdk:
oe.copy_buildsystem.prune_lockedsigs([],
excluded_targets.split(),
nativesigfile,
True,
nativesigfile_pruned)
oe.copy_buildsystem.merge_lockedsigs([],
sigfile,
nativesigfile_pruned,
sigfile)
oe.copy_buildsystem.prune_lockedsigs([],
excluded_targets.split(),
sigfile,
False,
lockedsigs_pruned)
sstate_out = baseoutpath + '/sstate-cache'
@@ -414,7 +433,7 @@ python copy_buildsystem () {
sdk_include_toolchain = (d.getVar('SDK_INCLUDE_TOOLCHAIN') == '1')
sdk_ext_type = d.getVar('SDK_EXT_TYPE')
if sdk_ext_type != 'minimal' or sdk_include_toolchain or derivative:
if (sdk_ext_type != 'minimal' or sdk_include_toolchain or derivative) and not sdk_include_nativesdk:
# Create the filtered task list used to generate the sstate cache shipped with the SDK
tasklistfn = d.getVar('WORKDIR') + '/tasklist.txt'
create_filtered_tasklist(d, baseoutpath, tasklistfn, conf_initpath)
@@ -657,9 +676,16 @@ fakeroot python do_populate_sdk_ext() {
d.setVar('SDKDEPLOYDIR', '${SDKEXTDEPLOYDIR}')
# ESDKs have a libc from the buildtools so ensure we don't ship linguas twice
d.delVar('SDKIMAGE_LINGUAS')
if d.getVar("SDK_INCLUDE_NATIVESDK") == '1':
generate_nativesdk_lockedsigs(d)
populate_sdk_common(d)
}
def generate_nativesdk_lockedsigs(d):
import oe.copy_buildsystem
sigfile = d.getVar('WORKDIR') + '/locked-sigs_nativesdk.inc'
oe.copy_buildsystem.generate_locked_sigs(sigfile, d)
def get_ext_sdk_depends(d):
# Note: the deps varflag is a list not a string, so we need to specify expand=False
deps = d.getVarFlag('do_image_complete', 'deps', False)
+6 -2
View File
@@ -177,7 +177,7 @@ def generate_locked_sigs(sigfile, d):
tasks = ['%s:%s' % (v[2], v[1]) for v in depd.values()]
bb.parse.siggen.dump_lockedsigs(sigfile, tasks)
def prune_lockedsigs(excluded_tasks, excluded_targets, lockedsigs, pruned_output):
def prune_lockedsigs(excluded_tasks, excluded_targets, lockedsigs, onlynative, pruned_output):
with open(lockedsigs, 'r') as infile:
bb.utils.mkdirhier(os.path.dirname(pruned_output))
with open(pruned_output, 'w') as f:
@@ -187,7 +187,11 @@ def prune_lockedsigs(excluded_tasks, excluded_targets, lockedsigs, pruned_output
if line.endswith('\\\n'):
splitval = line.strip().split(':')
if not splitval[1] in excluded_tasks and not splitval[0] in excluded_targets:
f.write(line)
if onlynative:
if 'nativesdk' in splitval[0]:
f.write(line)
else:
f.write(line)
else:
f.write(line)
invalue = False