Home | History | Annotate | Download | only in Platform
      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