diff options
Diffstat (limited to 'yocto-poky/meta/classes/populate_sdk_ext.bbclass')
-rw-r--r-- | yocto-poky/meta/classes/populate_sdk_ext.bbclass | 54 |
1 files changed, 34 insertions, 20 deletions
diff --git a/yocto-poky/meta/classes/populate_sdk_ext.bbclass b/yocto-poky/meta/classes/populate_sdk_ext.bbclass index 4ef8838e3..b9808bb8e 100644 --- a/yocto-poky/meta/classes/populate_sdk_ext.bbclass +++ b/yocto-poky/meta/classes/populate_sdk_ext.bbclass @@ -51,7 +51,7 @@ python copy_buildsystem () { core_meta_subdir = '' # Copy in all metadata layers + bitbake (as repositories) - buildsystem = oe.copy_buildsystem.BuildSystem(d) + buildsystem = oe.copy_buildsystem.BuildSystem('extensible SDK', d) baseoutpath = d.getVar('SDK_OUTPUT', True) + '/' + d.getVar('SDKPATH', True) layers_copied = buildsystem.copy_bitbake_and_layers(baseoutpath + '/layers') @@ -155,10 +155,16 @@ python copy_buildsystem () { f.write('NATIVELSBSTRING_forcevariable = "%s"\n\n' % fixedlsbstring) # Ensure locked sstate cache objects are re-used without error - f.write('SIGGEN_LOCKEDSIGS_CHECK_LEVEL = "warn"\n\n') + f.write('SIGGEN_LOCKEDSIGS_CHECK_LEVEL = "none"\n\n') + + # If you define a sdk_extraconf() function then it can contain additional config + extraconf = (d.getVar('sdk_extraconf', True) or '').strip() + if extraconf: + # Strip off any leading / trailing spaces + for line in extraconf.splitlines(): + f.write(line.strip() + '\n') f.write('require conf/locked-sigs.inc\n') - f.write('require conf/work-config.inc\n') sigfile = d.getVar('WORKDIR', True) + '/locked-sigs.inc' oe.copy_buildsystem.generate_locked_sigs(sigfile, d) @@ -178,17 +184,10 @@ python copy_buildsystem () { d.getVar('SSTATE_DIR', True), sstate_out, d, fixedlsbstring) - - # Create a dummy config file for additional settings - with open(baseoutpath + '/conf/work-config.inc', 'w') as f: - pass } def extsdk_get_buildtools_filename(d): - # This is somewhat of a hack - localdata = bb.data.createCopy(d) - localdata.setVar('PN', 'buildtools-tarball') - return localdata.expand('${SDK_NAME}-buildtools-nativesdk-standalone-*.sh') + return '*-buildtools-nativesdk-standalone-*.sh' install_tools() { install -d ${SDK_OUTPUT}/${SDKPATHNATIVE}${bindir_nativesdk} @@ -201,6 +200,8 @@ install_tools() { install $buildtools_path ${SDK_OUTPUT}/${SDKPATH} install ${SDK_DEPLOY}/${BUILD_ARCH}-nativesdk-libc.tar.bz2 ${SDK_OUTPUT}/${SDKPATH} + + install -m 0755 ${COREBASE}/meta/files/ext-sdk-prepare.sh ${SDK_OUTPUT}/${SDKPATH} } # Since bitbake won't run as root it doesn't make sense to try and install @@ -218,29 +219,37 @@ SDK_PRE_INSTALL_COMMAND_task-populate-sdk-ext = "${sdk_ext_preinst}" sdk_ext_postinst() { printf "\nExtracting buildtools...\n" cd $target_sdk_dir - printf "buildtools\ny" | ./*buildtools-nativesdk-standalone* > /dev/null + printf "buildtools\ny" | ./*buildtools-nativesdk-standalone* > /dev/null || ( printf 'ERROR: buildtools installation failed\n' ; exit 1 ) # Make sure when the user sets up the environment, they also get # the buildtools-tarball tools in their path. - echo ". $target_sdk_dir/buildtools/environment-setup*" >> $target_sdk_dir/environment-setup* + env_setup_script="$target_sdk_dir/environment-setup-${REAL_MULTIMACH_TARGET_SYS}" + echo ". $target_sdk_dir/buildtools/environment-setup*" >> $env_setup_script # Allow bitbake environment setup to be ran as part of this sdk. - echo "export OE_SKIP_SDK_CHECK=1" >> $target_sdk_dir/environment-setup* + echo "export OE_SKIP_SDK_CHECK=1" >> $env_setup_script # A bit of another hack, but we need this in the path only for devtool # so put it at the end of $PATH. - echo "export PATH=\$PATH:$target_sdk_dir/sysroots/${SDK_SYS}/${bindir_nativesdk}" >> $target_sdk_dir/environment-setup* + echo "export PATH=\$PATH:$target_sdk_dir/sysroots/${SDK_SYS}/${bindir_nativesdk}" >> $env_setup_script + + echo "printf 'SDK environment now set up; additionally you may now run devtool to perform development tasks.\nRun devtool --help for further details.\n'" >> $env_setup_script + + # Warn if trying to use external bitbake and the ext SDK together + echo "(which bitbake > /dev/null 2>&1 && echo 'WARNING: attempting to use the extensible SDK in an environment set up to run bitbake - this may lead to unexpected results. Please source this script in a new shell session instead.') || true" >> $env_setup_script # For now this is where uninative.bbclass expects the tarball mv *-nativesdk-libc.tar.* $target_sdk_dir/`dirname ${oe_init_build_env_path}` if [ "$prepare_buildsystem" != "no" ]; then - printf "Preparing build system...\n" - # dash which is /bin/sh on Ubuntu will not preserve the - # current working directory when first ran, nor will it set $1 when - # sourcing a script. That is why this has to look so ugly. - sh -c ". buildtools/environment-setup* > preparing_build_system.log && 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 >> preparing_build_system.log && bitbake ${SDK_TARGETS} >> preparing_build_system.log" || { echo "SDK preparation failed: see `pwd`/preparing_build_system.log" ; exit 1 ; } + printf "Preparing build system...\n" + # dash which is /bin/sh on Ubuntu will not preserve the + # current working directory when first ran, nor will it set $1 when + # sourcing a script. That is why this has to look so ugly. + LOGFILE="$target_sdk_dir/preparing_build_system.log" + 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 && $target_sdk_dir/ext-sdk-prepare.sh $target_sdk_dir '${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 ; } fi + rm -f $target_sdk_dir/ext-sdk-prepare.sh echo done } @@ -249,6 +258,11 @@ SDK_POST_INSTALL_COMMAND_task-populate-sdk-ext = "${sdk_ext_postinst}" SDK_POSTPROCESS_COMMAND_prepend_task-populate-sdk-ext = "copy_buildsystem; install_tools; " fakeroot python do_populate_sdk_ext() { + # FIXME hopefully we can remove this restriction at some point, but uninative + # currently forces this upon us + if d.getVar('SDK_ARCH', True) != d.getVar('BUILD_ARCH', True): + bb.fatal('The extensible SDK can currently only be built for the same architecture as the machine being built on - SDK_ARCH is set to %s (likely via setting SDKMACHINE) which is different from the architecture of the build machine (%s). Unable to continue.' % (d.getVar('SDK_ARCH', True), d.getVar('BUILD_ARCH', True))) + bb.build.exec_func("do_populate_sdk", d) } |