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 # This program and the accompanying materials
8 # are licensed and made available under the terms and conditions of the BSD License
9 # which accompanies this distribution. The full text of the license may be found at
10 # http://opensource.org/licenses/bsd-license.php
12 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
19 # If WORKSPACE is already set, then we can return right now
21 if [ -n "$WORKSPACE" ]
29 export WORKSPACE=`pwd`
35 RestorePreviousConfiguration() {
37 # Restore previous configuration
39 if [ -z "$CONF_PATH" ]
41 export CONF_PATH=$WORKSPACE/Conf
42 if [ ! -d $WORKSPACE/Conf ] && [ -n "$PACKAGES_PATH" ]
44 PATH_LIST=${PACKAGES_PATH//:/ }
49 export CONF_PATH=$DIR/Conf
56 PREVIOUS_CONF_FILE=$CONF_PATH/BuildEnv.sh
57 if [ -e $PREVIOUS_CONF_FILE ]
59 echo Loading previous configuration from $PREVIOUS_CONF_FILE
64 GenerateShellCodeToSetVariable() {
67 VAR_VALUE="echo \${${VARIABLE}}"
68 VAR_VALUE=`eval $VAR_VALUE`
69 echo "if [ -z \"\$${VARIABLE}\" ]" >> $OUTPUT_FILE
70 echo "then" >> $OUTPUT_FILE
71 echo " export ${VARIABLE}=${VAR_VALUE}" >> $OUTPUT_FILE
72 echo "fi" >> $OUTPUT_FILE
75 GenerateShellCodeToUpdatePath() {
77 echo "if [ -e $EDK_TOOLS_PATH_BIN ]" >> $OUTPUT_FILE
78 echo "then" >> $OUTPUT_FILE
79 echo " if [ "\${PATH/$EDK_TOOLS_PATH_BIN/}" == "\$PATH" ]" >> $OUTPUT_FILE
80 echo " then" >> $OUTPUT_FILE
81 echo " export PATH=$EDK_TOOLS_PATH_BIN:\$PATH" >> $OUTPUT_FILE
82 echo " fi" >> $OUTPUT_FILE
83 echo "fi" >> $OUTPUT_FILE
86 StoreCurrentConfiguration() {
88 # Write configuration to a shell script to allow for configuration to be
91 OUTPUT_FILE=$CONF_PATH/BuildEnv.sh
92 #echo Storing current configuration into $OUTPUT_FILE
93 echo "# Auto-generated by ${BASH_SOURCE[0]}" > $OUTPUT_FILE
94 GenerateShellCodeToSetVariable WORKSPACE $OUTPUT_FILE
95 GenerateShellCodeToSetVariable EDK_TOOLS_PATH $OUTPUT_FILE
96 GenerateShellCodeToUpdatePath $OUTPUT_FILE
102 # If EDK_TOOLS_PATH is already set, then we can return right now
104 if [ -n "$EDK_TOOLS_PATH" ]
110 # Try $CONF_PATH/EdkTools
112 if [ -e $CONF_PATH/EdkTools ]
114 export EDK_TOOLS_PATH=$CONF_PATH/EdkTools
119 # Try $CONF_PATH/BaseToolsSource
121 if [ -e $CONF_PATH/BaseToolsSource ]
123 export EDK_TOOLS_PATH=$CONF_PATH/BaseToolsSource
128 # Try $WORKSPACE/BaseTools
130 if [ -e $WORKSPACE/BaseTools ]
132 export EDK_TOOLS_PATH=$WORKSPACE/BaseTools
139 if [ -n "$PACKAGES_PATH"]
141 PATH_LIST=${PACKAGES_PATH//:/ }
142 for DIR in $PATH_LIST
144 if [ -d $DIR/BaseTools ]
146 export EDK_TOOLS_PATH=$DIR/BaseTools
152 echo "Unable to determine EDK_TOOLS_PATH"
154 echo "You may need to download the 'BaseTools' from buildtools.tianocore.org."
155 echo "After downloading, either create a symbolic link to the source at"
156 echo "\$WORKSPACE/Conf/BaseToolsSource, or set the EDK_TOOLS_PATH environment"
161 GetBaseToolsBinSubDir() {
163 # Figure out a uniq directory name from the uname command
165 UNAME_DIRNAME=`uname -sm`
166 UNAME_DIRNAME=${UNAME_DIRNAME// /-}
167 UNAME_DIRNAME=${UNAME_DIRNAME//\//-}
171 GetEdkToolsPathBinDirectory() {
173 # Figure out a uniq directory name from the uname command
175 BIN_SUB_DIR=`GetBaseToolsBinSubDir`
177 if [ -e $EDK_TOOLS_PATH/BinWrappers/$BIN_SUB_DIR ]
179 EDK_TOOLS_PATH_BIN=$EDK_TOOLS_PATH/BinWrappers/$BIN_SUB_DIR
181 EDK_TOOLS_PATH_BIN=$EDK_TOOLS_PATH/Bin/$BIN_SUB_DIR
184 echo $EDK_TOOLS_PATH_BIN
187 AddDirToStartOfPath() {
189 PATH=$DIRNAME:$DIRNAME:$DIRNAME:$PATH
190 PATH=${PATH//$DIRNAME:/}
195 AddEdkToolsToPath() {
198 # If EDK_TOOLS_PATH is not set, then we cannot update PATH
200 if [ -z "$EDK_TOOLS_PATH" ]
205 EDK_TOOLS_PATH_BIN=`GetEdkToolsPathBinDirectory`
207 AddDirToStartOfPath $EDK_TOOLS_PATH/BinWrappers/PosixLike
208 AddDirToStartOfPath $EDK_TOOLS_PATH_BIN
212 CopySingleTemplateFile() {
214 SRC_FILENAME=Conf/$1.template
215 DST_FILENAME=$CONF_PATH/$1.txt
217 if [ -e $DST_FILENAME ]
219 [ $RECONFIG != TRUE ] && return
222 echo "Copying \$EDK_TOOLS_PATH/$SRC_FILENAME"
223 echo " to $DST_FILENAME"
224 SRC_FILENAME=$EDK_TOOLS_PATH/$SRC_FILENAME
225 cp $SRC_FILENAME $DST_FILENAME
229 CopyTemplateFiles() {
231 CopySingleTemplateFile build_rule
232 CopySingleTemplateFile tools_def
233 CopySingleTemplateFile target
242 echo "Failure setting WORKSPACE"
246 RestorePreviousConfiguration
249 if [ -z $EDK_TOOLS_PATH ]
257 echo "Failure adding EDK Tools into PATH!"
261 StoreCurrentConfiguration
263 echo WORKSPACE: $WORKSPACE
264 echo EDK_TOOLS_PATH: $EDK_TOOLS_PATH
265 echo CONF_PATH: $CONF_PATH
272 # Run the main function