123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 |
- ## @file
- # Setup the environment for unix-like systems running a bash-like shell.
- # This file must be "sourced" not merely executed. For example: ". edksetup.sh"
- #
- # Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>
- # Copyright (c) 2016, Linaro Ltd. All rights reserved.<BR>
- # SPDX-License-Identifier: BSD-2-Clause-Patent
- #
- SetWorkspace() {
- #
- # If WORKSPACE is already set, then we can return right now
- #
- if [ -n "$WORKSPACE" ]
- then
- return 0
- fi
- #
- # Set $WORKSPACE
- #
- export WORKSPACE=`pwd`
- return 0
- }
- RestorePreviousConfiguration() {
- #
- # Restore previous configuration
- #
- if [ -z "$CONF_PATH" ]
- then
- export CONF_PATH=$WORKSPACE/Conf
- if [ ! -d $WORKSPACE/Conf ] && [ -n "$PACKAGES_PATH" ]
- then
- PATH_LIST=${PACKAGES_PATH//:/ }
- for DIR in $PATH_LIST
- do
- if [ -d $DIR/Conf ]
- then
- export CONF_PATH=$DIR/Conf
- break
- fi
- done
- fi
- fi
- PREVIOUS_CONF_FILE=$CONF_PATH/BuildEnv.sh
- if [ -e $PREVIOUS_CONF_FILE ]
- then
- echo Loading previous configuration from $PREVIOUS_CONF_FILE
- . $PREVIOUS_CONF_FILE
- fi
- }
- GenerateShellCodeToSetVariable() {
- VARIABLE=$1
- OUTPUT_FILE=$2
- VAR_VALUE="echo \${${VARIABLE}}"
- VAR_VALUE=`eval $VAR_VALUE`
- echo "if [ -z \"\$${VARIABLE}\" ]" >> $OUTPUT_FILE
- echo "then" >> $OUTPUT_FILE
- echo " export ${VARIABLE}=${VAR_VALUE}" >> $OUTPUT_FILE
- echo "fi" >> $OUTPUT_FILE
- }
- GenerateShellCodeToUpdatePath() {
- OUTPUT_FILE=$1
- echo "if [ -e $EDK_TOOLS_PATH_BIN ]" >> $OUTPUT_FILE
- echo "then" >> $OUTPUT_FILE
- echo " if [ "\${PATH/$EDK_TOOLS_PATH_BIN/}" == "\$PATH" ]" >> $OUTPUT_FILE
- echo " then" >> $OUTPUT_FILE
- echo " export PATH=$EDK_TOOLS_PATH_BIN:\$PATH" >> $OUTPUT_FILE
- echo " fi" >> $OUTPUT_FILE
- echo "fi" >> $OUTPUT_FILE
- }
- StoreCurrentConfiguration() {
- #
- # Write configuration to a shell script to allow for configuration to be
- # easily reloaded.
- #
- OUTPUT_FILE=$CONF_PATH/BuildEnv.sh
- #echo Storing current configuration into $OUTPUT_FILE
- echo "# Auto-generated by ${BASH_SOURCE[0]}" >| $OUTPUT_FILE
- GenerateShellCodeToSetVariable WORKSPACE $OUTPUT_FILE
- GenerateShellCodeToSetVariable EDK_TOOLS_PATH $OUTPUT_FILE
- GenerateShellCodeToUpdatePath $OUTPUT_FILE
- }
- SetEdkToolsPath() {
- #
- # If EDK_TOOLS_PATH is already set, then we can return right now
- #
- if [ -n "$EDK_TOOLS_PATH" ]
- then
- return 0
- fi
- #
- # Try $CONF_PATH/EdkTools
- #
- if [ -e $CONF_PATH/EdkTools ]
- then
- export EDK_TOOLS_PATH=$CONF_PATH/EdkTools
- return 0
- fi
- #
- # Try $CONF_PATH/BaseToolsSource
- #
- if [ -e $CONF_PATH/BaseToolsSource ]
- then
- export EDK_TOOLS_PATH=$CONF_PATH/BaseToolsSource
- return 0
- fi
- #
- # Try $WORKSPACE/BaseTools
- #
- if [ -e $WORKSPACE/BaseTools ]
- then
- export EDK_TOOLS_PATH=$WORKSPACE/BaseTools
- return 0
- fi
- #
- # Try $PACKAGES_PATH
- #
- if [ -n "$PACKAGES_PATH"]
- then
- PATH_LIST=${PACKAGES_PATH//:/ }
- for DIR in $PATH_LIST
- do
- if [ -d $DIR/BaseTools ]
- then
- export EDK_TOOLS_PATH=$DIR/BaseTools
- return 0
- fi
- done
- fi
- echo "Unable to determine EDK_TOOLS_PATH"
- echo
- echo "You may need to download the 'BaseTools' from buildtools.tianocore.org."
- echo "After downloading, either create a symbolic link to the source at"
- echo "\$WORKSPACE/Conf/BaseToolsSource, or set the EDK_TOOLS_PATH environment"
- echo "variable."
- }
- GetBaseToolsBinSubDir() {
- #
- # Figure out a uniq directory name from the uname command
- #
- UNAME_DIRNAME=`uname -sm`
- UNAME_DIRNAME=${UNAME_DIRNAME// /-}
- UNAME_DIRNAME=${UNAME_DIRNAME//\//-}
- echo $UNAME_DIRNAME
- }
- GetEdkToolsPathBinDirectory() {
- #
- # Figure out a uniq directory name from the uname command
- #
- BIN_SUB_DIR=`GetBaseToolsBinSubDir`
- if [ -e $EDK_TOOLS_PATH/BinWrappers/$BIN_SUB_DIR ]
- then
- EDK_TOOLS_PATH_BIN=$EDK_TOOLS_PATH/BinWrappers/$BIN_SUB_DIR
- else
- EDK_TOOLS_PATH_BIN=$EDK_TOOLS_PATH/Bin/$BIN_SUB_DIR
- fi
- echo $EDK_TOOLS_PATH_BIN
- }
- AddDirToStartOfPath() {
- DIRNAME=$1
- PATH=$DIRNAME:$DIRNAME:$DIRNAME:$PATH
- PATH=${PATH//$DIRNAME:/}
- PATH=$DIRNAME:$PATH
- export PATH
- }
- AddEdkToolsToPath() {
- #
- # If EDK_TOOLS_PATH is not set, then we cannot update PATH
- #
- if [ -z "$EDK_TOOLS_PATH" ]
- then
- return 1
- fi
- EDK_TOOLS_PATH_BIN=`GetEdkToolsPathBinDirectory`
- # check if the edk2basetools pip package is available
- if $PYTHON_COMMAND -c "import edk2basetools" &> /dev/null; then
- # if it is, use the pip version of the wrappers
- echo "Using Pip Basetools"
- AddDirToStartOfPath $EDK_TOOLS_PATH/BinPipWrappers/PosixLike
- else
- echo "Using EDK2 in-source Basetools"
- AddDirToStartOfPath $EDK_TOOLS_PATH/BinWrappers/PosixLike
- fi
- AddDirToStartOfPath $EDK_TOOLS_PATH_BIN
- }
- CopySingleTemplateFile() {
- SRC_FILENAME=Conf/$1.template
- DST_FILENAME=$CONF_PATH/$1.txt
- if [ -e $DST_FILENAME ]
- then
- [ $RECONFIG != TRUE ] && return
- fi
- echo "Copying \$EDK_TOOLS_PATH/$SRC_FILENAME"
- echo " to $DST_FILENAME"
- SRC_FILENAME=$EDK_TOOLS_PATH/$SRC_FILENAME
- cp $SRC_FILENAME $DST_FILENAME
- }
- CopyTemplateFiles() {
- CopySingleTemplateFile build_rule
- CopySingleTemplateFile tools_def
- CopySingleTemplateFile target
- }
- ScriptMain() {
- SetWorkspace
- if [ -z $WORKSPACE ]
- then
- echo "Failure setting WORKSPACE"
- return 1
- fi
- RestorePreviousConfiguration
- SetEdkToolsPath
- if [ -z $EDK_TOOLS_PATH ]
- then
- return 1
- fi
- AddEdkToolsToPath
- if [ $? -ne 0 ]
- then
- echo "Failure adding EDK Tools into PATH!"
- return 1
- fi
- StoreCurrentConfiguration
- echo WORKSPACE: $WORKSPACE
- echo EDK_TOOLS_PATH: $EDK_TOOLS_PATH
- echo CONF_PATH: $CONF_PATH
- CopyTemplateFiles
- }
- #
- # Run the main function
- #
- ScriptMain
|