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