summaryrefslogtreecommitdiffstats
path: root/scripts/bitbake
blob: dde61c405b88c72b8a2a623593ba1c29eaad8157 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#!/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

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

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 [ $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:##g`
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

    # 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 $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