]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/BuildEnv
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / BaseTools / BuildEnv
CommitLineData
97fa0ee9
YL
1## @file
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"
a310886b 4#
b4dc05e8 5# Copyright (c) 2006 - 2016, Intel Corporation. All rights reserved.<BR>
c112e371 6# Copyright (c) 2016, Linaro Ltd. All rights reserved.<BR>
2e351cbe 7# SPDX-License-Identifier: BSD-2-Clause-Patent
66dcb2f0 8#
a310886b 9
66dcb2f0 10SetWorkspace() {
a310886b 11
66dcb2f0 12 #
13 # If WORKSPACE is already set, then we can return right now
14 #
15 if [ -n "$WORKSPACE" ]
16 then
17 return 0
18 fi
19
66dcb2f0 20 #
21 # Set $WORKSPACE
22 #
23 export WORKSPACE=`pwd`
24
25 return 0
26
27}
28
29RestorePreviousConfiguration() {
30 #
31 # Restore previous configuration
32 #
094a6739
LG
33 if [ -z "$CONF_PATH" ]
34 then
35 export CONF_PATH=$WORKSPACE/Conf
36 if [ ! -d $WORKSPACE/Conf ] && [ -n "$PACKAGES_PATH" ]
37 then
b4dc05e8
HW
38 PATH_LIST=${PACKAGES_PATH//:/ }
39 for DIR in $PATH_LIST
094a6739
LG
40 do
41 if [ -d $DIR/Conf ]
42 then
43 export CONF_PATH=$DIR/Conf
44 break
45 fi
46 done
47 fi
48 fi
124f1dd1 49
094a6739 50 PREVIOUS_CONF_FILE=$CONF_PATH/BuildEnv.sh
66dcb2f0 51 if [ -e $PREVIOUS_CONF_FILE ]
52 then
094a6739
LG
53 echo Loading previous configuration from $PREVIOUS_CONF_FILE
54 . $PREVIOUS_CONF_FILE
66dcb2f0 55 fi
56}
57
58GenerateShellCodeToSetVariable() {
59 VARIABLE=$1
60 OUTPUT_FILE=$2
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
67}
68
69GenerateShellCodeToUpdatePath() {
70 OUTPUT_FILE=$1
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
78}
79
80StoreCurrentConfiguration() {
81 #
82 # Write configuration to a shell script to allow for configuration to be
83 # easily reloaded.
84 #
094a6739
LG
85 OUTPUT_FILE=$CONF_PATH/BuildEnv.sh
86 #echo Storing current configuration into $OUTPUT_FILE
4bbf3963 87 echo "# Auto-generated by ${BASH_SOURCE[0]}" >| $OUTPUT_FILE
66dcb2f0 88 GenerateShellCodeToSetVariable WORKSPACE $OUTPUT_FILE
89 GenerateShellCodeToSetVariable EDK_TOOLS_PATH $OUTPUT_FILE
90 GenerateShellCodeToUpdatePath $OUTPUT_FILE
91}
92
93SetEdkToolsPath() {
94
95 #
96 # If EDK_TOOLS_PATH is already set, then we can return right now
97 #
98 if [ -n "$EDK_TOOLS_PATH" ]
99 then
100 return 0
101 fi
102
66dcb2f0 103 #
094a6739 104 # Try $CONF_PATH/EdkTools
66dcb2f0 105 #
094a6739 106 if [ -e $CONF_PATH/EdkTools ]
66dcb2f0 107 then
094a6739 108 export EDK_TOOLS_PATH=$CONF_PATH/EdkTools
66dcb2f0 109 return 0
110 fi
111
112 #
094a6739 113 # Try $CONF_PATH/BaseToolsSource
66dcb2f0 114 #
094a6739 115 if [ -e $CONF_PATH/BaseToolsSource ]
66dcb2f0 116 then
094a6739 117 export EDK_TOOLS_PATH=$CONF_PATH/BaseToolsSource
66dcb2f0 118 return 0
119 fi
120
121 #
14c48571 122 # Try $WORKSPACE/BaseTools
66dcb2f0 123 #
14c48571 124 if [ -e $WORKSPACE/BaseTools ]
66dcb2f0 125 then
126 export EDK_TOOLS_PATH=$WORKSPACE/BaseTools
127 return 0
128 fi
129
094a6739
LG
130 #
131 # Try $PACKAGES_PATH
132 #
133 if [ -n "$PACKAGES_PATH"]
134 then
b4dc05e8
HW
135 PATH_LIST=${PACKAGES_PATH//:/ }
136 for DIR in $PATH_LIST
094a6739
LG
137 do
138 if [ -d $DIR/BaseTools ]
139 then
140 export EDK_TOOLS_PATH=$DIR/BaseTools
141 return 0
142 fi
143 done
144 fi
145
66dcb2f0 146 echo "Unable to determine EDK_TOOLS_PATH"
147 echo
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"
151 echo "variable."
152
153}
154
155GetBaseToolsBinSubDir() {
156 #
157 # Figure out a uniq directory name from the uname command
158 #
159 UNAME_DIRNAME=`uname -sm`
160 UNAME_DIRNAME=${UNAME_DIRNAME// /-}
161 UNAME_DIRNAME=${UNAME_DIRNAME//\//-}
162 echo $UNAME_DIRNAME
163}
164
165GetEdkToolsPathBinDirectory() {
166 #
167 # Figure out a uniq directory name from the uname command
168 #
169 BIN_SUB_DIR=`GetBaseToolsBinSubDir`
170
b9a615fa 171 if [ -e $EDK_TOOLS_PATH/BinWrappers/$BIN_SUB_DIR ]
66dcb2f0 172 then
b9a615fa 173 EDK_TOOLS_PATH_BIN=$EDK_TOOLS_PATH/BinWrappers/$BIN_SUB_DIR
66dcb2f0 174 else
175 EDK_TOOLS_PATH_BIN=$EDK_TOOLS_PATH/Bin/$BIN_SUB_DIR
176 fi
177
178 echo $EDK_TOOLS_PATH_BIN
179}
180
64b2609f
LG
181AddDirToStartOfPath() {
182 DIRNAME=$1
183 PATH=$DIRNAME:$DIRNAME:$DIRNAME:$PATH
184 PATH=${PATH//$DIRNAME:/}
185 PATH=$DIRNAME:$PATH
186 export PATH
187}
188
66dcb2f0 189AddEdkToolsToPath() {
190
191 #
192 # If EDK_TOOLS_PATH is not set, then we cannot update PATH
193 #
194 if [ -z "$EDK_TOOLS_PATH" ]
195 then
14c48571 196 return 1
66dcb2f0 197 fi
198
199 EDK_TOOLS_PATH_BIN=`GetEdkToolsPathBinDirectory`
200
124f1dd1
BF
201 # check if the edk2basetools pip package is available
202 if $PYTHON_COMMAND -c "import edk2basetools" &> /dev/null; then
203 # if it is, use the pip version of the wrappers
204 echo "Using Pip Basetools"
205 AddDirToStartOfPath $EDK_TOOLS_PATH/BinPipWrappers/PosixLike
206 else
207 echo "Using EDK2 in-source Basetools"
208 AddDirToStartOfPath $EDK_TOOLS_PATH/BinWrappers/PosixLike
209 fi
210
211
64b2609f 212 AddDirToStartOfPath $EDK_TOOLS_PATH_BIN
66dcb2f0 213
214}
215
216CopySingleTemplateFile() {
217
a709adfa 218 SRC_FILENAME=Conf/$1.template
094a6739 219 DST_FILENAME=$CONF_PATH/$1.txt
66dcb2f0 220
094a6739 221 if [ -e $DST_FILENAME ]
66dcb2f0 222 then
c112e371 223 [ $RECONFIG != TRUE ] && return
66dcb2f0 224 fi
225
a709adfa 226 echo "Copying \$EDK_TOOLS_PATH/$SRC_FILENAME"
094a6739 227 echo " to $DST_FILENAME"
a709adfa 228 SRC_FILENAME=$EDK_TOOLS_PATH/$SRC_FILENAME
66dcb2f0 229 cp $SRC_FILENAME $DST_FILENAME
230
231}
232
233CopyTemplateFiles() {
234
235 CopySingleTemplateFile build_rule
66dcb2f0 236 CopySingleTemplateFile tools_def
237 CopySingleTemplateFile target
238
239}
240
241ScriptMain() {
242
243 SetWorkspace
244 if [ -z $WORKSPACE ]
245 then
246 echo "Failure setting WORKSPACE"
14c48571 247 return 1
66dcb2f0 248 fi
249
250 RestorePreviousConfiguration
251
252 SetEdkToolsPath
253 if [ -z $EDK_TOOLS_PATH ]
254 then
14c48571 255 return 1
66dcb2f0 256 fi
257
258 AddEdkToolsToPath
259 if [ $? -ne 0 ]
260 then
261 echo "Failure adding EDK Tools into PATH!"
14c48571 262 return 1
66dcb2f0 263 fi
264
265 StoreCurrentConfiguration
266
267 echo WORKSPACE: $WORKSPACE
268 echo EDK_TOOLS_PATH: $EDK_TOOLS_PATH
094a6739 269 echo CONF_PATH: $CONF_PATH
66dcb2f0 270
271 CopyTemplateFiles
272
273}
a310886b 274
275#
66dcb2f0 276# Run the main function
a310886b 277#
66dcb2f0 278ScriptMain
a310886b 279