Enhanced the build_rule format and merged updates from edk2 trunk
[people/mcb30/basetools.git] / Conf / build_rule.template
1 #\r
2 #  Copyright (c) 2007-2008, Intel Corporation\r
3 #\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 #  Filename: build_rule.template\r
13 #\r
14 \r
15 ## Syntax\r
16 #\r
17 # "*" is used to indicate that the source files will be processed at the same time.\r
18 # "?" is used to indicate that the source files will be processed one by one.\r
19 #\r
20 # "[" <File-Type>[.<Build-Type>][.<Arch>][, <File-Type>[.<Build-Type>][.<Arch>]] "]" <EOL>\r
21 #   <InputFile[.<ToolChainFamily>]> <EOL>\r
22 #       (?|*).<File-Extension> [(\n|,) (?|*).<File-Extension>]\r
23 #\r
24 #   <OutputFile[.<ToolChainFamily>]> <EOL>\r
25 #       <FileFullPath>\r
26 #\r
27 #   <ExtraDependency>\r
28 #       <FileFullPath>\r
29 #\r
30 #   <Command[.<ToolChainFamily>]> <EOL>\r
31 #       <Command1>\r
32 #       [<Command2>]\r
33 #\r
34 # <Build-Type> is the MODULE_TYPE in EDK2 or COMPONENT_TYPE  in EDK.\r
35 # Missing <InputFile> will cause an exception and break build.\r
36 # Missing <Command> will cause that related build target won't be generated but\r
37 #   won't break build.\r
38 #\r
39 \r
40 ## Placeholders for string substitution\r
41 #\r
42 #   ${src}      Source file(s) to be built (full path)\r
43 #   ${s_path}   Source file directory (absolute path)\r
44 #   ${s_dir}    Source file relative directory within a module\r
45 #               (Note: ${s_dir} is always equals to "." if source file is given in absolute path.)\r
46 #   ${s_name}   Source file name without path\r
47 #   ${s_base}   Source file name without extension and path\r
48 #   ${s_ext}    Source file extension\r
49 #\r
50 #   ${dst}      Destination file(s) built from ${src} (full path)\r
51 #   ${d_path}   Destination file directory (absolute path)\r
52 #   ${d_name}   Destination file name without path\r
53 #   ${d_base}   Destination file name without extension and path\r
54 #   ${d_ext}    Destination file extension\r
55 #\r
56 #   (+)         Directory separator\r
57 #\r
58 \r
59 ## Macro\r
60 #   $(WORKSPACE)        Workspace directory\r
61 #   $(OUTPUT_DIR)       Directory for intermediate files for building a module\r
62 #   $(DEBUG_DIR)        Directory for files used to debug a module\r
63 #   $(BUILD_DIR)        All files for building a platform will be put in this directory\r
64 #   $(BIN_DIR)          Common directory for executable files\r
65 #   $(FV_DIR)           Directory to store flash image files\r
66 #   $(INC)              Search path of current module\r
67 #   $(LIBS)             Static library files of current module\r
68 #   $(<tool>_FLAGS)     Tools flags of current module\r
69 #   $(MODULE_NAME)      Current module name\r
70 #   $(MODULE_TYPE)      Current module type\r
71 #   $(ARCH)             Architecture of current module\r
72 #   $(TOOLCHAIN)        Toolchain used to build current module\r
73 #   $(TARGET)           Target of current module (DEBUG/RELEASE)\r
74 #   $(<tool>)           Path of tool\r
75 #   $(EDK_TOOLS_PATH)   Path of build tools\r
76 #   $(<FILE_TYPE_LIST>) File list of each file type\r
77 #                       (Note: The macro name is derived from file type name. For example,\r
78 #                        C-Code-File will have C_CODE_FILE_LIST macro.)\r
79 #\r
80 #   $(CP)     copy command\r
81 #   $(MV)     move command\r
82 #   $(RM)     delete command\r
83 #   $(MD)     create dir command\r
84 #   $(RD)     remove dir command\r
85 #\r
86 \r
87 ## Reserved File-Type\r
88 #\r
89 # Don't change following names of file types and their associated files,\r
90 # which are also used in tools' code\r
91 #\r
92 #   C-Code-File\r
93 #   C-Header-File\r
94 #   Dynamic-Library-File\r
95 #   Static-Library-File\r
96 #   Visual-Form-Representation-File\r
97 #   Unicode-Text-File\r
98 #\r
99 \r
100 [C-Code-File]\r
101     <InputFile>\r
102         ?.c\r
103         ?.C\r
104         ?.cc\r
105         ?.CC\r
106         ?.cpp\r
107         ?.Cpp\r
108         ?.CPP\r
109 \r
110     <ExtraDependency>\r
111         $(MAKE_FILE)\r
112 \r
113     <OutputFile>\r
114         $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj\r
115 \r
116     <Command.MSFT, Command.INTEL>\r
117         "$(CC)" /Fo${dst} $(CC_FLAGS) $(INC) ${src}\r
118 \r
119     <Command.GCC>\r
120         "$(CC)" -o ${dst} $(CC_FLAGS) $(INC) ${src}\r
121 \r
122 [C-Header-File]\r
123     <InputFile>\r
124         *.h, *.H\r
125 \r
126     <OutputFile>\r
127 \r
128     <Command>\r
129 \r
130 \r
131 [Assembly-Code-File.COMMON.COMMON]\r
132     <InputFile.MSFT, InputFile.INTEL>\r
133         ?.asm, ?.Asm, ?.ASM\r
134 \r
135     <InputFile.GCC>\r
136         ?.S\r
137 \r
138     <ExtraDependency>\r
139         $(MAKE_FILE)\r
140 \r
141     <OutputFile>\r
142         $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj\r
143 \r
144     <Command.MSFT, Command.INTEL>\r
145         "$(PP)" $(PP_FLAGS) $(INC) ${src} > ${d_path}(+)${s_base}.i\r
146         Trim --source-code --convert-hex -o ${d_path}(+)${s_base}.iii ${d_path}(+)${s_base}.i\r
147         "$(ASM)" /Fo${dst} $(ASM_FLAGS) $(INC) ${d_path}(+)${s_base}.iii\r
148 \r
149     <Command.GCC>\r
150         "$(PP)" $(PP_FLAGS) $(INC) ${src} > ${d_path}(+)${s_base}.i\r
151         Trim --source-code -o ${d_path}(+)${s_base}.iii ${d_path}(+)${s_base}.i\r
152         "$(ASM)" -o ${dst} $(ASM_FLAGS) $(INC) ${d_path}(+)${s_base}.iii\r
153 \r
154 [Assembly-Code-File.COMMON.IPF]\r
155     <InputFile>\r
156         ?.s\r
157 \r
158     <ExtraDependency>\r
159         $(MAKE_FILE)\r
160 \r
161     <OutputFile>\r
162         $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj\r
163 \r
164     <Command.MSFT, Command.INTEL>\r
165         "$(PP)" $(PP_FLAGS) $(INC) ${src} > ${d_path}(+)${s_base}.i\r
166         Trim --source-code -o ${d_path}(+)${s_base}.iii ${d_path}(+)${s_base}.i\r
167         "$(ASM)" -o ${dst} $(ASM_FLAGS) ${d_path}(+)${s_base}.iii\r
168 \r
169 [Visual-Form-Representation-File]\r
170     <InputFile>\r
171         ?.vfr\r
172         ?.Vfr\r
173         ?.VFR\r
174 \r
175     <ExtraDependency>\r
176         $(MAKE_FILE)\r
177 \r
178     <OutputFile>\r
179         $(DEBUG_DIR)(+)${s_dir}(+)${s_base}.c\r
180 \r
181     <Command>\r
182         "$(PP)" $(VFRPP_FLAGS) $(INC) ${src} > $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i\r
183         Trim --vfr-file -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iii $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i\r
184         -mkdir ${d_path} > NUL 2>&1\r
185         "$(VFR)" $(VFR_FLAGS) --output-directory ${d_path} $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iii\r
186 \r
187 [Object-File]\r
188     <InputFile>\r
189         *.obj\r
190         *.o\r
191 \r
192     <OutputFile>\r
193         $(OUTPUT_DIR)(+)$(MODULE_NAME).lib\r
194 \r
195     <Command.MSFT, Command.INTEL>\r
196         "$(SLINK)" $(SLINK_FLAGS) /OUT:${dst} ${src}\r
197 \r
198     <Command.GCC>\r
199         "$(SLINK)" -cr ${dst} $(SLINK_FLAGS) ${src}\r
200 \r
201 [Static-Library-File]\r
202     <InputFile>\r
203         ?.lib\r
204 \r
205     <ExtraDependency>\r
206         $(LIBS)\r
207         $(MAKE_FILE)\r
208 \r
209     <OutputFile>\r
210         $(DEBUG_DIR)(+)$(MODULE_NAME).dll\r
211 \r
212     <Command.MSFT, Command.INTEL>\r
213         "$(DLINK)" /OUT:${dst} $(DLINK_FLAGS) $(DLINK_SPATH) $(LIBS) ${src}\r
214 \r
215     <Command.GCC>\r
216         "$(DLINK)" -o ${dst} $(DLINK_FLAGS) -\( $(DLINK_SPATH) $(LIBS) ${src} -\) $(DLINK2_FLAGS)\r
217 \r
218 [Dynamic-Library-File]\r
219     <InputFile>\r
220         ?.dll\r
221 \r
222     <OutputFile>\r
223         $(DEBUG_DIR)(+)$(MODULE_NAME).efi\r
224 \r
225     <Command>\r
226         GenFw -e $(MODULE_TYPE) -o ${dst} ${src}\r
227         $(CP) ${dst} $(OUTPUT_DIR)\r
228         $(CP) ${dst} $(BIN_DIR)\r
229         -$(CP) $(DEBUG_DIR)(+)*.map $(OUTPUT_DIR)\r
230 \r
231 [Dependency-Expression-File]\r
232     <InputFile>\r
233         ?.dxs, ?.Dxs, ?.DXS\r
234 \r
235     <OutputFile>\r
236         $(OUTPUT_DIR)(+)$(MODULE_NAME).depex\r
237 \r
238     <Command>\r
239         "$(PP)" $(CC_FLAGS) $(APP_FLAGS) $(INC) ${src} > $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i\r
240         Trim --source-code -o $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iii $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.i\r
241         GenDepex -t $(MODULE_TYPE) -o ${dst} $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iii\r
242 \r
243 [Acpi-Source-Language-File]\r
244     <InputFile>\r
245         ?.asl, ?.Asl, ?.ASL\r
246 \r
247     <OutputFile>\r
248         $(OUTPUT_DIR)(+)${s_base}.aml\r
249 \r
250     <ExtraDependency>\r
251         $(MAKE_FILE)\r
252 \r
253     <Command.MSFT, Command.INTEL>\r
254         "$(PP)" $(APP_FLAGS) $(INC) ${src} > ${d_path}(+)${s_base}.i\r
255         "$(ASL)" -p ${dst} $(ASL_FLAGS) ${d_path}(+)${s_base}.i\r
256 \r
257 [Acpi-Table-Code-File]\r
258     <InputFile>\r
259         ?.aslc\r
260 \r
261     <OutputFile>\r
262         $(OUTPUT_DIR)(+)${s_base}.acpi\r
263 \r
264     <ExtraDependency>\r
265         $(MAKE_FILE)\r
266 \r
267     <Command.MSFT, Command.INTEL>\r
268         "$(CC)" /Fo$(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj $(CC_FLAGS) $(INC) ${src}\r
269         "$(DLINK)" /OUT:$(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.dll $(SLINK_FLAGS) $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj\r
270         GenFw -o ${dst} -c $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.dll\r
271 \r
272 [Masm16-Code-File]\r
273     <InputFile>\r
274         ?.asm16, ?.Asm16, ?.ASM16\r
275 \r
276     <ExtraDependency>\r
277         $(MAKE_FILE)\r
278 \r
279     <OutputFile>\r
280         $(OUTPUT_DIR)(+)${s_base}.com\r
281 \r
282     <Command.MSFT, Command.INTEL>\r
283         cd $(OUTPUT_DIR)(+)${s_dir}\r
284         "$(ASM)" /nologo /c /omf /Fo$(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj ${src}\r
285         "$(ASMLINK)" $(ASMLINK_FLAGS) $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.obj,${dst},,,,\r
286 \r
287 [Microcode-File]\r
288     <InputFile>\r
289         ?.txt, ?.TXT, ?.Txt\r
290 \r
291     <OutputFile>\r
292         $(OUTPUT_DIR)(+)${s_base}.mcb\r
293 \r
294     <Command>\r
295         GenFw -o ${dst} -m ${src}\r
296 \r
297 [Microcode-Binary-File]\r
298     <InputFile>\r
299         *.mcb\r
300 \r
301     <OutputFile>\r
302         $(OUTPUT_DIR)(+)$(MODULE_NAME).bin\r
303 \r
304     <Command>\r
305         GenFw -o ${dst} -j ${src}\r
306         -$(CP) ${dst} $(BIN_DIR)\r
307 \r
308 [Unicode-Text-File]\r
309     <InputFile>\r
310         *.uni, *.Uni, *.UNI\r
311 \r
312     <OutputFile>\r
313         $(DEBUG_DIR)(+)AutoGen.c\r
314         $(DEBUG_DIR)(+)AutoGen.h\r
315 \r
316     <Command>\r
317 \r
318 [EFI-Image-File]\r
319     <InputFile>\r
320         ?.efi, ?.Efi, ?.EFI\r
321 \r
322     <OutputFile>\r
323 \r
324     <Command>\r
325 \r