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