]> git.proxmox.com Git - mirror_edk2.git/blame - Edk2Setup.bat
MdeModulePkg: Add assertion to make code easier for read.
[mirror_edk2.git] / Edk2Setup.bat
CommitLineData
bd63012c 1@REM @file\r
2@REM Windows batch file, Edk2Setup.bat, to set up an EDK II build environment\r
3@REM\r
4@REM This script will be renamed to edksetup.bat after initial testing and\r
5@REM acceptance by the open source community.\r
6@REM\r
7@REM This script will set the following system environment variables:\r
8@REM WORKSPACE, EDK_TOOLS_PATH, PATH\r
9@REM If rebuilding the tools:\r
10@REM BASE_TOOLS_PATH, PYTHON_FREEZER_PATH, PYTHONPATH\r
11@REM It will also create a Conf/target.txt, tools_def.txt and build_rule.txt files\r
12@REM if they do not exist\r
13@REM If the reset flag is set, all environment variables will be reset and \r
14@REM the Conf/target.txt, tools_def.txt and build_rule.txt files will be overwritten\r
15@REM\r
16@REM Three other scripts, located in the BaseTools\Scripts directory, may be called\r
17@REM by this script.\r
18@REM SetVisualStudio.bat - will set the Visual Studio environment based on the --vs* flags\r
19@REM it is also used to build the Win32 binaries, calling nmake \r
20@REM using the WORKSPACE\BaseTools\Makefile\r
21@REM ShowEnvironment.bat - will display the current EDK II Build environment\r
22@REM UpdateBuildVersions.py - script is called prior to building the EDK II BaseTools from\r
23@REM Sources. This tool will modify the BuildVersion.* files so that\r
24@REM when the tools get built, they will have a custom version entry\r
25@REM similar to the following:\r
26@REM e:\edk2>build --version\r
27@REM build.exe Version 0.51 Developer Build based on Revision: 15668\r
28@REM\r
29@REM Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>\r
30@REM This program and the accompanying materials\r
31@REM are licensed and made available under the terms and conditions of the BSD License\r
32@REM which accompanies this distribution. The full text of the license may be found at\r
33@REM http://opensource.org/licenses/bsd-license.php\r
34@REM\r
35@REM THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
36@REM WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
37@REM\r
38@REM\r
39@REM usage:\r
40@REM Edk2Setup.bat [--help | -h] [-v | --version] [-r | --reset] \r
41@REM [--reconfig] [--edk-tools-path DirName]\r
42@REM [--pull [Directory]| --rebuild [Directory]]\r
43@REM [--nt32 [X64]]\r
44\r
45@REM ##############################################################\r
46@REM # You should not have to modify anything below this line\r
47@REM #\r
48@echo off\r
49@set SCRIPT_NAME=%0\r
83185c5a 50@set SCRIPT_VERSION=0.9.2.\r
51@set SVN_REVISION=$Revision$\r
bd63012c 52@set RESET_ENVIRONMENT=FALSE\r
53@set NT32PKG=FALSE\r
54@set NT32_64=FALSE\r
55@set BUILD_TOOLS_WITH=\r
56@set LOCATION=\r
57@set REBUILD_TOOLS=\r
58@set SVN_PULL=\r
59@set SRC_CONF=\r
60@set ARGUMENT=\r
61@set SCRIPT=EDKSETUP_BAT\r
62\r
63@if not defined ORIGINAL_PATH set "ORIGINAL_PATH=%PATH%"\r
64@REM Always set the WORKSPACE environment variable to the current directory\r
65@set "WORKSPACE=%CD%"\r
66@if exist "%WORKSPACE%\BaseTools" @set "BASE_TOOLS_PATH=%WORKSPACE%\BaseTools"\r
67@if not exist "%WORKSPACE%\Conf" @mkdir "%WORKSPACE%\Conf"\r
68\r
69@@if not defined EDK_TOOLS_PATH @set "EDK_TOOLS_PATH=%WORKSPACE%\BaseTools"\r
70@rem @set "PATH=%WORKSPACE%\BaseTools\Bin\Win32;%PATH%"\r
71@rem @set WORKSPACE_TOOLS_PATH=%WORKSPACE%\BaseTools\r
72@rem )\r
73\r
74@REM Keep the existing EDK_TOOLS_PATH value, the --reset flag will set it\r
75@REM back to WORKSPACE\BaseTools while the --location DIRECTORY flag will\r
76@REM still take precedence if the location option follows the reset option\r
77@REM on the command line.\r
78@if defined EDK_TOOLS_PATH @set "LOCATION=%EDK_TOOLS_PATH%"\r
79\r
80:parse_cmd_line\r
81@if "%1"=="" @goto MainRoutine\r
82@if /I "%1"=="-h" @goto Usage\r
83@if /I "%1"=="--help" @goto Usage\r
84@if /I "%1"=="/?" @goto Usage\r
85@if /I "%1"=="--version" @goto Version\r
86\r
87@REM These options will reset the system environment\r
88@if /I "%1"=="-r" (\r
89 @setlocal EnableDelayedExpansion\r
90 @set "WORKSPACE=%CD%"\r
91 @set "EDK_TOOLS_PATH=%CD%\BaseTools"\r
92 @set "LOCATION=!EDK_TOOLS_PATH!"\r
93 @endlocal\r
94 @shift\r
95 @goto parse_cmd_line\r
96)\r
97@if /I "%1"=="--reset" (\r
98 @set "WORKSPACE=%CD%"\r
99 @set "EDK_TOOLS_PATH=%WORKSPACE%\BaseTools"\r
100 @set "LOCATION=%WORKSPACE%\BaseTools"\r
101 @shift\r
102 @goto parse_cmd_line\r
103)\r
104\r
105@REM This option is used to overwrite the Conf/*.txt files with the\r
106@REM WORKSPACE\BaseTools\Conf\*.template files.\r
107@if /I "%1"=="--reconfig" (\r
108 @set RECONFIG=TRUE\r
109 @shift\r
110 @goto parse_cmd_line\r
111)\r
112\r
113@REM This option can be used to set the EDK_TOOLS_PATH containing the Win32 binaries to an\r
114@REM alternate directory\r
115@if /I "%1"=="--edk-tools-path" (\r
116 @setlocal EnableDelayedExpansion\r
117 @set ARGUMENT=%2\r
118 @if "!ARGUMENT:~0,2!"=="--" (\r
119 @echo.\r
120 @echo ERROR : The --edk-tools-path flag requires an argument\r
121 @echo.\r
122 @endlocal\r
123 @goto Usage\r
124 )\r
125 @endlocal\r
126 @set "LOCATION=%WORKSPACE%\%2"\r
127 @shift\r
128 @shift\r
129 @goto parse_cmd_line\r
130)\r
131\r
132@REM Force pulling updated (or checkout if they do not exist) from SVN for the BaseTools\Bin\Win32 directory\r
133@REM or the directory pointed to by the --location option\r
134@if /I "%1"=="--pull" (\r
135 @if "%REBUILD_TOOLS%"=="TRUE" (\r
136 @echo.\r
137 @echo ERROR: The --pull option may not be used with the --rebuild option\r
138 @shift\r
139 @goto ExitFailure\r
140 )\r
141 @set SVN_PULL=TRUE\r
142 @setlocal EnableDelayedExpansion\r
143 @set ARGUMENT=%2\r
144 @if not "!ARGUMENT:~0,2!"=="--" (\r
145 @endlocal\r
146 @set "LOCATION=%2"\r
147 @shift\r
148 )\r
149 @shift\r
150 @goto parse_cmd_line\r
151)\r
152\r
153@REM This options forces rebuilding the tools (provided the required tools are available\r
154@if /I "%1"=="--rebuild" (\r
155 @if "%SVN_PULL%"=="TRUE" (\r
156 @echo.\r
157 @echo ERROR: The --reset option may not be used with the --pull option\r
158 @shift\r
159 @goto ExitFailure\r
160 )\r
161 @set REBUILD_TOOLS=TRUE\r
162 @setlocal EnableDelayedExpansion\r
163 @set ARGUMENT=%2\r
164 @if not "!ARGUMENT:~0,2!"=="--" (\r
165 @endlocal\r
166 @set "LOCATION=%2"\r
167 @shift\r
168 )\r
169 @shift\r
170 goto parse_cmd_line\r
171)\r
172\r
173@REM This option will try to set the compiler environment for building Nt32Pkg/Nt32Pkg.dsc\r
174@REM If the compiler environment is already installed, then no additional work is required.\r
175@if /I "%1"=="--nt32" (\r
176 @set NT32PKG=TRUE\r
177 @if not defined BUILD_TOOLS_WITH (\r
178 @set BUILD_TOOLS_WITH=Latest\r
179 )\r
180 @REM This option will try to set the environment for building the Nt32Pkg/Nt32Pkg; on a 64-bit \r
181 @REM Windows OS\r
182 @if /I "%2"=="X64" (\r
183 @set NT32_64=TRUE\r
184 @shift\r
185 )\r
186 @shift\r
187 @goto parse_cmd_line\r
188)\r
189\r
190@if not "%1"=="" goto UnknownOptionOrArgument\r
191@goto MainRoutine\r
192\r
193:Usage\r
194@echo Usage: %SCRIPT_NAME% [Options]\r
195@echo Copyright(c) 2014, Intel Corporation. All rights reserved.\r
196@echo.\r
197@echo The system environment variable, WORKSPACE, is always set to the current \r
198@echo working directory.\r
199@echo.\r
200@echo Options:\r
201@echo --help, -h Print this help screen and exit.\r
202@echo.\r
203@echo --version Print this script's version and exit.\r
204@echo.\r
205@echo --reset, -r Reset the EDK_TOOLS_PATH and PATH system environment\r
206@echo variables. The EDK_TOOLS_PATH default is \r
207@echo WORKSPACE\BaseTools, however, it may be overridden by\r
208@echo arguments given to the --edk-tools-path, --pull and/or\r
209@echo --rebuild options.\r
210@echo Once set, the EDK_TOOLS_PATH environment variable reset\r
211@echo by opening up a new command prompt window or through one\r
212@echo of the options provided by this tool\r
213@echo.\r
214@echo --reconfig Overwrite the WORKSPACE/Conf/*.txt files with the\r
215@echo template files from the BaseTools/Conf directory.\r
216@echo.\r
217@echo --edk-tools-path DIRECTORY\r
218@echo This option sets the EDK_TOOLS_PATH to the DIRECTORY\r
219@echo value instead of the default (WORKSPACE\BaseTools).\r
220@echo.\r
221@echo --nt32 [X64] If a compiler tool chain is not available in the\r
222@echo environment, call a script to attempt to set one up.\r
223@echo This flag is only required if building the\r
224@echo Nt32Pkg/Nt32Pkg.dsc system emulator.\r
225@echo If the X64 argument is set, and a compiler tool chain is\r
226@echo not available, attempt to set up a tool chain that will\r
227@echo create X64 binaries. Setting these two options have the\r
228@echo potential side effect of changing tool chains used for a\r
229@echo rebuild.\r
230@echo.\r
231@pause\r
232@echo.\r
233@echo --pull [DIRECTORY] Get the EDK II BaseTools binaries from source control \r
234@echo (must not be used with --rebuild).\r
235@echo If the optional DIRECTORY argument is specified, the tool\r
236@echo sets EDK_TOOLS_PATH to DIRECTORY.\r
237@echo If the DIRECTORY argument is not specified, the tools are\r
238@echo placed in the directory tree pointed to by the current \r
239@echo EDK_TOOLS_PATH environment variable. If the binaries\r
240@echo cannot be obtained from source control, the \r
241@echo EDK_TOOLS_PATH will be set to the default, \r
242@echo WORKSPACE\BaseTools directory.\r
243@echo.\r
244@echo --rebuild [DIRECTORY]\r
245@echo Force Rebuilding the EDK II BaseTools from source\r
246@echo (must not be used with --pull).\r
247@echo NOTE: The build will use whatever compiler tool set\r
248@echo is available in the environment prior to\r
249@echo running edksetup.bat.\r
250@echo If the optional DIRECTORY argument is specified, the tool\r
251@echo sets EDK_TOOLS_PATH to DIRECTORY. Tools binaries will be\r
252@echo placed in the appropriate subdirectory in the \r
253@echo EDK_TOOLS_PATH directory. If the build fails, the\r
254@echo EDK_TOOLS_PATH will be set to the default,\r
255@echo WORKSPACE\BaseTools directory.\r
256@goto ExitSuccess\r
257\r
258:Version\r
259@echo %SCRIPT_NAME% Version: %SCRIPT_VERSION%%SVN_REVISION:~11,-1%\r
260@echo Copyright(c) 2014, Intel Corporation. All rights reserved.\r
261@set HIDE_PATH=TRUE\r
262@call "%WORKSPACE%\BaseTools\Scripts\ShowEnvironment.bat"\r
263@set HIDE_PATH=\r
264@goto ExitSuccess\r
265\r
266:UnknownOptionOrArgument\r
267@echo. ERROR : This argument is not valid: %1\r
268@echo.\r
269@goto ExitFailure\r
270\r
271:NoVisualStudio\r
272@echo ERROR : Unable to determine if a compiler tool chain has been enabled in this\r
273@echo command-prompt window. Rebuilding of the tools with this script is not\r
274@echo possible.\r
275@echo Refer to the BaseTools\BuildNotes.txt for directions for building \r
276@echo the BaseTools binaries.\r
277@echo.\r
278@goto ExitFailure\r
279\r
280:NoPython\r
281@echo ERROR : Unable to rebuild the BaseTools binaries, python does not appear to be\r
282@echo installed. If python is installed, please set the environment\r
283@echo variable, PYTHONHOME to the Path to the python.exe, for example,\r
284@echo if python.exe is located in the C:\Python27 directory, then:\r
285@echo set PYTHONHOME=C:\Python27\r
286@echo.\r
287@goto ExitFailure\r
288\r
289:BadPython\r
290@echo ERROR : Unable to rebuild the BaseTools binaries, python does not appear to be\r
291@echo installed. \r
292@echo The python executable was not found in the PYTHONHOME: %PYTHONHOME%\r
293@echo If python is installed, please set the environment variable, PYTHONHOME \r
294@echo to the Path that contains python.exe, for example, if python.exe is\r
295@echo located in the C:\Python27 directory, then:\r
296@echo set PYTHONHOME=C:\Python27\r
297@echo.\r
298@goto ExitFailure\r
299\r
300:NoCxFreeze\r
301@echo ERROR : Unable to locate cx_Freeze 4.2.3. The cxfreeze.bat file must be located\r
302@echo in the %PYTHONHOME%\Scripts directoryin order to rebuild the BaseTools\r
303@echo binaries.\r
304@echo.\r
305@goto ExitFailure\r
306\r
307:NoBaseTools\r
308@echo ERROR: Unable to locate the BaseTools directory containing the Source tree\r
309@echo.\r
310@goto ExitFailure\r
311\r
312@REM #########################################################################################\r
313@REM MAIN ROUTINE\r
314@REM Set up the Build System environment\r
315@REM #########################################################################################\r
316:MainRoutine\r
317@if defined LOCATION @set "EDK_TOOLS_PATH=%LOCATION%"\r
318@REM SET the EDK_TOOLS_PATH.\r
319@if not exist "%EDK_TOOLS_PATH%" (\r
320 @mkdir %EDK_TOOLS_PATH%\r
321)\r
bd4fa6f5 322@if not defined NASM_PREFIX (\r
323 @echo.\r
324 @echo WARNING : NASM_PREFIX environment variable is not set\r
325 @if exist "C:\nasm\nasm.exe" @set "NASM_PREFIX=C:\nasm\"\r
326 @if exist "C:\nasm\nasm.exe" @echo Found nasm.exe, setting the environment variable to C:\nasm\\r
327 @if not exist "C:\nasm\nasm.exe" echo Attempting to build modules that require NASM will fail.\r
328)\r
bd63012c 329@REM Set up the path to include the EDK_TOOLS_PATH\Bin\Win32 directory; this test determines\r
330@REM whether the path is in the workspace or a fully qualified path that may be outside of\r
331@REM the workspace\r
332@if exist "%WORKSPACE%\%EDK_TOOLS_PATH%" @set "EDK_TOOLS_PATH=%WORKSPACE%\%EDK_TOOLS_PATH%"\r
333\r
334@if defined REBUILD_TOOLS goto SetConf\r
335@if defined SVN_PULL goto SetConf\r
336@if not exist "%EDK_TOOLS_PATH%\Bin\Win32\build.exe" (\r
337 @echo ERROR : %EDK_TOOLS_PATH%\Bin\Win32\build.exe does not exist\r
338 @echo Re-run this script using --reset, --pull or --rebuild\r
339 @echo.\r
340 @goto ExitFailure\r
341)\r
342@echo.\r
343@echo Rebuilding of the tools is not required. Binaries of the latest,\r
344@echo tested versions of the tools have been tested and included in the\r
345@echo EDK II repository.\r
346@echo.\r
347@echo If you really want to build the tools, use the --rebuild option.\r
348@echo.\r
349@if not defined CYGWIN_HOME @echo "!!! WARNING !!! No CYGWIN_HOME set, gcc build may not be used !!!"\r
350@if not defined CYGWIN_HOME @echo.\r
351@REM Make sure the WORKSPACE\Conf directory contains the required text files that will be\r
352@REM copied or replaced from the WORKSPACE\BaseTools\Conf directories' template files.\r
353:SetConf\r
354@if not exist "%EDK_TOOLS_PATH%\Conf" (\r
355 @if exist "%WORKSPACE%\BaseTools\Conf" (\r
356 @set "SRC_CONF=%WORKSPACE%\BaseTools\Conf"\r
357 )\r
358) else (\r
359 @set "SRC_CONF=%EDK_TOOLS_PATH%\Conf"\r
360)\r
361@if not defined SRC_CONF (\r
362 @echo ERROR : Unable to locate the BaseTools directory tree\r
363 @goto ExitFailure\r
364)\r
365\r
366@REM The script will test to see if the files exist, and also use the RESET_ENVIRONMENT flag\r
367@REM to overwrite the WORKSPACE\Conf *.txt files.\r
368@call "%WORKSPACE%\BaseTools\Scripts\ShowEnvironment.bat"\r
369@if errorlevel 1 (\r
370 @echo Unable to copy the template files from "%SRC_CONF%" to "%WORKSPACE%\Conf"\r
371 @goto ExitFailure\r
372)\r
373@set SRC_CONF=\r
374\r
375@REM Set up Visual Studio if required to build the Nt32Pkg/Nt32Pkg.dsc emulator\r
376@if "%NT32PKG%"=="TRUE" (\r
cd92f938 377 @if not defined VSINSTALLDIR @set "PATH=%ORIGINAL_PATH%"\r
bd63012c 378 @if not defined NT32_X64 @call "%WORKSPACE%\BaseTools\get_vsvars.bat"\r
bd4fa6f5 379 @if defined NT32_X64 call "%WORKSPACE%\BaseTools\Scripts\SetVisualStudio.bat"\r
bd63012c 380 @set NT32_X64=\r
381)\r
382@if "%NT32PKG%"=="TRUE" (\r
cd92f938 383 @if not defined VS_PATH set "VS_PATH=%PATH%"\r
bd63012c 384)\r
385@if defined VS_PATH @set "PATH=%VS_PATH%"\r
386@if not defined VS_PATH @set "PATH=%ORIGINAL_PATH%"\r
cd92f938 387@set "PATH=%EDK_TOOLS_PATH%\Bin\Win32;%PATH%"\r
bd63012c 388\r
389@if "%REBUILD_TOOLS%"=="TRUE" @goto Rebuild\r
390@if "%SVN_PULL%"== "TRUE" (\r
391 if defined PYTHONHOME (\r
392 @REM Use the python script if possible to test is the svn command is available, if it fails, the user may be\r
393 @REM able to rebuild the Win32 binaries\r
394 @call "%WORKSPACE%\BaseTools\Scripts\UpdateBuildVersions.py" --svn-test -v\r
395 @if errorlevel 1 (\r
396 @echo ERROR : The command-line svn tool is not available and the Win32 binaries do not exist\r
397 @echo Please re-run this script again with the --rebuild option to attempt to build \r
398 @echo the binaries\r
399 @echo.\r
400 @goto ExitFailure\r
401 )\r
402 @if exist %EDK_TOOLS_PATH%\Bin\Win32 @rmdir /S /Q %EDK_TOOLS_PATH%\Bin\Win32\r
403 @call svn co https://svn.code.sf.net/p/edk2-toolbinaries/code/trunk/Win32 "%EDK_TOOLS_PATH%\Bin\Win32"\r
404 ) else (\r
405 @call svn co https://svn.code.sf.net/p/edk2-toolbinaries/code/trunk/Win32 "%EDK_TOOLS_PATH%\Bin\Win32"\r
406 @if errorlevel 1 (\r
407 @echo ERROR : The command-line svn tool is not available and the Win32 binaries do not exist\r
408 @echo Python does not appear to be available either. This script cannot be used to\r
409 @echo build the Win32 binaries or to obtain them from this repository:\r
410 @echo https://svn.code.sf.net/p/edk2-toolbinaries/code/trunk/Win32\r
411 @goto ExitFailure\r
412 )\r
413 )\r
414 @goto ShowAndExit\r
415)\r
416\r
417@if not "%REBUILD_TOOLS%"=="TRUE" @goto ShowAndExit\r
418\r
419@REM The following code is used to rebuild the Win32 BaseTools binaries - check that required tools are available\r
420:Rebuild\r
421@if not defined BASE_TOOLS_PATH @set "BASE_TOOLS_PATH=%WORKSPACE%\BaseTools"\r
422@if not exist "%BASE_TOOLS_PATH%\Source" @goto NoBaseTools\r
423@endlocal\r
424@if not defined VCINSTALLDIR @goto NoVisualStudio\r
425@if not defined PYTHONHOME @goto NoPython\r
426@if not exist "%PYTHONHOME%\python.exe" @goto BadPython\r
427@REM python.exe has been located, now make sure it's in the PATH\r
428@call python --version > nul 2>&1\r
429@if errorlevel 1 @set "PATH=%PYTHONHOME%\python.exe;%PATH%"\r
430@if not defined PYTHON_FREEZER_PATH (\r
bd4fa6f5 431 @if not exist "%PYTHONHOME%\Scripts\cxfreeze.bat" @goto NoCxFreeze\r
432 @set "PYTHON_FREEZER_PATH=%PYTHONHOME%\Scripts"\r
bd63012c 433)\r
434@call "%WORKSPACE%\BaseTools\Scripts\SetVisualStudio.bat"\r
435@if errorlevel 1 @goto ExitFailure\r
436\r
437:ShowAndExit\r
438@call "%WORKSPACE%\BaseTools\Scripts\ShowEnvironment.bat"\r
439\r
440@REM #########################################################################################\r
441@REM EXIT ROUTINES\r
442@REM #########################################################################################\r
443:ExitSuccess\r
444@set SCRIPT_NAME=\r
445@set SCRIPT_VERSION=\r
446@set SVN_REVISION=\r
447@set RESET_ENVIRONMENT=\r
448@set RECONFIG=\r
449@set NT32PKG=\r
450@set NT32_64=\r
451@set BUILD_TOOLS_WITH=\r
452@set LOCATION=\r
453@set REBUILD_TOOLS=\r
454@set SVN_PULL=\r
455@set SRC_CONF=\r
456@set ARGUMENT=\r
457@set SCRIPT=\r
458@set LIST_VS_VERSIONS=\r
459@set PYTHON_FREEZER_PATH=\r
460@echo on\r
461@exit /B 0\r
462\r
463:ExitFailure\r
464@set SCRIPT_NAME=\r
465@set SCRIPT_VERSION=\r
466@set SVN_REVISION=\r
467@set RESET_ENVIRONMENT=\r
468@set RECONFIG=\r
469@set NT32PKG=\r
470@set NT32_64=\r
471@set BUILD_TOOLS_WITH=\r
472@set LOCATION=\r
473@set REBUILD_TOOLS=\r
474@set SVN_PULL=\r
475@set SRC_CONF=\r
476@set ARGUMENT=\r
477@set SCRIPT=\r
478@set LIST_VS_VERSIONS=\r
479@set PYTHON_FREEZER_PATH=\r
480@echo on\r
481@exit /B 1\r