Add a macro for GCC Assembly.
[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 definitions for building files with different types
15 -->
16 <!--
17 C Code
18 -->
19 <macrodef name="Build_C_Code">
20 <attribute name="FILEPATH"/>
21 <attribute name="FILENAME"/>
22 <attribute name="FILEEXT" default="c"/>
23
24 <element name="EXTRA.INC" optional="yes"/>
25 <element name="EXTRA.ARG" optional="yes"/>
26
27 <sequential>
28 <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>
29
30 <if>
31 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
32 <then>
33 <makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep">
34 <input file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
35 <input file="${DEST_DIR_DEBUG}/AutoGen.h"/>
36 <includepath path="${WORKSPACE_DIR}"/>
37 <includepath path="${MODULE_DIR}"/>
38 <includepath path="${MODULE_DIR}/${ARCH}"/>
39 <EXTRA.INC/>
40 </makedeps>
41 </then>
42 </if>
43
44 <OnDependency>
45 <sourcefiles>
46 <file ListFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"/>
47 </sourcefiles>
48 <targetfiles>
49 <file Name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
50 </targetfiles>
51
52 <sequential>
53 <cc userdefine="on">
54 <command type="CC" workdir="${DEST_DIR_OUTPUT}">
55 <includepath path="${WORKSPACE_DIR}"/>
56 <includepath path="${MODULE_DIR}"/>
57 <includepath path="${MODULE_DIR}/${ARCH}"/>
58 <EXTRA.INC/>
59
60 <argument value="${CC_FLAGS}"/>
61 <EXTRA.ARG/>
62 <!-- <argument value="/FI${DEST_DIR_DEBUG}/AutoGen.h" /> -->
63 <includeFile value="${DEST_DIR_DEBUG}/AutoGen.h"/>
64 <!-- <argument value="/Fo${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/> -->
65 <outputFile value="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
66
67 <fileset casesensitive="off" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
68 </command>
69 </cc>
70 </sequential>
71 </OnDependency>
72
73 <!--
74 for library generation later
75 -->
76 <bl NAME="OBJECTS" VALUE="${OBJECTS} ${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
77 </sequential>
78 </macrodef>
79
80
81 <macrodef name="Build_AUTOGEN">
82 <attribute name="FILEPATH"/>
83 <attribute name="FILENAME"/>
84 <attribute name="FILEEXT" default="c"/>
85
86 <element name="EXTRA.INC" optional="yes"/>
87 <element name="EXTRA.ARG" optional="yes"/>
88
89 <sequential>
90 <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>
91
92 <if>
93 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
94 <then>
95 <makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep">
96 <input file="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
97 <input file="${DEST_DIR_DEBUG}/AutoGen.h"/>
98 <includepath path="${WORKSPACE_DIR}"/>
99 <includepath path="${MODULE_DIR}"/>
100 <includepath path="${MODULE_DIR}/${ARCH}"/>
101 <EXTRA.INC/>
102 </makedeps>
103 </then>
104 </if>
105
106 <OnDependency>
107 <sourcefiles>
108 <file ListFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"/>
109 </sourcefiles>
110 <targetfiles>
111 <file Name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
112 </targetfiles>
113
114 <sequential>
115 <cc userdefine="on">
116 <command type="CC" workdir="${DEST_DIR_OUTPUT}">
117 <includepath path="${WORKSPACE_DIR}"/>
118 <includepath path="${MODULE_DIR}"/>
119 <includepath path="${MODULE_DIR}/${ARCH}"/>
120 <EXTRA.INC/>
121
122 <argument value="${CC_FLAGS}"/>
123 <EXTRA.ARG/>
124 <!-- <argument value="/FI${DEST_DIR_DEBUG}/AutoGen.h" /> -->
125 <includeFile value="${DEST_DIR_DEBUG}/AutoGen.h"/>
126 <!-- <argument value="/Fo${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/> -->
127 <outputFile value="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
128
129 <fileset casesensitive="off" file="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
130 </command>
131 </cc>
132 </sequential>
133 </OnDependency>
134 <!--
135 for library generation later
136 -->
137 <bl NAME="OBJECTS" VALUE="${OBJECTS} ${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
138 </sequential>
139 </macrodef>
140
141 <macrodef name="Build_Dependency_File">
142 <attribute name="FILEPATH"/>
143 <attribute name="FILENAME"/>
144 <attribute name="FILEEXT" default="dxs"/>
145
146 <element name="EXTRA.INC" optional="yes"/>
147 <element name="EXTRA.ARG" optional="yes"/>
148
149 <sequential>
150 <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>
151
152 <OnDependency>
153 <sourcefiles>
154 <file name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
155 </sourcefiles>
156 <targetfiles>
157 <file name="${DEST_DIR_OUTPUT}/${BASE_NAME}.@{FILEEXT}.depex"/>
158 </targetfiles>
159
160 <sequential>
161 <copy file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"
162 tofile="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.c"/>
163
164 <cc userdefine="on">
165 <command type="CC" workdir=".">
166 <includepath path="${DEST_DIR_DEBUG}" />
167 <includepath path="${WORKSPACE_DIR}"/>
168 <includepath path="${MODULE_DIR}"/>
169 <includepath path="${MODULE_DIR}/${ARCH}"/>
170 <EXTRA.INC/>
171 <argument value="${PP_FLAGS}"/>
172 <fileset casesensitive="off" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.c"/>
173 <outputFile value="@{FILENAME}.@{FILEEXT}.i"/>
174 </command>
175 </cc>
176
177 <gendepex inputFile="@{FILENAME}.@{FILEEXT}.i" outputFile="${DEST_DIR_OUTPUT}/${BASE_NAME}.@{FILEEXT}.depex"/>
178 <delete file="@{FILENAME}.@{FILEEXT}.i" />
179 <delete file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.c" />
180 </sequential>
181 </OnDependency>
182 </sequential>
183 </macrodef>
184
185 <!-- Usage Example
186 <Build_C_Code
187 FILEPATH="."
188 FILENAME="${SOURCE_NAME}"
189 FILEEXT="c">
190 <EXTRA.INC>
191 <includepath path="${PACKAGE_DIR}/Include"/>
192 <includepath path="${PACKAGE_DIR}/Include/${ARCH}"/>
193 </EXTRA.INC>
194
195 <EXTRA.ARG>
196 <argument value="/D EFI_DEBUG /D EFI_WHATEVER_FLAG"/>
197 </EXTRA.ARG>
198 </Build_C_Code>
199 -->
200
201 <!--
202 IA32/x64 Assembly
203 -->
204 <macrodef name="Build_Assembly">
205 <attribute name="FILEPATH"/>
206 <attribute name="FILENAME"/>
207 <attribute name="FILEEXT" default="asm"/>
208
209 <element name="EXTRA.INC" optional="yes"/>
210 <element name="EXTRA.ARG" optional="yes"/>
211
212 <sequential>
213 <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>
214
215 <OnDependency>
216 <sourcefiles>
217 <file Name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
218 </sourcefiles>
219 <targetfiles>
220 <file Name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
221 </targetfiles>
222
223 <sequential>
224 <cc userdefine="on">
225 <command type="ASM">
226 <includepath path="${WORKSPACE_DIR}"/>
227 <includepath path="${MODULE_DIR}"/>
228 <includepath path="${MODULE_DIR}/${ARCH}"/>
229 <EXTRA.INC/>
230
231 <argument value="${ASM_FLAGS}"/>
232 <EXTRA.ARG/>
233 <argument value="/Fl${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.lst"/>
234 <OutputFile value="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
235
236 <fileset casesensitive="off" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
237 </command>
238 </cc>
239 </sequential>
240 </OnDependency>
241 <!--
242 for library generation later
243 -->
244 <bl NAME="OBJECTS" VALUE="${OBJECTS} ${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
245 </sequential>
246 </macrodef>
247
248 <!--
249 Library private HashMap map = new HashMap();
250 -->
251 <macrodef name="Build_Library">
252 <attribute name="FILENAME" />
253 <attribute name="FILEEXT" default="obj"/>
254
255 <element name="EXTRA.INC" optional="yes"/>
256 <element name="EXTRA.ARG" optional="yes"/>
257
258 <sequential>
259 <mkdir dir="${BIN_DIR}"/>
260
261 <OnDependency>
262 <sourcefiles>
263 <file list="${OBJECTS}"/>
264 </sourcefiles>
265 <targetfiles>
266 <file name="${BIN_DIR}/@{FILENAME}.lib"/>
267 </targetfiles>
268
269 <sequential>
270 <!-- <echo>re-generate library</echo> -->
271 <cc userdefine="on">
272 <command type="LIB">
273 <argument value="${LIB_FLAGS}"/>
274 <!--<argument value="${OBJECTS}"/>-->
275 <FileList dir="" files="${OBJECTS}"/>
276 <!-- <argument value="/out:${BIN_DIR}/@{FILENAME}.lib"/> -->
277 <OutputFile value="${BIN_DIR}/@{FILENAME}.lib"/>
278 </command>
279 </cc>
280 </sequential>
281 </OnDependency>
282 </sequential>
283 </macrodef>
284
285 <!--
286 GCC Assembly
287 -->
288 <macrodef name="Build_GCC_Assembly_Code">
289 <attribute name="FILEPATH"/>
290 <attribute name="FILENAME"/>
291 <attribute name="FILEEXT" default="s"/>
292
293 <element name="EXTRA.INC" optional="yes"/>
294 <element name="EXTRA.ARG" optional="yes"/>
295
296 <sequential>
297 <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>
298
299 <if>
300 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
301 <then>
302 <makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep">
303 <input file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
304 <includepath path="${WORKSPACE_DIR}"/>
305 <includepath path="${MODULE_DIR}"/>
306 <includepath path="${MODULE_DIR}/${ARCH}"/>
307 <EXTRA.INC/>
308 </makedeps>
309 </then>
310 </if>
311
312 <OnDependency>
313 <sourcefiles>
314 <file listfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"/>
315 </sourcefiles>
316 <targetfiles>
317 <file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
318 </targetfiles>
319
320 <sequential>
321
322 <cc userdefine="on">
323 <command type="ASM" includepathDelimiter="-I">
324 <EXTRA.INC/>
325
326 <argument value="${ASM_FLAGS}"/>
327 <EXTRA.ARG/>
328 <!-- <argument value="-o ${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/> -->
329 <OutputFile value="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
330
331 <fileset casesensitive="off" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
332 </command>
333 </cc>
334 </sequential>
335 </OnDependency>
336 <!--
337 for library generation later
338 -->
339 <bl NAME="OBJECTS" VALUE="${OBJECTS} ${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
340 </sequential>
341 </macrodef>
342
343 <!--
344 IPF Assembly
345 -->
346 <macrodef name="Build_IPF_Assembly_Code">
347 <attribute name="FILEPATH"/>
348 <attribute name="FILENAME"/>
349 <attribute name="FILEEXT" default="s"/>
350
351 <element name="EXTRA.INC" optional="yes"/>
352 <element name="EXTRA.ARG" optional="yes"/>
353
354 <sequential>
355 <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>
356
357 <if>
358 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
359 <then>
360 <makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep">
361 <input file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
362 <includepath path="${WORKSPACE_DIR}"/>
363 <includepath path="${MODULE_DIR}"/>
364 <includepath path="${MODULE_DIR}/${ARCH}"/>
365 <EXTRA.INC/>
366 </makedeps>
367 </then>
368 </if>
369
370 <OnDependency>
371 <sourcefiles>
372 <file listfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"/>
373 </sourcefiles>
374 <targetfiles>
375 <file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
376 </targetfiles>
377
378 <sequential>
379 <copy file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"
380 tofile="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.c"/>
381 <cc userdefine="on">
382 <command type="CC" workdir=".">
383 <includepath path="${WORKSPACE_DIR}"/>
384 <includepath path="${MODULE_DIR}"/>
385 <includepath path="${MODULE_DIR}/${ARCH}"/>
386 <EXTRA.INC/>
387 <argument value="${PP_FLAGS}"/>
388 <fileset casesensitive="off" file="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.c"/>
389 </command>
390 </cc>
391 <move file="@{FILENAME}.@{FILEEXT}.i"
392 tofile="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.pro"/>
393
394 <cc userdefine="on">
395 <command type="ASM" includepathDelimiter="-I">
396 <includepath path="${WORKSPACE_DIR}"/>
397 <includepath path="${MODULE_DIR}"/>
398 <includepath path="${MODULE_DIR}/${ARCH}"/>
399 <EXTRA.INC/>
400
401 <argument value="${ASM_FLAGS}"/>
402 <EXTRA.ARG/>
403 <!-- <argument value="-o ${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/> -->
404 <OutputFile value="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
405
406 <fileset casesensitive="off" file="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.pro"/>
407 </command>
408 </cc>
409 </sequential>
410 </OnDependency>
411 <!--
412 for library generation later
413 -->
414 <bl NAME="OBJECTS" VALUE="${OBJECTS} ${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
415 </sequential>
416 </macrodef>
417
418
419 <macrodef name="Build_IPF_PP_Code">
420 <attribute name="FILEPATH"/>
421 <attribute name="FILENAME"/>
422 <attribute name="FILEEXT" default="i"/>
423
424 <element name="EXTRA.INC" optional="yes"/>
425 <element name="EXTRA.ARG" optional="yes"/>
426
427 <sequential>
428 <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>
429
430 <cc userdefine="on">
431 <command type="ASM" includepathDelimiter="-I">
432 <includepath path="${WORKSPACE_DIR}"/>
433 <includepath path="${MODULE_DIR}"/>
434 <includepath path="${MODULE_DIR}/${ARCH}"/>
435 <EXTRA.INC/>
436
437 <argument value="${ASM_FLAGS}"/>
438 <EXTRA.ARG/>
439 <!-- <argument value="-o ${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/> -->
440 <OutputFile File="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
441
442 <fileset casesensitive="off" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
443 </command>
444 </cc>
445
446 <!--
447 for library generation later
448 -->
449 <bl NAME="OBJECTS" VALUE="${OBJECTS} ${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
450 </sequential>
451 </macrodef>
452
453 <!--
454 [Build.Ia32.Makefile,Build.Ipf.Makefile,Build.Ebc.Makefile]
455 [Build.Ia32.Custom_Makefile,Build.Ipf.Custom_Makefile,Build.Ebc.Custom_Makefile]
456 -->
457 <macrodef name="Build_Custom_Build">
458 <attribute name="FILEPATH"/>
459 <attribute name="FILENAME"/>
460 <attribute name="FILEEXT" default="c"/>
461
462 <element name="EXTRA.INC" optional="yes"/>
463 <element name="EXTRA.ARG" optional="yes"/>
464
465 <sequential>
466
467 </sequential>
468 </macrodef>
469
470 <!--
471 Unicode -> .sdb
472 -->
473 <macrodef name="Build_Unicode">
474 <attribute name="FILEPATH"/>
475 <attribute name="FILENAME"/>
476 <attribute name="FILEEXT" default="uni"/>
477
478 <element name="EXTRA.INC" optional="yes"/>
479 <element name="EXTRA.ARG" optional="yes"/>
480
481 <sequential>
482 <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>
483
484 <OnDependency>
485 <sourcefiles>
486 <file name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
487 </sourcefiles>
488 <targetfiles>
489 <file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb"/>
490 </targetfiles>
491
492 <sequential>
493 <strgather commandtype="parse" newdatabase="true">
494 <database name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb"/>
495 <includepath path="${WORKSPACE_DIR}"/>
496 <includepath path="${MODULE_DIR}"/>
497 <includepath path="${MODULE_DIR}/${ARCH}"/>
498 <EXTRA.INC/>
499 <EXTRA.ARG/>
500 <inputfile name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
501 </strgather>
502 </sequential>
503 </OnDependency>
504
505 <bl name="SDB_FILES" value="${SDB_FILES}, ${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb"/>
506 </sequential>
507 </macrodef>
508
509 <!--
510 .sdb(s) -> .c, .h -> .obj
511 -->
512 <macrodef name="Build_Unicode_Database">
513 <attribute name="FILEPATH"/>
514 <attribute name="FILENAME"/>
515 <attribute name="FILEEXT" default="sdb"/>
516
517 <element name="EXTRA.INC" optional="yes"/>
518 <element name="EXTRA.ARG" optional="yes"/>
519
520 <sequential>
521 <OnDependency>
522 <sourcefiles>
523 <file list="${SDB_FILES}"/>
524 <file list="${SOURCE_FILES}"/>
525 </sourcefiles>
526 <targetfiles>
527 <file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb"/>
528 </targetfiles>
529
530 <sequential>
531 <strgather commandtype="scan" outputdatabase="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb" verbose="read">
532 <skipext name=".uni"/>
533 <skipext name=".h"/>
534 <database list="${SDB_FILES}"/>
535 <inputfile name="${SOURCE_FILES}"/>
536 </strgather>
537 </sequential>
538 </OnDependency>
539
540 <OnDependency>
541 <sourcefiles>
542 <file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb"/>
543 </sourcefiles>
544 <targetfiles>
545 <file name="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}StrDefs.h"/>
546 <file name="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}Strings.hpk"/>
547 <file name="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}Strings.c"/>
548 </targetfiles>
549
550 <sequential>
551 <strgather basename="@{FILENAME}Strings" commandtype="dump"
552 outputdefines="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}StrDefs.h"
553 outputhpk="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}Strings.hpk"
554 outputstring="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}Strings.c">
555 <database name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb"/>
556 </strgather>
557 </sequential>
558 </OnDependency>
559
560 <OnDependency>
561 <sourcefiles>
562 <file name="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}Strings.c"/>
563 </sourcefiles>
564 <targetfiles>
565 <file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}Strings.obj"/>
566 </targetfiles>
567
568 <sequential>
569 <cc userdefine="on">
570 <command type="CC" workdir="${DEST_DIR_OUTPUT}" includepathDelimiter="-I">
571 <includepath path="${WORKSPACE_DIR}"/>
572 <includepath path="${MODULE_DIR}"/>
573 <includepath path="${MODULE_DIR}/${ARCH}"/>
574
575 <argument value="${CC_FLAGS}"/>
576 <OutputFile value="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}Strings.obj"/>
577
578 <fileset casesensitive="off" file="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}Strings.c"/>
579 </command>
580 </cc>
581 </sequential>
582 </OnDependency>
583
584 <bl name="OBJECTS" value="${OBJECTS} ${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}Strings.obj"/>
585 </sequential>
586 </macrodef>
587
588 <!--
589 Vfr
590 -->
591 <macrodef name="Build_Vfr">
592 <attribute name="FILEPATH"/>
593 <attribute name="FILENAME"/>
594 <attribute name="FILEEXT" default="vfr"/>
595
596 <element name="EXTRA.INC" optional="yes"/>
597 <element name="EXTRA.ARG" optional="yes"/>
598
599 <sequential>
600 <mkdir dir="${DEST_DIR_DEBUG}/@{FILEPATH}"/>
601
602 <if>
603 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
604 <then>
605 <makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep">
606 <input file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
607 <!-- <input file="${DEST_DIR_DEBUG}/AutoGen.h"/> -->
608 <includepath path="${WORKSPACE_DIR}"/>
609 <includepath path="${MODULE_DIR}"/>
610 <includepath path="${MODULE_DIR}/${ARCH}"/>
611 <EXTRA.INC/>
612 </makedeps>
613 </then>
614 </if>
615
616 <OnDependency>
617 <sourcefiles>
618 <file listfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"/>
619 </sourcefiles>
620 <targetfiles>
621 <file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
622 </targetfiles>
623
624 <sequential>
625 <vfrcompile createIfrBinFile="on" createListFile="on" outPutDir="${DEST_DIR_DEBUG}/@{FILEPATH}" vfrFile="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}">
626 <includepath path="${WORKSPACE_DIR}"/>
627 <includepath path="${MODULE_DIR}"/>
628 <includepath path="${MODULE_DIR}/${ARCH}"/>
629 <EXTRA.INC/>
630 </vfrcompile>
631
632 <cc userdefine="on">
633 <command type="CC" workdir="${DEST_DIR_OUTPUT}" includepathDelimiter="-I">
634 <includepath path="${WORKSPACE_DIR}"/>
635 <includepath path="${MODULE_DIR}"/>
636 <includepath path="${MODULE_DIR}/${ARCH}"/>
637 <argument value="${CC_FLAGS}"/>
638 <OutputFile value="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
639 <EXTRA.ARG/>
640
641 <fileset casesensitive="off" file="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.c"/>
642 </command>
643 </cc>
644
645 <delete file="@{FILENAME}.i"/>
646 </sequential>
647 </OnDependency>
648 <bl name="OBJECTS" value="${OBJECTS} ${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>
649 </sequential>
650 </macrodef>
651
652 <!--############################################################################
653 Build Sections
654 #############################################################################-->
655 <!--
656 DLL
657 -->
658 <macrodef name="GenDll">
659 <attribute name="FILEPATH"/>
660 <attribute name="FILENAME"/>
661 <attribute name="FILEEXT"/>
662
663 <element name="LIB.ARG" optional="yes"/>
664 <element name="LINK.ARG" optional="yes"/>
665
666 <sequential>
667 <OnDependency>
668 <sourcefiles>
669 <file list="${OBJECTS}"/>
670 <file list="${LIBS}"/>
671 </sourcefiles>
672 <targetfiles>
673 <file name="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.dll"/>
674 </targetfiles>
675
676 <sequential>
677 <cc userdefine="on">
678 <command type="LINK">
679 <argument value="${LINK_FLAGS}"/>
680 <libset libs="${LIBS}"/>
681 <LINK.ARG/>
682 <EntryPoint value="_ModuleEntryPoint"/>
683 <map value="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.map"/>
684 <pdb value="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.pdb"/>
685 <OutputFile value="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.dll"/>
686 <FileList dir="" files="${OBJECTS}"/>
687 </command>
688 </cc>
689 </sequential>
690 </OnDependency>
691 </sequential>
692 </macrodef>
693
694 <!--
695 EFI
696 -->
697 <macrodef name="GenEfi">
698 <attribute name="FILEPATH"/>
699 <attribute name="FILENAME"/>
700 <attribute name="FILEEXT" default="dll"/>
701
702 <sequential>
703 <OnDependency>
704 <sourcefiles>
705 <file name="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
706 </sourcefiles>
707 <targetfiles>
708 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.efi"/>
709 </targetfiles>
710
711 <sequential>
712 <fwimage componenttype="${COMPONENT_TYPE}" outImage="${DEST_DIR_OUTPUT}/@{FILENAME}.efi"
713 peImage="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" time="0"/>
714 </sequential>
715 </OnDependency>
716 </sequential>
717 </macrodef>
718
719 <!--
720 EFI_SECTION_FREEFORM_SUBTYPE_GUID
721 EFI_SECTION_VERSION
722 EFI_SECTION_USER_INTERFACE
723 EFI_SECTION_DXE_DEPEX
724 EFI_SECTION_PEI_DEPEX
725 EFI_SECTION_PE32
726 EFI_SECTION_PIC
727 EFI_SECTION_TE
728 EFI_SECTION_RAW
729 EFI_SECTION_COMPRESSION
730 EFI_SECTION_GUID_DEFINED
731 EFI_SECTION_COMPATIBILITY16
732 EFI_SECTION_FIRMWARE_VOLUME_IMAGE
733 -->
734 <!--
735 EFI_SECTION_PE32
736 -->
737 <macrodef name="EFI_SECTION_PE32">
738 <attribute name="FILEPATH"/>
739 <attribute name="FILENAME"/>
740 <attribute name="FILEEXT" default="" />
741
742 <element name="PRE.PROCESS" optional="yes"/>
743 <element name="POST.PROCESS" optional="yes"/>
744
745 <sequential>
746 <PRE.PROCESS/>
747
748 <if>
749 <not>
750 <equals arg1="${OBJECTS}" arg2=""/>
751 </not>
752
753 <then>
754 <GenDll FILEPATH="." FILENAME="@{FILENAME}" FILEEXT="">
755 <LIB.ARG></LIB.ARG>
756 <LINK.ARG></LINK.ARG>
757 </GenDll>
758
759 <GenEfi FILEPATH="." FILENAME="@{FILENAME}" FILEEXT="dll"/>
760 </then>
761 </if>
762
763 <OnDependency>
764 <sourcefiles>
765 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.efi"/>
766 </sourcefiles>
767 <targetfiles>
768 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.pe32"/>
769 </targetfiles>
770
771 <sequential>
772 <copy file="${DEST_DIR_OUTPUT}/@{FILENAME}.efi" tofile="${BIN_DIR}/@{FILENAME}.efi" />
773 <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.efi"
774 outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.pe32"
775 sectiontype="EFI_SECTION_PE32"/>
776
777 <POST.PROCESS/>
778 </sequential>
779 </OnDependency>
780 </sequential>
781 </macrodef>
782
783 <!--
784 EFI_SECTION_VERSION
785 -->
786 <macrodef name="EFI_SECTION_VERSION">
787 <attribute name="FILEPATH"/>
788 <attribute name="FILENAME"/>
789 <attribute name="FILEEXT" default="" />
790 <attribute name="VERSION" default="0000"/>
791
792 <element name="PRE.PROCESS" optional="yes"/>
793 <element name="POST.PROCESS" optional="yes"/>
794
795 <sequential>
796 <if>
797 <not>
798 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.ver"/>
799 </not>
800
801 <then>
802 <PRE.PROCESS/>
803 <gensection outputfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.ver"
804 versionnum="@{VERSION}"
805 sectiontype="EFI_SECTION_VERSION"/>
806 <POST.PROCESS/>
807 </then>
808 </if>
809 </sequential>
810 </macrodef>
811
812 <!--
813 EFI_SECTION_USER_INTERFACE
814 -->
815 <macrodef name="EFI_SECTION_USER_INTERFACE">
816 <attribute name="FILEPATH"/>
817 <attribute name="FILENAME"/>
818 <attribute name="FILEEXT" default="" />
819 <attribute name="UI" default="${BASE_NAME}"/>
820
821 <element name="PRE.PROCESS" optional="yes"/>
822 <element name="POST.PROCESS" optional="yes"/>
823
824 <sequential>
825 <if>
826 <not>
827 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.ui"/>
828 </not>
829
830 <then>
831 <PRE.PROCESS/>
832 <gensection interfacestring="@{UI}"
833 outputfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.ui"
834 sectiontype="EFI_SECTION_USER_INTERFACE"/>
835 <POST.PROCESS/>
836 </then>
837 </if>
838 </sequential>
839 </macrodef>
840
841 <!--
842 EFI_SECTION_FREEFORM_SUBTYPE_GUID
843 <macrodef name="EFI_SECTION_FREEFORM_SUBTYPE_GUID">
844 <attribute name="FILEPATH"/>
845 <attribute name="FILENAME"/>
846 <attribute name="FILEEXT" default=""/>
847
848 <element name="EXTRA.INC" optional="yes"/>
849 <element name="EXTRA.ARG" optional="yes"/>
850
851 <sequential>
852 <gensection inputfile=""
853 outputfile=""
854 sectiontype="EFI_SECTION_FREEFORM_SUBTYPE_GUID"/>
855 </sequential>
856 </macrodef>
857 -->
858
859 <!--
860 EFI_SECTION_DXE_DEPEX
861 -->
862 <macrodef name="EFI_SECTION_DXE_DEPEX">
863 <attribute name="FILEPATH"/>
864 <attribute name="FILENAME"/>
865 <attribute name="FILEEXT" default="dxs"/>
866
867 <element name="PRE.PROCESS" optional="yes"/>
868 <element name="POST.PROCESS" optional="yes"/>
869
870 <sequential>
871 <PRE.PROCESS/>
872
873 <if>
874 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILENAME}.@{FILEEXT}.depex"/>
875 <then>
876 <OnDependency>
877 <sourcefiles>
878 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.@{FILEEXT}.depex"/>
879 </sourcefiles>
880 <targetfiles>
881 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"/>
882 </targetfiles>
883 <sequential>
884 <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.@{FILEEXT}.depex"
885 outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"
886 sectiontype="EFI_SECTION_DXE_DEPEX"/>
887 </sequential>
888 </OnDependency>
889 </then>
890 <else>
891 <if>
892 <not>
893 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"/>
894 </not>
895 <then>
896 <touch file="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"/>
897 </then>
898 </if>
899 </else>
900 </if>
901
902 <POST.PROCESS/>
903 </sequential>
904 </macrodef>
905
906 <!--
907 EFI_SECTION_PEI_DEPEX
908 -->
909 <macrodef name="EFI_SECTION_PEI_DEPEX">
910 <attribute name="FILEPATH"/>
911 <attribute name="FILENAME"/>
912 <attribute name="FILEEXT" default="dxs"/>
913
914 <element name="PRE.PROCESS" optional="yes"/>
915 <element name="POST.PROCESS" optional="yes"/>
916 <sequential>
917 <PRE.PROCESS/>
918 <if>
919 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILENAME}.@{FILEEXT}.depex"/>
920 <then>
921 <OnDependency>
922 <sourcefiles>
923 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.@{FILEEXT}.depex"/>
924 </sourcefiles>
925 <targetfiles>
926 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"/>
927 </targetfiles>
928
929 <sequential>
930 <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.@{FILEEXT}.depex"
931 outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"
932 sectiontype="EFI_SECTION_PEI_DEPEX"/>
933 </sequential>
934 </OnDependency>
935
936 </then>
937 <else>
938 <if>
939 <not>
940 <available type="file" file="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"/>
941 </not>
942 <then>
943 <touch file="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"/>
944 </then>
945 </if>
946 </else>
947 </if>
948 <POST.PROCESS/>
949 </sequential>
950 </macrodef>
951
952 <!--
953 EFI_SECTION_PIC
954 <macrodef name="EFI_SECTION_PIC">
955 <attribute name="FILEPATH"/>
956 <attribute name="FILENAME"/>
957 <attribute name="FILEEXT" default=""/>
958
959 <element name="EXTRA.INC" optional="yes"/>
960 <element name="EXTRA.ARG" optional="yes"/>
961
962 <sequential>
963 <gensection inputfile="${BIN_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"
964 outputfile="${BIN_DIR}/@{FILENAME}.pe32"
965 sectiontype="EFI_SECTION_PIC"/>
966 </sequential>
967 </macrodef>
968 -->
969
970 <!--
971 EFI_SECTION_TE
972 <macrodef name="EFI_SECTION_TE">
973 <attribute name="FILEPATH"/>
974 <attribute name="FILENAME"/>
975 <attribute name="FILEEXT" default=""/>
976
977 <element name="EXTRA.INC" optional="yes"/>
978 <element name="EXTRA.ARG" optional="yes"/>
979
980 <sequential>
981 <gensection inputfile="${BIN_DIR}/@{FILENAME}.@{FILEEXT}"
982 outputfile="${BIN_DIR}/@{FILENAME}.pe32"
983 sectiontype="EFI_SECTION_PE32"/>
984 </sequential>
985 </macrodef>
986 -->
987
988 <!--
989 EFI_SECTION_RAW
990 -->
991 <macrodef name="EFI_SECTION_RAW">
992 <attribute name="FILEPATH"/>
993 <attribute name="FILENAME"/>
994 <attribute name="FILEEXT" default="bin"/>
995
996 <element name="PRE.PROCESS" optional="yes"/>
997 <element name="POST.PROCESS" optional="yes"/>
998
999 <sequential>
1000 <OnDependency>
1001 <sourcefiles>
1002 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.@{FILEEXT}"/>
1003 </sourcefiles>
1004 <targetfiles>
1005 <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.sec"/>
1006 </targetfiles>
1007
1008 <sequential>
1009 <PRE.PROCESS/>
1010 <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.@{FILEEXT}"
1011 outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.sec"
1012 sectiontype="EFI_SECTION_RAW"/>
1013 <POST.PROCESS/>
1014 </sequential>
1015 </OnDependency>
1016 </sequential>
1017 </macrodef>
1018
1019 <!--
1020 EFI_SECTION_COMPRESSION
1021 <macrodef name="EFI_SECTION_COMPRESSION">
1022 <attribute name="FILEPATH"/>
1023 <attribute name="FILENAME"/>
1024 <attribute name="FILEEXT" default=""/>
1025
1026 <element name="EXTRA.INC" optional="yes"/>
1027 <element name="EXTRA.ARG" optional="yes"/>
1028
1029 <sequential>
1030 <gensection inputfile="${BIN_DIR}/@{FILENAME}.@{FILEEXT}"
1031 outputfile="${BIN_DIR}/@{FILENAME}.pe32"
1032 sectiontype="EFI_SECTION_PE32"/>
1033 </sequential>
1034 </macrodef>
1035 -->
1036
1037 <!--
1038 EFI_SECTION_GUID_DEFINED
1039 <macrodef name="EFI_SECTION_GUID_DEFINED">
1040 <attribute name="FILEPATH"/>
1041 <attribute name="FILENAME"/>
1042 <attribute name="FILEEXT" default=""/>
1043
1044 <element name="EXTRA.INC" optional="yes"/>
1045 <element name="EXTRA.ARG" optional="yes"/>
1046
1047 <sequential>
1048 <gensection inputfile="${BIN_DIR}/@{FILENAME}.@{FILEEXT}"
1049 outputfile="${BIN_DIR}/@{FILENAME}.pe32"
1050 sectiontype="EFI_SECTION_PE32"/>
1051 </sequential>
1052 </macrodef>
1053 -->
1054
1055 <!--
1056 EFI_SECTION_COMPATIBILITY16
1057 <macrodef name="EFI_SECTION_COMPATIBILITY16">
1058 <attribute name="FILEPATH"/>
1059 <attribute name="FILENAME"/>
1060 <attribute name="FILEEXT" default=""/>
1061
1062 <element name="EXTRA.INC" optional="yes"/>
1063 <element name="EXTRA.ARG" optional="yes"/>
1064
1065 <sequential>
1066 <gensection inputfile="${BIN_DIR}/@{FILENAME}.@{FILEEXT}"
1067 outputfile="${BIN_DIR}/@{FILENAME}.pe32"
1068 sectiontype="EFI_SECTION_PE32"/>
1069 </sequential>
1070 </macrodef>
1071
1072 -->
1073 <!--
1074 EFI_SECTION_FIRMWARE_VOLUME_IMAGE
1075 -->
1076 <macrodef name="EFI_SECTION_FIRMWARE_VOLUME_IMAGE">
1077 <attribute name="FILEPATH"/>
1078 <attribute name="FILENAME"/>
1079 <attribute name="FILEEXT" default="fv"/>
1080
1081 <element name="PRE.PROCESS" optional="yes"/>
1082 <element name="POST.PROCESS" optional="yes"/>
1083
1084 <sequential>
1085 <OnDependency>
1086 <sourcefiles>
1087 <file name="${FV_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>
1088 </sourcefiles>
1089 <targetfiles>
1090 <file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}fv.sec"/>
1091 </targetfiles>
1092
1093 <sequential>
1094 <PRE.PROCESS/>
1095
1096 <copy file="${FV_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"
1097 tofile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"
1098 overwrite="true"/>
1099 <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"
1100 outputfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}fv.sec"
1101 sectiontype="EFI_SECTION_FIRMWARE_VOLUME_IMAGE"/>
1102
1103 <POST.PROCESS/>
1104 </sequential>
1105 </OnDependency>
1106 </sequential>
1107 </macrodef>
1108
1109 <!--
1110 Binary
1111 -->
1112 <macrodef name="Build_Binary">
1113 <attribute name="FILEPATH"/>
1114 <attribute name="FILENAME"/>
1115 <attribute name="FILEEXT" default="bin"/>
1116
1117 <element name="EXTRA.INC" optional="yes"/>
1118 <element name="EXTRA.ARG" optional="yes"/>
1119
1120 <sequential>
1121 <copy file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"
1122 tofile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.bin"/>
1123 </sequential>
1124 </macrodef>
1125
1126 <!--
1127 Graphics (bmp, ...)
1128 -->
1129 <macrodef name="Build_Graphics">
1130 <attribute name="FILEPATH"/>
1131 <attribute name="FILENAME"/>
1132 <attribute name="FILEEXT" default="bmp"/>
1133
1134 <element name="EXTRA.INC" optional="yes"/>
1135 <element name="EXTRA.ARG" optional="yes"/>
1136
1137 <sequential>
1138 <mkdir dir="${MODULE_DIR}/@{FILEPATH}" />
1139 <copy file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"
1140 tofile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.bin"/>
1141 </sequential>
1142 </macrodef>
1143 <macrodef name="Build_EFI">
1144 <attribute name="FILEPATH"/>
1145 <attribute name="FILENAME"/>
1146 <attribute name="FILEEXT" default="efi"/>
1147
1148 <element name="EXTRA.INC" optional="yes"/>
1149 <element name="EXTRA.ARG" optional="yes"/>
1150
1151 <sequential>
1152 <mkdir dir="${MODULE_DIR}/@{FILEPATH}" />
1153 <copy file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"
1154 tofile="${DEST_DIR_OUTPUT}/${BASE_NAME}.efi"/>
1155 </sequential>
1156 </macrodef>
1157 </project>