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