classes/populate_sdk_ext: prevent image construction from executing on install

In order to prepare the build system within the extensible SDK, we
actually go ahead and build the targets specified by SDK_TARGETS (by
default the image the SDK was built for). Assuming that's an image, we
don't actually need to build the image itself - we just need to have
everything done up to the point before building the image, so that we
have everything needed in the sysroot.

In order to do this, create temporary bbappends for each of the targets
in the workspace layer that stub out do_rootfs and related tasks if they
exist. This is a little bit of a hack but is the least intrusive fix at
this point. To make things a bit tidier, I have split out the
preparation commands into a separate script so we can run that in the
appropriate environment rather than all the commands separately.

Fixes [YOCTO #7590].

(From OE-Core rev: d2a2962897b89731a5705b0cbc7c6f36aa53dcc8)

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Paul Eggleton 2015-10-19 17:33:09 +01:00 committed by Richard Purdie
parent ec5ec35f12
commit 9a81ba764c
2 changed files with 24 additions and 1 deletions

View File

@ -203,6 +203,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
@ -242,8 +244,9 @@ sdk_ext_postinst() {
# 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 ; }
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 && $target_sdk_dir/ext-sdk-prepare.sh $target_sdk_dir '${SDK_TARGETS}' >> preparing_build_system.log 2>&1" || { echo "SDK preparation failed: see `pwd`/preparing_build_system.log" ; exit 1 ; }
fi
rm -f $target_sdk_dir/ext-sdk-prepare.sh
echo done
}

View File

@ -0,0 +1,20 @@
#!/bin/sh
# Prepare the build system within the extensible SDK
target_sdk_dir="$1"
sdk_targets="$2"
# Avoid actually building images during this phase, but still
# ensure all dependencies are extracted from sstate
# This is a hack, to be sure, but we really don't need to do this here
for sdktarget in $sdk_targets ; do
bbappend=`recipetool newappend $target_sdk_dir/workspace $sdktarget`
printf 'python do_rootfs_forcevariable () {\n bb.utils.mkdirhier(d.getVar("IMAGE_ROOTFS", True))\n}\n' > $bbappend
printf 'python do_bootimg () {\n pass\n}\n' >> $bbappend
printf 'python do_bootdirectdisk () {\n pass\n}\n' >> $bbappend
printf 'python do_vmimg () {\n pass\n}\n' >> $bbappend
printf "Created bbappend %s\n" "$bbappend"
done
bitbake $sdk_targets || exit 1
rm -rf $target_sdk_dir/workspace/appends/*