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