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