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