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