BuildEnv 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  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"
  4. #
  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
  8. #
  9. SetWorkspace() {
  10. #
  11. # If WORKSPACE is already set, then we can return right now
  12. #
  13. if [ -n "$WORKSPACE" ]
  14. then
  15. return 0
  16. fi
  17. #
  18. # Set $WORKSPACE
  19. #
  20. export WORKSPACE=`pwd`
  21. return 0
  22. }
  23. RestorePreviousConfiguration() {
  24. #
  25. # Restore previous configuration
  26. #
  27. if [ -z "$CONF_PATH" ]
  28. then
  29. export CONF_PATH=$WORKSPACE/Conf
  30. if [ ! -d $WORKSPACE/Conf ] && [ -n "$PACKAGES_PATH" ]
  31. then
  32. PATH_LIST=${PACKAGES_PATH//:/ }
  33. for DIR in $PATH_LIST
  34. do
  35. if [ -d $DIR/Conf ]
  36. then
  37. export CONF_PATH=$DIR/Conf
  38. break
  39. fi
  40. done
  41. fi
  42. fi
  43. PREVIOUS_CONF_FILE=$CONF_PATH/BuildEnv.sh
  44. if [ -e $PREVIOUS_CONF_FILE ]
  45. then
  46. echo Loading previous configuration from $PREVIOUS_CONF_FILE
  47. . $PREVIOUS_CONF_FILE
  48. fi
  49. }
  50. GenerateShellCodeToSetVariable() {
  51. VARIABLE=$1
  52. OUTPUT_FILE=$2
  53. VAR_VALUE="echo \${${VARIABLE}}"
  54. VAR_VALUE=`eval $VAR_VALUE`
  55. echo "if [ -z \"\$${VARIABLE}\" ]" >> $OUTPUT_FILE
  56. echo "then" >> $OUTPUT_FILE
  57. echo " export ${VARIABLE}=${VAR_VALUE}" >> $OUTPUT_FILE
  58. echo "fi" >> $OUTPUT_FILE
  59. }
  60. GenerateShellCodeToUpdatePath() {
  61. OUTPUT_FILE=$1
  62. echo "if [ -e $EDK_TOOLS_PATH_BIN ]" >> $OUTPUT_FILE
  63. echo "then" >> $OUTPUT_FILE
  64. echo " if [ "\${PATH/$EDK_TOOLS_PATH_BIN/}" == "\$PATH" ]" >> $OUTPUT_FILE
  65. echo " then" >> $OUTPUT_FILE
  66. echo " export PATH=$EDK_TOOLS_PATH_BIN:\$PATH" >> $OUTPUT_FILE
  67. echo " fi" >> $OUTPUT_FILE
  68. echo "fi" >> $OUTPUT_FILE
  69. }
  70. StoreCurrentConfiguration() {
  71. #
  72. # Write configuration to a shell script to allow for configuration to be
  73. # easily reloaded.
  74. #
  75. OUTPUT_FILE=$CONF_PATH/BuildEnv.sh
  76. #echo Storing current configuration into $OUTPUT_FILE
  77. echo "# Auto-generated by ${BASH_SOURCE[0]}" >| $OUTPUT_FILE
  78. GenerateShellCodeToSetVariable WORKSPACE $OUTPUT_FILE
  79. GenerateShellCodeToSetVariable EDK_TOOLS_PATH $OUTPUT_FILE
  80. GenerateShellCodeToUpdatePath $OUTPUT_FILE
  81. }
  82. SetEdkToolsPath() {
  83. #
  84. # If EDK_TOOLS_PATH is already set, then we can return right now
  85. #
  86. if [ -n "$EDK_TOOLS_PATH" ]
  87. then
  88. return 0
  89. fi
  90. #
  91. # Try $CONF_PATH/EdkTools
  92. #
  93. if [ -e $CONF_PATH/EdkTools ]
  94. then
  95. export EDK_TOOLS_PATH=$CONF_PATH/EdkTools
  96. return 0
  97. fi
  98. #
  99. # Try $CONF_PATH/BaseToolsSource
  100. #
  101. if [ -e $CONF_PATH/BaseToolsSource ]
  102. then
  103. export EDK_TOOLS_PATH=$CONF_PATH/BaseToolsSource
  104. return 0
  105. fi
  106. #
  107. # Try $WORKSPACE/BaseTools
  108. #
  109. if [ -e $WORKSPACE/BaseTools ]
  110. then
  111. export EDK_TOOLS_PATH=$WORKSPACE/BaseTools
  112. return 0
  113. fi
  114. #
  115. # Try $PACKAGES_PATH
  116. #
  117. if [ -n "$PACKAGES_PATH"]
  118. then
  119. PATH_LIST=${PACKAGES_PATH//:/ }
  120. for DIR in $PATH_LIST
  121. do
  122. if [ -d $DIR/BaseTools ]
  123. then
  124. export EDK_TOOLS_PATH=$DIR/BaseTools
  125. return 0
  126. fi
  127. done
  128. fi
  129. echo "Unable to determine EDK_TOOLS_PATH"
  130. echo
  131. echo "You may need to download the 'BaseTools' from buildtools.tianocore.org."
  132. echo "After downloading, either create a symbolic link to the source at"
  133. echo "\$WORKSPACE/Conf/BaseToolsSource, or set the EDK_TOOLS_PATH environment"
  134. echo "variable."
  135. }
  136. GetBaseToolsBinSubDir() {
  137. #
  138. # Figure out a uniq directory name from the uname command
  139. #
  140. UNAME_DIRNAME=`uname -sm`
  141. UNAME_DIRNAME=${UNAME_DIRNAME// /-}
  142. UNAME_DIRNAME=${UNAME_DIRNAME//\//-}
  143. echo $UNAME_DIRNAME
  144. }
  145. GetEdkToolsPathBinDirectory() {
  146. #
  147. # Figure out a uniq directory name from the uname command
  148. #
  149. BIN_SUB_DIR=`GetBaseToolsBinSubDir`
  150. if [ -e $EDK_TOOLS_PATH/BinWrappers/$BIN_SUB_DIR ]
  151. then
  152. EDK_TOOLS_PATH_BIN=$EDK_TOOLS_PATH/BinWrappers/$BIN_SUB_DIR
  153. else
  154. EDK_TOOLS_PATH_BIN=$EDK_TOOLS_PATH/Bin/$BIN_SUB_DIR
  155. fi
  156. echo $EDK_TOOLS_PATH_BIN
  157. }
  158. AddDirToStartOfPath() {
  159. DIRNAME=$1
  160. PATH=$DIRNAME:$DIRNAME:$DIRNAME:$PATH
  161. PATH=${PATH//$DIRNAME:/}
  162. PATH=$DIRNAME:$PATH
  163. export PATH
  164. }
  165. AddEdkToolsToPath() {
  166. #
  167. # If EDK_TOOLS_PATH is not set, then we cannot update PATH
  168. #
  169. if [ -z "$EDK_TOOLS_PATH" ]
  170. then
  171. return 1
  172. fi
  173. EDK_TOOLS_PATH_BIN=`GetEdkToolsPathBinDirectory`
  174. # check if the edk2basetools pip package is available
  175. if $PYTHON_COMMAND -c "import edk2basetools" &> /dev/null; then
  176. # if it is, use the pip version of the wrappers
  177. echo "Using Pip Basetools"
  178. AddDirToStartOfPath $EDK_TOOLS_PATH/BinPipWrappers/PosixLike
  179. else
  180. echo "Using EDK2 in-source Basetools"
  181. AddDirToStartOfPath $EDK_TOOLS_PATH/BinWrappers/PosixLike
  182. fi
  183. AddDirToStartOfPath $EDK_TOOLS_PATH_BIN
  184. }
  185. CopySingleTemplateFile() {
  186. SRC_FILENAME=Conf/$1.template
  187. DST_FILENAME=$CONF_PATH/$1.txt
  188. if [ -e $DST_FILENAME ]
  189. then
  190. [ $RECONFIG != TRUE ] && return
  191. fi
  192. echo "Copying \$EDK_TOOLS_PATH/$SRC_FILENAME"
  193. echo " to $DST_FILENAME"
  194. SRC_FILENAME=$EDK_TOOLS_PATH/$SRC_FILENAME
  195. cp $SRC_FILENAME $DST_FILENAME
  196. }
  197. CopyTemplateFiles() {
  198. CopySingleTemplateFile build_rule
  199. CopySingleTemplateFile tools_def
  200. CopySingleTemplateFile target
  201. }
  202. ScriptMain() {
  203. SetWorkspace
  204. if [ -z $WORKSPACE ]
  205. then
  206. echo "Failure setting WORKSPACE"
  207. return 1
  208. fi
  209. RestorePreviousConfiguration
  210. SetEdkToolsPath
  211. if [ -z $EDK_TOOLS_PATH ]
  212. then
  213. return 1
  214. fi
  215. AddEdkToolsToPath
  216. if [ $? -ne 0 ]
  217. then
  218. echo "Failure adding EDK Tools into PATH!"
  219. return 1
  220. fi
  221. StoreCurrentConfiguration
  222. echo WORKSPACE: $WORKSPACE
  223. echo EDK_TOOLS_PATH: $EDK_TOOLS_PATH
  224. echo CONF_PATH: $CONF_PATH
  225. CopyTemplateFiles
  226. }
  227. #
  228. # Run the main function
  229. #
  230. ScriptMain