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