BuildEnv 6.0 KB

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