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
39set_oe_native_sysroot(){
40    echo "Getting sysroot..."
41    OECORE_NATIVE_SYSROOT=$(bitbake-getvar -r $1 --value STAGING_DIR_NATIVE)
42}
43
44if [ "x$OECORE_NATIVE_SYSROOT" = "x" ]; then
45    BITBAKE=`which bitbake 2> /dev/null`
46    if [ "x$BITBAKE" != "x" ]; then
47        if [ "$UID" = "0" ]; then
48            # Root cannot run bitbake unless sanity checking is disabled
49            if [ ! -d "./conf" ]; then
50                echo "Error: root cannot run bitbake by default, and I cannot find a ./conf directory to be able to disable sanity checking"
51                exit 1
52            fi
53            touch conf/sanity.conf
54            set_oe_native_sysroot $1
55            rm -f conf/sanity.conf
56        else
57            set_oe_native_sysroot $1
58        fi
59    else
60        echo "Error: Unable to locate bitbake command."
61        echo "Did you forget to source the build environment setup script?"
62
63        if [ -z "$SKIP_STRICT_SYSROOT_CHECK" ]; then
64            exit 1
65        fi
66    fi
67fi
68
69if [ ! -e "$OECORE_NATIVE_SYSROOT/" ]; then
70    echo "Error: $OECORE_NATIVE_SYSROOT doesn't exist."
71
72    if [ "x$OECORE_DISTRO_VERSION" = "x" ]; then
73        if [[ $1 =~ .*native.* ]]; then
74            echo "Have you run 'bitbake $1 -caddto_recipe_sysroot'?"
75        else
76            echo "Have you run 'bitbake $1 '?"
77        fi
78    else
79        echo "This shouldn't happen - something is wrong with your toolchain installation"
80    fi
81
82    if [ -z "$SKIP_STRICT_SYSROOT_CHECK" ]; then
83        exit 1
84    fi
85fi
86
87# Set up pseudo command
88pseudo="$OECORE_NATIVE_SYSROOT/usr/bin/pseudo"
89if [ -e "$pseudo" ]; then
90    echo "PSEUDO=$pseudo"
91    PSEUDO="$pseudo"
92fi
93