]> git.proxmox.com Git - mirror_edk2.git/blob - Tools/Conf/BuildMacro.xml
Disp dependencies in error in case of circular dependency
[mirror_edk2.git] / Tools / Conf / BuildMacro.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!--
3 Copyright (c) 2006, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11 -->
12 <project name="common">
13 <!--
14 Macro for intialize some properties. This Macro build will be called before source file build.
15 -->
16 <macrodef name="Build_Init">
17 <element name="EXTRA.INC" optional="yes"/>
18 <element name="EXTRA.ARG" optional="yes"/>
19
20 <sequential>
21 <var name="OBJECTS" value="" />
22 <var name="SDB_FILES" value="" />
23
24 <if>
25 <and>
26 <isset property="PCH"/>
27 <not>
28 <equals arg1="${PCH}" arg2=""/>
29 </not>
30 </and>
31 <then>
32 <if>
33 <available type="file" file="${DEST_DIR_OUTPUT}/AutoGen.h.gch"/>
34 <then>
35 <makedeps DepsFile="${DEST_DIR_OUTPUT}/AutoGen.h.dep">
36 <input file="${DEST_DIR_DEBUG}/AutoGen.h"/>
37 <EXTRA.INC/>
38 </makedeps>
39 </then>
40 </if>
41
42 <OnDependency>
43 <sourcefiles>
44 <file ListFile="${DEST_DIR_OUTPUT}/AutoGen.h.dep"/>
45 </sourcefiles>
46 <targetfiles>
47 <file Name="${DEST_DIR_OUTPUT}/AutoGen.h.gch"/>
48 </targetfiles>
49
50 <sequential>
51 <!-- Generate pre-compiled header -->
52 <cc userdefine="on">
53 <command type="CC" cmd="${PCH}" workdir="${DEST_DIR_OUTPUT}" family="${CC_FAMILY}"
54 outputFile="${DEST_DIR_OUTPUT}/AutoGen.h.obj" dpath="${CC_DPATH}" libpath="${CC_LIBPATH}"
55 include="${CC_INCLUDEPATH}">
56 <EXTRA.INC/>
57 <argument value="${PCH_FLAGS}"/>
58 <EXTRA.ARG/>
59 <fileset casesensitive="on" file="${DEST_DIR_DEBUG}/AutoGen.h"/>
60 </command>
61 </cc>
62
63 <if>
64 <equals arg1="${CC_FAMILY}" arg2="GCC"/>
65 <then>
66 <move file="${DEST_DIR_OUTPUT}/AutoGen.h.obj" tofile="${DEST_DIR_DEBUG}/AutoGen.h.gch" overwrite="true"/>
67 </then>
68 </if>
69 </sequential>
70 </OnDependency>
71
72 <if>
73 <not>
74 <equals arg1="${CC_FAMILY}" arg2="GCC"/>
75 </not>
76 <then>
77 <var name="OBJECTS" value="${OBJECTS} AutoGen.h.obj"/>
78 </then>
79 </if>
80 </then>
81 </if>
82 </sequential>
83 </macrodef>
84
85
86 <!--
87 macro definitions for building files with different types
88 -->
89 <!--
90 C Code
91 -->
92 <macrodef name="Build_CCode">
93 <attribute name="FILEPATH"/>
94 <attribute name="FILENAME"/>
95 <attribute name="FILEEXT" default="c"/>
96
97 <element name="EXTRA.INC" optional="yes"/>
98 <element name="EXTRA.ARG" optional="yes"/>
99
100 <sequential>
101 <var name="FILE_BASENAME" value="@{FILENAME}" />
102 <var name="FILE_PATH" value="@{FILEPATH}" />
103 <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>
104
105 <if>
106 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
107 <then>
108 <makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep">
109 <input file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
110 <input file="${DEST_DIR_DEBUG}/AutoGen.h"/>
111 <EXTRA.INC/>
112 </makedeps>
113 </then>
114 </if>
115
116 <OnDependency>
117 <sourcefiles>
118 <file ListFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"/>
119 </sourcefiles>
120 <targetfiles>
121 <file Name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
122 </targetfiles>
123
124 <sequential>
125 <cc userdefine="on">
126 <command type="CC" cmd="${CC}" workdir="${DEST_DIR_OUTPUT}" family="${CC_FAMILY}"
127 outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj" dpath="${CC_DPATH}"
128 libpath="${CC_LIBPATH}" include="${CC_INCLUDEPATH}">
129 <EXTRA.INC/>
130 <argument value="${CC_FLAGS}"/>
131 <EXTRA.ARG/>
132 <fileset casesensitive="on" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
133 </command>
134 </cc>
135 </sequential>
136 </OnDependency>
137 <!-- Since fileset can't scan file start with ./, remove ./ in previous. -->
138 <if>
139 <equals arg1="@{FILEPATH}" arg2="." />
140 <then>
141 <var name="OBJECTS" value="${OBJECTS} @{FILENAME}.obj" />
142 </then>
143 <else>
144 <var name="OBJECTS" value="${OBJECTS} @{FILEPATH}/@{FILENAME}.obj" />
145 </else>
146 </if>
147 </sequential>
148 </macrodef>
149
150
151 <macrodef name="Build_AUTOGEN">
152 <attribute name="FILEPATH"/>
153 <attribute name="FILENAME"/>
154 <attribute name="FILEEXT" default="c"/>
155
156 <element name="EXTRA.INC" optional="yes"/>
157 <element name="EXTRA.ARG" optional="yes"/>
158
159 <sequential>
160 <var name="FILE_BASENAME" value="@{FILENAME}" />
161 <var name="FILE_PATH" value="@{FILEPATH}" />
162 <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>
163
164 <if>
165 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
166 <then>
167 <makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep">
168 <input file="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
169 <input file="${DEST_DIR_DEBUG}/AutoGen.h"/>
170 <EXTRA.INC/>
171 </makedeps>
172 </then>
173 </if>
174
175 <OnDependency>
176 <sourcefiles>
177 <file ListFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"/>
178 </sourcefiles>
179 <targetfiles>
180 <file Name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
181 </targetfiles>
182
183 <sequential>
184 <cc userdefine="on">
185 <command type="CC" cmd="${CC}" workdir="${DEST_DIR_OUTPUT}" family="${CC_FAMILY}"
186 outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj" dpath="${CC_DPATH}"
187 libpath="${CC_LIBPATH}" include="${CC_INCLUDEPATH}">
188 <EXTRA.INC/>
189 <argument value="${CC_FLAGS}"/>
190 <EXTRA.ARG/>
191 <fileset casesensitive="on" file="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
192 </command>
193 </cc>
194 </sequential>
195 </OnDependency>
196 <!-- Since fileset can't scan file start with ./, remove ./ in previous. -->
197 <if>
198 <equals arg1="@{FILEPATH}" arg2="." />
199 <then>
200 <var name="OBJECTS" value="${OBJECTS} @{FILENAME}.obj" />
201 </then>
202 <else>
203 <var name="OBJECTS" value="${OBJECTS} @{FILEPATH}/@{FILENAME}.obj" />
204 </else>
205 </if>
206 </sequential>
207 </macrodef>
208
209 <macrodef name="Build_DPX">
210 <attribute name="FILEPATH"/>
211 <attribute name="FILENAME"/>
212 <attribute name="FILEEXT" default="dxs"/>
213
214 <element name="EXTRA.INC" optional="yes"/>
215 <element name="EXTRA.ARG" optional="yes"/>
216
217
218 <sequential>
219 <var name="FILE_BASENAME" value="@{FILENAME}" />
220 <var name="FILE_PATH" value="@{FILEPATH}" />
221 <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>
222
223 <OnDependency>
224 <sourcefiles>
225 <file name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
226 </sourcefiles>
227 <targetfiles>
228 <file name="${DEST_DIR_OUTPUT}/${BASE_NAME}.depex"/>
229 </targetfiles>
230
231 <sequential>
232 <cc userdefine="on">
233 <command type="CC" cmd="${CC}" workdir="${DEST_DIR_OUTPUT}/@{FILEPATH}" family="${CC_FAMILY}"
234 outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.i" dpath="${CC_DPATH}"
235 libpath="${CC_LIBPATH}" include="${CC_INCLUDEPATH}">
236 <EXTRA.INC/>
237 <argument value="${PP_FLAGS}"/>
238 <fileset casesensitive="on" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
239 </command>
240 </cc>
241
242 <gendepex inputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.i" outputFile="${DEST_DIR_OUTPUT}/${BASE_NAME}.depex"/>
243 </sequential>
244 </OnDependency>
245 </sequential>
246 </macrodef>
247
248 <macrodef name="Build_ASM">
249 <attribute name="FILEPATH"/>
250 <attribute name="FILENAME"/>
251 <attribute name="FILEEXT" default="asm"/>
252
253 <element name="EXTRA.INC" optional="yes"/>
254 <element name="EXTRA.ARG" optional="yes"/>
255
256 <!-- Dispath ASM file, there are three type.
257 asm - Build_Assembly
258 S - Build_Gcc_Assembly
259 s - Build_Ipf_Assembly -->
260 <sequential>
261 <if>
262 <equals arg1="@{FILEEXT}" arg2="asm" />
263 <then>
264 <Build_Assembly FILEPATH="@{FILEPATH}" FILENAME="@{FILENAME}" FILEEXT="@{FILEEXT}">
265 <EXTRA.INC.1><EXTRA.INC /></EXTRA.INC.1>
266 <EXTRA.ARG.1><EXTRA.ARG /></EXTRA.ARG.1>
267 </Build_Assembly>
268 </then>
269 <elseif>
270 <equals arg1="@{FILEEXT}" arg2="S" />
271 <then>
272 <Build_Gcc_Assembly FILEPATH="@{FILEPATH}" FILENAME="@{FILENAME}" FILEEXT="@{FILEEXT}">
273 <EXTRA.INC.1><EXTRA.INC /></EXTRA.INC.1>
274 <EXTRA.ARG.1><EXTRA.ARG /></EXTRA.ARG.1>
275 </Build_Gcc_Assembly>
276 </then>
277 </elseif>
278 <elseif>
279 <equals arg1="@{FILEEXT}" arg2="s" />
280 <then>
281 <Build_IPF_Assembly_Code FILEPATH="@{FILEPATH}" FILENAME="@{FILENAME}" FILEEXT="@{FILEEXT}">
282 <EXTRA.INC.1><EXTRA.INC /></EXTRA.INC.1>
283 <EXTRA.ARG.1><EXTRA.ARG /></EXTRA.ARG.1>
284 </Build_IPF_Assembly_Code>
285 </then>
286 </elseif>
287 </if>
288 </sequential>
289 </macrodef>
290
291 <!--
292 IA32/x64 Assembly
293 -->
294 <macrodef name="Build_Assembly">
295 <attribute name="FILEPATH"/>
296 <attribute name="FILENAME"/>
297 <attribute name="FILEEXT" default="asm"/>
298
299 <element name="EXTRA.INC.1" optional="yes"/>
300 <element name="EXTRA.ARG.1" optional="yes"/>
301
302 <sequential>
303 <var name="FILE_BASENAME" value="@{FILENAME}" />
304 <var name="FILE_PATH" value="@{FILEPATH}" />
305 <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>
306
307 <OnDependency>
308 <sourcefiles>
309 <file Name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
310 </sourcefiles>
311 <targetfiles>
312 <file Name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
313 </targetfiles>
314
315 <sequential>
316 <cc userdefine="on">
317 <command type="PP" cmd="${PP}" workdir="${DEST_DIR_OUTPUT}/@{FILEPATH}" family="${PP_FAMILY}"
318 dpath="${PP_DPATH}" libpath="${PP_LIBPATH}" include="${PP_INCLUDEPATH}">
319 <EXTRA.INC.1/>
320 <argument value="${PP_FLAGS}"/>
321 <fileset casesensitive="on" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
322 </command>
323 </cc>
324
325 <replaceregexp file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.i"
326 match="^(#line +1 +.*@{FILEPATH}/@{FILENAME}\.@{FILEEXT}&quot;).+\1"
327 replace=";"
328 flags="gs"/>
329 <replaceregexp file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.i"
330 match="^(#line .*)$"
331 replace="; \1"
332 byline="true"/>
333 <replaceregexp file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.i"
334 match="([^_a-zA-Z])0x([0-9a-fA-F]+)"
335 replace="\10\2h"
336 flags="g"
337 byline="true"/>
338
339 <cc userdefine="on">
340 <command type="ASM" cmd="${ASM}" workdir="${DEST_DIR_OUTPUT}" family="${ASM_FAMILY}"
341 outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj" dpath="${ASM_DPATH}"
342 libpath="${ASM_LIBPATH}" include="${ASM_INCLUDEPATH}">
343 <EXTRA.INC.1/>
344
345 <argument value="${ASM_FLAGS}"/>
346 <EXTRA.ARG.1/>
347
348 <fileset casesensitive="on" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.i"/>
349 </command>
350 </cc>
351 </sequential>
352 </OnDependency>
353 <!-- Since fileset can't scan file start with ./, remove ./ in previous. -->
354 <if>
355 <equals arg1="@{FILEPATH}" arg2="." />
356 <then>
357 <var name="OBJECTS" value="${OBJECTS} @{FILENAME}.obj" />
358 </then>
359 <else>
360 <var name="OBJECTS" value="${OBJECTS} @{FILEPATH}/@{FILENAME}.obj" />
361 </else>
362 </if>
363 </sequential>
364 </macrodef>
365
366 <!--
367 Build GCC assembly code
368 -->
369 <macrodef name="Build_Gcc_Assembly">
370 <attribute name="FILEPATH"/>
371 <attribute name="FILENAME"/>
372 <attribute name="FILEEXT" default="asm"/>
373
374 <element name="EXTRA.INC.1" optional="yes"/>
375 <element name="EXTRA.ARG.1" optional="yes"/>
376
377 <sequential>
378 <var name="FILE_BASENAME" value="@{FILENAME}" />
379 <var name="FILE_PATH" value="@{FILEPATH}" />
380 <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>
381
382 <OnDependency>
383 <sourcefiles>
384 <file Name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
385 </sourcefiles>
386 <targetfiles>
387 <file Name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
388 </targetfiles>
389
390 <sequential>
391 <cc userdefine="on">
392 <command type="ASM" cmd="${ASM}" workdir="${DEST_DIR_OUTPUT}" family="${ASM_FAMILY}"
393 outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj" dpath="${ASM_DPATH}"
394 libpath="${ASM_LIBPATH}" include="${ASM_INCLUDEPATH}">
395 <EXTRA.INC.1/>
396
397 <argument value="${ASM_FLAGS}"/>
398 <EXTRA.ARG.1/>
399
400 <fileset casesensitive="on" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
401 </command>
402 </cc>
403 </sequential>
404 </OnDependency>
405 <!-- Since fileset can't scan file start with ./, remove ./ in previous. -->
406 <if>
407 <equals arg1="@{FILEPATH}" arg2="." />
408 <then>
409 <var name="OBJECTS" value="${OBJECTS} @{FILENAME}.obj" />
410 </then>
411 <else>
412 <var name="OBJECTS" value="${OBJECTS} @{FILEPATH}/@{FILENAME}.obj" />
413 </else>
414 </if>
415 </sequential>
416 </macrodef>
417
418 <!--
419 IPF Assembly
420 -->
421 <macrodef name="Build_IPF_Assembly_Code">
422 <attribute name="FILEPATH"/>
423 <attribute name="FILENAME"/>
424 <attribute name="FILEEXT" default="s"/>
425
426 <element name="EXTRA.INC.1" optional="yes"/>
427 <element name="EXTRA.ARG.1" optional="yes"/>
428
429 <sequential>
430 <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>
431
432 <if>
433 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
434 <then>
435 <makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep">
436 <input file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
437 <input file="${DEST_DIR_DEBUG}/AutoGen.h"/>
438 <EXTRA.INC.1/>
439 </makedeps>
440 </then>
441 </if>
442
443 <OnDependency>
444 <sourcefiles>
445 <file listfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"/>
446 </sourcefiles>
447 <targetfiles>
448 <file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
449 </targetfiles>
450
451 <sequential>
452 <cc userdefine="on">
453 <command type="PP" cmd="${APP}" workdir="${DEST_DIR_OUTPUT}/@{FILEPATH}" family="${APP_FAMILY}"
454 dpath="${APP_DPATH}" libpath="${APP_LIBPATH}" include="${APP_INCLUDEPATH}">
455 <EXTRA.INC.1/>
456 <argument value="${APP_FLAGS}"/>
457 <fileset casesensitive="on" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
458 </command>
459 </cc>
460
461 <cc userdefine="on">
462 <command type="ASM" cmd="${ASM}" workdir="${DEST_DIR_OUTPUT}" family="${ASM_FAMILY}"
463 includepathDelimiter="-I" outputDelimiter="-o" dpath="${ASM_DPATH}"
464 libpath="${ASM_LIBPATH}" include="${ASM_INCLUDEPATH}"
465 outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj">
466 <EXTRA.INC.1/>
467 <argument value="${ASM_FLAGS}"/>
468 <EXTRA.ARG.1/>
469 <fileset casesensitive="on" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.i"/>
470 </command>
471 </cc>
472 </sequential>
473 </OnDependency>
474 <!-- Since fileset can't scan file start with ./, remove ./ in previous. -->
475 <if>
476 <equals arg1="@{FILEPATH}" arg2="." />
477 <then>
478 <var name="OBJECTS" value="${OBJECTS} @{FILENAME}.obj" />
479 </then>
480 <else>
481 <var name="OBJECTS" value="${OBJECTS} @{FILEPATH}/@{FILENAME}.obj" />
482 </else>
483 </if>
484 </sequential>
485 </macrodef>
486
487
488 <macrodef name="Build_IPF_PP_Code">
489 <attribute name="FILEPATH"/>
490 <attribute name="FILENAME"/>
491 <attribute name="FILEEXT" default="i"/>
492
493 <element name="EXTRA.INC" optional="yes"/>
494 <element name="EXTRA.ARG" optional="yes"/>
495
496 <sequential>
497 <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>
498
499 <cc userdefine="on">
500 <command type="ASM" includepathDelimiter="-I" dpath="${ASM_DPATH}"
501 libpath="${ASM_LIBPATH}" include="${ASM_INCLUDEPATH}">
502 <includepath path="${WORKSPACE_DIR}"/>
503 <includepath path="${MODULE_DIR}"/>
504 <includepath path="${MODULE_DIR}/${ARCH}"/>
505 <EXTRA.INC/>
506
507 <argument value="${ASM_FLAGS}"/>
508 <EXTRA.ARG/>
509 <OutputFile File="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
510
511 <fileset casesensitive="on" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
512 </command>
513 </cc>
514 </sequential>
515 </macrodef>
516
517
518 <!--
519 Library private HashMap map = new HashMap();
520 -->
521 <macrodef name="Build_Library">
522 <attribute name="FILENAME" />
523 <attribute name="FILEEXT" default="obj"/>
524
525 <sequential>
526 <var name="FILE_BASENAME" value="@{FILENAME}" />
527 <var name="FILE_PATH" value="." />
528 <mkdir dir="${BIN_DIR}"/>
529
530 <OnDependency>
531 <sourcefiles>
532 <fileset dir="${DEST_DIR_OUTPUT}" includes="${OBJECTS}" />
533 </sourcefiles>
534 <targetfiles>
535 <file name="${BIN_DIR}/@{FILENAME}.lib"/>
536 </targetfiles>
537
538 <sequential>
539 <cc userdefine="on">
540 <command type="SLINK" cmd="${SLINK}" family="${SLINK_FAMILY}"
541 outputFile="${BIN_DIR}/@{FILENAME}.lib" dpath="${SLINK_DPATH}"
542 libpath="${SLINK_LIBPATH}" include="${SLINK_INCLUDEPATH}">
543 <argument value="${SLINK_FLAGS}"/>
544
545 <fileset dir="${DEST_DIR_OUTPUT}" includes="${OBJECTS}"/>
546 </command>
547 </cc>
548 </sequential>
549 </OnDependency>
550 </sequential>
551 </macrodef>
552
553 <!--
554 Unicode -> .sdb
555 -->
556 <macrodef name="Build_UNI">
557 <attribute name="FILEPATH"/>
558 <attribute name="FILENAME"/>
559 <attribute name="FILEEXT" default="uni"/>
560
561 <element name="EXTRA.INC" optional="yes"/>
562 <element name="EXTRA.ARG" optional="yes"/>
563
564 <sequential>
565 <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>
566
567 <OnDependency>
568 <sourcefiles>
569 <file name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
570 </sourcefiles>
571 <targetfiles>
572 <file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb"/>
573 </targetfiles>
574
575 <sequential>
576 <strgather commandtype="parse" newdatabase="true">
577 <database name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb"/>
578 <EXTRA.INC/>
579 <EXTRA.ARG/>
580 <inputfile name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
581 </strgather>
582 </sequential>
583 </OnDependency>
584
585 <var name="SDB_FILES" value="${SDB_FILES}, ${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb"/>
586 </sequential>
587 </macrodef>
588
589 <!--
590 .sdb(s) -> .c, .h -> .obj
591 -->
592 <macrodef name="Build_Unicode_Database">
593 <attribute name="FILEPATH"/>
594 <attribute name="FILENAME"/>
595 <attribute name="FILEEXT" default="sdb"/>
596
597 <element name="EXTRA.INC" optional="yes"/>
598 <element name="EXTRA.ARG" optional="yes"/>
599
600 <sequential>
601 <var name="FILE_BASENAME" value="@{FILENAME}" />
602 <var name="FILE_PATH" value="@{FILEPATH}" />
603 <OnDependency>
604 <sourcefiles>
605 <file list="${SDB_FILES}"/>
606 <file list="${SOURCE_FILES}"/>
607 </sourcefiles>
608 <targetfiles>
609 <file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb"/>
610 </targetfiles>
611
612 <sequential>
613 <strgather commandtype="scan" outputdatabase="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb" verbose="read">
614 <skipext name=".uni"/>
615 <skipext name=".h"/>
616 <database list="${SDB_FILES}"/>
617 <inputfile name="${SOURCE_FILES}"/>
618 </strgather>
619 </sequential>
620 </OnDependency>
621
622 <OnDependency>
623 <sourcefiles>
624 <file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb"/>
625 </sourcefiles>
626 <targetfiles>
627 <file name="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}StrDefs.h"/>
628 <file name="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}Strings.hpk"/>
629 <file name="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}Strings.c"/>
630 </targetfiles>
631
632 <sequential>
633 <strgather basename="@{FILENAME}Strings" commandtype="dump"
634 outputdefines="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}StrDefs.h"
635 outputhpk="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}Strings.hpk"
636 outputstring="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}Strings.c">
637 <database name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb"/>
638 </strgather>
639 </sequential>
640 </OnDependency>
641
642 <OnDependency>
643 <sourcefiles>
644 <file name="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}Strings.c"/>
645 <file ListFile="${DEST_DIR_OUTPUT}/AutoGen.h.dep"/>
646 </sourcefiles>
647 <targetfiles>
648 <file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}Strings.obj"/>
649 </targetfiles>
650
651 <sequential>
652 <cc userdefine="on">
653 <command type="CC" cmd="${CC}" workdir="${DEST_DIR_OUTPUT}" family="${CC_FAMILY}"
654 includepathDelimiter="-I" dpath="${CC_DPATH}"
655 libpath="${CC_LIBPATH}" include="${CC_INCLUDEPATH}"
656 outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}Strings.obj">
657 <argument value="${CC_FLAGS}"/>
658 <EXTRA.INC />
659 <fileset casesensitive="on" file="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}Strings.c"/>
660 </command>
661 </cc>
662 </sequential>
663 </OnDependency>
664
665 <!-- Since fileset can't scan file start with ./, remove ./ in previous. -->
666 <if>
667 <equals arg1="@{FILEPATH}" arg2="." />
668 <then>
669 <var name="OBJECTS" value="${OBJECTS} @{FILENAME}Strings.obj" />
670 </then>
671 <else>
672 <var name="OBJECTS" value="${OBJECTS} @{FILEPATH}/@{FILENAME}Strings.obj" />
673 </else>
674 </if>
675 </sequential>
676 </macrodef>
677
678 <!--
679 Vfr
680 -->
681 <macrodef name="Build_VFR">
682 <attribute name="FILEPATH"/>
683 <attribute name="FILENAME"/>
684 <attribute name="FILEEXT" default="vfr"/>
685
686 <element name="EXTRA.INC" optional="yes"/>
687 <element name="EXTRA.ARG" optional="yes"/>
688
689 <sequential>
690 <mkdir dir="${DEST_DIR_DEBUG}/@{FILEPATH}"/>
691
692 <if>
693 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
694 <then>
695 <makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep">
696 <input file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
697 <input file="${DEST_DIR_DEBUG}/AutoGen.h"/>
698 <EXTRA.INC/>
699 </makedeps>
700 </then>
701 </if>
702
703 <OnDependency>
704 <sourcefiles>
705 <file listfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"/>
706 </sourcefiles>
707 <targetfiles>
708 <file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
709 </targetfiles>
710
711 <sequential>
712 <!-- if "TOOLCHIAN FAMILY" is "GCC", it should point the ouput file for preprocess compiler -->
713 <if>
714 <equals arg1="${CC_FAMILY}" arg2="GCC"/>
715 <then>
716 <cc userdefine="on">
717 <command type="PP" cmd="${PP}" workdir="${DEST_DIR_OUTPUT}/@{FILEPATH}" family="${PP_FAMILY}"
718 dpath="${PP_DPATH}" libpath="${PP_LIBPATH}" include="${PP_INCLUDEPATH}">
719 <argument value="${VFRPP_FLAGS} -o ${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.i"/>
720 <!-- Output file of the preprocess -->
721 <EXTRA.INC/>
722 <fileset casesensitive="on" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
723 </command>
724 </cc>
725 </then>
726 </if>
727
728 <if>
729 <not>
730 <equals arg1="${CC_FAMILY}" arg2="GCC"/>
731 </not>
732 <then>
733 <cc userdefine="on">
734 <command type="PP" cmd="${PP}" workdir="${DEST_DIR_OUTPUT}/@{FILEPATH}" family="${PP_FAMILY}"
735 dpath="${PP_DPATH}" libpath="${PP_LIBPATH}" include="${PP_INCLUDEPATH}">
736 <argument value="${VFRPP_FLAGS} ${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
737 <!-- Output file of the preprocess -->
738 <EXTRA.INC/>
739 <fileset casesensitive="on" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
740 </command>
741 </cc>
742 </then>
743 </if>
744
745
746 <vfrcompile createIfrBinFile="on" createListFile="on" outPutDir="${DEST_DIR_DEBUG}/@{FILEPATH}" vfrFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.i">
747 <EXTRA.INC/>
748 </vfrcompile>
749
750 <cc userdefine="on">
751 <command type="CC" cmd="${CC}" workdir="${DEST_DIR_OUTPUT}"
752 includepathDelimiter="-I" family="${CC_FAMILY}" dpath="${CC_DPATH}"
753 libpath="${CC_LIBPATH}" include="${CC_INCLUDEPATH}"
754 outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj" >
755 <argument value="${CC_FLAGS}"/>
756 <EXTRA.INC/>
757 <EXTRA.ARG/>
758 <fileset casesensitive="on" file="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.c"/>
759 </command>
760 </cc>
761 </sequential>
762 </OnDependency>
763 <!-- Since fileset can't scan file start with ./, remove ./ in previous. -->
764 <if>
765 <equals arg1="@{FILEPATH}" arg2="." />
766 <then>
767 <var name="OBJECTS" value="${OBJECTS} @{FILENAME}.obj" />
768 </then>
769 <else>
770 <var name="OBJECTS" value="${OBJECTS} @{FILEPATH}/@{FILENAME}.obj" />
771 </else>
772 </if>
773 </sequential>
774 </macrodef>
775
776 <!--
777 Build the real mode ASM file
778 -->
779 <macrodef name="Build_RealAsm">
780 <attribute name="FILEPATH"/>
781 <attribute name="FILENAME"/>
782 <attribute name="FILEEXT" default="asm"/>
783
784 <element name="EXTRA.INC" optional="yes"/>
785 <element name="EXTRA.ARG" optional="yes"/>
786
787 <sequential>
788 <OnDependency>
789 <sourcefiles>
790 <file name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
791 </sourcefiles>
792 <targetfiles>
793 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.cat"/>
794 </targetfiles>
795
796 <sequential>
797 <exec dir="${DEST_DIR_OUTPUT}" executable="${ASM}" failonerror="true">
798 <arg line="/nologo /omf ${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT} /Bl${ASMLINK} ${ASMLINK_FLAGS}"/>
799 </exec>
800 <concat destfile="${DEST_DIR_OUTPUT}/@{FILENAME}.cat" binary="yes">
801 <filelist dir="${MODULE_DIR}" files="Blank2.pad"/>
802 <filelist dir="${DEST_DIR_OUTPUT}" files="@{FILENAME}.com"/>
803 </concat>
804 </sequential>
805 </OnDependency>
806 </sequential>
807 </macrodef>
808
809 <!--
810 Build Asl table file
811 -->
812 <macrodef name="Build_ASL">
813 <attribute name="FILEPATH"/>
814 <attribute name="FILENAME"/>
815 <attribute name="FILEEXT" default="asl"/>
816
817 <element name="EXTRA.INC" optional="yes"/>
818 <element name="EXTRA.ARG" optional="yes"/>
819
820 <sequential>
821 <mkdir dir="${DEST_DIR_OUTPUT}"/>
822
823 <OnDependency>
824 <sourcefiles>
825 <file name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
826 </sourcefiles>
827 <targetfiles>
828 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.sec"/>
829 </targetfiles>
830
831 <sequential>
832 <cc userdefine="on">
833 <command type="PP" cmd="${PP}" workdir="${DEST_DIR_OUTPUT}" family="${PP_FAMILY}"
834 dpath="${PP_DPATH}" libpath="${PP_LIBPATH}" include="${PP_INCLUDEPATH}">
835 <argument value="${APP_FLAGS}"/>
836 <EXTRA.INC/>
837 <fileset casesensitive="on" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
838 </command>
839 </cc>
840
841 <exec dir="${DEST_DIR_OUTPUT}" executable="${ASL}" failonerror="true" outputproperty="ASL_OUTPUT">
842 <arg line="${DEST_DIR_OUTPUT}/@{FILENAME}.i"/>
843 </exec>
844
845 <if>
846 <or>
847 <contains string="${ASL_OUTPUT}" substring="Supports ACPI Specification Revision 2.0"/>
848 <contains string="${ASL_OUTPUT}" substring="Supports ACPI Specification Revision 1.0"/>
849 </or>
850 <then>
851 <fail message="Current Asl tool not support Acpi Spec 3.0. Pls update your Asl compiler."/>
852 </then>
853 </if>
854
855 <EFI_SECTION_RAW FILEPATH="." FILENAME="@{FILENAME}" FILEEXT="aml"/>
856
857 </sequential>
858 </OnDependency>
859 </sequential>
860 </macrodef>
861
862 <!--
863 Build Asl table c file
864 -->
865 <macrodef name="Build_CCASL">
866 <attribute name="FILEPATH"/>
867 <attribute name="FILENAME"/>
868 <attribute name="FILEEXT" default="c"/>
869
870 <element name="EXTRA.INC" optional="yes"/>
871 <element name="EXTRA.ARG" optional="yes"/>
872
873 <sequential>
874 <mkdir dir="${DEST_DIR_OUTPUT}"/>
875
876 <OnDependency>
877 <sourcefiles>
878 <file name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
879 </sourcefiles>
880 <targetfiles>
881 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.sec"/>
882 </targetfiles>
883
884 <sequential>
885
886 <cc userdefine="on">
887 <command type="CC" cmd="${CC}" workdir="${DEST_DIR_OUTPUT}" family="${CC_FAMILY}"
888 outputFile="${DEST_DIR_OUTPUT}/@{FILENAME}.obj" dpath="${CC_DPATH}"
889 libpath="${CC_LIBPATH}" include="${CC_INCLUDEPATH}">
890 <EXTRA.INC/>
891 <argument value="${CC_FLAGS}"/>
892 <EXTRA.ARG/>
893 <fileset casesensitive="on" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
894 </command>
895 </cc>
896
897 <cc userdefine="on">
898 <command type="DLINK" cmd="${DLINK}" family="${DLINK_FAMILY}"
899 outputFile="${DEST_DIR_OUTPUT}/@{FILENAME}.exe" dpath="${DLINK_DPATH}" >
900 <argument value="${SLINK_FLAGS}"/>
901 <fileset casesensitive="on" file="${DEST_DIR_OUTPUT}/@{FILENAME}.obj"/>
902 </command>
903 </cc>
904
905 <genacpitable inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.exe" outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.acpi" />
906
907 <EFI_SECTION_RAW FILEPATH="." FILENAME="@{FILENAME}" FILEEXT="acpi"/>
908 </sequential>
909 </OnDependency>
910 </sequential>
911 </macrodef>
912
913 <!--
914 DUMMY
915 -->
916 <macrodef name="Build_DUMMY">
917 <attribute name="FILEPATH"/>
918 <attribute name="FILENAME"/>
919 <attribute name="FILEEXT"/>
920
921 <element name="EXTRA.INC" optional="yes"/>
922 <element name="EXTRA.ARG" optional="yes"/>
923
924 <sequential>
925 <!--echo message="Ignoring ${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" level="info" /-->
926 </sequential>
927 </macrodef>
928
929 <!--############################################################################
930 Build Sections
931 #############################################################################-->
932 <!--
933 DLL
934 -->
935 <macrodef name="GenDll">
936 <attribute name="FILEPATH"/>
937 <attribute name="FILENAME"/>
938 <attribute name="FILEEXT"/>
939
940 <element name="LIB.ARG" optional="yes"/>
941 <element name="LINK.ARG" optional="yes"/>
942
943 <sequential>
944 <var name="FILE_BASENAME" value="@{FILENAME}" />
945 <var name="FILE_PATH" value="@{FILEPATH}" />
946 <OnDependency>
947 <sourcefiles>
948 <file list="${LIBS}"/>
949 <fileset dir="${DEST_DIR_OUTPUT}" includes="${OBJECTS}" />
950 </sourcefiles>
951 <targetfiles>
952 <file name="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.dll"/>
953 </targetfiles>
954
955 <sequential>
956 <cc userdefine="on">
957 <command type="SLINK" cmd="${SLINK}" family="${SLINK_FAMILY}" dpath="${SLINK_DPATH}"
958 outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}Local.lib"
959 libpath="${SLINKLIBPATH}" include="${SLINK_INCLUDEPATH}">
960 <argument value="${SLINK_FLAGS}"/>
961
962 <fileset dir="${DEST_DIR_OUTPUT}" includes="${OBJECTS}"/>
963 </command>
964 </cc>
965 <cc userdefine="on">
966 <command type="DLINK" cmd="${DLINK}" family="${DLINK_FAMILY}"
967 outputFile="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.dll" dpath="${DLINK_DPATH}"
968 libpath="${DLINK_LIBPATH}" include="${DLINK_INCLUDEPATH}">
969 <argument value="${DLINK_FLAGS}"/>
970 <libset libs="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}Local.lib ${LIBS} ${DLINK_SPATH}"/>
971 <LINK.ARG/>
972 </command>
973 </cc>
974 </sequential>
975 </OnDependency>
976 </sequential>
977 </macrodef>
978
979 <!--
980 EFI
981 -->
982 <macrodef name="GenEfi">
983 <attribute name="FILEPATH"/>
984 <attribute name="FILENAME"/>
985 <attribute name="FILEEXT" default="dll"/>
986
987 <sequential>
988 <OnDependency>
989 <sourcefiles>
990 <file name="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
991 </sourcefiles>
992 <targetfiles>
993 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.efi"/>
994 </targetfiles>
995
996 <sequential>
997 <fwimage componentType="${MODULE_TYPE}" outImage="${DEST_DIR_OUTPUT}/@{FILENAME}.efi"
998 peImage="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" time="0"/>
999 </sequential>
1000 </OnDependency>
1001 </sequential>
1002 </macrodef>
1003
1004 <!--
1005 EFI_SECTION_FREEFORM_SUBTYPE_GUID
1006 EFI_SECTION_VERSION
1007 EFI_SECTION_USER_INTERFACE
1008 EFI_SECTION_DXE_DEPEX
1009 EFI_SECTION_PEI_DEPEX
1010 EFI_SECTION_PE32
1011 EFI_SECTION_PIC
1012 EFI_SECTION_TE
1013 EFI_SECTION_RAW
1014 EFI_SECTION_COMPRESSION
1015 EFI_SECTION_GUID_DEFINED
1016 EFI_SECTION_COMPATIBILITY16
1017 EFI_SECTION_FIRMWARE_VOLUME_IMAGE
1018 -->
1019 <!--
1020 EFI_SECTION_PE32
1021 -->
1022
1023 <macrodef name="EFI_SECTION_TE">
1024 <attribute name="FILEPATH"/>
1025 <attribute name="FILENAME"/>
1026 <attribute name="FILEEXT" default="" />
1027
1028 <element name="PRE.PROCESS" optional="yes"/>
1029 <element name="POST.PROCESS" optional="yes"/>
1030
1031 <sequential>
1032 <PRE.PROCESS/>
1033 <if>
1034 <not>
1035 <equals arg1="${LIBS}" arg2=""/>
1036 </not>
1037
1038 <then>
1039 <GenDll FILEPATH="." FILENAME="@{FILENAME}" FILEEXT="">
1040 <LIB.ARG></LIB.ARG>
1041 <LINK.ARG></LINK.ARG>
1042 </GenDll>
1043
1044 <GenEfi FILEPATH="." FILENAME="@{FILENAME}" FILEEXT="dll"/>
1045 </then>
1046 </if>
1047
1048 <OnDependency>
1049 <sourcefiles>
1050 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.efi"/>
1051 </sourcefiles>
1052 <targetfiles>
1053 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.tes"/>
1054 </targetfiles>
1055
1056 <sequential>
1057 <copy file="${DEST_DIR_OUTPUT}/@{FILENAME}.efi" tofile="${BIN_DIR}/@{FILENAME}.efi" />
1058 <copy file="${DEST_DIR_OUTPUT}/@{FILENAME}.efi" tofile="${DEST_DIR_DEBUG}/@{FILENAME}.efi" />
1059 <genteimage Dump="false" Verbose="false" OutputDir="" OutputFile="${DEST_DIR_OUTPUT}/@{FILENAME}.te" InputFile="${DEST_DIR_OUTPUT}/@{FILENAME}.efi"/>
1060 <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.te"
1061 outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.tes"
1062 sectiontype="EFI_SECTION_TE"/>
1063 <POST.PROCESS/>
1064 </sequential>
1065 </OnDependency>
1066 </sequential>
1067 </macrodef>
1068
1069 <macrodef name="EFI_SECTION_PE32">
1070 <attribute name="FILEPATH"/>
1071 <attribute name="FILENAME"/>
1072 <attribute name="FILEEXT" default="" />
1073
1074 <element name="PRE.PROCESS" optional="yes"/>
1075 <element name="POST.PROCESS" optional="yes"/>
1076
1077 <sequential>
1078 <PRE.PROCESS/>
1079 <if>
1080 <not>
1081 <!-- TBD ${OBJECTS} -->
1082 <equals arg1="${LIBS}" arg2=""/>
1083 </not>
1084
1085 <then>
1086 <GenDll FILEPATH="." FILENAME="@{FILENAME}" FILEEXT="">
1087 <LIB.ARG></LIB.ARG>
1088 <LINK.ARG></LINK.ARG>
1089 </GenDll>
1090
1091 <GenEfi FILEPATH="." FILENAME="@{FILENAME}" FILEEXT="dll"/>
1092 </then>
1093 </if>
1094
1095 <OnDependency>
1096 <sourcefiles>
1097 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.efi"/>
1098 </sourcefiles>
1099 <targetfiles>
1100 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.pe32"/>
1101 </targetfiles>
1102
1103 <sequential>
1104 <copy file="${DEST_DIR_OUTPUT}/@{FILENAME}.efi" tofile="${BIN_DIR}/@{FILENAME}.efi" />
1105 <copy file="${DEST_DIR_OUTPUT}/@{FILENAME}.efi" tofile="${DEST_DIR_DEBUG}/@{FILENAME}.efi" />
1106 <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.efi"
1107 outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.pe32"
1108 sectiontype="EFI_SECTION_PE32"/>
1109
1110 <POST.PROCESS/>
1111 </sequential>
1112 </OnDependency>
1113 </sequential>
1114 </macrodef>
1115
1116 <!--
1117 EFI_SECTION_VERSION
1118 -->
1119 <macrodef name="EFI_SECTION_VERSION">
1120 <attribute name="FILEPATH"/>
1121 <attribute name="FILENAME"/>
1122 <attribute name="FILEEXT" default="" />
1123 <attribute name="VERSION" default="0000"/>
1124
1125 <element name="PRE.PROCESS" optional="yes"/>
1126 <element name="POST.PROCESS" optional="yes"/>
1127
1128 <sequential>
1129 <if>
1130 <not>
1131 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.ver"/>
1132 </not>
1133
1134 <then>
1135 <PRE.PROCESS/>
1136 <gensection outputfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.ver"
1137 versionnum="@{VERSION}"
1138 sectiontype="EFI_SECTION_VERSION"/>
1139 <POST.PROCESS/>
1140 </then>
1141 </if>
1142 </sequential>
1143 </macrodef>
1144
1145 <!--
1146 EFI_SECTION_USER_INTERFACE
1147 -->
1148 <macrodef name="EFI_SECTION_USER_INTERFACE">
1149 <attribute name="FILEPATH"/>
1150 <attribute name="FILENAME"/>
1151 <attribute name="FILEEXT" default="" />
1152 <attribute name="UI" default="${BASE_NAME}"/>
1153
1154 <element name="PRE.PROCESS" optional="yes"/>
1155 <element name="POST.PROCESS" optional="yes"/>
1156
1157 <sequential>
1158 <if>
1159 <not>
1160 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.ui"/>
1161 </not>
1162
1163 <then>
1164 <PRE.PROCESS/>
1165 <gensection interfacestring="@{UI}"
1166 outputfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.ui"
1167 sectiontype="EFI_SECTION_USER_INTERFACE"/>
1168 <POST.PROCESS/>
1169 </then>
1170 </if>
1171 </sequential>
1172 </macrodef>
1173
1174 <!--
1175 EFI_SECTION_DXE_DEPEX
1176 -->
1177 <macrodef name="EFI_SECTION_DXE_DEPEX">
1178 <attribute name="FILEPATH"/>
1179 <attribute name="FILENAME"/>
1180 <attribute name="FILEEXT" default="dxs"/>
1181
1182 <element name="PRE.PROCESS" optional="yes"/>
1183 <element name="POST.PROCESS" optional="yes"/>
1184
1185 <sequential>
1186 <PRE.PROCESS/>
1187
1188 <if>
1189 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILENAME}.depex"/>
1190 <then>
1191 <OnDependency>
1192 <sourcefiles>
1193 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.depex"/>
1194 </sourcefiles>
1195 <targetfiles>
1196 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"/>
1197 </targetfiles>
1198 <sequential>
1199 <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.depex"
1200 outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"
1201 sectiontype="EFI_SECTION_DXE_DEPEX"/>
1202 </sequential>
1203 </OnDependency>
1204 </then>
1205 <else>
1206 <if>
1207 <not>
1208 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"/>
1209 </not>
1210 <then>
1211 <touch file="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"/>
1212 </then>
1213 </if>
1214 </else>
1215 </if>
1216
1217 <POST.PROCESS/>
1218 </sequential>
1219 </macrodef>
1220
1221 <!--
1222 EFI_SECTION_PEI_DEPEX
1223 -->
1224 <macrodef name="EFI_SECTION_PEI_DEPEX">
1225 <attribute name="FILEPATH"/>
1226 <attribute name="FILENAME"/>
1227 <attribute name="FILEEXT" default="dxs"/>
1228
1229 <element name="PRE.PROCESS" optional="yes"/>
1230 <element name="POST.PROCESS" optional="yes"/>
1231 <sequential>
1232 <PRE.PROCESS/>
1233 <if>
1234 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILENAME}.depex"/>
1235 <then>
1236 <OnDependency>
1237 <sourcefiles>
1238 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.depex"/>
1239 </sourcefiles>
1240 <targetfiles>
1241 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"/>
1242 </targetfiles>
1243
1244 <sequential>
1245 <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.depex"
1246 outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"
1247 sectiontype="EFI_SECTION_PEI_DEPEX"/>
1248 </sequential>
1249 </OnDependency>
1250
1251 </then>
1252 <else>
1253 <if>
1254 <not>
1255 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"/>
1256 </not>
1257 <then>
1258 <touch file="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"/>
1259 </then>
1260 </if>
1261 </else>
1262 </if>
1263 <POST.PROCESS/>
1264 </sequential>
1265 </macrodef>
1266
1267
1268 <!--
1269 EFI_SECTION_RAW
1270 -->
1271 <macrodef name="EFI_SECTION_RAW">
1272 <attribute name="FILEPATH"/>
1273 <attribute name="FILENAME"/>
1274 <attribute name="FILEEXT" default="bin"/>
1275
1276 <element name="PRE.PROCESS" optional="yes"/>
1277 <element name="POST.PROCESS" optional="yes"/>
1278
1279 <sequential>
1280 <OnDependency>
1281 <sourcefiles>
1282 <file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
1283 </sourcefiles>
1284 <targetfiles>
1285 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.sec"/>
1286 </targetfiles>
1287
1288 <sequential>
1289 <PRE.PROCESS/>
1290 <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"
1291 outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.sec"
1292 sectiontype="EFI_SECTION_RAW"/>
1293 <POST.PROCESS/>
1294 </sequential>
1295 </OnDependency>
1296 </sequential>
1297 </macrodef>
1298
1299 <!--
1300 EFI_SECTION_RAW_SEC
1301 -->
1302 <macrodef name="EFI_SECTION_RAW_SEC">
1303 <attribute name="FILEPATH"/>
1304 <attribute name="FILENAME"/>
1305 <attribute name="FILEEXT" default="cat"/>
1306
1307 <element name="PRE.PROCESS" optional="yes"/>
1308 <element name="POST.PROCESS" optional="yes"/>
1309
1310 <sequential>
1311 <OnDependency>
1312 <sourcefiles>
1313 <file name="${DEST_DIR_OUTPUT}/ResetVec.@{FILEEXT}"/>
1314 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.te"/>
1315 </sourcefiles>
1316 <targetfiles>
1317 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.sec"/>
1318 </targetfiles>
1319
1320 <sequential>
1321 <PRE.PROCESS/>
1322 <secfixup secexefile="${DEST_DIR_OUTPUT}/@{FILENAME}.te" resetvectorDatafile="${DEST_DIR_OUTPUT}/ResetVec.@{FILEEXT}"
1323 outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.bin"/>
1324
1325 <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.bin"
1326 outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.sec"
1327 sectiontype="EFI_SECTION_RAW"/>
1328 <POST.PROCESS/>
1329 </sequential>
1330 </OnDependency>
1331 </sequential>
1332 </macrodef>
1333
1334 <!--
1335 EFI_SECTION_FIRMWARE_VOLUME_IMAGE
1336 -->
1337 <macrodef name="EFI_SECTION_FIRMWARE_VOLUME_IMAGE">
1338 <attribute name="FILEPATH"/>
1339 <attribute name="FILENAME"/>
1340 <attribute name="FILEEXT" default="fv"/>
1341
1342 <element name="PRE.PROCESS" optional="yes"/>
1343 <element name="POST.PROCESS" optional="yes"/>
1344
1345 <sequential>
1346 <OnDependency>
1347 <sourcefiles>
1348 <file name="${FV_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
1349 </sourcefiles>
1350 <targetfiles>
1351 <file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}fv.sec"/>
1352 </targetfiles>
1353
1354 <sequential>
1355 <PRE.PROCESS/>
1356
1357 <copy file="${FV_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"
1358 tofile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"
1359 overwrite="true"/>
1360 <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"
1361 outputfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}fv.sec"
1362 sectiontype="EFI_SECTION_FIRMWARE_VOLUME_IMAGE"/>
1363
1364 <POST.PROCESS/>
1365 </sequential>
1366 </OnDependency>
1367 </sequential>
1368 </macrodef>
1369
1370 <!--
1371 Binary
1372 -->
1373 <macrodef name="Build_Binary">
1374 <attribute name="FILEPATH"/>
1375 <attribute name="FILENAME"/>
1376 <attribute name="FILEEXT" default="bin"/>
1377
1378 <element name="EXTRA.INC" optional="yes"/>
1379 <element name="EXTRA.ARG" optional="yes"/>
1380
1381 <sequential>
1382 <copy file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"
1383 tofile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.bin"/>
1384 </sequential>
1385 </macrodef>
1386
1387 <!--
1388 Microcode
1389 -->
1390 <macrodef name="Build_MICROCODE">
1391 <attribute name="FILEPATH"/>
1392 <attribute name="FILENAME"/>
1393 <attribute name="FILEEXT" default="TXT"/>
1394
1395 <element name="EXTRA.INC" optional="yes"/>
1396 <element name="EXTRA.ARG" optional="yes"/>
1397
1398 <sequential>
1399 <mkdir dir="${TARGET_DIR}/Microcode"/>
1400 <flashmap MCIFile="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" MCOFILE="${TARGET_DIR}/Microcode/@{FILENAME}.bin"/>
1401 </sequential>
1402 </macrodef>
1403
1404 <!--
1405 Graphics (bmp, ...)
1406 -->
1407 <macrodef name="Build_BMP">
1408 <attribute name="FILEPATH"/>
1409 <attribute name="FILENAME"/>
1410 <attribute name="FILEEXT" default="bmp"/>
1411
1412 <element name="EXTRA.INC" optional="yes"/>
1413 <element name="EXTRA.ARG" optional="yes"/>
1414
1415 <sequential>
1416 <copy file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"
1417 tofile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.bin"/>
1418 </sequential>
1419 </macrodef>
1420
1421 <!--
1422 build EFI file
1423 -->
1424 <macrodef name="Build_EFI">
1425 <attribute name="FILEPATH"/>
1426 <attribute name="FILENAME"/>
1427 <attribute name="FILEEXT" default="efi"/>
1428
1429 <element name="EXTRA.INC" optional="yes"/>
1430 <element name="EXTRA.ARG" optional="yes"/>
1431
1432 <sequential>
1433 <mkdir dir="${MODULE_DIR}/@{FILEPATH}" />
1434 <copy file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"
1435 tofile="${DEST_DIR_OUTPUT}/${BASE_NAME}.efi"/>
1436 </sequential>
1437 </macrodef>
1438
1439 <!--
1440 Build macro for Apriori
1441 -->
1442 <macrodef name="Build_Apriori">
1443 <attribute name="FILEPATH" default="."/>
1444 <attribute name="FILENAME"/>
1445 <attribute name="FILEEXT" default="apr"/>
1446 <attribute name="GUID"/>
1447
1448 <sequential>
1449 <mkdir dir="${FV_DIR}/Apriori" />
1450 <gensection inputfile="${FV_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"
1451 outputfile="${FV_DIR}/Apriori/@{FILENAME}.sec"
1452 sectiontype="EFI_SECTION_RAW"/>
1453
1454 <genffsfile BaseName="@{FILENAME}" ffsATTRIBCHECKSUM="TRUE" ffsFILETYPE="EFI_FV_FILETYPE_FREEFORM"
1455 fileGuid="@{GUID}" moduleType="BASE" outputDir="${FV_DIR}">
1456 <sectFile fileName="${FV_DIR}/Apriori/@{FILENAME}.sec"/>
1457 </genffsfile>
1458
1459 </sequential>
1460 </macrodef>
1461 </project>