diff options
Diffstat (limited to 'scripts/bitbake')
| -rwxr-xr-x | scripts/bitbake | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/scripts/bitbake b/scripts/bitbake new file mode 100755 index 000000000..3772d826f --- /dev/null +++ b/scripts/bitbake @@ -0,0 +1,161 @@ +#!/bin/sh + +# This is the bitbake wrapper script that ensures everything is set up +# correctly in the environment, builds pseudo separately if it hasn't +# already been built, and then runs bitbake within pseudo. + +export BBFETCH2=True +export BB_ENV_EXTRAWHITE="PSEUDO_BUILD PSEUDO_DISABLED $BB_ENV_EXTRAWHITE" + +# For certain operations (i.e. that won't be actually running any tasks) +# we don't need pseudo +NO_BUILD_OPTS="--version -h --help -p --parse-only -s --show-versions -e --environment -g --graphviz" + +# Some options are useful to pass through to the initial pseudo build if +# that needs to be run (for debugging) +PASSTHROUGH_OPTS="-D -DD -DDD -DDDD -v" + +needpseudo="1" +for opt in $@; do +for key in $NO_BUILD_OPTS; do + if [ $opt = $key ] + then + needpseudo="0" + break + fi +done +[ $needpseudo = "0" ] && break +done + +# Make sure we're not using python v3.x. This check can't go into +# sanity.bbclass because bitbake's source code doesn't even pass +# parsing stage when used with python v3, so we catch it here so we +# can offer a meaningful error message. +py_v3_check=`/usr/bin/env python --version 2>&1 | grep "Python 3"` +if [ "$py_v3_check" != "" ]; then + echo "Bitbake is not compatible with python v3" + echo "Please set up python v2 as your default python interpreter" + exit 1 +fi + +# Similarly, we now have code that doesn't parse correctly with older +# versions of Python, and rather than fixing that and being eternally +# vigilant for any other new feature use, just check the version here. +py_v26_check=`python -c 'import sys; print sys.version_info >= (2,6,0)'` +if [ "$py_v26_check" != "True" ]; then + echo "BitBake requires Python 2.6 or later" + exit 1 +fi + +if [ ! -e conf/bblayers.conf ] ; then + BDPRINT="" + [ -n "$BUILDDIR" ] && BDPRINT=": $BUILDDIR" + echo "Unable to find conf/bblayers.conf" + echo "BitBake must be run from within your build directory$BDPRINT" + exit 1 +elif [ -z "$BUILDDIR" ] ; then + BUILDDIR="`pwd`" +fi + +needtar="1" +TARVERSION=`tar --version | head -n 1 | cut -d ' ' -f 4` +float_test() { + echo | awk 'END { exit ( !( '"$1"')); }' +} + +# Tar version 1.24 and onwards handle overwriting symlinks correctly +# but earlier versions do not; this needs to work properly for sstate +float_test "$TARVERSION > 1.23" && needtar="0" + +buildpseudo="1" +if [ $needpseudo = "1" ]; then + if [ -e "$BUILDDIR/pseudodone" ]; then + PSEUDOBINDIR=`cat $BUILDDIR/pseudodone` + else + PSEUDOBINDIR=`bitbake -e | grep STAGING_BINDIR_NATIVE=\" | cut -d '=' -f2 | cut -d '"' -f2` + fi + if [ -e "$PSEUDOBINDIR/pseudo" ]; then + buildpseudo="0" + fi + + # Verify that the pseudo recipes are older then the pseudodone file + PSEUDO_RECIPE="`dirname $0`/../meta/recipes-devtools/pseudo" + if [ $buildpseudo -eq 0 ] && [ ! -d "$PSEUDO_RECIPE" ]; then + echo "Unable to verify if pseudo-native is up to date..." >&2 + elif [ $buildpseudo -eq 0 ]; then + PSEUDO_NEWER=`find $PSEUDO_RECIPE -type f -newer $BUILDDIR/pseudodone` + if [ -n "$PSEUDO_NEWER" ]; then + buildpseudo="2" + fi + fi + if [ $buildpseudo = "0" -a ! -e "$BUILDDIR/pseudodone" ] ; then + echo $PSEUDOBINDIR > $BUILDDIR/pseudodone + fi +fi + +# If tar is already built, we don't want to do it again... +if [ -e "$PSEUDOBINDIR/tar" -a "$needtar" = "1" ]; then + needtar="0" +fi + +if [ $needpseudo = "0" ]; then + buildpseudo="0" +fi + +# If pseudo-native is an argument, assume the user wants to build pseudo-native! +if [ $needpseudo != "0" -a $buildpseudo -eq 0 ]; then + for opt in $@; do + if [ "$opt" = "pseudo-native" ]; then + buildpseudo="3" + break + fi + done +fi + +OLDPATH=$PATH +export PATH=`echo $PATH | sed s#[^:]*/scripts:##` +if [ $buildpseudo -gt 0 ]; then + [ $buildpseudo -eq 1 ] && echo "Pseudo is not present but is required, building this first before the main build" + [ $buildpseudo -eq 2 ] && echo "Pseudo may be out of date, rebuilding pseudo before the main build" + [ $buildpseudo -eq 3 ] && echo "Building pseudo-native before main build" + export PSEUDO_BUILD=1 + TARTARGET="tar-replacement-native" + if [ $needtar = "0" ]; then + TARTARGET="" + fi + # Pass through debug options + additionalopts="" + for opt in $@; do + for key in $PASSTHROUGH_OPTS; do + if [ $opt = $key ] + then + additionalopts="$additionalopts $opt" + break + fi + done + done + bitbake pseudo-native $TARTARGET $additionalopts -c populate_sysroot + ret=$? + if [ "$ret" != "0" ]; then + exit 1 + fi + PSEUDOBINDIR=`bitbake -e | grep STAGING_BINDIR_NATIVE=\" | cut -d '=' -f2 | cut -d '"' -f2` + ret=$? + if [ "$ret" != "0" ]; then + exit 1 + fi + echo $PSEUDOBINDIR > $BUILDDIR/pseudodone + # This needs to exist in case pseudo has to log somewhere + mkdir -p $PSEUDOBINDIR/../../var/pseudo +fi +BITBAKE=`which bitbake` +export PATH=$OLDPATH +if [ $needpseudo = "1" ]; then + export PSEUDO_BUILD=2 + PSEUDO_BINDIR=$PSEUDOBINDIR PSEUDO_LIBDIR=$PSEUDOBINDIR/../lib/pseudo/lib PSEUDO_PREFIX=$PSEUDOBINDIR/../../ PSEUDO_DISABLED=1 $PSEUDOBINDIR/pseudo $BITBAKE $@ +else + export PSEUDO_BUILD=0 + $BITBAKE $@ +fi +ret=$? +exit $ret |
