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