2 # Setup the environment for unix-like systems running a bash-like shell.
3 # This file must be "sourced" not merely executed. For example: ". edksetup.sh"
5 # Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>
6 # Copyright (c) 2016, Linaro Ltd. All rights reserved.<BR>
7 # SPDX-License-Identifier: BSD-2-Clause-Patent
13 # If WORKSPACE is already set, then we can return right now
15 if [ -n "$WORKSPACE" ]
23 export WORKSPACE=`pwd`
29 RestorePreviousConfiguration() {
31 # Restore previous configuration
33 if [ -z "$CONF_PATH" ]
35 export CONF_PATH=$WORKSPACE/Conf
36 if [ ! -d $WORKSPACE/Conf ] && [ -n "$PACKAGES_PATH" ]
38 PATH_LIST=${PACKAGES_PATH//:/ }
43 export CONF_PATH=$DIR/Conf
50 PREVIOUS_CONF_FILE=$CONF_PATH/BuildEnv.sh
51 if [ -e $PREVIOUS_CONF_FILE ]
53 echo Loading previous configuration from $PREVIOUS_CONF_FILE
58 GenerateShellCodeToSetVariable() {
61 VAR_VALUE="echo \${${VARIABLE}}"
62 VAR_VALUE=`eval $VAR_VALUE`
63 echo "if [ -z \"\$${VARIABLE}\" ]" >> $OUTPUT_FILE
64 echo "then" >> $OUTPUT_FILE
65 echo " export ${VARIABLE}=${VAR_VALUE}" >> $OUTPUT_FILE
66 echo "fi" >> $OUTPUT_FILE
69 GenerateShellCodeToUpdatePath() {
71 echo "if [ -e $EDK_TOOLS_PATH_BIN ]" >> $OUTPUT_FILE
72 echo "then" >> $OUTPUT_FILE
73 echo " if [ "\${PATH/$EDK_TOOLS_PATH_BIN/}" == "\$PATH" ]" >> $OUTPUT_FILE
74 echo " then" >> $OUTPUT_FILE
75 echo " export PATH=$EDK_TOOLS_PATH_BIN:\$PATH" >> $OUTPUT_FILE
76 echo " fi" >> $OUTPUT_FILE
77 echo "fi" >> $OUTPUT_FILE
80 StoreCurrentConfiguration() {
82 # Write configuration to a shell script to allow for configuration to be
85 OUTPUT_FILE=$CONF_PATH/BuildEnv.sh
86 #echo Storing current configuration into $OUTPUT_FILE
87 echo "# Auto-generated by ${BASH_SOURCE[0]}" >| $OUTPUT_FILE
88 GenerateShellCodeToSetVariable WORKSPACE $OUTPUT_FILE
89 GenerateShellCodeToSetVariable EDK_TOOLS_PATH $OUTPUT_FILE
90 GenerateShellCodeToUpdatePath $OUTPUT_FILE
96 # If EDK_TOOLS_PATH is already set, then we can return right now
98 if [ -n "$EDK_TOOLS_PATH" ]
104 # Try $CONF_PATH/EdkTools
106 if [ -e $CONF_PATH/EdkTools ]
108 export EDK_TOOLS_PATH=$CONF_PATH/EdkTools
113 # Try $CONF_PATH/BaseToolsSource
115 if [ -e $CONF_PATH/BaseToolsSource ]
117 export EDK_TOOLS_PATH=$CONF_PATH/BaseToolsSource
122 # Try $WORKSPACE/BaseTools
124 if [ -e $WORKSPACE/BaseTools ]
126 export EDK_TOOLS_PATH=$WORKSPACE/BaseTools
133 if [ -n "$PACKAGES_PATH"]
135 PATH_LIST=${PACKAGES_PATH//:/ }
136 for DIR in $PATH_LIST
138 if [ -d $DIR/BaseTools ]
140 export EDK_TOOLS_PATH=$DIR/BaseTools
146 echo "Unable to determine EDK_TOOLS_PATH"
148 echo "You may need to download the 'BaseTools' from buildtools.tianocore.org."
149 echo "After downloading, either create a symbolic link to the source at"
150 echo "\$WORKSPACE/Conf/BaseToolsSource, or set the EDK_TOOLS_PATH environment"
155 GetBaseToolsBinSubDir() {
157 # Figure out a uniq directory name from the uname command
159 UNAME_DIRNAME=`uname -sm`
160 UNAME_DIRNAME=${UNAME_DIRNAME// /-}
161 UNAME_DIRNAME=${UNAME_DIRNAME//\//-}
165 GetEdkToolsPathBinDirectory() {
167 # Figure out a uniq directory name from the uname command
169 BIN_SUB_DIR=`GetBaseToolsBinSubDir`
171 if [ -e $EDK_TOOLS_PATH/BinWrappers/$BIN_SUB_DIR ]
173 EDK_TOOLS_PATH_BIN=$EDK_TOOLS_PATH/BinWrappers/$BIN_SUB_DIR
175 EDK_TOOLS_PATH_BIN=$EDK_TOOLS_PATH/Bin/$BIN_SUB_DIR
178 echo $EDK_TOOLS_PATH_BIN
181 AddDirToStartOfPath() {
183 PATH=$DIRNAME:$DIRNAME:$DIRNAME:$PATH
184 PATH=${PATH//$DIRNAME:/}
189 AddEdkToolsToPath() {
192 # If EDK_TOOLS_PATH is not set, then we cannot update PATH
194 if [ -z "$EDK_TOOLS_PATH" ]
199 EDK_TOOLS_PATH_BIN=`GetEdkToolsPathBinDirectory`
201 AddDirToStartOfPath $EDK_TOOLS_PATH/BinWrappers/PosixLike
202 AddDirToStartOfPath $EDK_TOOLS_PATH_BIN
206 CopySingleTemplateFile() {
208 SRC_FILENAME=Conf/$1.template
209 DST_FILENAME=$CONF_PATH/$1.txt
211 if [ -e $DST_FILENAME ]
213 [ $RECONFIG != TRUE ] && return
216 echo "Copying \$EDK_TOOLS_PATH/$SRC_FILENAME"
217 echo " to $DST_FILENAME"
218 SRC_FILENAME=$EDK_TOOLS_PATH/$SRC_FILENAME
219 cp $SRC_FILENAME $DST_FILENAME
223 CopyTemplateFiles() {
225 CopySingleTemplateFile build_rule
226 CopySingleTemplateFile tools_def
227 CopySingleTemplateFile target
236 echo "Failure setting WORKSPACE"
240 RestorePreviousConfiguration
243 if [ -z $EDK_TOOLS_PATH ]
251 echo "Failure adding EDK Tools into PATH!"
255 StoreCurrentConfiguration
257 echo WORKSPACE: $WORKSPACE
258 echo EDK_TOOLS_PATH: $EDK_TOOLS_PATH
259 echo CONF_PATH: $CONF_PATH
266 # Run the main function