]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - Tools/Conf/BuildMacro.xml
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@718 6f19259b...
[mirror_edk2.git] / Tools / Conf / BuildMacro.xml
... / ...
CommitLineData
1<?xml version="1.0" encoding="UTF-8"?>\r
2<!--\r
3Copyright (c) 2006, Intel Corporation\r
4All rights reserved. This program and the accompanying materials\r
5are licensed and made available under the terms and conditions of the BSD License\r
6which accompanies this distribution. The full text of the license may be found at\r
7http://opensource.org/licenses/bsd-license.php\r
8\r
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
11-->\r
12<project name="common">\r
13 <!--\r
14 macro definitions for building files with different types\r
15 -->\r
16 <!--\r
17 C Code\r
18 -->\r
19 <macrodef name="Build_CCode">\r
20 <attribute name="FILEPATH"/>\r
21 <attribute name="FILENAME"/>\r
22 <attribute name="FILEEXT" default="c"/>\r
23 \r
24 <element name="EXTRA.INC" optional="yes"/>\r
25 <element name="EXTRA.ARG" optional="yes"/>\r
26 \r
27 <sequential>\r
28 <var name="FILE_BASENAME" value="@{FILENAME}" />\r
29 <var name="FILE_PATH" value="@{FILEPATH}" />\r
30 <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>\r
31\r
32 <if>\r
33 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>\r
34 <then>\r
35 <makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep">\r
36 <input file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
37 <input file="${DEST_DIR_DEBUG}/AutoGen.h"/>\r
38 <EXTRA.INC/>\r
39 </makedeps>\r
40 </then>\r
41 </if>\r
42\r
43 <OnDependency>\r
44 <sourcefiles>\r
45 <file ListFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"/>\r
46 </sourcefiles>\r
47 <targetfiles>\r
48 <file Name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>\r
49 </targetfiles>\r
50\r
51 <sequential>\r
52 <cc userdefine="on">\r
53 <command type="CC" cmd="${CC}" workdir="${DEST_DIR_OUTPUT}" family="${CC_FAMILY}"\r
54 outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj">\r
55 <EXTRA.INC/>\r
56 <argument value="${CC_FLAGS}"/>\r
57 <EXTRA.ARG/>\r
58 <fileset casesensitive="off" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
59 </command>\r
60 </cc>\r
61 </sequential>\r
62 </OnDependency>\r
63 </sequential>\r
64 </macrodef>\r
65\r
66\r
67 <macrodef name="Build_AUTOGEN">\r
68 <attribute name="FILEPATH"/>\r
69 <attribute name="FILENAME"/>\r
70 <attribute name="FILEEXT" default="c"/>\r
71\r
72 <element name="EXTRA.INC" optional="yes"/>\r
73 <element name="EXTRA.ARG" optional="yes"/>\r
74\r
75 <sequential>\r
76 <var name="FILE_BASENAME" value="@{FILENAME}" />\r
77 <var name="FILE_PATH" value="@{FILEPATH}" />\r
78 <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>\r
79\r
80 <if>\r
81 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>\r
82 <then>\r
83 <makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep">\r
84 <input file="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
85 <input file="${DEST_DIR_DEBUG}/AutoGen.h"/>\r
86 <EXTRA.INC/>\r
87 </makedeps>\r
88 </then>\r
89 </if>\r
90\r
91 <OnDependency>\r
92 <sourcefiles>\r
93 <file ListFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"/>\r
94 </sourcefiles>\r
95 <targetfiles>\r
96 <file Name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>\r
97 </targetfiles>\r
98\r
99 <sequential>\r
100 <cc userdefine="on">\r
101 <command type="CC" cmd="${CC}" workdir="${DEST_DIR_OUTPUT}" family="${CC_FAMILY}"\r
102 outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj">\r
103 <EXTRA.INC/>\r
104 <argument value="${CC_FLAGS}"/>\r
105 <EXTRA.ARG/>\r
106 <fileset casesensitive="off" file="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
107 </command>\r
108 </cc>\r
109 </sequential>\r
110 </OnDependency>\r
111 </sequential>\r
112 </macrodef>\r
113\r
114 <macrodef name="Build_DPX">\r
115 <attribute name="FILEPATH"/>\r
116 <attribute name="FILENAME"/>\r
117 <attribute name="FILEEXT" default="dxs"/>\r
118\r
119 <element name="EXTRA.INC" optional="yes"/>\r
120 <element name="EXTRA.ARG" optional="yes"/>\r
121 \r
122\r
123 <sequential>\r
124 <var name="FILE_BASENAME" value="@{FILENAME}" />\r
125 <var name="FILE_PATH" value="@{FILEPATH}" />\r
126 <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>\r
127\r
128 <OnDependency>\r
129 <sourcefiles>\r
130 <file name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
131 </sourcefiles>\r
132 <targetfiles>\r
133 <file name="${DEST_DIR_OUTPUT}/${BASE_NAME}.depex"/>\r
134 </targetfiles>\r
135\r
136 <sequential>\r
137\r
138 <cc userdefine="on">\r
139 <command type="CC" cmd="${CC}" workdir="${DEST_DIR_OUTPUT}" family="${CC_FAMILY}">\r
140 <EXTRA.INC/>\r
141 <argument value="${PP_FLAGS}"/>\r
142 <fileset casesensitive="off" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
143 </command>\r
144 </cc>\r
145 \r
146 <gendepex inputFile="${DEST_DIR_OUTPUT}/@{FILENAME}.i" outputFile="${DEST_DIR_OUTPUT}/${BASE_NAME}.depex"/>\r
147 </sequential>\r
148 </OnDependency>\r
149 </sequential>\r
150 </macrodef>\r
151 \r
152 <macrodef name="Build_ASM">\r
153 <attribute name="FILEPATH"/>\r
154 <attribute name="FILENAME"/>\r
155 <attribute name="FILEEXT" default="asm"/>\r
156\r
157 <element name="EXTRA.INC" optional="yes"/>\r
158 <element name="EXTRA.ARG" optional="yes"/>\r
159 \r
160 <!-- Dispath ASM file, there are three type. \r
161 asm,s - Build_Assembly\r
162 S - Build_Ipf_Assembly -->\r
163 <sequential>\r
164 <if>\r
165 <or>\r
166 <equals arg1="@{FILEEXT}" arg2="asm" />\r
167 <equals arg1="@{FILEEXT}" arg2="S" />\r
168 </or>\r
169 <then>\r
170 <Build_Assembly FILEPATH="@{FILEPATH}" FILENAME="@{FILENAME}" FILEEXT="@{FILEEXT}">\r
171 <EXTRA.INC.1><EXTRA.INC /></EXTRA.INC.1>\r
172 <EXTRA.ARG.1><EXTRA.ARG /></EXTRA.ARG.1>\r
173 </Build_Assembly>\r
174 </then>\r
175 <elseif>\r
176 <equals arg1="@{FILEEXT}" arg2="s" />\r
177 <then>\r
178 <Build_IPF_Assembly_Code FILEPATH="@{FILEPATH}" FILENAME="@{FILENAME}" FILEEXT="@{FILEEXT}">\r
179 <EXTRA.INC.1><EXTRA.INC /></EXTRA.INC.1>\r
180 <EXTRA.ARG.1><EXTRA.ARG /></EXTRA.ARG.1>\r
181 </Build_IPF_Assembly_Code>\r
182 </then>\r
183 </elseif>\r
184 </if>\r
185 </sequential>\r
186 </macrodef>\r
187 \r
188 <!--\r
189 IA32/x64 Assembly\r
190 -->\r
191 <macrodef name="Build_Assembly">\r
192 <attribute name="FILEPATH"/>\r
193 <attribute name="FILENAME"/>\r
194 <attribute name="FILEEXT" default="asm"/>\r
195\r
196 <element name="EXTRA.INC.1" optional="yes"/>\r
197 <element name="EXTRA.ARG.1" optional="yes"/>\r
198\r
199 <sequential>\r
200 <var name="FILE_BASENAME" value="@{FILENAME}" />\r
201 <var name="FILE_PATH" value="@{FILEPATH}" />\r
202 <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>\r
203\r
204 <OnDependency>\r
205 <sourcefiles>\r
206 <file Name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
207 </sourcefiles>\r
208 <targetfiles>\r
209 <file Name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>\r
210 </targetfiles>\r
211\r
212 <sequential>\r
213 <cc userdefine="on">\r
214 <command type="ASM" cmd="${ASM}" workdir="${DEST_DIR_OUTPUT}" family="${ASM_FAMILY}"\r
215 outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj">\r
216 <EXTRA.INC.1/>\r
217 \r
218 <argument value="${ASM_FLAGS}"/>\r
219 <EXTRA.ARG.1/>\r
220 \r
221 <fileset casesensitive="off" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
222 </command>\r
223 </cc>\r
224 </sequential>\r
225 </OnDependency>\r
226 </sequential>\r
227 </macrodef>\r
228\r
229 <!--\r
230 IPF Assembly\r
231 -->\r
232 <macrodef name="Build_IPF_Assembly_Code">\r
233 <attribute name="FILEPATH"/>\r
234 <attribute name="FILENAME"/>\r
235 <attribute name="FILEEXT" default="s"/>\r
236\r
237 <element name="EXTRA.INC.1" optional="yes"/>\r
238 <element name="EXTRA.ARG.1" optional="yes"/>\r
239\r
240 <sequential>\r
241 <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>\r
242\r
243 <if>\r
244 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>\r
245 <then>\r
246 <makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep">\r
247 <input file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
248 <EXTRA.INC.1/>\r
249 </makedeps>\r
250 </then>\r
251 </if>\r
252\r
253 <OnDependency>\r
254 <sourcefiles>\r
255 <file listfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"/>\r
256 </sourcefiles>\r
257 <targetfiles>\r
258 <file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>\r
259 </targetfiles>\r
260\r
261 <sequential>\r
262 <cc userdefine="on">\r
263 <command type="CC" cmd="${CC}" workdir="${DEST_DIR_OUTPUT}/@{FILEPATH}" family="${CC_FAMILY}">\r
264 <EXTRA.INC.1/>\r
265 <argument value="${PP_FLAGS}"/>\r
266 <fileset casesensitive="off" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
267 </command>\r
268 </cc>\r
269 \r
270 <cc userdefine="on">\r
271 <command type="ASM" cmd="${ASM}" workdir="${DEST_DIR_OUTPUT}" family="${ASM_FAMILY}"\r
272 includepathDelimiter="-I" outputDelimiter="-o"\r
273 outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj">\r
274 <EXTRA.INC.1/>\r
275 <argument value="${ASM_FLAGS}"/>\r
276 <EXTRA.ARG.1/>\r
277 <fileset casesensitive="off" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.i"/>\r
278 </command>\r
279 </cc>\r
280 </sequential>\r
281 </OnDependency>\r
282 </sequential>\r
283 </macrodef>\r
284\r
285\r
286 <macrodef name="Build_IPF_PP_Code">\r
287 <attribute name="FILEPATH"/>\r
288 <attribute name="FILENAME"/>\r
289 <attribute name="FILEEXT" default="i"/>\r
290\r
291 <element name="EXTRA.INC" optional="yes"/>\r
292 <element name="EXTRA.ARG" optional="yes"/>\r
293\r
294 <sequential>\r
295 <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>\r
296 \r
297 <cc userdefine="on">\r
298 <command type="ASM" includepathDelimiter="-I">\r
299 <includepath path="${WORKSPACE_DIR}"/>\r
300 <includepath path="${MODULE_DIR}"/>\r
301 <includepath path="${MODULE_DIR}/${ARCH}"/>\r
302 <EXTRA.INC/>\r
303 \r
304 <argument value="${ASM_FLAGS}"/>\r
305 <EXTRA.ARG/>\r
306 <!-- <argument value="-o ${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/> -->\r
307 <OutputFile File="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>\r
308 \r
309 <fileset casesensitive="off" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
310 </command>\r
311 </cc>\r
312 </sequential>\r
313 </macrodef>\r
314 \r
315 \r
316 <!--\r
317 Library private HashMap map = new HashMap();\r
318 -->\r
319 <macrodef name="Build_Library">\r
320 <attribute name="FILENAME" />\r
321 <attribute name="FILEEXT" default="obj"/>\r
322 \r
323 <sequential>\r
324 <var name="FILE_BASENAME" value="@{FILENAME}" />\r
325 <var name="FILE_PATH" value="." />\r
326 <mkdir dir="${BIN_DIR}"/>\r
327\r
328 <OnDependency>\r
329 <sourcefiles>\r
330 <file list="${OBJECTS}"/>\r
331 </sourcefiles>\r
332 <targetfiles>\r
333 <file name="${BIN_DIR}/@{FILENAME}.lib"/>\r
334 </targetfiles>\r
335\r
336 <sequential>\r
337 <cc userdefine="on">\r
338 <command type="SLINK" cmd="${SLINK}" family="${SLINK_FAMILY}"\r
339 outputFile="${BIN_DIR}/@{FILENAME}.lib">\r
340 <argument value="${SLINK_FLAGS}"/>\r
341\r
342 <fileset casesensitive="off" dir="${DEST_DIR_OUTPUT}" includes="**/*.obj"/>\r
343 </command>\r
344 </cc>\r
345 </sequential>\r
346 </OnDependency>\r
347 </sequential>\r
348 </macrodef>\r
349\r
350 <!--\r
351 Unicode -> .sdb\r
352 -->\r
353 <macrodef name="Build_UNI">\r
354 <attribute name="FILEPATH"/>\r
355 <attribute name="FILENAME"/>\r
356 <attribute name="FILEEXT" default="uni"/>\r
357\r
358 <element name="EXTRA.INC" optional="yes"/>\r
359 <element name="EXTRA.ARG" optional="yes"/>\r
360\r
361 <sequential>\r
362 <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>\r
363\r
364 <OnDependency>\r
365 <sourcefiles>\r
366 <file name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
367 </sourcefiles>\r
368 <targetfiles>\r
369 <file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb"/>\r
370 </targetfiles>\r
371\r
372 <sequential>\r
373 <strgather commandtype="parse" newdatabase="true">\r
374 <database name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb"/>\r
375 <EXTRA.INC/>\r
376 <EXTRA.ARG/>\r
377 <inputfile name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
378 </strgather>\r
379 </sequential>\r
380 </OnDependency>\r
381\r
382 <var name="SDB_FILES" value="${SDB_FILES}, ${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb"/>\r
383 </sequential>\r
384 </macrodef>\r
385\r
386 <!--\r
387 .sdb(s) -> .c, .h -> .obj\r
388 -->\r
389 <macrodef name="Build_Unicode_Database">\r
390 <attribute name="FILEPATH"/>\r
391 <attribute name="FILENAME"/>\r
392 <attribute name="FILEEXT" default="sdb"/>\r
393\r
394 <element name="EXTRA.INC" optional="yes"/>\r
395 <element name="EXTRA.ARG" optional="yes"/>\r
396\r
397 <sequential>\r
398 <var name="FILE_BASENAME" value="@{FILENAME}" />\r
399 <var name="FILE_PATH" value="@{FILEPATH}" />\r
400 <OnDependency>\r
401 <sourcefiles>\r
402 <file list="${SDB_FILES}"/>\r
403 <file list="${SOURCE_FILES}"/>\r
404 </sourcefiles>\r
405 <targetfiles>\r
406 <file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb"/>\r
407 </targetfiles>\r
408 \r
409 <sequential>\r
410 <strgather commandtype="scan" outputdatabase="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb" verbose="read">\r
411 <skipext name=".uni"/>\r
412 <skipext name=".h"/>\r
413 <database list="${SDB_FILES}"/>\r
414 <inputfile name="${SOURCE_FILES}"/>\r
415 </strgather>\r
416 </sequential>\r
417 </OnDependency>\r
418\r
419 <OnDependency>\r
420 <sourcefiles>\r
421 <file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb"/>\r
422 </sourcefiles>\r
423 <targetfiles>\r
424 <file name="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}StrDefs.h"/>\r
425 <file name="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}Strings.hpk"/>\r
426 <file name="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}Strings.c"/>\r
427 </targetfiles>\r
428 \r
429 <sequential>\r
430 <strgather basename="@{FILENAME}Strings" commandtype="dump"\r
431 outputdefines="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}StrDefs.h"\r
432 outputhpk="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}Strings.hpk"\r
433 outputstring="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}Strings.c">\r
434 <database name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb"/>\r
435 </strgather>\r
436 </sequential>\r
437 </OnDependency>\r
438\r
439 <OnDependency>\r
440 <sourcefiles>\r
441 <file name="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}Strings.c"/>\r
442 </sourcefiles>\r
443 <targetfiles>\r
444 <file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}Strings.obj"/>\r
445 </targetfiles>\r
446 \r
447 <sequential>\r
448 <cc userdefine="on">\r
449 <command type="CC" cmd="${CC}" workdir="${DEST_DIR_OUTPUT}" family="${CC_FAMILY}"\r
450 includepathDelimiter="-I"\r
451 outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}Strings.obj">\r
452 <argument value="${CC_FLAGS}"/>\r
453 <EXTRA.INC />\r
454 <fileset casesensitive="off" file="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}Strings.c"/>\r
455 </command>\r
456 </cc>\r
457 </sequential>\r
458 </OnDependency>\r
459\r
460 </sequential>\r
461 </macrodef>\r
462\r
463 <!--\r
464 Vfr\r
465 -->\r
466 <macrodef name="Build_VFR">\r
467 <attribute name="FILEPATH"/>\r
468 <attribute name="FILENAME"/>\r
469 <attribute name="FILEEXT" default="vfr"/>\r
470\r
471 <element name="EXTRA.INC" optional="yes"/>\r
472 <element name="EXTRA.ARG" optional="yes"/>\r
473\r
474 <sequential>\r
475 <mkdir dir="${DEST_DIR_DEBUG}/@{FILEPATH}"/>\r
476\r
477 <if>\r
478 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>\r
479 <then>\r
480 <makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep">\r
481 <input file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
482 <EXTRA.INC/>\r
483 </makedeps>\r
484 </then>\r
485 </if>\r
486\r
487 <OnDependency>\r
488 <sourcefiles>\r
489 <file listfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"/>\r
490 </sourcefiles>\r
491 <targetfiles>\r
492 <file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>\r
493 </targetfiles>\r
494\r
495 <sequential>\r
496 <vfrcompile createIfrBinFile="on" createListFile="on" outPutDir="${DEST_DIR_DEBUG}/@{FILEPATH}" vfrFile="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}">\r
497 <EXTRA.INC/>\r
498 </vfrcompile>\r
499 \r
500 <cc userdefine="on">\r
501 <command type="CC" cmd="${CC}" workdir="${DEST_DIR_OUTPUT}" \r
502 includepathDelimiter="-I"\r
503 outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj" >\r
504 <argument value="${CC_FLAGS}"/>\r
505 <EXTRA.INC/>\r
506 <EXTRA.ARG/>\r
507 <fileset casesensitive="off" file="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.c"/>\r
508 </command>\r
509 </cc>\r
510 <delete file="${PLATFORM_DIR}/@{FILENAME}.i" />\r
511 </sequential>\r
512 </OnDependency>\r
513 </sequential>\r
514 </macrodef>\r
515\r
516<!--############################################################################\r
517 Build Sections\r
518#############################################################################-->\r
519 <!--\r
520 DLL\r
521 -->\r
522 <macrodef name="GenDll">\r
523 <attribute name="FILEPATH"/>\r
524 <attribute name="FILENAME"/>\r
525 <attribute name="FILEEXT"/>\r
526\r
527 <element name="LIB.ARG" optional="yes"/>\r
528 <element name="LINK.ARG" optional="yes"/>\r
529\r
530 <sequential>\r
531 <var name="FILE_BASENAME" value="@{FILENAME}" />\r
532 <var name="FILE_PATH" value="@{FILEPATH}" />\r
533 <OnDependency>\r
534 <sourcefiles>\r
535 <!--fileset casesensitive="off" dir="${DEST_DIR_OUTPUT}" includes="**/*.obj" /-->\r
536 <file list="${LIBS}"/>\r
537 </sourcefiles>\r
538 <targetfiles>\r
539 <file name="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.dll"/>\r
540 </targetfiles>\r
541\r
542 <sequential>\r
543 <cc userdefine="on">\r
544 <command type="SLINK" cmd="${SLINK}" family="${SLINK_FAMILY}"\r
545 outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}Local.lib">\r
546 <argument value="${SLINK_FLAGS}"/>\r
547\r
548 <fileset casesensitive="off" dir="${DEST_DIR_OUTPUT}" includes="**/*.obj"/>\r
549 </command>\r
550 </cc>\r
551 <cc userdefine="on">\r
552 <command type="DLINK" cmd="${DLINK}" family="${DLINK_FAMILY}"\r
553 outputFile="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.dll" >\r
554 <argument value="${DLINK_FLAGS}"/>\r
555 <libset libs="${LIBS}"/>\r
556 <libset libs="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}Local.lib"/>\r
557 <libset libs="${DLINK_SPATH}" />\r
558 <LINK.ARG/>\r
559 </command>\r
560 </cc>\r
561 </sequential>\r
562 </OnDependency>\r
563 </sequential>\r
564 </macrodef>\r
565\r
566 <!--\r
567 EFI\r
568 -->\r
569 <macrodef name="GenEfi">\r
570 <attribute name="FILEPATH"/>\r
571 <attribute name="FILENAME"/>\r
572 <attribute name="FILEEXT" default="dll"/>\r
573\r
574 <sequential>\r
575 <OnDependency>\r
576 <sourcefiles>\r
577 <file name="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
578 </sourcefiles>\r
579 <targetfiles>\r
580 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.efi"/>\r
581 </targetfiles>\r
582\r
583 <sequential>\r
584 <!-- -->\r
585 <fwimage componentType="${MODULE_TYPE}" outImage="${DEST_DIR_OUTPUT}/@{FILENAME}.efi" \r
586 peImage="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" time="0"/>\r
587 </sequential>\r
588 </OnDependency>\r
589 </sequential>\r
590 </macrodef>\r
591\r
592<!--\r
593 EFI_SECTION_FREEFORM_SUBTYPE_GUID\r
594 EFI_SECTION_VERSION\r
595 EFI_SECTION_USER_INTERFACE\r
596 EFI_SECTION_DXE_DEPEX\r
597 EFI_SECTION_PEI_DEPEX\r
598 EFI_SECTION_PE32\r
599 EFI_SECTION_PIC\r
600 EFI_SECTION_TE\r
601 EFI_SECTION_RAW\r
602 EFI_SECTION_COMPRESSION\r
603 EFI_SECTION_GUID_DEFINED\r
604 EFI_SECTION_COMPATIBILITY16\r
605 EFI_SECTION_FIRMWARE_VOLUME_IMAGE\r
606 -->\r
607 <!--\r
608 EFI_SECTION_PE32\r
609 -->\r
610 <macrodef name="EFI_SECTION_PE32">\r
611 <attribute name="FILEPATH"/>\r
612 <attribute name="FILENAME"/>\r
613 <attribute name="FILEEXT" default="" />\r
614\r
615 <element name="PRE.PROCESS" optional="yes"/>\r
616 <element name="POST.PROCESS" optional="yes"/>\r
617\r
618 <sequential>\r
619 <PRE.PROCESS/>\r
620 <if>\r
621 <not>\r
622 <!-- TBD ${OBJECTS} -->\r
623 <equals arg1="${LIBS}" arg2=""/>\r
624 </not>\r
625\r
626 <then>\r
627 <GenDll FILEPATH="." FILENAME="@{FILENAME}" FILEEXT="">\r
628 <LIB.ARG></LIB.ARG>\r
629 <LINK.ARG></LINK.ARG>\r
630 </GenDll>\r
631\r
632 <GenEfi FILEPATH="." FILENAME="@{FILENAME}" FILEEXT="dll"/>\r
633 </then>\r
634 </if>\r
635 \r
636 <OnDependency>\r
637 <sourcefiles>\r
638 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.efi"/>\r
639 </sourcefiles>\r
640 <targetfiles>\r
641 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.pe32"/>\r
642 </targetfiles>\r
643\r
644 <sequential>\r
645 <copy file="${DEST_DIR_OUTPUT}/@{FILENAME}.efi" tofile="${BIN_DIR}/@{FILENAME}.efi" />\r
646 \r
647 <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.efi" \r
648 outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.pe32" \r
649 sectiontype="EFI_SECTION_PE32"/>\r
650 \r
651 <POST.PROCESS/>\r
652 </sequential>\r
653 </OnDependency>\r
654 <copy file="${DEST_DIR_OUTPUT}/@{FILENAME}.efi" tofile="${DEST_DIR_DEBUG}/@{FILENAME}.efi" />\r
655 </sequential>\r
656 </macrodef>\r
657\r
658 <!--\r
659 EFI_SECTION_VERSION\r
660 -->\r
661 <macrodef name="EFI_SECTION_VERSION">\r
662 <attribute name="FILEPATH"/>\r
663 <attribute name="FILENAME"/>\r
664 <attribute name="FILEEXT" default="" />\r
665 <attribute name="VERSION" default="0000"/>\r
666\r
667 <element name="PRE.PROCESS" optional="yes"/>\r
668 <element name="POST.PROCESS" optional="yes"/>\r
669\r
670 <sequential>\r
671 <if>\r
672 <not>\r
673 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.ver"/>\r
674 </not>\r
675\r
676 <then>\r
677 <PRE.PROCESS/>\r
678 <gensection outputfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.ver" \r
679 versionnum="@{VERSION}"\r
680 sectiontype="EFI_SECTION_VERSION"/>\r
681 <POST.PROCESS/>\r
682 </then>\r
683 </if>\r
684 </sequential>\r
685 </macrodef>\r
686\r
687 <!--\r
688 EFI_SECTION_USER_INTERFACE\r
689 -->\r
690 <macrodef name="EFI_SECTION_USER_INTERFACE">\r
691 <attribute name="FILEPATH"/>\r
692 <attribute name="FILENAME"/>\r
693 <attribute name="FILEEXT" default="" />\r
694 <attribute name="UI" default="${BASE_NAME}"/>\r
695\r
696 <element name="PRE.PROCESS" optional="yes"/>\r
697 <element name="POST.PROCESS" optional="yes"/>\r
698\r
699 <sequential>\r
700 <if>\r
701 <not>\r
702 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.ui"/>\r
703 </not>\r
704\r
705 <then>\r
706 <PRE.PROCESS/>\r
707 <gensection interfacestring="@{UI}"\r
708 outputfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.ui" \r
709 sectiontype="EFI_SECTION_USER_INTERFACE"/>\r
710 <POST.PROCESS/>\r
711 </then>\r
712 </if>\r
713 </sequential>\r
714 </macrodef>\r
715\r
716 <!--\r
717 EFI_SECTION_FREEFORM_SUBTYPE_GUID\r
718 <macrodef name="EFI_SECTION_FREEFORM_SUBTYPE_GUID">\r
719 <attribute name="FILEPATH"/>\r
720 <attribute name="FILENAME"/>\r
721 <attribute name="FILEEXT" default=""/>\r
722 \r
723 <element name="EXTRA.INC" optional="yes"/>\r
724 <element name="EXTRA.ARG" optional="yes"/>\r
725 \r
726 <sequential>\r
727 <gensection inputfile="" \r
728 outputfile="" \r
729 sectiontype="EFI_SECTION_FREEFORM_SUBTYPE_GUID"/>\r
730 </sequential>\r
731 </macrodef>\r
732 -->\r
733\r
734 <!--\r
735 EFI_SECTION_DXE_DEPEX\r
736 -->\r
737 <macrodef name="EFI_SECTION_DXE_DEPEX">\r
738 <attribute name="FILEPATH"/>\r
739 <attribute name="FILENAME"/>\r
740 <attribute name="FILEEXT" default="dxs"/>\r
741\r
742 <element name="PRE.PROCESS" optional="yes"/>\r
743 <element name="POST.PROCESS" optional="yes"/>\r
744\r
745 <sequential>\r
746 <PRE.PROCESS/>\r
747\r
748 <if>\r
749 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILENAME}.depex"/>\r
750 <then>\r
751 <OnDependency>\r
752 <sourcefiles>\r
753 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.depex"/>\r
754 </sourcefiles>\r
755 <targetfiles>\r
756 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"/>\r
757 </targetfiles>\r
758 <sequential>\r
759 <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.depex" \r
760 outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx" \r
761 sectiontype="EFI_SECTION_DXE_DEPEX"/>\r
762 </sequential>\r
763 </OnDependency>\r
764 </then>\r
765 <else>\r
766 <if>\r
767 <not>\r
768 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"/>\r
769 </not>\r
770 <then>\r
771 <touch file="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"/>\r
772 </then>\r
773 </if>\r
774 </else>\r
775 </if>\r
776\r
777 <POST.PROCESS/>\r
778 </sequential>\r
779 </macrodef>\r
780\r
781 <!--\r
782 EFI_SECTION_PEI_DEPEX\r
783 -->\r
784 <macrodef name="EFI_SECTION_PEI_DEPEX">\r
785 <attribute name="FILEPATH"/>\r
786 <attribute name="FILENAME"/>\r
787 <attribute name="FILEEXT" default="dxs"/>\r
788\r
789 <element name="PRE.PROCESS" optional="yes"/>\r
790 <element name="POST.PROCESS" optional="yes"/>\r
791 <sequential>\r
792 <PRE.PROCESS/>\r
793 <if>\r
794 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILENAME}.depex"/>\r
795 <then>\r
796 <OnDependency>\r
797 <sourcefiles>\r
798 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.depex"/>\r
799 </sourcefiles>\r
800 <targetfiles>\r
801 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"/>\r
802 </targetfiles>\r
803\r
804 <sequential>\r
805 <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.depex" \r
806 outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx" \r
807 sectiontype="EFI_SECTION_PEI_DEPEX"/>\r
808 </sequential>\r
809 </OnDependency>\r
810 \r
811 </then>\r
812 <else>\r
813 <if>\r
814 <not>\r
815 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"/>\r
816 </not>\r
817 <then>\r
818 <touch file="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"/>\r
819 </then>\r
820 </if>\r
821 </else>\r
822 </if>\r
823 <POST.PROCESS/>\r
824 </sequential>\r
825 </macrodef>\r
826\r
827 <!--\r
828 EFI_SECTION_PIC\r
829 <macrodef name="EFI_SECTION_PIC">\r
830 <attribute name="FILEPATH"/>\r
831 <attribute name="FILENAME"/>\r
832 <attribute name="FILEEXT" default=""/>\r
833 \r
834 <element name="EXTRA.INC" optional="yes"/>\r
835 <element name="EXTRA.ARG" optional="yes"/>\r
836 \r
837 <sequential>\r
838 <gensection inputfile="${BIN_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" \r
839 outputfile="${BIN_DIR}/@{FILENAME}.pe32" \r
840 sectiontype="EFI_SECTION_PIC"/>\r
841 </sequential>\r
842 </macrodef>\r
843 -->\r
844\r
845 <!--\r
846 EFI_SECTION_TE\r
847 <macrodef name="EFI_SECTION_TE">\r
848 <attribute name="FILEPATH"/>\r
849 <attribute name="FILENAME"/>\r
850 <attribute name="FILEEXT" default=""/>\r
851 \r
852 <element name="EXTRA.INC" optional="yes"/>\r
853 <element name="EXTRA.ARG" optional="yes"/>\r
854 \r
855 <sequential>\r
856 <gensection inputfile="${BIN_DIR}/@{FILENAME}.@{FILEEXT}" \r
857 outputfile="${BIN_DIR}/@{FILENAME}.pe32" \r
858 sectiontype="EFI_SECTION_PE32"/>\r
859 </sequential>\r
860 </macrodef>\r
861 -->\r
862\r
863 <!--\r
864 EFI_SECTION_RAW\r
865 -->\r
866 <macrodef name="EFI_SECTION_RAW">\r
867 <attribute name="FILEPATH"/>\r
868 <attribute name="FILENAME"/>\r
869 <attribute name="FILEEXT" default="bin"/>\r
870\r
871 <element name="PRE.PROCESS" optional="yes"/>\r
872 <element name="POST.PROCESS" optional="yes"/>\r
873\r
874 <sequential>\r
875 <OnDependency>\r
876 <sourcefiles>\r
877 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.@{FILEEXT}"/>\r
878 </sourcefiles>\r
879 <targetfiles>\r
880 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.sec"/>\r
881 </targetfiles>\r
882\r
883 <sequential>\r
884 <PRE.PROCESS/>\r
885 <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.@{FILEEXT}" \r
886 outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.sec" \r
887 sectiontype="EFI_SECTION_RAW"/>\r
888 <POST.PROCESS/>\r
889 </sequential>\r
890 </OnDependency>\r
891 </sequential>\r
892 </macrodef>\r
893\r
894 <!--\r
895 EFI_SECTION_FIRMWARE_VOLUME_IMAGE\r
896 -->\r
897 <macrodef name="EFI_SECTION_FIRMWARE_VOLUME_IMAGE">\r
898 <attribute name="FILEPATH"/>\r
899 <attribute name="FILENAME"/>\r
900 <attribute name="FILEEXT" default="fv"/>\r
901\r
902 <element name="PRE.PROCESS" optional="yes"/>\r
903 <element name="POST.PROCESS" optional="yes"/>\r
904\r
905 <sequential>\r
906 <OnDependency>\r
907 <sourcefiles>\r
908 <file name="${FV_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
909 </sourcefiles>\r
910 <targetfiles>\r
911 <file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}fv.sec"/>\r
912 </targetfiles>\r
913\r
914 <sequential>\r
915 <PRE.PROCESS/>\r
916 \r
917 <copy file="${FV_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" \r
918 tofile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" \r
919 overwrite="true"/>\r
920 <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" \r
921 outputfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}fv.sec" \r
922 sectiontype="EFI_SECTION_FIRMWARE_VOLUME_IMAGE"/>\r
923 \r
924 <POST.PROCESS/>\r
925 </sequential>\r
926 </OnDependency>\r
927 </sequential>\r
928 </macrodef>\r
929\r
930 <!--\r
931 Binary\r
932 -->\r
933 <macrodef name="Build_Binary">\r
934 <attribute name="FILEPATH"/>\r
935 <attribute name="FILENAME"/>\r
936 <attribute name="FILEEXT" default="bin"/>\r
937\r
938 <element name="EXTRA.INC" optional="yes"/>\r
939 <element name="EXTRA.ARG" optional="yes"/>\r
940\r
941 <sequential>\r
942 <copy file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" \r
943 tofile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.bin"/>\r
944 </sequential>\r
945 </macrodef>\r
946\r
947 <!--\r
948 Graphics (bmp, ...)\r
949 -->\r
950 <macrodef name="Build_Graphics">\r
951 <attribute name="FILEPATH"/>\r
952 <attribute name="FILENAME"/>\r
953 <attribute name="FILEEXT" default="bmp"/>\r
954\r
955 <element name="EXTRA.INC" optional="yes"/>\r
956 <element name="EXTRA.ARG" optional="yes"/>\r
957\r
958 <sequential>\r
959 <mkdir dir="${MODULE_DIR}/@{FILEPATH}" /> \r
960 <copy file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" \r
961 tofile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.bin"/>\r
962 </sequential>\r
963 </macrodef> \r
964 <macrodef name="Build_EFI">\r
965 <attribute name="FILEPATH"/>\r
966 <attribute name="FILENAME"/>\r
967 <attribute name="FILEEXT" default="efi"/>\r
968\r
969 <element name="EXTRA.INC" optional="yes"/>\r
970 <element name="EXTRA.ARG" optional="yes"/>\r
971\r
972 <sequential>\r
973 <mkdir dir="${MODULE_DIR}/@{FILEPATH}" /> \r
974 <copy file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" \r
975 tofile="${DEST_DIR_OUTPUT}/${BASE_NAME}.efi"/>\r
976 </sequential>\r
977 </macrodef>\r
978</project>\r