1 #/*++ 2 # 3 # Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR> 4 # This program and the accompanying materials 5 # are licensed and made available under the terms and conditions of the BSD License 6 # which accompanies this distribution. The full text of the license may be found at 7 # http://opensource.org/licenses/bsd-license.php 8 # 9 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 10 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 11 # 12 # Module Name: 13 # 14 # Common.dsc 15 # 16 # Abstract: 17 # 18 # This is the build description file containing the platform 19 # independent build instructions. Platform specific instructions will 20 # be prepended to produce the final build DSC file. 21 # 22 # 23 # Notes: 24 # 25 # The info in this file is broken down into sections. The start of a section 26 # is designated by a "[" in the first column. So the [=====] separater ends 27 # a section. 28 # 29 #--*/ 30 31 [=============================================================================] 32 # 33 # These get emitted at the top of the generated master makefile. 34 # 35 [=============================================================================] 36 [Makefile.out] 37 # 38 # From the [makefile.out] section of the DSC file 39 # 40 TOOLCHAIN = 41 MAKE = nmake -nologo 42 43 !INCLUDE $(BUILD_DIR)\PlatformTools.env 44 45 all : libraries fvs 46 47 [=============================================================================] 48 # 49 # These get expanded and dumped out to each component makefile after the 50 # component INF [defines] section gets parsed. 51 # 52 [=============================================================================] 53 [Makefile.Common] 54 # 55 # From the [Makefile.Common] section of the description file. 56 # 57 PROCESSOR = $(PROCESSOR) 58 BASE_NAME = $(BASE_NAME) 59 BUILD_NUMBER = $(BUILD_NUMBER) 60 VERSION_STRING = $(VERSION_STRING) 61 TOOLCHAIN = TOOLCHAIN_$(PROCESSOR) 62 FILE_GUID = $(FILE_GUID) 63 COMPONENT_TYPE = $(COMPONENT_TYPE) 64 FV_DIR = $(BUILD_DIR)\FV 65 PLATFORM = $(PROJECT_NAME) 66 67 # 68 # Define the global dependency files 69 # 70 !IF EXIST ($(DEST_DIR)\$(BASE_NAME)StrDefs.h) 71 INC_DEPS = $(INC_DEPS) $(DEST_DIR)\$(BASE_NAME)StrDefs.h 72 !ENDIF 73 #ENV_DEPS = $(ENV_DEPS) $(EDK_SOURCE)\Sample\CommonTools.env 74 #ENV_DEPS = $(ENV_DEPS) $(BUILD_DIR)\PlatformTools.env 75 #ENV_DEPS = $(ENV_DEPS) $(BUILD_DIR)\Config.env 76 ALL_DEPS = $(INC_DEPS) $(ENV_DEPS) 77 78 !IF "$(LANGUAGE)" != "" 79 LANGUAGE_FLAGS = -lang $(LANGUAGE) 80 !ENDIF 81 82 !INCLUDE $(BUILD_DIR)\PlatformTools.env 83 84 !IF "$(COMPONENT_TYPE)" == "PIC_PEIM" || "$(COMPONENT_TYPE)" == "PE32_PEIM" || "$(COMPONENT_TYPE)" == "RELOCATABLE_PEIM" || "$(COMPONENT_TYPE)" == "COMBINED_PEIM_DRIVER" 85 DEPEX_TYPE = EFI_SECTION_PEI_DEPEX 86 !ELSE 87 DEPEX_TYPE = EFI_SECTION_DXE_DEPEX 88 !ENDIF 89 90 !IF "$(COMPONENT_TYPE)" != "LIBRARY" && EXIST($(BUILD_DIR)\$(PROCESSOR)\CompilerStub.lib) 91 LIBS = $(LIBS) $(BUILD_DIR)\$(PROCESSOR)\CompilerStub.lib 92 !ENDIF 93 94 # 95 # Command flags for MAKEDEPS tool 96 # 97 DEP_FLAGS = -target $** -o $(DEP_FILE) $(INC) -ignorenotfound -q 98 DEP_FLAGS2 = -target $@ -o $(DEP_FILE) -cl 99 100 [=============================================================================] 101 # 102 # These are the commands to compile source files. One of these blocks gets 103 # emitted to the component's makefile for each source file. The section 104 # name is encoded as [Compile.$(PROCESSOR).source_filename_extension], where 105 # the source filename comes from the sources section of the component INF file. 106 # 107 # If the dependency list file already exists, then include it for this 108 # source file. If it doesn't exist, then this is a clean build and the 109 # dependency file will get created below and the source file will get 110 # compiled. 111 # 112 # Current behavior is that the first clean build will not create dep files. 113 # But the following second build has to create dep files before build source files. 114 # CREATEDEPS flag is used to judge whether current build is the second build or not. 115 # 116 # 117 [=============================================================================] 118 [Compile.Ia32.asm,Compile.x64.asm] 119 120 # 121 # Add build dependency check 122 # 123 DEP_FILE = $(DEST_DIR)\$(FILE)Asm.dep 124 125 !IF EXIST($(DEP_FILE)) 126 !INCLUDE $(DEP_FILE) 127 !ENDIF 128 129 !IF EXIST($(DEST_DIR)\$(FILE).obj) 130 DEP_TARGETS = $(DEP_TARGETS) $(DEST_DIR)\$(FILE)Asm.dep 131 !IF !EXIST($(DEP_FILE)) 132 CREATEDEPS = YES 133 !ENDIF 134 !ENDIF 135 136 # 137 # Update dep file for next round incremental build 138 # 139 $(DEP_FILE) : $(DEST_DIR)\$(FILE).obj 140 $(MAKEDEPS) -f $(SOURCE_FILE_NAME) $(DEP_FLAGS) -asm 141 142 # 143 # Compile the file 144 # 145 $(DEST_DIR)\$(FILE).obj : $(SOURCE_FILE_NAME) $(INF_FILENAME) $(ALL_DEPS) 146 $(ASM) $(ASM_FLAGS) $(SOURCE_FILE_NAME) 147 148 [=============================================================================] 149 [Compile.Ipf.s] 150 151 # 152 # Add build dependency check 153 # 154 DEP_FILE = $(DEST_DIR)\$(FILE)S.dep 155 156 !IF EXIST($(DEP_FILE)) 157 !INCLUDE $(DEP_FILE) 158 !ENDIF 159 160 !IF "$(EFI_USE_CL_FOR_DEP)" != "YES" 161 162 !IF EXIST($(DEST_DIR)\$(FILE).obj) 163 DEP_TARGETS = $(DEP_TARGETS) $(DEST_DIR)\$(FILE)S.dep 164 !IF !EXIST($(DEP_FILE)) 165 CREATEDEPS = YES 166 !ENDIF 167 !ENDIF 168 169 # 170 # Update dep file for next round incremental build 171 # 172 $(DEP_FILE) : $(DEST_DIR)\$(FILE).obj 173 $(MAKEDEPS) -f $(SOURCE_FILE_NAME) $(DEP_FLAGS) 174 175 !ENDIF 176 177 # 178 # Compile the file 179 # 180 $(DEST_DIR)\$(FILE).obj : $(SOURCE_FILE_NAME) $(INF_FILENAME) $(ALL_DEPS) 181 !IF "$(EFI_USE_CL_FOR_DEP)" != "YES" 182 $(CC) $(C_FLAGS_PRO) $(SOURCE_FILE_NAME) > $(DEST_DIR)\$(FILE).pro 183 !ELSE 184 -$(CC) $(C_FLAGS_PRO) $(SOURCE_FILE_NAME) /showIncludes > $(DEST_DIR)\$(FILE).pro 2> $(DEST_DIR)\$(FILE)S.cl 185 @$(MAKEDEPS) -f $(DEST_DIR)\$(FILE)S.cl $(DEP_FLAGS2) 186 !ENDIF 187 $(ASM) $(ASM_FLAGS) $(DEST_DIR)\$(FILE).pro 188 189 [=============================================================================] 190 [Compile.Ia32.c,Compile.Ipf.c,Compile.x64.c] 191 192 # 193 # Add build dependency check 194 # 195 DEP_FILE = $(DEST_DIR)\$(FILE).dep 196 197 !IF EXIST($(DEP_FILE)) 198 !INCLUDE $(DEP_FILE) 199 !ENDIF 200 201 !IF "$(EFI_USE_CL_FOR_DEP)" != "YES" 202 203 !IF EXIST($(DEST_DIR)\$(FILE).obj) 204 DEP_TARGETS = $(DEP_TARGETS) $(DEST_DIR)\$(FILE).dep 205 !IF !EXIST($(DEP_FILE)) 206 CREATEDEPS = YES 207 !ENDIF 208 !ENDIF 209 210 # 211 # Update dep file for next round incremental build 212 # 213 $(DEP_FILE) : $(DEST_DIR)\$(FILE).obj 214 $(MAKEDEPS) -f $(SOURCE_FILE_NAME) $(DEP_FLAGS) 215 216 !ENDIF 217 218 # 219 # Compile the file 220 # 221 $(DEST_DIR)\$(FILE).obj : $(SOURCE_FILE_NAME) $(INF_FILENAME) $(ALL_DEPS) 222 !IF "$(EFI_USE_CL_FOR_DEP)" != "YES" 223 $(CC) $(C_FLAGS) $(SOURCE_FILE_NAME) 224 !ELSE 225 -$(CC) $(C_FLAGS) $(SOURCE_FILE_NAME) /showIncludes > $(DEST_DIR)\$(FILE).cl 226 @$(MAKEDEPS) -f $(DEST_DIR)\$(FILE).cl $(DEP_FLAGS2) 227 !ENDIF 228 229 [=============================================================================] 230 [Compile.Ebc.c] 231 232 # 233 # Add build dependency check 234 # 235 DEP_FILE = $(DEST_DIR)\$(FILE).dep 236 237 !IF EXIST($(DEP_FILE)) 238 !INCLUDE $(DEP_FILE) 239 !ENDIF 240 241 !IF EXIST($(DEST_DIR)\$(FILE).obj) 242 DEP_TARGETS = $(DEP_TARGETS) $(DEST_DIR)\$(FILE).dep 243 !IF !EXIST($(DEP_FILE)) 244 CREATEDEPS = YES 245 !ENDIF 246 !ENDIF 247 248 # 249 # Update dep file for next round incremental build 250 # 251 $(DEP_FILE) : $(DEST_DIR)\$(FILE).obj 252 $(MAKEDEPS) -f $(SOURCE_FILE_NAME) $(DEP_FLAGS) 253 254 # 255 # Compile the file 256 # 257 $(DEST_DIR)\$(FILE).obj : $(SOURCE_FILE_NAME) $(INF_FILENAME) $(ALL_DEPS) 258 $(EBC_CC) $(EBC_C_FLAGS) $(SOURCE_FILE_NAME) 259 260 [=============================================================================] 261 # 262 # Commands for compiling a ".apr" Apriori source file. 263 # 264 [=============================================================================] 265 [Compile.Ia32.Apr,Compile.Ipf.Apr,Compile.Ebc.Apr,Compile.x64.Apr] 266 # 267 # Create the raw binary file. If you get an error on the build saying it doesn't 268 # know how to create the .apr file, then you're missing (or mispelled) the 269 # "APRIORI=" on the component lines in components section in the DSC file. 270 # 271 $(DEST_DIR)\$(BASE_NAME).bin : $(SOURCE_FILE_NAME) $(INF_FILENAME) 272 $(GENAPRIORI) -v -f $(SOURCE_FILE_NAME) -o $(DEST_DIR)\$(BASE_NAME).bin 273 274 $(DEST_DIR)\$(BASE_NAME).sec : $(DEST_DIR)\$(BASE_NAME).bin 275 $(GENSECTION) -I $(DEST_DIR)\$(BASE_NAME).bin -O $(DEST_DIR)\$(BASE_NAME).sec -S EFI_SECTION_RAW 276 277 [=============================================================================] 278 [Build.Ia32.Apriori,Build.Ipf.Apriori,Build.Ebc.Apriori,Build.x64.Apriori] 279 280 all : $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).FFS 281 282 # 283 # Run GenFfsFile on the package file and .raw file to create the firmware file 284 # 285 $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).FFS : $(DEST_DIR)\$(BASE_NAME).sec $(PACKAGE_FILENAME) 286 $(GENFFSFILE) -B $(DEST_DIR) -P1 $(PACKAGE_FILENAME) -V 287 288 # 289 # Remove the generated temp and final files for this modules. 290 # 291 clean : 292 !IF ("$(FILE_GUID)" != "") 293 @if exist $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* del $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* 294 !ENDIF 295 @if exist $(BIN_DIR)\$(BASE_NAME).* del $(BIN_DIR)\$(BASE_NAME).* 296 @del /q $(DEST_OUTPUT_DIRS) 297 298 [=============================================================================] 299 [Build.Ia32.Makefile,Build.Ipf.Makefile,Build.Ebc.Makefile,Build.x64.Makefile] 300 301 # 302 # Set some required macros 303 # 304 MAKEFILE_MACROS = SOURCE_DIR=$(SOURCE_DIR) \ 305 BUILD_DIR=$(BUILD_DIR) \ 306 FILE_GUID=$(FILE_GUID) \ 307 DEST_DIR=$(DEST_DIR) \ 308 PROCESSOR=$(PROCESSOR) \ 309 TOOLCHAIN=TOOLCHAIN_$(PROCESSOR) \ 310 BASE_NAME=$(BASE_NAME) \ 311 PACKAGE_FILENAME=$(PACKAGE_FILENAME) 312 313 # 314 # Just call the makefile from the source directory, passing in some 315 # useful info. 316 # 317 all : 318 $(MAKE) -f $(SOURCE_DIR)\makefile.new all $(MAKEFILE_MACROS) 319 320 # 321 # Remove the generated temp and final files for this modules. 322 # 323 clean : 324 @- $(MAKE) -f $(SOURCE_DIR)\makefile.new clean $(MAKEFILE_MACROS) > NUL 2>&1 325 !IF ("$(FILE_GUID)" != "") 326 @if exist $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* del $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* 327 !ENDIF 328 @if exist $(BIN_DIR)\$(BASE_NAME).* del $(BIN_DIR)\$(BASE_NAME).* 329 @del /q $(DEST_OUTPUT_DIRS) 330 331 [=============================================================================] 332 # 333 # Instructions for building a component that uses a custom makefile. Encoding 334 # is [build.$(PROCESSOR).$(BUILD_TYPE)]. 335 # 336 # To build these components, simply call the makefile from the source 337 # directory. 338 # 339 [=============================================================================] 340 [Build.Ia32.Custom_Makefile,Build.Ipf.Custom_Makefile,Build.Ebc.Custom_Makefile,Build.x64.Custom_Makefile] 341 342 # 343 # Set some required macros 344 # 345 MAKEFILE_MACROS = SOURCE_DIR=$(SOURCE_DIR) \ 346 BUILD_DIR=$(BUILD_DIR) \ 347 DEST_DIR=$(DEST_DIR) \ 348 FILE_GUID=$(FILE_GUID) \ 349 PROCESSOR=$(PROCESSOR) \ 350 TOOLCHAIN=TOOLCHAIN_$(PROCESSOR) \ 351 BASE_NAME=$(BASE_NAME) \ 352 PLATFORM=$(PLATFORM) \ 353 SOURCE_FV=$(SOURCE_FV) \ 354 PACKAGE_FILENAME=$(PACKAGE_FILENAME) 355 356 # 357 # Just call the makefile from the source directory, passing in some 358 # useful info. 359 # 360 all : 361 $(MAKE) -f $(SOURCE_DIR)\makefile all $(MAKEFILE_MACROS) 362 363 # 364 # Remove the generated temp and final files for this modules. 365 # 366 clean : 367 @- $(MAKE) -f $(SOURCE_DIR)\makefile clean $(MAKEFILE_MACROS) > NUL 2>&1 368 !IF ("$(FILE_GUID)" != "") 369 @if exist $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* del $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* 370 !ENDIF 371 @if exist $(BIN_DIR)\$(BASE_NAME).* del $(BIN_DIR)\$(BASE_NAME).* 372 @del /q $(DEST_OUTPUT_DIRS) 373 374 [=============================================================================] 375 # 376 # These commands are used to build libraries 377 # 378 [=============================================================================] 379 [Build.Ia32.LIBRARY,Build.Ipf.LIBRARY,Build.x64.LIBRARY] 380 # 381 # LIB all the object files into to our target lib file. Put 382 # a dependency on the component's INF file in case it changes. 383 # 384 LIB_NAME = $(LIB_DIR)\$(BASE_NAME).lib 385 386 # 387 # $(DEP_TARGETS) are not needed for binary build. 388 # 389 !IF ("$(BINARY)" == "TRUE") || (("$(BINARY)" == "") && ("$(EFI_BINARY_LIBRARY)" == "YES")) 390 DEP_TARGETS= 391 CREATEDEPS= 392 !ENDIF 393 394 # 395 # Module can be built from source code or binary files. 396 # 397 !IF ((("$(BINARY)" == "TRUE") || (("$(BINARY)" == "") && ("$(EFI_BINARY_LIBRARY)" == "YES"))) \ 398 && EXIST($(EFI_PLATFORM_BIN)\$(PROCESSOR)\$(BASE_NAME).lib)) 399 $(LIB_NAME) : $(EFI_PLATFORM_BIN)\$(PROCESSOR)\$(BASE_NAME).lib 400 copy $(EFI_PLATFORM_BIN)\$(PROCESSOR)\$(BASE_NAME).lib $(LIB_NAME) /Y 401 if exist $(EFI_PLATFORM_BIN)\$(PROCESSOR)\$(BASE_NAME)Obj.pdb \ 402 copy $(EFI_PLATFORM_BIN)\$(PROCESSOR)\$(BASE_NAME)Obj.pdb $(DEST_DIR)\$(BASE_NAME)Obj.pdb /Y 403 !ELSE 404 $(LIB_NAME) : $(OBJECTS) $(LIBS) $(INF_FILENAME) $(ENV_DEPS) 405 $(LIB) $(LIB_FLAGS) $(OBJECTS) $(LIBS) /OUT:$@ 406 !IF ("$(EFI_BINARY_BUILD)" == "YES") 407 if not exist $(EFI_PLATFORM_BIN)\$(PROCESSOR) mkdir $(EFI_PLATFORM_BIN)\$(PROCESSOR) 408 if exist $(LIB_NAME) copy $(LIB_NAME) $(EFI_PLATFORM_BIN)\$(PROCESSOR)\$(BASE_NAME).lib /Y 409 if exist $(DEST_DIR)\$(BASE_NAME)Obj.pdb copy $(DEST_DIR)\$(BASE_NAME)Obj.pdb $(EFI_PLATFORM_BIN)\$(PROCESSOR)\$(BASE_NAME)Obj.pdb /Y 410 !ENDIF 411 !ENDIF 412 413 !IF "$(CREATEDEPS)"=="YES" 414 all : $(DEP_TARGETS) 415 $(MAKE) -f $(MAKEFILE_NAME) all 416 !ELSE 417 all : $(LIB_NAME) $(DEP_TARGETS) 418 !ENDIF 419 420 # 421 # Remove the generated temp and final files for this modules. 422 # 423 clean : 424 !IF ("$(FILE_GUID)" != "") 425 @if exist $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* del $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* 426 !ENDIF 427 @if exist $(BIN_DIR)\$(BASE_NAME).* del $(BIN_DIR)\$(BASE_NAME).* 428 @del /q $(DEST_OUTPUT_DIRS) 429 430 [=============================================================================] 431 [Build.Ebc.LIBRARY] 432 # 433 # LIB all the object files into to our target lib file. Put 434 # a dependency on the component's INF file in case it changes. 435 # 436 LIB_NAME = $(LIB_DIR)\$(BASE_NAME).lib 437 438 $(LIB_NAME) : $(OBJECTS) $(LIBS) $(INF_FILENAME) $(ENV_DEPS) 439 $(EBC_LIB) $(EBC_LIB_FLAGS) $(OBJECTS) $(LIBS) /OUT:$@ 440 441 !IF "$(CREATEDEPS)"=="YES" 442 all : $(DEP_TARGETS) 443 $(MAKE) -f $(MAKEFILE_NAME) all 444 !ELSE 445 all : $(LIB_NAME) $(DEP_TARGETS) 446 !ENDIF 447 448 # 449 # Remove the generated temp and final files for this modules. 450 # 451 clean : 452 !IF ("$(FILE_GUID)" != "") 453 @if exist $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* del $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* 454 !ENDIF 455 @if exist $(BIN_DIR)\$(BASE_NAME).* del $(BIN_DIR)\$(BASE_NAME).* 456 @del /q $(DEST_OUTPUT_DIRS) 457 458 [=============================================================================] 459 # 460 # This is the Build.$(PROCESSOR).$(COMPONENT_TYPE) section that tells how to 461 # convert a firmware volume into an FV FFS file. Simply run it through 462 # GenFfsFile with the appropriate package file. SOURCE_FV must be defined 463 # in the component INF file Defines section. 464 # 465 [=============================================================================] 466 [Build.Ia32.FvImageFile,Build.x64.FvImageFile,Build.Ipf.FvImageFile] 467 468 all : $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).Fvi 469 470 # 471 # Run GenFfsFile on the package file and FV file to create the firmware 472 # volume FFS file. This FFS file maybe contain one pad section for alignment requirement. 473 # 474 $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).Fvi : $(DEST_DIR)\$(SOURCE_FV)Fv.sec $(PACKAGE_FILENAME) $(PAD_SECTION) 475 $(GENFFSFILE) -B $(DEST_DIR) -P1 $(PACKAGE_FILENAME) -V 476 477 # 478 # Remove the generated temp and final files for this modules. 479 # 480 clean : 481 !IF ("$(FILE_GUID)" != "") 482 @if exist $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* del $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* 483 !ENDIF 484 @if exist $(BIN_DIR)\$(BASE_NAME).* del $(BIN_DIR)\$(BASE_NAME).* 485 @del /q $(DEST_OUTPUT_DIRS) 486 487 [=============================================================================] 488 # 489 # Since many of the steps are the same for the different component types, we 490 # share this section for BS_DRIVER, RT_DRIVER, .... and IFDEF the parts that 491 # differ. The entire section gets dumped to the output makefile. 492 # 493 [=============================================================================] 494 [Build.Ia32.BS_DRIVER|RT_DRIVER|SAL_RT_DRIVER|PE32_PEIM|PEI_CORE|PIC_PEIM|RELOCATABLE_PEIM|DXE_CORE|APPLICATION|COMBINED_PEIM_DRIVER, Build.Ipf.BS_DRIVER|RT_DRIVER|SAL_RT_DRIVER|PEI_CORE|PE32_PEIM|PIC_PEIM|DXE_CORE|APPLICATION|COMBINED_PEIM_DRIVER, Build.x64.BS_DRIVER|RT_DRIVER|SAL_RT_DRIVER|PE32_PEIM|PEI_CORE|PIC_PEIM|RELOCATABLE_PEIM|DXE_CORE|APPLICATION|COMBINED_PEIM_DRIVER] 495 496 !IF "$(LOCALIZE)" == "YES" 497 498 !IF (("$(EFI_GENERATE_HII_RESOURCE)" == "YES") && ("$(EFI_SPECIFICATION_VERSION)" >= "0x0002000A")) 499 # 500 # This will generate HII resource section in PE/COFF image. 501 # 502 # Note: when HII package list is built into resource section, Driver no longer 503 # refer to C array generated by VfrCompiler ($(FILE_NAME)Bin) and StrGather 504 # ($(BASE_NAME)Strings); while in current build rule, those C array objects 505 # will still be linked with the Driver, so please turn on link flag "/OPT:REF" 506 # to minimize the code size. 507 # 508 HII_PACK_FILES = $(HII_PACK_FILES) $(DEST_DIR)\$(BASE_NAME)Strings.hpk 509 LOCALIZE_TARGETS = $(LOCALIZE_TARGETS) $(DEST_DIR)\$(BASE_NAME).res 510 LINK_FLAGS_DLL = $(LINK_FLAGS_DLL) $(DEST_DIR)\$(BASE_NAME).res 511 512 $(DEST_DIR)\$(BASE_NAME).rc : $(HII_PACK_FILES) 513 $(HIIPACK) -g $(FILE_GUID) $(HII_PACK_FILES) -rc $(DEST_DIR)\$(BASE_NAME).rc -hii $(DEST_DIR)\$(BASE_NAME).hii 514 515 $(DEST_DIR)\$(BASE_NAME).res : $(DEST_DIR)\$(BASE_NAME).rc 516 $(RC) /fo $(DEST_DIR)\$(BASE_NAME).res $(DEST_DIR)\$(BASE_NAME).rc 517 518 !ENDIF 519 520 !IF (("$(EFI_GENERATE_HII_EXPORT)" == "YES") && ("$(EFI_SPECIFICATION_VERSION)" < "0x0002000A")) 521 # 522 # There will be one HII pack containing all the strings. Add that file 523 # to the list of HII pack files we'll use to create our final HII export file. 524 # 525 HII_PACK_FILES = $(HII_PACK_FILES) $(DEST_DIR)\$(BASE_NAME)Strings.hpk 526 LOCALIZE_TARGETS = $(LOCALIZE_TARGETS) $(DEST_DIR)\$(BASE_NAME).hii 527 !ENDIF 528 529 !IF ("$(EFI_SPECIFICATION_VERSION)" >= "0x0002000A") 530 # 531 # Note: currently -ppflag option is only available for UefiStrGather 532 # Note: /GS- will cause warning for preprocess, so filter it out from STRGATHER_PPFLAG 533 # 534 STRGATHER_PPFLAG = $(C_FLAGS: /GS-=) 535 STRGATHER_FLAGS = $(STRGATHER_FLAGS) -ppflag "$(STRGATHER_PPFLAG)" -oh $(DEST_DIR)\$(BASE_NAME)StrDefs.h 536 !ENDIF 537 538 $(DEST_DIR)\$(BASE_NAME).sdb : $(SDB_FILES) $(SOURCE_FILES) 539 $(STRGATHER) -scan -vdbr $(STRGATHER_FLAGS) -od $(DEST_DIR)\$(BASE_NAME).sdb \ 540 -skipext .uni -skipext .h $(SOURCE_FILES) 541 542 $(DEST_DIR)\$(BASE_NAME)Strings.c : $(DEST_DIR)\$(BASE_NAME).sdb 543 $(STRGATHER) -dump $(LANGUAGE_FLAGS) -bn $(BASE_NAME)Strings -db $(DEST_DIR)\$(BASE_NAME).sdb \ 544 -oc $(DEST_DIR)\$(BASE_NAME)Strings.c 545 546 $(DEST_DIR)\$(BASE_NAME)StrDefs.h : $(DEST_DIR)\$(BASE_NAME).sdb 547 $(STRGATHER) -dump $(LANGUAGE_FLAGS) -bn $(BASE_NAME)Strings -db $(DEST_DIR)\$(BASE_NAME).sdb \ 548 -oh $(DEST_DIR)\$(BASE_NAME)StrDefs.h 549 550 $(DEST_DIR)\$(BASE_NAME)Strings.hpk : $(DEST_DIR)\$(BASE_NAME).sdb 551 $(STRGATHER) -dump $(LANGUAGE_FLAGS) -bn $(BASE_NAME)Strings -db $(DEST_DIR)\$(BASE_NAME).sdb \ 552 -hpk $(DEST_DIR)\$(BASE_NAME)Strings.hpk 553 554 OBJECTS = $(OBJECTS) $(DEST_DIR)\$(BASE_NAME)Strings.obj 555 556 $(DEST_DIR)\$(BASE_NAME)Strings.obj : $(DEST_DIR)\$(BASE_NAME)Strings.c $(INF_FILENAME) $(ALL_DEPS) 557 $(CC) $(C_FLAGS) $(DEST_DIR)\$(BASE_NAME)Strings.c 558 559 LOCALIZE_TARGETS = $(DEST_DIR)\$(BASE_NAME)StrDefs.h $(LOCALIZE_TARGETS) 560 561 !ENDIF 562 563 # 564 # If we have any objects associated with this component, then we're 565 # going to build a local library from them. 566 # 567 !IFNDEF OBJECTS 568 !ERROR No source files to build were defined in the INF file 569 !ENDIF 570 571 TARGET_LOCAL_LIB = $(DEST_DIR)\$(BASE_NAME)Local.lib 572 573 # 574 # LIB all the object files into our (local) target lib file. Put 575 # a dependency on the component's INF file in case it changes. 576 # 577 $(TARGET_LOCAL_LIB) : $(OBJECTS) $(INF_FILENAME) $(ENV_DEPS) 578 $(LIB) $(LIB_FLAGS) $(OBJECTS) /OUT:$@ 579 580 # 581 # Defines for standard intermediate files and build targets 582 # 583 TARGET_DLL = $(BIN_DIR)\$(BASE_NAME).dll 584 TARGET_EFI = $(BIN_DIR)\$(BASE_NAME).efi 585 TARGET_DPX = $(DEST_DIR)\$(BASE_NAME).dpx 586 TARGET_UI = $(DEST_DIR)\$(BASE_NAME).ui 587 TARGET_VER = $(DEST_DIR)\$(BASE_NAME).ver 588 TARGET_MAP = $(BIN_DIR)\$(BASE_NAME).map 589 TARGET_PDB = $(BIN_DIR)\$(BASE_NAME).pdb 590 TARGET_SYM = $(BIN_DIR)\$(BASE_NAME).sym 591 592 # 593 # Target executable section extension depends on the component type. 594 # Only define "TARGET_DXE_DPX" if it's a combined peim driver. 595 # 596 !IF "$(COMPONENT_TYPE)" == "PIC_PEIM" 597 TARGET_PE32 = $(DEST_DIR)\$(BASE_NAME).pic 598 !ELSE 599 TARGET_PE32 = $(DEST_DIR)\$(BASE_NAME).pe32 600 !ENDIF 601 602 # 603 # Target FFS file extension depends on the component type 604 # Also define "TARGET_DXE_DPX" if it's a combined PEIM driver. 605 # 606 SUBSYSTEM = EFI_BOOT_SERVICE_DRIVER 607 608 !IF "$(COMPONENT_TYPE)" == "APPLICATION" 609 TARGET_FFS_FILE = $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).app 610 SUBSYSTEM = EFI_APPLICATION 611 !ELSE IF "$(COMPONENT_TYPE)" == "PEI_CORE" 612 TARGET_FFS_FILE = $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).pei 613 !ELSE IF "$(COMPONENT_TYPE)" == "PE32_PEIM" 614 TARGET_FFS_FILE = $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).pei 615 !ELSE IF "$(COMPONENT_TYPE)" == "RELOCATABLE_PEIM" 616 TARGET_FFS_FILE = $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).pei 617 !ELSE IF "$(COMPONENT_TYPE)" == "PIC_PEIM" 618 TARGET_FFS_FILE = $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).pei 619 !ELSE IF "$(COMPONENT_TYPE)" == "COMBINED_PEIM_DRIVER" 620 TARGET_FFS_FILE = $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).pei 621 TARGET_DXE_DPX = $(DEST_DIR)\$(BASE_NAME).dpxd 622 !ELSE 623 TARGET_FFS_FILE = $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).dxe 624 !ENDIF 625 626 # 627 # Different methods to build section based on if PIC_PEIM 628 # 629 !IF "$(COMPONENT_TYPE)" == "PIC_PEIM" 630 631 $(TARGET_PE32) : $(TARGET_DLL) 632 $(PE2BIN) $(TARGET_DLL) $(DEST_DIR)\$(BASE_NAME).TMP 633 # 634 # BUGBUG: Build PEIM header, needs to go away with new PEI. 635 # 636 $(TEMPGENSECTION) -P $(SOURCE_DIR)\$(BASE_NAME).INF -I $(DEST_DIR)\$(BASE_NAME).TMP -O $(TARGET_PIC_PEI).tmp -M $(TARGET_MAP) -S EFI_SECTION_TYPE_NO_HEADER 637 $(GENSECTION) -I $(TARGET_PIC_PEI).tmp -O $(TARGET_PE32) -S EFI_SECTION_PIC 638 del $(DEST_DIR)\$(BASE_NAME).TMP 639 640 !ELSE 641 642 $(TARGET_PE32) : $(TARGET_EFI) 643 $(GENSECTION) -I $(TARGET_EFI) -O $(TARGET_PE32) -S EFI_SECTION_PE32 644 645 # 646 # $(DEP_TARGETS) are not needed for binary build. 647 # 648 !IF "$(BINARY)" == "TRUE" 649 DEP_TARGETS= 650 CREATEDEPS= 651 !ENDIF 652 653 # 654 # Build module to generate *.efi file from source code or binary file. 655 # 656 !IF (("$(BINARY)" == "TRUE") && EXIST($(EFI_PLATFORM_BIN)\$(PROCESSOR)\$(BASE_NAME).efi)) 657 LOCALIZE_TARGETS= 658 $(TARGET_EFI) : $(EFI_PLATFORM_BIN)\$(PROCESSOR)\$(BASE_NAME).efi 659 copy $(EFI_PLATFORM_BIN)\$(PROCESSOR)\$(BASE_NAME).efi $(TARGET_EFI) /Y 660 if exist $(EFI_PLATFORM_BIN)\$(PROCESSOR)\$(BASE_NAME).pdb \ 661 copy $(EFI_PLATFORM_BIN)\$(PROCESSOR)\$(BASE_NAME).pdb $(TARGET_PDB) /Y 662 !ELSE 663 $(TARGET_EFI) : $(TARGET_DLL) $(INF_FILENAME) 664 $(FWIMAGE) -t 0 $(COMPONENT_TYPE) $(TARGET_DLL) $(TARGET_EFI) 665 !IF ("$(EFI_BINARY_BUILD)" == "YES") 666 if not exist $(EFI_PLATFORM_BIN)\$(PROCESSOR) mkdir $(EFI_PLATFORM_BIN)\$(PROCESSOR) 667 if exist $(TARGET_EFI) copy $(TARGET_EFI) $(EFI_PLATFORM_BIN)\$(PROCESSOR)\$(BASE_NAME).efi /Y 668 if exist $(TARGET_PDB) copy $(TARGET_PDB) $(EFI_PLATFORM_BIN)\$(PROCESSOR)\$(BASE_NAME).pdb /Y 669 !ENDIF 670 !ENDIF 671 672 !ENDIF 673 674 # 675 # Link all objects and libs to create the executable 676 # 677 $(TARGET_DLL) : $(TARGET_LOCAL_LIB) $(LIBS) $(INF_FILENAME) $(ENV_DEPS) 678 $(LINK) $(LINK_FLAGS_DLL) $(LIBS) /ENTRY:$(IMAGE_ENTRY_POINT) \ 679 $(TARGET_LOCAL_LIB) /OUT:$(TARGET_DLL) /MAP:$(TARGET_MAP) \ 680 /PDB:$(TARGET_PDB) 681 $(SETSTAMP) $(TARGET_DLL) $(BUILD_DIR)\GenStamp.txt 682 !IF "$(EFI_GENERATE_SYM_FILE)" == "YES" 683 if exist $(TARGET_PDB) $(PE2SYM) $(TARGET_PDB) $(TARGET_SYM) 684 !ENDIF 685 686 !IF "$(EFI_ZERO_DEBUG_DATA)" == "YES" 687 $(ZERODEBUGDATA) $(TARGET_DLL) 688 !ENDIF 689 690 # 691 # Create the user interface section 692 # 693 $(TARGET_UI) : $(INF_FILENAME) 694 $(GENSECTION) -O $(TARGET_UI) -S EFI_SECTION_USER_INTERFACE -A "$(BASE_NAME)" 695 696 # 697 # Create the version section 698 # 699 !IF "$(BUILD_NUMBER)" != "" 700 !IF "$(VERSION_STRING)" != "" 701 $(TARGET_VER) : $(INF_FILENAME) 702 $(GENSECTION) -O $(TARGET_VER) -S EFI_SECTION_VERSION -V $(BUILD_NUMBER) -A "$(VERSION_STRING)" 703 !ELSE 704 $(TARGET_VER) : $(INF_FILENAME) 705 $(GENSECTION) -O $(TARGET_VER) -S EFI_SECTION_VERSION -V $(BUILD_NUMBER) 706 !ENDIF 707 !ELSE 708 $(TARGET_VER) : $(INF_FILENAME) 709 echo.>$(TARGET_VER) 710 type $(TARGET_VER)>$(TARGET_VER) 711 !ENDIF 712 713 # 714 # Makefile entries to create the dependency expression section. 715 # Use the DPX file from the source directory unless an override file 716 # was specified. 717 # If no DPX source file was specified, then create an empty file to 718 # be used. 719 # 720 !IF "$(DPX_SOURCE)" != "" 721 DPX_SOURCE_FILE = $(SOURCE_DIR)\$(DPX_SOURCE) 722 !ENDIF 723 724 !IF "$(DPX_SOURCE_OVERRIDE)" != "" 725 DPX_SOURCE_FILE = $(DPX_SOURCE_OVERRIDE) 726 !ENDIF 727 728 !IF "$(DPX_SOURCE_FILE)" != "" 729 !IF EXIST ($(DPX_SOURCE_FILE)) 730 731 # 732 # Add build dependency check 733 # 734 DEP_FILE = $(DEST_DIR)\$(BASE_NAME)dxs.dep 735 736 !IF EXIST($(DEP_FILE)) 737 !INCLUDE $(DEP_FILE) 738 !ENDIF 739 740 !IF "$(EFI_USE_CL_FOR_DEP)" != "YES" 741 742 !IF EXIST($(TARGET_DPX)) 743 DEP_TARGETS = $(DEP_TARGETS) $(DEST_DIR)\$(BASE_NAME)dxs.dep 744 !IF !EXIST($(DEP_FILE)) 745 CREATEDEPS = YES 746 !ENDIF 747 !ENDIF 748 749 # 750 # Update dep file for next round incremental build 751 # 752 $(DEP_FILE) : $(TARGET_DPX) 753 $(MAKEDEPS) -f $(DPX_SOURCE_FILE) $(DEP_FLAGS) 754 755 !ENDIF 756 757 $(TARGET_DPX) : $(DPX_SOURCE_FILE) $(INF_FILENAME) 758 !IF "$(EFI_USE_CL_FOR_DEP)" != "YES" 759 $(CC) $(C_FLAGS_DPX) $(DPX_SOURCE_FILE) > $*.tmp1 760 !ELSE 761 -$(CC) $(C_FLAGS_DPX) $(DPX_SOURCE_FILE) /showIncludes > $*.tmp1 2> $(DEST_DIR)\$(BASE_NAME)dxs.cl 762 @$(MAKEDEPS) -f $(DEST_DIR)\$(BASE_NAME)dxs.cl $(DEP_FLAGS2) 763 !ENDIF 764 $(GENDEPEX) -I $*.tmp1 -O $*.tmp2 765 $(GENSECTION) -I $*.tmp2 -O $@ -S $(DEPEX_TYPE) 766 del $*.tmp1 > NUL 767 del $*.tmp2 > NUL 768 !ELSE 769 !ERROR Dependency expression source file "$(DPX_SOURCE_FILE)" does not exist. 770 !ENDIF 771 !ELSE 772 $(TARGET_DPX) : $(INF_FILENAME) 773 echo. > $(TARGET_DPX) 774 type $(TARGET_DPX) > $(TARGET_DPX) 775 !ENDIF 776 777 # 778 # Makefile entries for DXE DPX for combined PEIM drivers. 779 # If a DXE_DPX_SOURCE file was specified in the INF file, use it. Otherwise 780 # create an empty file and use it as a DPX file. 781 # 782 !IF "$(COMPONENT_TYPE)" == "COMBINED_PEIM_DRIVER" 783 !IF "$(DXE_DPX_SOURCE)" != "" 784 !IF EXIST ($(SOURCE_DIR)\$(DXE_DPX_SOURCE)) 785 786 # 787 # Add build dependency check 788 # 789 DEP_FILE = $(DEST_DIR)\$(BASE_NAME)dxs2.dep 790 791 !IF EXIST($(DEP_FILE)) 792 !INCLUDE $(DEP_FILE) 793 !ENDIF 794 795 !IF "$(EFI_USE_CL_FOR_DEP)" != "YES" 796 797 !IF EXIST($(TARGET_DXE_DPX)) 798 DEP_TARGETS = $(DEP_TARGETS) $(DEST_DIR)\$(BASE_NAME)dxs2.dep 799 !IF !EXIST($(DEP_FILE)) 800 CREATEDEPS = YES 801 !ENDIF 802 !ENDIF 803 804 # 805 # Update dep file for next round incremental build 806 # 807 $(DEP_FILE) : $(TARGET_DXE_DPX) 808 $(MAKEDEPS) -f $(SOURCE_DIR)\$(DXE_DPX_SOURCE) $(DEP_FLAGS) 809 810 !ENDIF 811 812 $(TARGET_DXE_DPX) : $(SOURCE_DIR)\$(DXE_DPX_SOURCE) $(INF_FILENAME) 813 !IF "$(EFI_USE_CL_FOR_DEP)" != "YES" 814 $(CC) $(C_FLAGS_DPX) $(SOURCE_DIR)\$(DXE_DPX_SOURCE) > $*.tmp1 815 !ELSE 816 -$(CC) $(C_FLAGS_DPX) $(SOURCE_DIR)\$(DXE_DPX_SOURCE) /showIncludes > $*.tmp1 2> $(DEST_DIR)\$(BASE_NAME)dxs2.cl 817 @$(MAKEDEPS) -f $(DEST_DIR)\$(BASE_NAME)dxs2.cl $(DEP_FLAGS2) 818 !ENDIF 819 $(GENDEPEX) -I $*.tmp1 -O $*.tmp2 820 $(GENSECTION) -I $*.tmp2 -O $@ -S EFI_SECTION_DXE_DEPEX 821 del $*.tmp1 > NUL 822 del $*.tmp2 > NUL 823 !ELSE 824 !ERROR Dependency expression source file "$(SOURCE_DIR)\$(DXE_DPX_SOURCE)" does not exist. 825 !ENDIF 826 !ELSE 827 $(TARGET_DXE_DPX) : $(INF_FILENAME) 828 echo. > $(TARGET_DXE_DPX) 829 type $(TARGET_DXE_DPX) > $(TARGET_DXE_DPX) 830 !ENDIF 831 !ENDIF 832 833 # 834 # Describe how to build the HII export file from all the input HII pack files. 835 # Use the FFS file GUID for the package GUID in the export file. Only used 836 # when multiple VFR share strings. 837 # 838 $(DEST_DIR)\$(BASE_NAME).hii : $(HII_PACK_FILES) 839 $(HIIPACK) create -g $(FILE_GUID) -p $(HII_PACK_FILES) -o $(DEST_DIR)\$(BASE_NAME).hii 840 841 # 842 # If the build calls for creating an FFS file with the IFR included as 843 # a separate binary (not compiled into the driver), then build the binary 844 # section now. Note that the PACKAGE must be set correctly to actually get 845 # this IFR section pulled into the FFS file. 846 # 847 !IF ("$(HII_IFR_PACK_FILES)" != "") 848 849 $(DEST_DIR)\$(BASE_NAME)IfrBin.sec : $(HII_IFR_PACK_FILES) 850 $(HIIPACK) create -novarpacks -p $(HII_IFR_PACK_FILES) -o $(DEST_DIR)\$(BASE_NAME)IfrBin.hii 851 $(GENSECTION) -I $(DEST_DIR)\$(BASE_NAME)IfrBin.hii -O $(DEST_DIR)\$(BASE_NAME)IfrBin.sec -S EFI_SECTION_RAW 852 853 BIN_TARGETS = $(BIN_TARGETS) $(DEST_DIR)\$(BASE_NAME)IfrBin.sec 854 855 !ENDIF 856 857 # 858 # Build a FFS file from the sections and package 859 # 860 $(TARGET_FFS_FILE) : $(TARGET_PE32) $(TARGET_DPX) $(TARGET_UI) $(TARGET_VER) $(TARGET_DXE_DPX) $(PACKAGE_FILENAME) 861 # 862 # Some of our components require padding to align code 863 # 864 !IF "$(PROCESSOR)" == "IPF" 865 !IF "$(COMPONENT_TYPE)" == "PIC_PEIM" || "$(COMPONENT_TYPE)" == "PE32_PEIM" || "$(COMPONENT_TYPE)" == "RELOCATABLE_PEIM" || "$(COMPONENT_TYPE)" == "SECURITY_CORE" || "$(COMPONENT_TYPE)" == "PEI_CORE" || "$(COMPONENT_TYPE)" == "COMBINED_PEIM_DRIVER" 866 copy $(BIN_DIR)\Blank.pad $(DEST_DIR) 867 !ENDIF 868 !ENDIF 869 $(GENFFSFILE) -B $(DEST_DIR) -P1 $(PACKAGE_FILENAME) -V 870 871 !IF "$(CREATEDEPS)"=="YES" 872 all : $(DEP_TARGETS) 873 $(MAKE) -f $(MAKEFILE_NAME) all 874 !ELSE 875 all : $(LOCALIZE_TARGETS) $(BIN_TARGETS) $(TARGET_FFS_FILE) $(DEP_TARGETS) 876 !ENDIF 877 878 # 879 # Remove the generated temp and final files for this modules. 880 # 881 clean : 882 !IF ("$(FILE_GUID)" != "") 883 @if exist $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* del $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* 884 !ENDIF 885 @if exist $(BIN_DIR)\$(BASE_NAME).* del $(BIN_DIR)\$(BASE_NAME).* 886 @del /q $(DEST_OUTPUT_DIRS) 887 888 [=============================================================================] 889 [Build.Ia32.TE_PEIM,Build.Ipf.TE_PEIM,Build.x64.TE_PEIM] 890 # 891 # Define the library file we'll build if we have any objects defined. 892 # 893 !IFDEF OBJECTS 894 TARGET_LOCAL_LIB = $(DEST_DIR)\$(BASE_NAME)Local.lib 895 # 896 # LIB all the object files into our (local) target lib file. Put 897 # a dependency on the component's INF file in case it changes. 898 # 899 $(TARGET_LOCAL_LIB) : $(OBJECTS) $(INF_FILENAME) $(ENV_DEPS) 900 $(LIB) $(LIB_FLAGS) $(OBJECTS) /OUT:$@ 901 902 !ELSE 903 !ERROR No source files to build were defined in the INF file 904 !ENDIF 905 906 # 907 # Defines for standard intermediate files and build targets 908 # 909 TARGET_DLL = $(BIN_DIR)\$(BASE_NAME).dll 910 TARGET_EFI = $(BIN_DIR)\$(BASE_NAME).efi 911 TARGET_DPX = $(DEST_DIR)\$(BASE_NAME).dpx 912 TARGET_UI = $(DEST_DIR)\$(BASE_NAME).ui 913 TARGET_VER = $(DEST_DIR)\$(BASE_NAME).ver 914 TARGET_MAP = $(BIN_DIR)\$(BASE_NAME).map 915 TARGET_PDB = $(BIN_DIR)\$(BASE_NAME).pdb 916 TARGET_SYM = $(BIN_DIR)\$(BASE_NAME).sym 917 TARGET_TE = $(BIN_DIR)\$(BASE_NAME).te 918 TARGET_PE32 = $(DEST_DIR)\$(BASE_NAME).pe32 919 TARGET_TES = $(DEST_DIR)\$(BASE_NAME).tes 920 TARGET_FFS_FILE = $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).pei 921 922 # 923 # Create our TE section from our TE file 924 # 925 $(TARGET_TES) : $(TARGET_TE) 926 $(GENSECTION) -I $(TARGET_TE) -O $(TARGET_TES) -S EFI_SECTION_TE 927 928 # 929 # $(DEP_TARGETS) are not needed for binary build. 930 # 931 !IF "$(BINARY)" == "TRUE" 932 DEP_TARGETS= 933 CREATEDEPS= 934 !ENDIF 935 936 # 937 # Build module to generate *.efi file from source code or binary file. 938 # 939 !IF (("$(BINARY)" == "TRUE") && EXIST($(EFI_PLATFORM_BIN)\$(PROCESSOR)\$(BASE_NAME).efi)) 940 $(TARGET_EFI) : $(EFI_PLATFORM_BIN)\$(PROCESSOR)\$(BASE_NAME).efi 941 copy $(EFI_PLATFORM_BIN)\$(PROCESSOR)\$(BASE_NAME).efi $(TARGET_EFI) /Y 942 if exist $(EFI_PLATFORM_BIN)\$(PROCESSOR)\$(BASE_NAME).pdb \ 943 copy $(EFI_PLATFORM_BIN)\$(PROCESSOR)\$(BASE_NAME).pdb $(TARGET_PDB) /Y 944 !ELSE 945 $(TARGET_EFI) : $(TARGET_DLL) $(INF_FILENAME) 946 $(FWIMAGE) $(COMPONENT_TYPE) $(TARGET_DLL) $(TARGET_EFI) 947 !IF ("$(EFI_BINARY_BUILD)" == "YES") 948 if not exist $(EFI_PLATFORM_BIN)\$(PROCESSOR) mkdir $(EFI_PLATFORM_BIN)\$(PROCESSOR) 949 if exist $(TARGET_EFI) copy $(TARGET_EFI) $(EFI_PLATFORM_BIN)\$(PROCESSOR)\$(BASE_NAME).efi /Y 950 if exist $(TARGET_PDB) copy $(TARGET_PDB) $(EFI_PLATFORM_BIN)\$(PROCESSOR)\$(BASE_NAME).pdb /Y 951 !ENDIF 952 !ENDIF 953 954 # 955 # Run GenTEImage on the built .efi file to create our TE file. 956 # 957 $(TARGET_TE) : $(TARGET_EFI) 958 $(GENTEIMAGE) -o $(TARGET_TE) $(TARGET_EFI) 959 960 # 961 # Link all objects and libs to create the executable 962 # 963 $(TARGET_DLL) : $(TARGET_LOCAL_LIB) $(LIBS) $(INF_FILENAME) $(ENV_DEPS) 964 $(LINK) $(LINK_FLAGS_DLL) $(LIBS) /ENTRY:$(IMAGE_ENTRY_POINT) \ 965 $(TARGET_LOCAL_LIB) /OUT:$(TARGET_DLL) /MAP:$(TARGET_MAP) \ 966 /PDB:$(TARGET_PDB) 967 $(SETSTAMP) $(TARGET_DLL) $(BUILD_DIR)\GenStamp.txt 968 !IF "$(EFI_GENERATE_SYM_FILE)" == "YES" 969 if exist $(TARGET_PDB) $(PE2SYM) $(TARGET_PDB) $(TARGET_SYM) 970 !ENDIF 971 972 !IF "$(EFI_ZERO_DEBUG_DATA)" == "YES" 973 $(ZERODEBUGDATA) $(TARGET_DLL) 974 !ENDIF 975 976 # 977 # Create the user interface section 978 # 979 $(TARGET_UI) : $(INF_FILENAME) 980 $(GENSECTION) -O $(TARGET_UI) -S EFI_SECTION_USER_INTERFACE -A "$(BASE_NAME)" 981 982 # 983 # Create the version section 984 # 985 !IF "$(BUILD_NUMBER)" != "" 986 !IF "$(VERSION_STRING)" != "" 987 $(TARGET_VER) : $(INF_FILENAME) 988 $(GENSECTION) -O $(TARGET_VER) -S EFI_SECTION_VERSION -V $(BUILD_NUMBER) -A "$(VERSION_STRING)" 989 !ELSE 990 $(TARGET_VER) : $(INF_FILENAME) 991 $(GENSECTION) -O $(TARGET_VER) -S EFI_SECTION_VERSION -V $(BUILD_NUMBER) 992 !ENDIF 993 !ELSE 994 $(TARGET_VER) : $(INF_FILENAME) 995 echo.>$(TARGET_VER) 996 type $(TARGET_VER)>$(TARGET_VER) 997 !ENDIF 998 999 # 1000 # Makefile entries to create the dependency expression section. 1001 # Use the DPX file from the source directory unless an override file 1002 # was specified. 1003 # If no DPX source file was specified, then create an empty file to 1004 # be used. 1005 # 1006 !IF "$(DPX_SOURCE)" != "" 1007 DPX_SOURCE_FILE = $(SOURCE_DIR)\$(DPX_SOURCE) 1008 !ENDIF 1009 1010 !IF "$(DPX_SOURCE_OVERRIDE)" != "" 1011 DPX_SOURCE_FILE = $(DPX_SOURCE_OVERRIDE) 1012 !ENDIF 1013 1014 !IF "$(DPX_SOURCE_FILE)" != "" 1015 !IF EXIST ($(DPX_SOURCE_FILE)) 1016 1017 # 1018 # Add build dependency check 1019 # 1020 DEP_FILE = $(DEST_DIR)\$(BASE_NAME)dxs.dep 1021 1022 !IF EXIST($(DEP_FILE)) 1023 !INCLUDE $(DEP_FILE) 1024 !ENDIF 1025 1026 !IF "$(EFI_USE_CL_FOR_DEP)" != "YES" 1027 1028 !IF EXIST($(TARGET_DPX)) 1029 DEP_TARGETS = $(DEP_TARGETS) $(DEST_DIR)\$(BASE_NAME)dxs.dep 1030 !IF !EXIST($(DEP_FILE)) 1031 CREATEDEPS = YES 1032 !ENDIF 1033 !ENDIF 1034 1035 # 1036 # Update dep file for next round incremental build 1037 # 1038 $(DEP_FILE) : $(TARGET_DPX) 1039 $(MAKEDEPS) -f $(DPX_SOURCE_FILE) $(DEP_FLAGS) 1040 1041 !ENDIF 1042 1043 $(TARGET_DPX) : $(DPX_SOURCE_FILE) $(INF_FILENAME) 1044 !IF "$(EFI_USE_CL_FOR_DEP)" != "YES" 1045 $(CC) $(C_FLAGS_DPX) $(DPX_SOURCE_FILE) > $*.tmp1 1046 !ELSE 1047 -$(CC) $(C_FLAGS_DPX) $(DPX_SOURCE_FILE) /showIncludes > $*.tmp1 2> $(DEST_DIR)\$(BASE_NAME)dxs.cl 1048 @$(MAKEDEPS) -f $(DEST_DIR)\$(BASE_NAME)dxs.cl $(DEP_FLAGS2) 1049 !ENDIF 1050 $(GENDEPEX) -I $*.tmp1 -O $*.tmp2 1051 $(GENSECTION) -I $*.tmp2 -O $@ -S $(DEPEX_TYPE) 1052 del $*.tmp1 > NUL 1053 del $*.tmp2 > NUL 1054 !ELSE 1055 !ERROR Dependency expression source file "$(DPX_SOURCE_FILE)" does not exist. 1056 !ENDIF 1057 !ELSE 1058 $(TARGET_DPX) : $(INF_FILENAME) 1059 echo. > $(TARGET_DPX) 1060 type $(TARGET_DPX) > $(TARGET_DPX) 1061 !ENDIF 1062 1063 # 1064 # Build an FFS file from the sections and package 1065 # 1066 $(TARGET_FFS_FILE) : $(TARGET_TES) $(TARGET_DPX) $(TARGET_UI) $(TARGET_VER) $(PACKAGE_FILENAME) 1067 $(GENFFSFILE) -B $(DEST_DIR) -P1 $(PACKAGE_FILENAME) -V 1068 1069 !IF "$(CREATEDEPS)"=="YES" 1070 all : $(DEP_TARGETS) 1071 $(MAKE) -f $(MAKEFILE_NAME) all 1072 !ELSE 1073 all : $(TARGET_FFS_FILE) $(DEP_TARGETS) 1074 !ENDIF 1075 1076 # 1077 # Remove the generated temp and final files for this modules. 1078 # 1079 clean : 1080 !IF ("$(FILE_GUID)" != "") 1081 @if exist $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* del $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* 1082 !ENDIF 1083 @if exist $(BIN_DIR)\$(BASE_NAME).* del $(BIN_DIR)\$(BASE_NAME).* 1084 @del /q $(DEST_OUTPUT_DIRS) 1085 1086 [=============================================================================] 1087 # 1088 # These are the commands to build EBC EFI targets 1089 # 1090 [=============================================================================] 1091 [Build.Ebc.BS_DRIVER|RT_DRIVER|APPLICATION] 1092 1093 # 1094 # Add the EBC library to our list of libs 1095 # 1096 LIBS = $(LIBS) $(EBC_TOOLS_PATH)\lib\EbcLib.lib 1097 1098 !IF "$(LOCALIZE)" == "YES" 1099 1100 !IF (("$(EFI_GENERATE_HII_RESOURCE)" == "YES") && ("$(EFI_SPECIFICATION_VERSION)" >= "0x0002000A")) 1101 # 1102 # This will generate HII resource section in PE/COFF image. 1103 # 1104 # Note: when HII package list is built into resource section, Driver no longer 1105 # refer to C array generated by VfrCompiler ($(FILE_NAME)Bin) and StrGather 1106 # ($(BASE_NAME)Strings); while in current build rule, those C array objects 1107 # will still be linked with the Driver, so please turn on link flag "/OPT:REF" 1108 # to minimize the code size. 1109 # 1110 HII_PACK_FILES = $(HII_PACK_FILES) $(DEST_DIR)\$(BASE_NAME)Strings.hpk 1111 LOCALIZE_TARGETS = $(LOCALIZE_TARGETS) $(DEST_DIR)\$(BASE_NAME).res 1112 OBJECTS = $(OBJECTS) $(DEST_DIR)\$(BASE_NAME).res 1113 1114 $(DEST_DIR)\$(BASE_NAME).rc : $(HII_PACK_FILES) 1115 $(HIIPACK) -g $(FILE_GUID) $(HII_PACK_FILES) -rc $(DEST_DIR)\$(BASE_NAME).rc -hii $(DEST_DIR)\$(BASE_NAME).hii 1116 1117 $(DEST_DIR)\$(BASE_NAME).res : $(DEST_DIR)\$(BASE_NAME).rc 1118 $(RC) /fo $(DEST_DIR)\$(BASE_NAME).res $(DEST_DIR)\$(BASE_NAME).rc 1119 1120 !ENDIF 1121 1122 !IF (("$(EFI_GENERATE_HII_EXPORT)" == "YES") && ("$(EFI_SPECIFICATION_VERSION)" < "0x0002000A")) 1123 # 1124 # There will be one HII pack containing all the strings. Add that file 1125 # to the list of HII pack files we'll use to create our final HII export file. 1126 # 1127 HII_PACK_FILES = $(HII_PACK_FILES) $(DEST_DIR)\$(BASE_NAME)Strings.hpk 1128 1129 LOCALIZE_TARGETS = $(LOCALIZE_TARGETS) $(DEST_DIR)\$(BASE_NAME).hii 1130 !ENDIF 1131 1132 !IF ("$(EFI_SPECIFICATION_VERSION)" >= "0x0002000A") 1133 # 1134 # Note: currently -ppflag option is only available for UefiStrGather 1135 # Note: /GS- will cause warning for preprocess, so filter it out from STRGATHER_PPFLAG 1136 # 1137 STRGATHER_PPFLAG = $(EBC_C_FLAGS: /GS-=) 1138 STRGATHER_FLAGS = $(STRGATHER_FLAGS) -ppflag "$(STRGATHER_PPFLAG)" -oh $(DEST_DIR)\$(BASE_NAME)StrDefs.h 1139 !ENDIF 1140 1141 $(DEST_DIR)\$(BASE_NAME).sdb : $(SDB_FILES) $(SOURCE_FILES) 1142 $(STRGATHER) -scan -vdbr $(STRGATHER_FLAGS) -od $(DEST_DIR)\$(BASE_NAME).sdb \ 1143 -skipext .uni -skipext .h $(SOURCE_FILES) 1144 1145 $(DEST_DIR)\$(BASE_NAME)Strings.c : $(DEST_DIR)\$(BASE_NAME).sdb 1146 $(STRGATHER) -dump $(LANGUAGE_FLAGS) -bn $(BASE_NAME)Strings -db $(DEST_DIR)\$(BASE_NAME).sdb \ 1147 -oc $(DEST_DIR)\$(BASE_NAME)Strings.c 1148 1149 $(DEST_DIR)\$(BASE_NAME)StrDefs.h : $(DEST_DIR)\$(BASE_NAME).sdb 1150 $(STRGATHER) -dump $(LANGUAGE_FLAGS) -bn $(BASE_NAME)Strings -db $(DEST_DIR)\$(BASE_NAME).sdb \ 1151 -oh $(DEST_DIR)\$(BASE_NAME)StrDefs.h 1152 1153 $(DEST_DIR)\$(BASE_NAME)Strings.hpk : $(DEST_DIR)\$(BASE_NAME).sdb 1154 $(STRGATHER) -dump $(LANGUAGE_FLAGS) -bn $(BASE_NAME)Strings -db $(DEST_DIR)\$(BASE_NAME).sdb \ 1155 -hpk $(DEST_DIR)\$(BASE_NAME)Strings.hpk 1156 1157 OBJECTS = $(OBJECTS) $(DEST_DIR)\$(BASE_NAME)Strings.obj 1158 1159 $(DEST_DIR)\$(BASE_NAME)Strings.obj : $(DEST_DIR)\$(BASE_NAME)Strings.c $(INF_FILENAME) $(ALL_DEPS) 1160 $(EBC_CC) $(EBC_C_FLAGS) $(DEST_DIR)\$(BASE_NAME)Strings.c 1161 1162 LOCALIZE_TARGETS = $(DEST_DIR)\$(BASE_NAME)StrDefs.h $(LOCALIZE_TARGETS) 1163 1164 !ENDIF 1165 1166 # 1167 # If building an application, then the target is a .app, not .dxe 1168 # 1169 !IF "$(COMPONENT_TYPE)" == "APPLICATION" 1170 TARGET_FFS_FILE = $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).app 1171 SUBSYSTEM = EFI_APPLICATION 1172 !ELSE 1173 TARGET_FFS_FILE = $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).dxe 1174 SUBSYSTEM = EFI_BOOT_SERVICE_DRIVER 1175 !ENDIF 1176 1177 # 1178 # Defines for standard intermediate files and build targets 1179 # 1180 TARGET_EFI = $(BIN_DIR)\$(BASE_NAME).efi 1181 TARGET_DPX = $(DEST_DIR)\$(BASE_NAME).dpx 1182 TARGET_UI = $(DEST_DIR)\$(BASE_NAME).ui 1183 TARGET_VER = $(DEST_DIR)\$(BASE_NAME).ver 1184 TARGET_MAP = $(BIN_DIR)\$(BASE_NAME).map 1185 TARGET_PDB = $(BIN_DIR)\$(BASE_NAME).pdb 1186 TARGET_PE32 = $(DEST_DIR)\$(BASE_NAME).pe32 1187 TARGET_DLL = $(BIN_DIR)\$(BASE_NAME).dll 1188 1189 # 1190 # First link all the objects and libs together to make a .dll file 1191 # 1192 $(TARGET_DLL) : $(OBJECTS) $(LIBS) $(INF_FILENAME) $(ENV_DEPS) 1193 $(EBC_LINK) $(EBC_LINK_FLAGS) /SUBSYSTEM:$(SUBSYSTEM) /ENTRY:EfiStart \ 1194 $(OBJECTS) $(LIBS) /OUT:$(TARGET_DLL) /MAP:$(TARGET_MAP) 1195 $(SETSTAMP) $(TARGET_DLL) $(BUILD_DIR)\GenStamp.txt 1196 !IF "$(EFI_ZERO_DEBUG_DATA)" == "YES" 1197 $(ZERODEBUGDATA) $(TARGET_DLL) 1198 !ENDIF 1199 1200 # 1201 # Now take the .dll file and make a .efi file 1202 # 1203 $(TARGET_EFI) : $(TARGET_DLL) $(INF_FILENAME) 1204 $(FWIMAGE) -t 0 $(COMPONENT_TYPE) $(TARGET_DLL) $(TARGET_EFI) 1205 1206 # 1207 # Now take the .efi file and make a .pe32 section 1208 # 1209 $(TARGET_PE32) : $(TARGET_EFI) 1210 $(GENSECTION) -I $(TARGET_EFI) -O $(TARGET_PE32) -S EFI_SECTION_PE32 1211 1212 # 1213 # Create the user interface section 1214 # 1215 $(TARGET_UI) : $(INF_FILENAME) 1216 $(GENSECTION) -O $(TARGET_UI) -S EFI_SECTION_USER_INTERFACE -A "$(BASE_NAME)" 1217 1218 # 1219 # Create the version section 1220 # 1221 !IF "$(BUILD_NUMBER)" != "" 1222 !IF "$(VERSION_STRING)" != "" 1223 $(TARGET_VER) : $(INF_FILENAME) 1224 $(GENSECTION) -O $(TARGET_VER) -S EFI_SECTION_VERSION -V $(BUILD_NUMBER) -A "$(VERSION_STRING)" 1225 !ELSE 1226 $(TARGET_VER) : $(INF_FILENAME) 1227 $(GENSECTION) -O $(TARGET_VER) -S EFI_SECTION_VERSION -V $(BUILD_NUMBER) 1228 !ENDIF 1229 !ELSE 1230 $(TARGET_VER) : $(INF_FILENAME) 1231 echo. > $(TARGET_VER) 1232 type $(TARGET_VER) > $(TARGET_VER) 1233 !ENDIF 1234 1235 # 1236 # Makefile entries to create the dependency expression section. 1237 # Use the DPX file from the source directory unless an override file 1238 # was specified. 1239 # If no DPX source file was specified, then create an empty file to 1240 # be used. 1241 # 1242 !IF "$(DPX_SOURCE)" != "" 1243 DPX_SOURCE_FILE = $(SOURCE_DIR)\$(DPX_SOURCE) 1244 !ENDIF 1245 1246 !IF "$(DPX_SOURCE_OVERRIDE)" != "" 1247 DPX_SOURCE_FILE = $(DPX_SOURCE_OVERRIDE) 1248 !ENDIF 1249 1250 !IF "$(DPX_SOURCE_FILE)" != "" 1251 !IF EXIST ($(DPX_SOURCE_FILE)) 1252 1253 # 1254 # Add build dependency check 1255 # 1256 DEP_FILE = $(DEST_DIR)\$(BASE_NAME)dxs.dep 1257 1258 !IF EXIST($(DEP_FILE)) 1259 !INCLUDE $(DEP_FILE) 1260 !ENDIF 1261 1262 !IF "$(EFI_USE_CL_FOR_DEP)" != "YES" 1263 1264 !IF EXIST($(TARGET_DPX)) 1265 DEP_TARGETS = $(DEP_TARGETS) $(DEST_DIR)\$(BASE_NAME)dxs.dep 1266 !IF !EXIST($(DEP_FILE)) 1267 CREATEDEPS = YES 1268 !ENDIF 1269 !ENDIF 1270 1271 # 1272 # Update dep file for next round incremental build 1273 # 1274 $(DEP_FILE) : $(TARGET_DPX) 1275 $(MAKEDEPS) -f $(DPX_SOURCE_FILE) $(DEP_FLAGS) 1276 1277 !ENDIF 1278 1279 $(TARGET_DPX) : $(DPX_SOURCE_FILE) $(INF_FILENAME) 1280 !IF "$(EFI_USE_CL_FOR_DEP)" != "YES" 1281 $(CC) $(C_FLAGS_DPX) $(DPX_SOURCE_FILE) > $*.tmp1 1282 !ELSE 1283 -$(CC) $(C_FLAGS_DPX) $(DPX_SOURCE_FILE) /showIncludes > $*.tmp1 2> $(DEST_DIR)\$(BASE_NAME)dxs.cl 1284 @$(MAKEDEPS) -f $(DEST_DIR)\$(BASE_NAME)dxs.cl $(DEP_FLAGS2) 1285 !ENDIF 1286 $(GENDEPEX) -I $*.tmp1 -O $*.tmp2 1287 $(GENSECTION) -I $*.tmp2 -O $@ -S $(DEPEX_TYPE) 1288 del $*.tmp1 > NUL 1289 del $*.tmp2 > NUL 1290 !ELSE 1291 !ERROR Dependency expression source file "$(DPX_SOURCE_FILE)" does not exist. 1292 !ENDIF 1293 !ELSE 1294 $(TARGET_DPX) : $(INF_FILENAME) 1295 echo. > $(TARGET_DPX) 1296 type $(TARGET_DPX) > $(TARGET_DPX) 1297 !ENDIF 1298 1299 # 1300 # Describe how to build the HII export file from all the input HII pack files. 1301 # Use the FFS file GUID for the package GUID in the export file. Only used 1302 # when multiple VFR share strings. 1303 # 1304 $(DEST_DIR)\$(BASE_NAME).hii : $(HII_PACK_FILES) 1305 $(HIIPACK) create -g $(FILE_GUID) -p $(HII_PACK_FILES) -o $(DEST_DIR)\$(BASE_NAME).hii 1306 1307 # 1308 # If the build calls for creating an FFS file with the IFR included as 1309 # a separate binary (not compiled into the driver), then build the binary 1310 # section now. Note that the PACKAGE must be set correctly to actually get 1311 # this IFR section pulled into the FFS file. 1312 # 1313 !IF ("$(HII_IFR_PACK_FILES)" != "") 1314 1315 $(DEST_DIR)\$(BASE_NAME)IfrBin.sec : $(HII_IFR_PACK_FILES) 1316 $(HIIPACK) create -novarpacks -p $(HII_IFR_PACK_FILES) -o $(DEST_DIR)\$(BASE_NAME)IfrBin.hii 1317 $(GENSECTION) -I $(DEST_DIR)\$(BASE_NAME)IfrBin.hii -O $(DEST_DIR)\$(BASE_NAME)IfrBin.sec -S EFI_SECTION_RAW 1318 1319 BIN_TARGETS = $(BIN_TARGETS) $(DEST_DIR)\$(BASE_NAME)IfrBin.sec 1320 1321 !ENDIF 1322 1323 # 1324 # Build an FFS file from the sections and package 1325 # 1326 $(TARGET_FFS_FILE) : $(TARGET_PE32) $(TARGET_DPX) $(TARGET_UI) $(TARGET_VER) $(PACKAGE_FILENAME) 1327 $(GENFFSFILE) -B $(DEST_DIR) -P1 $(PACKAGE_FILENAME) -V 1328 1329 !IF "$(CREATEDEPS)"=="YES" 1330 all : $(DEP_TARGETS) 1331 $(MAKE) -f $(MAKEFILE_NAME) all 1332 !ELSE 1333 all : $(LOCALIZE_TARGETS) $(BIN_TARGETS) $(TARGET_FFS_FILE) $(DEP_TARGETS) 1334 !ENDIF 1335 1336 # 1337 # Remove the generated temp and final files for this modules. 1338 # 1339 clean : 1340 !IF ("$(FILE_GUID)" != "") 1341 @if exist $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* del $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* 1342 !ENDIF 1343 @if exist $(BIN_DIR)\$(BASE_NAME).* del $(BIN_DIR)\$(BASE_NAME).* 1344 @del /q $(DEST_OUTPUT_DIRS) 1345 1346 [=============================================================================] 1347 # 1348 # These are the commands to build vendor-provided *.EFI files into an FV. 1349 # To use them, create an INF file with BUILD_TYPE=BS_DRIVER_EFI. 1350 # This section, as it now exists, only supports boot service drivers. 1351 # 1352 [=============================================================================] 1353 [Build.Ia32.BS_DRIVER_EFI|RT_DRIVER_EFI|APPLICATION_EFI|PE32_PEIM_EFI,Build.Ipf.BS_DRIVER_EFI|RT_DRIVER_EFI|APPLICATION_EFI|PE32_PEIM_EFI,Build.Ebc.BS_DRIVER_EFI|RT_DRIVER_EFI|APPLICATION_EFI,Build.x64.BS_DRIVER_EFI|RT_DRIVER_EFI|APPLICATION_EFI|PE32_PEIM_EFI] 1354 # 1355 # Defines for standard intermediate files and build targets. For the source 1356 # .efi file, take the one in the source directory if it exists. If there's not 1357 # one there, look for one in the processor-specfic subdirectory. 1358 # 1359 !IF EXIST ("$(SOURCE_DIR)\$(BASE_NAME).efi") 1360 TARGET_EFI = $(SOURCE_DIR)\$(BASE_NAME).efi 1361 !ELSEIF EXIST ("$(SOURCE_DIR)\$(PROCESSOR)\$(BASE_NAME).efi") 1362 TARGET_EFI = $(SOURCE_DIR)\$(PROCESSOR)\$(BASE_NAME).efi 1363 !ELSE 1364 !ERROR Pre-existing $(BASE_NAME).efi file not found in $(SOURCE_DIR) nor $(SOURCE_DIR)\$(PROCESSOR) 1365 !ENDIF 1366 1367 TARGET_DPX = $(DEST_DIR)\$(BASE_NAME).dpx 1368 TARGET_UI = $(DEST_DIR)\$(BASE_NAME).ui 1369 TARGET_VER = $(DEST_DIR)\$(BASE_NAME).ver 1370 TARGET_MAP = $(BIN_DIR)\$(BASE_NAME).map 1371 TARGET_PDB = $(BIN_DIR)\$(BASE_NAME).pdb 1372 TARGET_PE32 = $(DEST_DIR)\$(BASE_NAME).pe32 1373 TARGET_DLL = $(BIN_DIR)\$(BASE_NAME).dll 1374 1375 # 1376 # If building an application, then the target is a .app, not .dxe 1377 # 1378 !IF "$(COMPONENT_TYPE)" == "APPLICATION" 1379 TARGET_FFS_FILE = $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).app 1380 !ELSE IF "$(COMPONENT_TYPE)" == "PE32_PEIM" 1381 TARGET_FFS_FILE = $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).pei 1382 !ELSE 1383 TARGET_FFS_FILE = $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).dxe 1384 !ENDIF 1385 1386 # 1387 # Take the .efi file and make a .pe32 file 1388 # 1389 $(TARGET_PE32) : $(TARGET_EFI) 1390 $(GENSECTION) -I $(TARGET_EFI) -O $(TARGET_PE32) -S EFI_SECTION_PE32 1391 1392 # 1393 # Create the user interface section 1394 # 1395 $(TARGET_UI) : $(INF_FILENAME) 1396 $(GENSECTION) -O $(TARGET_UI) -S EFI_SECTION_USER_INTERFACE -A "$(BASE_NAME)" 1397 1398 # 1399 # Create the version section 1400 # 1401 !IF "$(BUILD_NUMBER)" != "" 1402 !IF "$(VERSION_STRING)" != "" 1403 $(TARGET_VER) : $(INF_FILENAME) 1404 $(GENSECTION) -O $(TARGET_VER) -S EFI_SECTION_VERSION -V $(BUILD_NUMBER) -A "$(VERSION_STRING)" 1405 !ELSE 1406 $(TARGET_VER) : $(INF_FILENAME) 1407 $(GENSECTION) -O $(TARGET_VER) -S EFI_SECTION_VERSION -V $(BUILD_NUMBER) 1408 !ENDIF 1409 !ELSE 1410 $(TARGET_VER) : $(INF_FILENAME) 1411 echo. > $(TARGET_VER) 1412 type $(TARGET_VER) > $(TARGET_VER) 1413 !ENDIF 1414 1415 # 1416 # Makefile entries to create the dependency expression section. 1417 # Use the DPX file from the source directory unless an override file 1418 # was specified. 1419 # If no DPX source file was specified, then create an empty file to 1420 # be used. 1421 # 1422 !IF "$(DPX_SOURCE)" != "" 1423 DPX_SOURCE_FILE = $(SOURCE_DIR)\$(DPX_SOURCE) 1424 !ENDIF 1425 1426 !IF "$(DPX_SOURCE_OVERRIDE)" != "" 1427 DPX_SOURCE_FILE = $(DPX_SOURCE_OVERRIDE) 1428 !ENDIF 1429 1430 !IF "$(DPX_SOURCE_FILE)" != "" 1431 !IF EXIST ($(DPX_SOURCE_FILE)) 1432 1433 # 1434 # Add build dependency check 1435 # 1436 DEP_FILE = $(DEST_DIR)\$(BASE_NAME)dxs.dep 1437 1438 !IF EXIST($(DEP_FILE)) 1439 !INCLUDE $(DEP_FILE) 1440 !ENDIF 1441 1442 !IF "$(EFI_USE_CL_FOR_DEP)" != "YES" 1443 1444 !IF EXIST($(TARGET_DPX)) 1445 DEP_TARGETS = $(DEP_TARGETS) $(DEST_DIR)\$(BASE_NAME)dxs.dep 1446 !IF !EXIST($(DEP_FILE)) 1447 CREATEDEPS = YES 1448 !ENDIF 1449 !ENDIF 1450 1451 # 1452 # Update dep file for next round incremental build 1453 # 1454 $(DEP_FILE) : $(TARGET_DPX) 1455 $(MAKEDEPS) -f $(DPX_SOURCE_FILE) $(DEP_FLAGS) 1456 1457 !ENDIF 1458 1459 $(TARGET_DPX) : $(DPX_SOURCE_FILE) $(INF_FILENAME) 1460 !IF "$(EFI_USE_CL_FOR_DEP)" != "YES" 1461 $(CC) $(C_FLAGS_DPX) $(DPX_SOURCE_FILE) > $*.tmp1 1462 !ELSE 1463 -$(CC) $(C_FLAGS_DPX) $(DPX_SOURCE_FILE) /showIncludes > $*.tmp1 2> $(DEST_DIR)\$(BASE_NAME)dxs.cl 1464 @$(MAKEDEPS) -f $(DEST_DIR)\$(BASE_NAME)dxs.cl $(DEP_FLAGS2) 1465 !ENDIF 1466 $(GENDEPEX) -I $*.tmp1 -O $*.tmp2 1467 $(GENSECTION) -I $*.tmp2 -O $@ -S $(DEPEX_TYPE) 1468 del $*.tmp1 > NUL 1469 del $*.tmp2 > NUL 1470 !ELSE 1471 !ERROR Dependency expression source file "$(DPX_SOURCE_FILE)" does not exist. 1472 !ENDIF 1473 !ELSE 1474 $(TARGET_DPX) : $(INF_FILENAME) 1475 echo. > $(TARGET_DPX) 1476 type $(TARGET_DPX) > $(TARGET_DPX) 1477 !ENDIF 1478 1479 # 1480 # Build a FFS file from the sections and package 1481 # 1482 $(TARGET_FFS_FILE) : $(TARGET_PE32) $(TARGET_DPX) $(TARGET_UI) $(TARGET_VER) $(PACKAGE_FILENAME) 1483 $(GENFFSFILE) -B $(DEST_DIR) -P1 $(PACKAGE_FILENAME) -V 1484 1485 all : $(TARGET_FFS_FILE) 1486 1487 # 1488 # Remove the generated temp and final files for this modules. 1489 # 1490 clean : 1491 !IF ("$(FILE_GUID)" != "") 1492 @if exist $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* del $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* 1493 !ENDIF 1494 @if exist $(BIN_DIR)\$(BASE_NAME).* del $(BIN_DIR)\$(BASE_NAME).* 1495 @del /q $(DEST_OUTPUT_DIRS) 1496 1497 [=============================================================================] 1498 [Compile.Ia32.Bin|Bmp,Compile.x64.Bin|Bmp,Compile.Ipf.Bin|Bmp] 1499 # 1500 # We simply define the binary source file name 1501 # 1502 BINARY_SOURCE_FILE = $(SOURCE_FILE_NAME) 1503 1504 [=============================================================================] 1505 [Build.Ia32.BINARY|Legacy16|Logo,Build.Ipf.BINARY|Legacy16|Logo,Build.x64.BINARY|Legacy16|Logo] 1506 # 1507 # Use GenFfsFile to convert it to an FFS file 1508 # 1509 $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).ffs : $(BINARY_SOURCE_FILE) $(PACKAGE_FILENAME) $(INF_FILENAME) 1510 $(GENSECTION) -I $(BINARY_SOURCE_FILE) -O $(DEST_DIR)\$(BASE_NAME).sec -S EFI_SECTION_RAW 1511 $(GENFFSFILE) -B $(DEST_DIR) -P1 $(PACKAGE_FILENAME) -V 1512 1513 all : $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).ffs 1514 1515 # 1516 # Remove the generated temp and final files for this modules. 1517 # 1518 clean : 1519 !IF ("$(FILE_GUID)" != "") 1520 @if exist $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* del $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* 1521 !ENDIF 1522 @if exist $(BIN_DIR)\$(BASE_NAME).* del $(BIN_DIR)\$(BASE_NAME).* 1523 @del /q $(DEST_OUTPUT_DIRS) 1524 1525 [=============================================================================] 1526 [Build.Ia32.RAWFILE|CONFIG,Build.Ipf.RAWFILE|CONFIG,Build.x64.RAWFILE|CONFIG] 1527 # 1528 # Use GenFfsFile to convert it to an raw FFS file 1529 # 1530 $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).raw : $(BINARY_SOURCE_FILE) $(PACKAGE_FILENAME) $(INF_FILENAME) 1531 copy $(BINARY_SOURCE_FILE) $(DEST_DIR)\$(BASE_NAME).bin /Y 1532 $(GENFFSFILE) -B $(DEST_DIR) -P1 $(PACKAGE_FILENAME) -V 1533 1534 all : $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).raw 1535 1536 # 1537 # Remove the generated temp and final files for this modules. 1538 # 1539 clean : 1540 !IF ("$(FILE_GUID)" != "") 1541 @if exist $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* del $(BIN_DIR)\$(FILE_GUID)-$(BASE_NAME).* 1542 !ENDIF 1543 @if exist $(BIN_DIR)\$(BASE_NAME).* del $(BIN_DIR)\$(BASE_NAME).* 1544 @del /q $(DEST_OUTPUT_DIRS) 1545 1546 [=============================================================================] 1547 # 1548 # These are commands to compile unicode .uni files. 1549 # 1550 [=============================================================================] 1551 [Compile.Ia32.Uni,Compile.Ipf.Uni,Compile.Ebc.Uni,Compile.x64.Uni] 1552 # 1553 # Emit an error message if the file's base name is the same as the 1554 # component base name. This causes build issues. 1555 # 1556 !IF "$(FILE)" == "$(BASE_NAME)" 1557 !ERROR Component Unicode string file name cannot be the same as the component BASE_NAME. 1558 !ENDIF 1559 1560 # 1561 # Always create dep file for uni file as it can be created at the same time when 1562 # strgather is parsing uni file. 1563 # 1564 DEP_FILE = $(DEST_DIR)\$(FILE)Uni.dep 1565 1566 !IF EXIST($(DEP_FILE)) 1567 !INCLUDE $(DEP_FILE) 1568 !ENDIF 1569 1570 $(DEST_DIR)\$(FILE).sdb : $(SOURCE_FILE_NAME) $(INF_FILENAME) 1571 $(STRGATHER) -parse -newdb -db $(DEST_DIR)\$(FILE).sdb -dep $(DEP_FILE) $(INC) $(SOURCE_FILE_NAME) 1572 1573 SDB_FILES = $(SDB_FILES) $(DEST_DIR)\$(FILE).sdb 1574 STRGATHER_FLAGS = $(STRGATHER_FLAGS) -db $(DEST_DIR)\$(FILE).sdb 1575 LOCALIZE = YES 1576 1577 [=============================================================================] 1578 [Compile.Ia32.hfr,Compile.Ipf.hfr,Compile.Ebc.hfr,Compile.x64.hfr] 1579 [=============================================================================] 1580 [Compile.Ia32.Vfr,Compile.Ipf.Vfr,Compile.x64.Vfr] 1581 1582 # 1583 # Add build dependency check 1584 # 1585 DEP_FILE = $(DEST_DIR)\$(FILE)Vfr.dep 1586 1587 !IF EXIST($(DEP_FILE)) 1588 !INCLUDE $(DEP_FILE) 1589 !ENDIF 1590 1591 !IF EXIST($(DEST_DIR)\$(FILE).obj) 1592 DEP_TARGETS = $(DEP_TARGETS) $(DEST_DIR)\$(FILE)Vfr.dep 1593 !IF !EXIST($(DEP_FILE)) 1594 CREATEDEPS = YES 1595 !ENDIF 1596 !ENDIF 1597 1598 # 1599 # Update dep file for next round incremental build 1600 # 1601 $(DEP_FILE) : $(DEST_DIR)\$(FILE).obj 1602 $(MAKEDEPS) -f $(SOURCE_FILE_NAME) $(DEP_FLAGS) 1603 1604 HII_PACK_FILES = $(HII_PACK_FILES) $(DEST_DIR)\$(FILE).hpk 1605 1606 # 1607 # Add a dummy command for building the HII pack file. In reality, it's built 1608 # below, but the C_FLAGS macro reference the target as $@, so you can't specify 1609 # the obj and hpk files as dual targets of the same command. 1610 # 1611 $(DEST_DIR)\$(FILE).hpk : $(DEST_DIR)\$(FILE).obj 1612 1613 $(DEST_DIR)\$(FILE).obj : $(SOURCE_FILE_NAME) $(INF_FILENAME) $(ALL_DEPS) 1614 $(VFRCOMPILE) $(VFRCOMPILE_FLAGS) $(INC) -ibin -od $(DEST_DIR)\$(SOURCE_RELATIVE_PATH) \ 1615 -l $(VFR_FLAGS) $(SOURCE_FILE_NAME) 1616 $(CC) $(C_FLAGS) $(DEST_DIR)\$(FILE).c 1617 1618 [=============================================================================] 1619 [Compile.Ebc.Vfr] 1620 1621 DEP_FILE = $(DEST_DIR)\$(FILE)Vfr.dep 1622 1623 !IF EXIST($(DEST_DIR)\$(FILE).obj) 1624 DEP_TARGETS = $(DEP_TARGETS) $(DEST_DIR)\$(FILE)Vfr.dep 1625 !IF !EXIST($(DEP_FILE)) 1626 CREATEDEPS = YES 1627 !ENDIF 1628 !ENDIF 1629 1630 !IF EXIST($(DEP_FILE)) 1631 !INCLUDE $(DEP_FILE) 1632 !ENDIF 1633 1634 # 1635 # Update dep file for next round incremental build 1636 # 1637 $(DEP_FILE) : $(DEST_DIR)\$(FILE).obj 1638 $(MAKEDEPS) -f $(SOURCE_FILE_NAME) $(DEP_FLAGS) 1639 1640 HII_PACK_FILES = $(HII_PACK_FILES) $(DEST_DIR)\$(FILE).hpk 1641 1642 # 1643 # Add a dummy command for building the HII pack file. In reality, it's built 1644 # below, but the C_FLAGS macro reference the target as $@, so you can't specify 1645 # the obj and hpk files as dual targets of the same command. 1646 # 1647 $(DEST_DIR)\$(FILE).hpk : $(DEST_DIR)\$(FILE).obj 1648 1649 $(DEST_DIR)\$(FILE).obj : $(SOURCE_FILE_NAME) $(INF_FILENAME) $(ALL_DEPS) 1650 $(VFRCOMPILE) $(VFRCOMPILE_FLAGS) $(INC) -ibin -od $(DEST_DIR)\$(SOURCE_RELATIVE_PATH) \ 1651 -l $(VFR_FLAGS) $(SOURCE_FILE_NAME) 1652 $(EBC_CC) $(EBC_C_FLAGS) $(DEST_DIR)\$(FILE).c 1653 1654 [=============================================================================] 1655 # 1656 # Commands for building IFR as uncompressed binary into the FFS file. To 1657 # use it, set COMPILE_SELECT=.vfr=Ifr_Bin for the component in the DSC file. 1658 # 1659 [=============================================================================] 1660 [Compile.Ia32.Ifr_Bin,Compile.Ipf.Ifr_Bin,Compile.x64.Ifr_Bin] 1661 1662 # 1663 # Add build dependency check 1664 # 1665 DEP_FILE = $(DEST_DIR)\$(FILE)Vfr.dep 1666 1667 !IF EXIST($(DEP_FILE)) 1668 !INCLUDE $(DEP_FILE) 1669 !ENDIF 1670 1671 !IF EXIST($(DEST_DIR)\$(FILE).obj) 1672 DEP_TARGETS = $(DEP_TARGETS) $(DEST_DIR)\$(FILE)Vfr.dep 1673 !IF !EXIST($(DEP_FILE)) 1674 CREATEDEPS = YES 1675 !ENDIF 1676 !ENDIF 1677 1678 # 1679 # Update dep file for next round incremental build 1680 # 1681 $(DEP_FILE) : $(DEST_DIR)\$(FILE).obj 1682 $(MAKEDEPS) -f $(SOURCE_FILE_NAME) $(DEP_FLAGS) 1683 1684 HII_PACK_FILES = $(HII_PACK_FILES) $(DEST_DIR)\$(FILE).hpk 1685 1686 # 1687 # Add a dummy command for building the HII pack file. In reality, it's built 1688 # below, but the C_FLAGS macro reference the target as $@, so you can't specify 1689 # the obj and hpk files as dual targets of the same command. 1690 # 1691 $(DEST_DIR)\$(FILE).hpk : $(DEST_DIR)\$(FILE).obj 1692 1693 $(DEST_DIR)\$(FILE).obj : $(SOURCE_FILE_NAME) $(INF_FILENAME) $(ALL_DEPS) 1694 $(VFRCOMPILE) $(VFRCOMPILE_FLAGS) $(INC) -ibin -od $(DEST_DIR)\$(SOURCE_RELATIVE_PATH) \ 1695 -l $(VFR_FLAGS) $(SOURCE_FILE_NAME) 1696 $(CC) $(C_FLAGS) $(DEST_DIR)\$(FILE).c 1697 1698 # 1699 # Add to the variable that contains the list of VFR binary files we're going 1700 # to merge together at the end of the build. 1701 # 1702 HII_IFR_PACK_FILES = $(HII_IFR_PACK_FILES) $(DEST_DIR)\$(FILE).hpk 1703 1704 [=============================================================================] 1705 # 1706 # Commands for building IFR as uncompressed binary into the FFS file. To 1707 # use it, set COMPILE_SELECT=.vfr=Ifr_Bin for the component in the DSC file. 1708 # 1709 [=============================================================================] 1710 [Compile.Ebc.Ifr_Bin] 1711 1712 # 1713 # Add build dependency check 1714 # 1715 DEP_FILE = $(DEST_DIR)\$(FILE)Vfr.dep 1716 1717 !IF EXIST($(DEP_FILE)) 1718 !INCLUDE $(DEP_FILE) 1719 !ENDIF 1720 1721 !IF EXIST($(DEST_DIR)\$(FILE).obj) 1722 DEP_TARGETS = $(DEP_TARGETS) $(DEST_DIR)\$(FILE)Vfr.dep 1723 !IF !EXIST($(DEP_FILE)) 1724 CREATEDEPS = YES 1725 !ENDIF 1726 !ENDIF 1727 1728 # 1729 # Update dep file for next round incremental build 1730 # 1731 $(DEP_FILE) : $(DEST_DIR)\$(FILE).obj 1732 $(MAKEDEPS) -f $(SOURCE_FILE_NAME) $(DEP_FLAGS) 1733 1734 HII_PACK_FILES = $(HII_PACK_FILES) $(DEST_DIR)\$(FILE).hpk 1735 1736 # 1737 # Add a dummy command for building the HII pack file. In reality, it's built 1738 # below, but the C_FLAGS macro reference the target as $@, so you can't specify 1739 # the obj and hpk files as dual targets of the same command. 1740 # 1741 $(DEST_DIR)\$(FILE).hpk : $(DEST_DIR)\$(FILE).obj 1742 1743 $(DEST_DIR)\$(FILE).obj : $(SOURCE_FILE_NAME) $(INF_FILENAME) $(ALL_DEPS) 1744 $(VFRCOMPILE) $(VFRCOMPILE_FLAGS) $(INC) -ibin -od $(DEST_DIR)\$(SOURCE_RELATIVE_PATH) \ 1745 -l $(VFR_FLAGS) $(SOURCE_FILE_NAME) 1746 $(EBC_CC) $(EBC_C_FLAGS) $(DEST_DIR)\$(FILE).c 1747 1748 # 1749 # Add to the variable that contains the list of VFR binary files we're going 1750 # to merge together at the end of the build. 1751 # 1752 HII_IFR_PACK_FILES = $(HII_IFR_PACK_FILES) $(DEST_DIR)\$(FILE).hpk 1753 1754 [=============================================================================] 1755 [Compile.Ia32.Fv,Compile.Ipf.Fv,Compile.x64.Fv] 1756 # 1757 # Run GenSection on the firmware volume image. 1758 # 1759 $(DEST_DIR)\$(SOURCE_FV)Fv.sec : $(SOURCE_FILE_NAME) $(INF_FILENAME) 1760 $(GENSECTION) -I $(SOURCE_FILE_NAME) -O $(DEST_DIR)\$(SOURCE_FV)Fv.sec -S EFI_SECTION_FIRMWARE_VOLUME_IMAGE 1761 1762 [=============================================================================] 1763