]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Sample/Platform/Common.dsc
BaseTools: Fix one or more multiply defined symbols found issue
[mirror_edk2.git] / EdkCompatibilityPkg / Sample / Platform / Common.dsc
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 [=============================================================================]