54def14f320b49b82019459fe422256e9fa34ef2
[people/mcb30/edk2.git] / edk2 / BaseTools / 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 goto end\r
220 \r
221 :check_build_environment\r
222 \r
223   if not defined FORCE_REBUILD (\r
224     echo.\r
225     echo Rebuilding of tools is not required.  Binaries of the latest,\r
226     echo tested versions of the tools have been tested and included in the\r
227     echo EDK II repository.\r
228     echo.\r
229     echo If you really want to build the tools, use the ForceRebuild option.\r
230     echo.\r
231     goto end\r
232   )\r
233 \r
234   if not defined BASE_TOOLS_PATH (\r
235      if not exist "Source\C\Makefile" (\r
236        if not exist "%EDK_TOOLS_PATH%\Source\C\Makefile" goto no_source_files\r
237        set BASE_TOOLS_PATH=%EDK_TOOLS_PATH%\r
238      ) else (\r
239        set BASE_TOOLS_PATH=%CD%\r
240      )\r
241   )\r
242   set PATH=%BASE_TOOLS_PATH%\Bin\Win32;%PATH%\r
243 \r
244   set PYTHONPATH=%BASE_TOOLS_PATH%\Source\Python\r
245 \r
246   if not defined PYTHON_HOME (\r
247     if defined PYTHONHOME (\r
248       set PYTHON_HOME=%PYTHONHOME%\r
249     ) else (\r
250       echo.\r
251       echo  !!! ERROR !!! PYTHON is required to build or execute the tools !!!\r
252       echo.\r
253       goto end\r
254     )\r
255   )\r
256 \r
257   @REM We have Python, now test for FreezePython application\r
258   if not defined PYTHON_FREEZER_PATH (\r
259     @REM see if we can find FreezePython.ex\r
260     if exist "%PYTHON_HOME%\Tools\cx_Freeze-3.0.3\FreezePython.exe" (\r
261       set PYTHON_FREEZER_PATH=%PYTHON_HOME%\Tools\cx_Freeze-3.0.3\r
262     ) \r
263     if exist "%PYTHON_HOME%\Tools\cx_Freeze\FreezePython.exe" (\r
264       set PYTHON_FREEZER_PATH=%PYTHON_HOME%\Tools\cx_Freeze\r
265     ) \r
266     if exist "C:\cx_Freeze\FreezePython.exe" (\r
267         set PYTHON_FREEZER_PATH=C:\cx_Freeze\r
268     )\r
269     if exist "C:\cx_Freeze-3.0.3" (\r
270         set PYTHON_FREEZER_PATH=C:\cx_Freeze-3.0.3\r
271     )\r
272     if not defined PYTHON_FREEZER_PATH (\r
273       echo.\r
274       echo !!! WARNING !!! Will not be able to compile Python programs to .exe\r
275       echo Will setup environment to run Python scripts directly.\r
276       echo.\r
277       set PYTHONPATH=%BASE_TOOLS_PATH%\Source\Python\r
278       set PATH=%PYTHONPATH%\build;%PYTHONPATH%\GenFds;%PYTHONPATH%\Trim;%PATH%\r
279       set PATHEXT=%PATHEXT%;.py\r
280     )\r
281   )\r
282   \r
283   echo BASE_TOOLS_PATH     = %BASE_TOOLS_PATH%\r
284   echo     PYTHON_PATH     = %PYTHON_PATH%\r
285   echo PYTHON_FREEZER_PATH = %PYTHON_FREEZER_PATH%\r
286   echo.\r
287 \r
288   if defined VCINSTALLDIR goto VisualStudioAvailable\r
289   if defined VS71COMNTOOLS (\r
290     call "%VS71COMNTOOLS%\vsvars32.bat"\r
291   ) else (\r
292     if defined VS80COMNTOOLS (\r
293       call "%VS80COMNTOOLS%\vsvars32.bat"\r
294     ) else (\r
295       echo.\r
296       echo !!! ERROR !!!! Cannot find Visual Studio, required to build C tools !!!\r
297       echo.\r
298       goto end\r
299     )\r
300   )\r
301 \r
302 :VisualStudioAvailable\r
303   if defined FORCE_REBUILD goto CleanAndBuild\r
304   goto IncrementalBuild\r
305 \r
306 :CleanAndBuild\r
307   pushd .\r
308   cd %BASE_TOOLS_PATH%\r
309   call nmake cleanall\r
310   del /f /q %BASE_TOOLS_PATH%\Bin\Win32\*.*\r
311   popd\r
312   @REM Let CleanAndBuild fall through to IncrementalBuild\r
313 \r
314 \r
315 :IncrementalBuild\r
316   pushd .\r
317   cd %BASE_TOOLS_PATH%\r
318   call nmake c\r
319   popd\r
320 \r
321   if defined PYTHON_FREEZER_PATH (\r
322     echo BUILDING PYTHON TOOLS\r
323     pushd .\r
324     cd %BASE_TOOLS_PATH%\r
325     call nmake python\r
326     popd\r
327   ) else (\r
328     echo.\r
329     echo !!! WARNING !!! Cannot make executable from Python code, executing python scripts instead !!!\r
330     echo.\r
331   )\r
332   goto end\r
333 \r
334 \r
335 :no_source_files\r
336   echo.\r
337   echo !!! ERROR !!! Cannot build BaseTools applications - no source directory located !!!\r
338   echo.\r
339   goto end\r
340 \r
341 :Usage\r
342   echo.\r
343   echo  Usage: "%0 [-h | -help | --help | /h | /help | /?] [ Rebuild | ForceRebuild ] [Reconfig] [base_tools_path [edk_tools_path]]"\r
344   echo.\r
345   echo         base_tools_path   BaseTools project path, BASE_TOOLS_PATH will be set to this path. \r
346   echo         edk_tools_path    EDK_TOOLS_PATH will be set to this path.\r
347   echo         Rebuild           If sources are available perform an Incremental build, only \r
348   echo                           build those updated tools.\r
349   echo         ForceRebuild      If sources are available, rebuild all tools regardless of \r
350   echo                           whether they have been updated or not.\r
351   echo         Reconfig          Reinstall target.txt, tools_def.txt and build_rule.txt.\r
352 echo.\r
353 \r
354 :end\r
355 set REBUILD=\r
356 set FORCE_REBUILD=\r
357 set RECONFIG=\r
358 popd\r
359 \r
360 @echo on\r
361 \r