Moved some content out of top level of the schema into local sections.
[people/mcb30/basetools.git] / toolsetup.bat
1 @REM @file\r
2 @REM   This stand-alone program is typically called by the edksetup.bat file, \r
3 @REM   however it may be executed directly from the BaseTools project folder\r
4 @REM   if the file is not executed within a WORKSPACE\BaseTools folder.\r
5 @REM\r
6 @REM Copyright (c) 2006 - 2008, Intel Corporation.  All rights reserved.\r
7 @REM\r
8 @REM This program and the accompanying materials are licensed and made available\r
9 @REM under the terms and conditions of the BSD Licensewhich accompanies this \r
10 @REM distribution.  The full text of the license may be found at:\r
11 @REM   http://opensource.org/licenses/bsd-license.php\r
12 @REM\r
13 @REM THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
14 @REM WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR \r
15 @REM IMPLIED.\r
16 @REM\r
17 \r
18 @echo off\r
19 pushd .\r
20 \r
21 @REM ##############################################################\r
22 @REM # You should not have to modify anything below this line\r
23 @REM #\r
24 \r
25 @if /I "%1"=="-h" goto Usage\r
26 @if /I "%1"=="-help" goto Usage\r
27 @if /I "%1"=="--help" goto Usage\r
28 @if /I "%1"=="/h" goto Usage\r
29 @if /I "%1"=="/help" goto Usage\r
30 @if /I "%1"=="/?" goto Usage\r
31 \r
32 \r
33 :loop\r
34   @if "%1"=="" goto setup_workspace\r
35   @if /I "%1"=="--nt32" (\r
36     @REM Ignore --nt32 flag\r
37     shift\r
38     goto loop\r
39   )\r
40   @if /I "%1"=="Reconfig" (\r
41     shift\r
42     set RECONFIG=TRUE\r
43     goto loop\r
44   )\r
45   @if /I "%1"=="Rebuild" (\r
46     shift\r
47     set REBUILD=TRUE\r
48     goto loop\r
49   )\r
50   @if /I "%1"=="ForceRebuild" (\r
51     shift\r
52     set FORCE_REBUILD=TRUE\r
53     goto loop\r
54   )\r
55   if "%1"=="" goto setup_workspace\r
56   if exist %1 (\r
57     if not defined BASE_TOOLS_PATH (\r
58       if exist %1\Source set BASE_TOOLS_PATH=%1\r
59       shift\r
60       goto loop\r
61     )\r
62     if not defined EDK_TOOLS_PATH (\r
63       if exist %1\Bin\Win32 set EDK_TOOLS_PATH=%1\r
64       shift\r
65       goto loop\r
66     )\r
67     echo.\r
68     echo !!! ERROR !!! Unknown argument, %1 !!!\r
69     echo.\r
70     goto end\r
71   ) else (\r
72     echo.\r
73     echo !!! ERROR !!! Unknown argument, %1 !!!\r
74     echo.\r
75     goto end\r
76   )\r
77   goto loop\r
78 \r
79 \r
80 @REM\r
81 @REM Check the required system environment variables\r
82 @REM\r
83 \r
84 :setup_workspace\r
85   REM\r
86   REM check the EDK_TOOLS_PATH\r
87   REM\r
88   if not defined EDK_TOOLS_PATH goto no_EDK_TOOLS_PATH\r
89   if exist %EDK_TOOLS_PATH% goto set_PATH\r
90 \r
91 :no_EDK_TOOLS_PATH\r
92   if not defined WORKSPACE (\r
93     if defined BASE_TOOLS_PATH (\r
94       set EDK_TOOLS_PATH=%BASE_TOOLS_PATH%\r
95       goto set_PATH\r
96     ) else (\r
97       echo.\r
98       echo !!! ERROR !!! Neither BASE_TOOLS_PATH nor EDK_TOOLS_PATH are set. !!!\r
99       echo.\r
100       goto end\r
101     )\r
102   ) else (\r
103     if exist %WORKSPACE%\BaseTools\Bin (\r
104       set EDK_TOOLS_PATH=%WORKSPACE%\BaseTools\r
105       goto set_PATH\r
106     ) else (\r
107       echo.\r
108       echo !!! ERROR !!! No tools path available. Please set EDK_TOOLS_PATH !!!\r
109       echo.\r
110       goto end\r
111     )\r
112   )\r
113 \r
114 :set_PATH\r
115   if defined WORKSPACE_TOOLS_PATH goto check_PATH\r
116   set PATH=%EDK_TOOLS_PATH%\Bin;%EDK_TOOLS_PATH%\Bin\Win32;%PATH%\r
117   set WORKSPACE_TOOLS_PATH=%EDK_TOOLS_PATH%\r
118   goto PATH_ok\r
119 \r
120 :check_PATH\r
121   if "%EDK_TOOLS_PATH%"=="%WORKSPACE_TOOLS_PATH%" goto PATH_ok\r
122   set PATH=%EDK_TOOLS_PATH%\Bin;%EDK_TOOLS_PATH%\Bin\Win32;%PATH%\r
123   set WORKSPACE_TOOLS_PATH=%EDK_TOOLS_PATH%\r
124   echo Resetting the PATH variable to include the EDK_TOOLS_PATH for this session.\r
125 \r
126 :PATH_ok\r
127   echo           PATH      = %PATH%\r
128   echo.\r
129   if defined WORKSPACE (\r
130     echo      WORKSPACE      = %WORKSPACE%\r
131   )\r
132   echo EDK_TOOLS_PATH      = %EDK_TOOLS_PATH%\r
133   if defined BASE_TOOLS_PATH (\r
134     echo BASE_TOOLS_PATH     = %EDK_TOOLS_PATH%\r
135   )\r
136   echo.\r
137 \r
138 REM\r
139 REM copy *.template to %WORKSPACE%\Conf\r
140 REM\r
141 if not defined WORKSPACE (\r
142    if defined RECONFIG (\r
143      echo.\r
144      echo !!! WARNING !!! WORKSPACE environment variable was not set, cannot Reconfig !!!\r
145      echo.\r
146    )\r
147    goto skip_reconfig\r
148 )\r
149 \r
150 if NOT exist %WORKSPACE%\Conf (\r
151   mkdir %WORKSPACE%\Conf\r
152 ) else (\r
153   if defined RECONFIG (\r
154     echo.\r
155     echo  Over-writing the files in the WORKSPACE\Conf directory\r
156     echo  using the default template files\r
157     echo.\r
158   )\r
159 )\r
160 \r
161 if NOT exist %WORKSPACE%\Conf\FrameworkDatabase.db (\r
162   echo copying ... FrameworkDatabase.template to %WORKSPACE%\Conf\FrameworkDatabase.db\r
163   copy %EDK_TOOLS_PATH%\Conf\FrameworkDatabase.template %WORKSPACE%\Conf\FrameworkDatabase.db > nul\r
164 ) else (\r
165   if defined RECONFIG copy /Y %EDK_TOOLS_PATH%\Conf\FrameworkDatabase.template %WORKSPACE%\Conf\FrameworkDatabase.db > nul\r
166 )\r
167 \r
168 if NOT exist %WORKSPACE%\Conf\target.txt (\r
169   echo copying ... target.template to %WORKSPACE%\Conf\target.txt\r
170   copy %EDK_TOOLS_PATH%\Conf\target.template %WORKSPACE%\Conf\target.txt > nul\r
171 ) else (\r
172   if defined RECONFIG copy /Y %EDK_TOOLS_PATH%\Conf\target.template %WORKSPACE%\Conf\target.txt > nul\r
173 )\r
174 \r
175 if NOT exist %WORKSPACE%\Conf\tools_def.txt (\r
176   echo copying ... tools_def.template to %WORKSPACE%\Conf\tools_def.txt\r
177   copy %EDK_TOOLS_PATH%\Conf\tools_def.template %WORKSPACE%\Conf\tools_def.txt > nul\r
178 ) else (\r
179   if defined RECONFIG copy /Y %EDK_TOOLS_PATH%\Conf\tools_def.template %WORKSPACE%\Conf\tools_def.txt > nul\r
180 )\r
181 \r
182 if NOT exist %WORKSPACE%\Conf\build_rule.txt (\r
183   echo copying ... build_rule.template to %WORKSPACE%\Conf\build_rule.txt\r
184   copy %EDK_TOOLS_PATH%\Conf\build_rule.template %WORKSPACE%\Conf\build_rule.txt > nul\r
185 ) else (\r
186   if defined RECONFIG copy /Y %EDK_TOOLS_PATH%\Conf\build_rule.template %WORKSPACE%\Conf\build_rule.txt > nul\r
187 )\r
188 \r
189 :skip_reconfig\r
190 \r
191 @REM\r
192 @REM Test if we are going to have to do a build\r
193 @REM\r
194 if defined FORCE_REBUILD goto check_build_environment\r
195 if defined REBUILD goto check_build_environment\r
196 if not exist "%EDK_TOOLS_PATH%\Bin" goto check_build_environment\r
197 \r
198 IF NOT EXIST "%EDK_TOOLS_PATH%\Bin\Win32\BootSectImage.exe" goto check_build_environment\r
199 IF NOT EXIST "%EDK_TOOLS_PATH%\Bin\Win32\build.exe" goto check_build_environment\r
200 IF NOT EXIST "%EDK_TOOLS_PATH%\Bin\Win32\EfiLdrImage.exe" goto check_build_environment\r
201 IF NOT EXIST "%EDK_TOOLS_PATH%\Bin\Win32\EfiRom.exe" goto check_build_environment\r
202 IF NOT EXIST "%EDK_TOOLS_PATH%\Bin\Win32\GenBootSector.exe" goto check_build_environment\r
203 IF NOT EXIST "%EDK_TOOLS_PATH%\Bin\Win32\GenFds.exe" goto check_build_environment\r
204 IF NOT EXIST "%EDK_TOOLS_PATH%\Bin\Win32\GenFfs.exe" goto check_build_environment\r
205 IF NOT EXIST "%EDK_TOOLS_PATH%\Bin\Win32\GenFv.exe" goto check_build_environment\r
206 IF NOT EXIST "%EDK_TOOLS_PATH%\Bin\Win32\GenFw.exe" goto check_build_environment\r
207 IF NOT EXIST "%EDK_TOOLS_PATH%\Bin\Win32\GenPage.exe" goto check_build_environment\r
208 IF NOT EXIST "%EDK_TOOLS_PATH%\Bin\Win32\GenSec.exe" goto check_build_environment\r
209 IF NOT EXIST "%EDK_TOOLS_PATH%\Bin\Win32\GenVtf.exe" goto check_build_environment\r
210 IF NOT EXIST "%EDK_TOOLS_PATH%\Bin\Win32\MigrationMsa2Inf.exe" goto check_build_environment\r
211 IF NOT EXIST "%EDK_TOOLS_PATH%\Bin\Win32\Split.exe" goto check_build_environment\r
212 IF NOT EXIST "%EDK_TOOLS_PATH%\Bin\Win32\TargetTool.exe" goto check_build_environment\r
213 IF NOT EXIST "%EDK_TOOLS_PATH%\Bin\Win32\TianoCompress.exe" goto check_build_environment\r
214 IF NOT EXIST "%EDK_TOOLS_PATH%\Bin\Win32\Trim.exe" goto check_build_environment\r
215 IF NOT EXIST "%EDK_TOOLS_PATH%\Bin\Win32\VfrCompile.exe" goto check_build_environment\r
216 IF NOT EXIST "%EDK_TOOLS_PATH%\Bin\Win32\Fpd2Dsc.exe" goto check_build_environment\r
217 IF NOT EXIST "%EDK_TOOLS_PATH%\Bin\Win32\VolInfo.exe" goto check_build_environment\r
218 \r
219 @echo No build required, we're good to go\r
220 goto end\r
221 \r
222 :check_build_environment\r
223   if not defined BASE_TOOLS_PATH (\r
224      if not exist "Source\C\Makefile" (\r
225        if not exist "%EDK_TOOLS_PATH%\Source\C\Makefile" goto no_source_files\r
226        set BASE_TOOLS_PATH=%EDK_TOOLS_PATH%\r
227      ) else (\r
228        set BASE_TOOLS_PATH=%CD%\r
229      )\r
230   )\r
231   set PATH=%BASE_TOOLS_PATH%\Bin\Win32;%PATH%\r
232 \r
233   set PYTHONPATH=%BASE_TOOLS_PATH%\Source\Python\r
234 \r
235   if not defined PYTHON_HOME (\r
236     if defined PYTHONHOME (\r
237       set PYTHON_HOME=%PYTHONHOME%\r
238     ) else (\r
239       echo.\r
240       echo  !!! ERROR !!! PYTHON is required to build or execute the tools !!!\r
241       echo.\r
242       goto end\r
243     )\r
244   )\r
245 \r
246   @REM We have Python, now test for FreezePython application\r
247   if not defined PYTHON_FREEZER_PATH (\r
248     @REM see if we can find FreezePython.ex\r
249     if exist "%PYTHON_HOME%\Tools\cx_Freeze-3.0.3\FreezePython.exe" (\r
250       set PYTHON_FREEZER_PATH=%PYTHON_HOME%\Tools\cx_Freeze-3.0.3\r
251     ) \r
252     if exist "%PYTHON_HOME%\Tools\cx_Freeze\FreezePython.exe" (\r
253       set PYTHON_FREEZER_PATH=%PYTHON_HOME%\Tools\cx_Freeze\r
254     ) \r
255     if exist "C:\cx_Freeze\FreezePython.exe" (\r
256         set PYTHON_FREEZER_PATH=C:\cx_Freeze\r
257     )\r
258     if exist "C:\cx_Freeze-3.0.3" (\r
259         set PYTHON_FREEZER_PATH=C:\cx_Freeze-3.0.3\r
260     )\r
261     if not defined PYTHON_FREEZER_PATH (\r
262       echo.\r
263       echo !!! WARNING !!! Will not be able to compile Python programs to .exe\r
264       echo Will setup environment to run Python scripts directly.\r
265       echo.\r
266       set PYTHONPATH=%BASE_TOOLS_PATH%\Source\Python\r
267       set PATH=%PYTHONPATH%\build;%PYTHONPATH%\GenFds;%PYTHONPATH%\Trim;%PATH%\r
268       set PATHEXT=%PATHEXT%;.py\r
269     )\r
270   )\r
271   \r
272   echo BASE_TOOLS_PATH     = %BASE_TOOLS_PATH%\r
273   echo     PYTHON_PATH     = %PYTHON_PATH%\r
274   echo PYTHON_FREEZER_PATH = %PYTHON_FREEZER_PATH%\r
275   echo.\r
276 \r
277   if defined VCINSTALLDIR goto VisualStudioAvailable\r
278   if defined VS71COMNTOOLS (\r
279     call "%VS71COMNTOOLS%\vsvars32.bat"\r
280   ) else (\r
281     if defined VS80COMNTOOLS (\r
282       call "%VS80COMNTOOLS%\vsvars32.bat"\r
283     ) else (\r
284       echo.\r
285       echo !!! ERROR !!!! Cannot find Visual Studio, required to build C tools !!!\r
286       echo.\r
287       goto end\r
288     )\r
289   )\r
290 \r
291 :VisualStudioAvailable\r
292   if defined FORCE_REBUILD goto CleanAndBuild\r
293   goto IncrementalBuild\r
294 \r
295 :CleanAndBuild\r
296   pushd .\r
297   cd %BASE_TOOLS_PATH%\r
298   call nmake cleanall\r
299   del /f /q %BASE_TOOLS_PATH%\Bin\Win32\*.*\r
300   popd\r
301   @REM Let CleanAndBuild fall through to IncrementalBuild\r
302 \r
303 \r
304 :IncrementalBuild\r
305   pushd .\r
306   cd %BASE_TOOLS_PATH%\r
307   call nmake c\r
308   popd\r
309 \r
310   if defined PYTHON_FREEZER_PATH (\r
311     echo BUILDING PYTHON TOOLS\r
312     pushd .\r
313     cd %BASE_TOOLS_PATH%\r
314     call nmake python\r
315     popd\r
316   ) else (\r
317     echo.\r
318     echo !!! WARNING !!! Cannot make executable from Python code, executing python scripts instead !!!\r
319     echo.\r
320   )\r
321   goto end\r
322 \r
323 \r
324 :no_source_files\r
325   echo.\r
326   echo !!! ERROR !!! Cannot build BaseTools applications - no source directory located !!!\r
327   echo.\r
328   goto end\r
329 \r
330 :Usage\r
331   echo.\r
332   echo  Usage: "%0 [-h | -help | --help | /h | /help | /?] [ Rebuild | ForceRebuild ] [Reconfig] [base_tools_path [edk_tools_path]]"\r
333   echo.\r
334   echo         base_tools_path   BaseTools project path, BASE_TOOLS_PATH will be set to this path. \r
335   echo         edk_tools_path    EDK_TOOLS_PATH will be set to this path.\r
336   echo         Rebuild           If sources are available perform an Incremental build, only \r
337   echo                           build those updated tools.\r
338   echo         ForceRebuild      If sources are available, rebuild all tools regardless of \r
339   echo                           whether they have been updated or not.\r
340   echo         Reconfig          Reinstall target.txt, tools_def.txt and build_rule.txt.\r
341 echo.\r
342 \r
343 :end\r
344 set REBUILD=\r
345 set FORCE_REBUILD=\r
346 set RECONFIG=\r
347 popd\r
348 \r
349 @echo on\r
350 \r