setup-environment: Add setup-environment script
authorFlorian Boor <florian@kernelconcepts.de>
Thu, 2 Aug 2018 09:58:13 +0000 (11:58 +0200)
committerFlorian Boor <florian@kernelconcepts.de>
Thu, 2 Aug 2018 09:58:13 +0000 (11:58 +0200)
setup-environment [new file with mode: 0755]

diff --git a/setup-environment b/setup-environment
new file mode 100755 (executable)
index 0000000..c8ab389
--- /dev/null
@@ -0,0 +1,224 @@
+#!/bin/sh
+# -*- mode: shell-script; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+#
+# Copyright (C) 2012, 2013, 2016 O.S. Systems Software LTDA.
+# Authored-by:  Otavio Salvador <otavio@ossystems.com.br>
+# Copyright (C) 2018 kernel concepts GmbH
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 2 as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+# Add options for the script
+# Copyright (C) 2013 Freescale Semiconductor, Inc.
+
+CWD=`pwd`
+PROGNAME="setup-environment"
+
+usage()
+{
+    echo -e "
+Usage: MACHINE=<machine> DISTRO=<distro> source $PROGNAME <build-dir>
+Usage:                                   source $PROGNAME <build-dir>
+    <machine>    machine name
+    <distro>     distro name
+    <build-dir>  build directory
+
+The first usage is for creating a new build directory. In this case, the
+script creates the build directory <build-dir>, configures it for the
+specified <machine> and <distro>, and prepares the calling shell for running
+bitbake on the build directory.
+
+The second usage is for using an existing build directory. In this case,
+the script prepares the calling shell for running bitbake on the build
+directory <build-dir>. The build directory configuration is unchanged.
+"
+
+    ls yocto/*/conf/machine/*.conf > /dev/null 2>&1
+#    ls sources/meta-freescale-distro/conf/distro/fslc-*.conf > /dev/null 2>&1
+    if [ $? -eq 0 ]; then
+        echo -e "
+Supported machines: `echo; ls conf/*/conf/machine/*.conf \
+| sed s/\.conf//g | sed -r 's/^.+\///' | xargs -I% echo -e "\t%"`
+
+Available Poky's distros: `echo; ls yocto/poky/meta-poky/conf/distro/*.conf \
+| sed s/\.conf//g | sed -r 's/^.+\///' | xargs -I% echo -e "\t%"`
+
+Examples:
+
+- To create a new Yocto build directory:
+  $ MACHINE=tx6q-xxxx DISTRO=poky . $PROGNAME build
+
+- To use an existing Yocto build directory:
+  $ . $PROGNAME build
+"
+    fi
+}
+
+clean_up()
+{
+   unset LIST_MACHINES VALID_MACHINE
+   unset CWD TEMPLATES SHORTOPTS LONGOPTS ARGS PROGNAME
+   unset generated_config updated
+   unset MACHINE SDKMACHINE DISTRO OEROOT
+}
+
+# source default sdk configuration
+if [ -e sdkdefaults.conf ]; then
+. sdkdefaults.conf
+fi
+
+
+# get command line options
+SHORTOPTS="h"
+LONGOPTS="help"
+
+ARGS=$(getopt --options $SHORTOPTS  \
+  --longoptions $LONGOPTS --name $PROGNAME -- "$@" )
+# Print the usage menu if invalid options are specified
+if [ $? != 0 -o $# -lt 1 ]; then
+   usage && clean_up
+   return 1
+fi
+
+eval set -- "$ARGS"
+while true;
+do
+    case $1 in
+        -h|--help)
+           usage
+           clean_up
+           return 0
+           ;;
+        --)
+           shift
+           break
+           ;;
+    esac
+done
+
+if [ "$(whoami)" = "root" ]; then
+    echo "ERROR: do not use the BSP as root. Exiting..."
+fi
+
+if [ ! -e $1/conf/local.conf.sample ]; then
+    build_dir_setup_enabled="true"
+else
+    build_dir_setup_enabled="false"
+fi
+
+if [ "$build_dir_setup_enabled" = "true" ] && [ -z "$MACHINE" ]; then
+    usage
+    echo -e "ERROR: You must set MACHINE when creating a new build directory."
+    clean_up
+    return 1
+fi
+
+if [ -z "$SDKMACHINE" ]; then
+    SDKMACHINE='i686'
+fi
+
+if [ "$build_dir_setup_enabled" = "true" ] && [ -z "$DISTRO" ]; then
+    usage
+    echo -e "ERROR: You must set DISTRO when creating a new build directory."
+    clean_up
+    return 1
+fi
+
+
+OEROOT=$PWD/yocto/poky
+if [ -e $PWD/yocto/oe-core ]; then
+    OEROOT=$PWD/yocto/oe-core
+fi
+
+. $OEROOT/oe-init-build-env $CWD/$1 > /dev/null
+
+# if conf/local.conf not generated, no need to go further
+if [ ! -e conf/local.conf ]; then
+    clean_up && return 1
+fi
+
+# Clean up PATH, because if it includes tokens to current directories somehow,
+# wrong binaries can be used instead of the expected ones during task execution
+export PATH="`echo $PATH | sed 's/\(:.\|:\)*:/:/g;s/^.\?://;s/:.\?$//'`"
+
+generated_config=
+if [ "$build_dir_setup_enabled" = "true" ]; then
+    mv conf/local.conf conf/local.conf.sample
+
+    # Generate the local.conf based on the Yocto defaults
+    TEMPLATES=$CWD/yocto/meta-kc-bsp/conf
+    grep -v '^#\|^$' conf/local.conf.sample > conf/local.conf
+    cat >> conf/local.conf <<EOF
+
+DL_DIR ?= "\${BSPDIR}/downloads/"
+EOF
+    # Change settings according environment
+    sed -e "s,MACHINE ?=.*,MACHINE ?= '$MACHINE',g" \
+        -e "s,DISTRO ?=.*,DISTRO ?= '$DISTRO',g" \
+        -i conf/local.conf
+
+    cp $TEMPLATES/* conf/
+
+    for s in $HOME/.oe $HOME/.yocto; do
+        if [ -e $s/site.conf ]; then
+            echo "Linking $s/site.conf to conf/site.conf"
+            ln -s $s/site.conf conf
+        fi
+    done
+
+    generated_config=1
+fi
+
+cat <<EOF
+
+Welcome to kernel concepts custom BSP
+
+The Yocto Project has extensive documentation about OE including a
+reference manual which can be found at:
+    http://yoctoproject.org/documentation
+
+For more information about OpenEmbedded see their website:
+    http://www.openembedded.org/
+
+You can now run 'bitbake <target>'
+
+Common targets are:
+
+EOF
+
+if [ -z "$COMMON_TARGETS" ]; then
+
+echo    core-image-minimal
+echo    meta-toolchain
+
+else
+
+echo "$COMMON_TARGETS"
+
+fi
+
+
+if [ -n "$generated_config" ]; then
+    cat <<EOF
+Your build environment has been configured with:
+
+    MACHINE=$MACHINE
+    DISTRO=$DISTRO
+
+EOF
+else
+    echo "Your configuration files at $1 have not been touched."
+    echo
+fi
+
+clean_up