diff options
| -rw-r--r-- | meta/classes/populate_sdk_ext.bbclass | 24 | ||||
| -rw-r--r-- | meta/lib/oe/copy_buildsystem.py | 58 | ||||
| -rw-r--r-- | meta/recipes-core/meta/meta-world-pkgdata.bb | 50 | ||||
| -rw-r--r-- | scripts/lib/devtool/sdk.py | 6 |
4 files changed, 131 insertions, 7 deletions
diff --git a/meta/classes/populate_sdk_ext.bbclass b/meta/classes/populate_sdk_ext.bbclass index e5e55b3606..ebb57bba6b 100644 --- a/meta/classes/populate_sdk_ext.bbclass +++ b/meta/classes/populate_sdk_ext.bbclass | |||
| @@ -24,6 +24,7 @@ SDK_INHERIT_BLACKLIST ?= "buildhistory icecc" | |||
| 24 | SDK_UPDATE_URL ?= "" | 24 | SDK_UPDATE_URL ?= "" |
| 25 | 25 | ||
| 26 | SDK_TARGETS ?= "${PN}" | 26 | SDK_TARGETS ?= "${PN}" |
| 27 | SDK_INSTALL_TARGETS = "${SDK_TARGETS} ${@'meta-world-pkgdata:do_allpackagedata' if d.getVar('SDK_INCLUDE_PKGDATA', True) == '1' else ''}" | ||
| 27 | OE_INIT_ENV_SCRIPT ?= "oe-init-build-env" | 28 | OE_INIT_ENV_SCRIPT ?= "oe-init-build-env" |
| 28 | 29 | ||
| 29 | # The files from COREBASE that you want preserved in the COREBASE copied | 30 | # The files from COREBASE that you want preserved in the COREBASE copied |
| @@ -45,6 +46,7 @@ SDK_TITLE_task-populate-sdk-ext = "${@d.getVar('DISTRO_NAME', True) or d.getVar( | |||
| 45 | 46 | ||
| 46 | python copy_buildsystem () { | 47 | python copy_buildsystem () { |
| 47 | import re | 48 | import re |
| 49 | import shutil | ||
| 48 | import oe.copy_buildsystem | 50 | import oe.copy_buildsystem |
| 49 | 51 | ||
| 50 | oe_init_env_script = d.getVar('OE_INIT_ENV_SCRIPT', True) | 52 | oe_init_env_script = d.getVar('OE_INIT_ENV_SCRIPT', True) |
| @@ -91,6 +93,7 @@ python copy_buildsystem () { | |||
| 91 | config.set('General', 'core_meta_subdir', core_meta_subdir) | 93 | config.set('General', 'core_meta_subdir', core_meta_subdir) |
| 92 | config.add_section('SDK') | 94 | config.add_section('SDK') |
| 93 | config.set('SDK', 'sdk_targets', d.getVar('SDK_TARGETS', True)) | 95 | config.set('SDK', 'sdk_targets', d.getVar('SDK_TARGETS', True)) |
| 96 | config.set('SDK', 'sdk_update_targets', d.getVar('SDK_INSTALL_TARGETS', True)) | ||
| 94 | updateurl = d.getVar('SDK_UPDATE_URL', True) | 97 | updateurl = d.getVar('SDK_UPDATE_URL', True) |
| 95 | if updateurl: | 98 | if updateurl: |
| 96 | config.set('SDK', 'updateserver', updateurl) | 99 | config.set('SDK', 'updateserver', updateurl) |
| @@ -199,6 +202,22 @@ python copy_buildsystem () { | |||
| 199 | d.getVar('SSTATE_DIR', True), | 202 | d.getVar('SSTATE_DIR', True), |
| 200 | sstate_out, d, | 203 | sstate_out, d, |
| 201 | fixedlsbstring) | 204 | fixedlsbstring) |
| 205 | |||
| 206 | # Add packagedata if enabled | ||
| 207 | if d.getVar('SDK_INCLUDE_PKGDATA', True) == '1': | ||
| 208 | lockedsigs_base = d.getVar('WORKDIR', True) + '/locked-sigs-base.inc' | ||
| 209 | lockedsigs_copy = d.getVar('WORKDIR', True) + '/locked-sigs-copy.inc' | ||
| 210 | shutil.move(lockedsigs_pruned, lockedsigs_base) | ||
| 211 | oe.copy_buildsystem.merge_lockedsigs(['do_packagedata'], | ||
| 212 | lockedsigs_base, | ||
| 213 | d.getVar('STAGING_DIR_HOST', True) + '/world-pkgdata/locked-sigs-pkgdata.inc', | ||
| 214 | lockedsigs_pruned, | ||
| 215 | lockedsigs_copy) | ||
| 216 | oe.copy_buildsystem.create_locked_sstate_cache(lockedsigs_copy, | ||
| 217 | d.getVar('SSTATE_DIR', True), | ||
| 218 | sstate_out, d, | ||
| 219 | fixedlsbstring) | ||
| 220 | |||
| 202 | # We don't need sstate do_package files | 221 | # We don't need sstate do_package files |
| 203 | for root, dirs, files in os.walk(sstate_out): | 222 | for root, dirs, files in os.walk(sstate_out): |
| 204 | for name in files: | 223 | for name in files: |
| @@ -268,7 +287,7 @@ sdk_ext_postinst() { | |||
| 268 | # current working directory when first ran, nor will it set $1 when | 287 | # current working directory when first ran, nor will it set $1 when |
| 269 | # sourcing a script. That is why this has to look so ugly. | 288 | # sourcing a script. That is why this has to look so ugly. |
| 270 | LOGFILE="$target_sdk_dir/preparing_build_system.log" | 289 | LOGFILE="$target_sdk_dir/preparing_build_system.log" |
| 271 | sh -c ". buildtools/environment-setup* > $LOGFILE && cd $target_sdk_dir/`dirname ${oe_init_build_env_path}` && set $target_sdk_dir && . $target_sdk_dir/${oe_init_build_env_path} $target_sdk_dir >> $LOGFILE && python $target_sdk_dir/ext-sdk-prepare.py '${SDK_TARGETS}' >> $LOGFILE 2>&1" || { echo "ERROR: SDK preparation failed: see $LOGFILE"; echo "printf 'ERROR: this SDK was not fully installed and needs reinstalling\n'" >> $env_setup_script ; exit 1 ; } | 290 | sh -c ". buildtools/environment-setup* > $LOGFILE && cd $target_sdk_dir/`dirname ${oe_init_build_env_path}` && set $target_sdk_dir && . $target_sdk_dir/${oe_init_build_env_path} $target_sdk_dir >> $LOGFILE && python $target_sdk_dir/ext-sdk-prepare.py '${SDK_INSTALL_TARGETS}' >> $LOGFILE 2>&1" || { echo "ERROR: SDK preparation failed: see $LOGFILE"; echo "printf 'ERROR: this SDK was not fully installed and needs reinstalling\n'" >> $env_setup_script ; exit 1 ; } |
| 272 | fi | 291 | fi |
| 273 | echo done | 292 | echo done |
| 274 | } | 293 | } |
| @@ -314,7 +333,8 @@ def get_sdk_ext_rdepends(d): | |||
| 314 | do_populate_sdk_ext[dirs] = "${@d.getVarFlag('do_populate_sdk', 'dirs', False)}" | 333 | do_populate_sdk_ext[dirs] = "${@d.getVarFlag('do_populate_sdk', 'dirs', False)}" |
| 315 | 334 | ||
| 316 | do_populate_sdk_ext[depends] = "${@d.getVarFlag('do_populate_sdk', 'depends', False)} \ | 335 | do_populate_sdk_ext[depends] = "${@d.getVarFlag('do_populate_sdk', 'depends', False)} \ |
| 317 | buildtools-tarball:do_populate_sdk uninative-tarball:do_populate_sdk" | 336 | buildtools-tarball:do_populate_sdk uninative-tarball:do_populate_sdk \ |
| 337 | ${@'meta-world-pkgdata:do_collect_packagedata' if d.getVar('SDK_INCLUDE_PKGDATA', True) == '1' else ''}" | ||
| 318 | 338 | ||
| 319 | do_populate_sdk_ext[rdepends] += "${@' '.join([x + ':do_build' for x in d.getVar('SDK_TARGETS', True).split()])}" | 339 | do_populate_sdk_ext[rdepends] += "${@' '.join([x + ':do_build' for x in d.getVar('SDK_TARGETS', True).split()])}" |
| 320 | 340 | ||
diff --git a/meta/lib/oe/copy_buildsystem.py b/meta/lib/oe/copy_buildsystem.py index a5ca3df320..64755107d8 100644 --- a/meta/lib/oe/copy_buildsystem.py +++ b/meta/lib/oe/copy_buildsystem.py | |||
| @@ -93,10 +93,64 @@ def prune_lockedsigs(excluded_tasks, excluded_targets, lockedsigs, pruned_output | |||
| 93 | invalue = True | 93 | invalue = True |
| 94 | f.write(line) | 94 | f.write(line) |
| 95 | 95 | ||
| 96 | def merge_lockedsigs(copy_tasks, lockedsigs_main, lockedsigs_extra, merged_output, copy_output): | ||
| 97 | merged = {} | ||
| 98 | arch_order = [] | ||
| 99 | with open(lockedsigs_main, 'r') as f: | ||
| 100 | invalue = None | ||
| 101 | for line in f: | ||
| 102 | if invalue: | ||
| 103 | if line.endswith('\\\n'): | ||
| 104 | merged[invalue].append(line) | ||
| 105 | else: | ||
| 106 | invalue = None | ||
| 107 | elif line.startswith('SIGGEN_LOCKEDSIGS_t-'): | ||
| 108 | invalue = line[18:].split('=', 1)[0].rstrip() | ||
| 109 | merged[invalue] = [] | ||
| 110 | arch_order.append(invalue) | ||
| 111 | |||
| 112 | with open(lockedsigs_extra, 'r') as f: | ||
| 113 | invalue = None | ||
| 114 | tocopy = {} | ||
| 115 | for line in f: | ||
| 116 | if invalue: | ||
| 117 | if line.endswith('\\\n'): | ||
| 118 | if not line in merged[invalue]: | ||
| 119 | target, task = line.strip().split(':')[:2] | ||
| 120 | if task in copy_tasks: | ||
| 121 | tocopy[invalue].append(line) | ||
| 122 | merged[invalue].append(line) | ||
| 123 | else: | ||
| 124 | invalue = None | ||
| 125 | elif line.startswith('SIGGEN_LOCKEDSIGS_t-'): | ||
| 126 | invalue = line[18:].split('=', 1)[0].rstrip() | ||
| 127 | if not invalue in merged: | ||
| 128 | merged[invalue] = [] | ||
| 129 | arch_order.append(invalue) | ||
| 130 | tocopy[invalue] = [] | ||
| 131 | |||
| 132 | def write_sigs_file(fn, types, sigs): | ||
| 133 | fulltypes = [] | ||
| 134 | bb.utils.mkdirhier(os.path.dirname(fn)) | ||
| 135 | with open(fn, 'w') as f: | ||
| 136 | for typename in types: | ||
| 137 | lines = sigs[typename] | ||
| 138 | if lines: | ||
| 139 | f.write('SIGGEN_LOCKEDSIGS_%s = "\\\n' % typename) | ||
| 140 | for line in lines: | ||
| 141 | f.write(line) | ||
| 142 | f.write(' "\n') | ||
| 143 | fulltypes.append(typename) | ||
| 144 | f.write('SIGGEN_LOCKEDSIGS_TYPES = "%s"\n' % ' '.join(fulltypes)) | ||
| 145 | |||
| 146 | write_sigs_file(copy_output, tocopy.keys(), tocopy) | ||
| 147 | write_sigs_file(merged_output, arch_order, merged) | ||
| 148 | |||
| 96 | def create_locked_sstate_cache(lockedsigs, input_sstate_cache, output_sstate_cache, d, fixedlsbstring=""): | 149 | def create_locked_sstate_cache(lockedsigs, input_sstate_cache, output_sstate_cache, d, fixedlsbstring=""): |
| 97 | bb.note('Generating sstate-cache...') | 150 | bb.note('Generating sstate-cache...') |
| 98 | 151 | ||
| 99 | bb.process.run("gen-lockedsig-cache %s %s %s" % (lockedsigs, input_sstate_cache, output_sstate_cache)) | 152 | bb.process.run("gen-lockedsig-cache %s %s %s" % (lockedsigs, input_sstate_cache, output_sstate_cache)) |
| 100 | if fixedlsbstring: | 153 | if fixedlsbstring: |
| 101 | os.rename(output_sstate_cache + '/' + d.getVar('NATIVELSBSTRING', True), | 154 | nativedir = output_sstate_cache + '/' + d.getVar('NATIVELSBSTRING', True) |
| 102 | output_sstate_cache + '/' + fixedlsbstring) | 155 | if os.path.isdir(nativedir): |
| 156 | os.rename(nativedir, output_sstate_cache + '/' + fixedlsbstring) | ||
diff --git a/meta/recipes-core/meta/meta-world-pkgdata.bb b/meta/recipes-core/meta/meta-world-pkgdata.bb new file mode 100644 index 0000000000..48a9027215 --- /dev/null +++ b/meta/recipes-core/meta/meta-world-pkgdata.bb | |||
| @@ -0,0 +1,50 @@ | |||
| 1 | SUMMARY = "Pulls in pkgdata for world" | ||
| 2 | LICENSE = "MIT" | ||
| 3 | INHIBIT_DEFAULT_DEPS = "1" | ||
| 4 | |||
| 5 | addtask do_allpackagedata before do_build | ||
| 6 | do_allpackagedata() { | ||
| 7 | : | ||
| 8 | } | ||
| 9 | do_allpackagedata[recrdeptask] = "do_packagedata do_allpackagedata" | ||
| 10 | do_allpackagedata[noexec] = "1" | ||
| 11 | |||
| 12 | WORLD_PKGDATADIR = "${D}/world-pkgdata" | ||
| 13 | |||
| 14 | addtask do_collect_packagedata after do_allpackagedata | ||
| 15 | SSTATETASKS += "do_collect_packagedata" | ||
| 16 | do_collect_packagedata[sstate-inputdirs] = "${WORLD_PKGDATADIR}" | ||
| 17 | do_collect_packagedata[sstate-outputdirs] = "${STAGING_DIR_HOST}/world-pkgdata" | ||
| 18 | |||
| 19 | python do_collect_packagedata() { | ||
| 20 | import oe.copy_buildsystem | ||
| 21 | outdir = os.path.join(d.getVar('WORLD_PKGDATADIR', True)) | ||
| 22 | bb.utils.mkdirhier(outdir) | ||
| 23 | sigfile = os.path.join(outdir, 'locked-sigs-pkgdata.inc') | ||
| 24 | oe.copy_buildsystem.generate_locked_sigs(sigfile, d) | ||
| 25 | } | ||
| 26 | |||
| 27 | do_fetch[noexec] = "1" | ||
| 28 | do_unpack[noexec] = "1" | ||
| 29 | do_patch[noexec] = "1" | ||
| 30 | do_configure[noexec] = "1" | ||
| 31 | do_compile[noexec] = "1" | ||
| 32 | do_install[noexec] = "1" | ||
| 33 | |||
| 34 | do_configure[deptask] = "" | ||
| 35 | |||
| 36 | WORLD_PKGDATA_EXCLUDE ?= "adt-installer" | ||
| 37 | |||
| 38 | python calculate_extra_depends() { | ||
| 39 | exclude = '${WORLD_PKGDATA_EXCLUDE}'.split() | ||
| 40 | for p in world_target: | ||
| 41 | if p == self_pn: | ||
| 42 | continue | ||
| 43 | |||
| 44 | if p in exclude: | ||
| 45 | continue | ||
| 46 | |||
| 47 | deps.append(p) | ||
| 48 | } | ||
| 49 | |||
| 50 | PACKAGES = "" | ||
diff --git a/scripts/lib/devtool/sdk.py b/scripts/lib/devtool/sdk.py index 0872df6bd1..68139aaf3c 100644 --- a/scripts/lib/devtool/sdk.py +++ b/scripts/lib/devtool/sdk.py | |||
| @@ -175,12 +175,12 @@ def sdk_update(args, config, basepath, workspace): | |||
| 175 | 175 | ||
| 176 | if not args.skip_prepare: | 176 | if not args.skip_prepare: |
| 177 | # Run bitbake command for the whole SDK | 177 | # Run bitbake command for the whole SDK |
| 178 | sdk_targets = config.get('SDK', 'sdk_targets') | 178 | sdk_update_targets = config.get('SDK', 'sdk_update_targets', config.get('SDK', 'sdk_targets')) |
| 179 | logger.info("Preparing build system... (This may take some time.)") | 179 | logger.info("Preparing build system... (This may take some time.)") |
| 180 | try: | 180 | try: |
| 181 | exec_build_env_command(config.init_path, basepath, 'bitbake %s --setscene-only' % sdk_targets) | 181 | exec_build_env_command(config.init_path, basepath, 'bitbake %s --setscene-only' % sdk_update_targets) |
| 182 | except: | 182 | except: |
| 183 | logger.error('bitbake %s failed' % sdk_targets) | 183 | logger.error('bitbake %s failed' % sdk_update_targets) |
| 184 | return -1 | 184 | return -1 |
| 185 | return 0 | 185 | return 0 |
| 186 | 186 | ||
