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