1#!/bin/bash
2#
3# Find a native sysroot to use - either from an in-tree OE build or
4# from a toolchain installation. It then ensures the variable
5# $OECORE_NATIVE_SYSROOT is set to the sysroot's base directory, and sets
6# $PSEUDO to the path of the pseudo binary.
7#
8# This script is intended to be run within other scripts by source'ing
9# it, e.g:
10#
11# SYSROOT_SETUP_SCRIPT=`which oe-find-native-sysroot`
12# . $SYSROOT_SETUP_SCRIPT <recipe>
13#
14# This script will terminate execution of your calling program unless
15# you set a variable $SKIP_STRICT_SYSROOT_CHECK to a non-empty string
16# beforehand.
17#
18# Copyright (c) 2010 Linux Foundation
19#
20# SPDX-License-Identifier: GPL-2.0-only
21#
22
23if [ "$1" = '--help' -o "$1" = '-h' -o $# -ne 1 ] ; then
24    echo 'Usage: oe-find-native-sysroot <recipe> [-h|--help]'
25    echo ''
26    echo 'OpenEmbedded find-native-sysroot - helper script to set'
27    echo 'environment variables OECORE_NATIVE_SYSROOT and PSEUDO'
28    echo 'to the path of the native sysroot directory and pseudo'
29    echo 'executable binary'
30    echo ''
31    echo 'options:'
32    echo '  recipe              its STAGING_DIR_NATIVE is used as native sysroot'
33    echo '  -h, --help          show this help message and exit'
34    echo ''
35    exit 2
36fi
37
38# Global vars
39BITBAKE_E=""
40set_oe_native_sysroot(){
41    echo "Running bitbake -e $1"
42    BITBAKE_E="`bitbake -e $1`"
43    OECORE_NATIVE_SYSROOT=`echo "$BITBAKE_E" | grep ^STAGING_DIR_NATIVE= | cut -d '"' -f2`
44
45    if [ "x$OECORE_NATIVE_SYSROOT" = "x" ]; then
46        # This indicates that there was an error running bitbake -e that
47        # the user needs to be informed of
48        echo "There was an error running bitbake to determine STAGING_DIR_NATIVE"
49        echo "Here is the output from bitbake -e $1"
50        echo $BITBAKE_E
51        exit 1
52    fi
53}
54
55if [ "x$OECORE_NATIVE_SYSROOT" = "x" ]; then
56    BITBAKE=`which bitbake 2> /dev/null`
57    if [ "x$BITBAKE" != "x" ]; then
58        if [ "$UID" = "0" ]; then
59            # Root cannot run bitbake unless sanity checking is disabled
60            if [ ! -d "./conf" ]; then
61                echo "Error: root cannot run bitbake by default, and I cannot find a ./conf directory to be able to disable sanity checking"
62                exit 1
63            fi
64            touch conf/sanity.conf
65            set_oe_native_sysroot $1
66            rm -f conf/sanity.conf
67        else
68            set_oe_native_sysroot $1
69        fi
70    else
71        echo "Error: Unable to locate bitbake command."
72        echo "Did you forget to source the build environment setup script?"
73
74        if [ -z "$SKIP_STRICT_SYSROOT_CHECK" ]; then
75            exit 1
76        fi
77    fi
78fi
79
80if [ ! -e "$OECORE_NATIVE_SYSROOT/" ]; then
81    echo "Error: $OECORE_NATIVE_SYSROOT doesn't exist."
82
83    if [ "x$OECORE_DISTRO_VERSION" = "x" ]; then
84        if [[ $1 =~ .*native.* ]]; then
85            echo "Have you run 'bitbake $1 -caddto_recipe_sysroot'?"
86        else
87            echo "Have you run 'bitbake $1 '?"
88        fi
89    else
90        echo "This shouldn't happen - something is wrong with your toolchain installation"
91    fi
92
93    if [ -z "$SKIP_STRICT_SYSROOT_CHECK" ]; then
94        exit 1
95    fi
96fi
97
98# Set up pseudo command
99pseudo="$OECORE_NATIVE_SYSROOT/usr/bin/pseudo"
100if [ -e "$pseudo" ]; then
101    echo "PSEUDO=$pseudo"
102    PSEUDO="$pseudo"
103fi
104