<?xml version="1.0" encoding="UTF-8"?> | |
<!-- | |
Copyright (c) 2006, Intel Corporation | |
All rights reserved. This program and the accompanying materials | |
are licensed and made available under the terms and conditions of the BSD License | |
which accompanies this distribution. The full text of the license may be found at | |
http://opensource.org/licenses/bsd-license.php | |
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
--> | |
<project name="common"> | |
<!-- for user extended tasks or macros --> | |
<import file="UserExtension.xml" optional="true"/> | |
<!-- | |
Macro for intialize some properties. This Macro build will be called before source file build. | |
--> | |
<macrodef name="Build_Init"> | |
<element name="EXTRA.INC" optional="yes"/> | |
<element name="EXTRA.ARG" optional="yes"/> | |
<sequential> | |
<var name="OBJECTS" value="" /> | |
<var name="SDB_FILES" value="" /> | |
<mkdir dir="${DEST_DIR_DEBUG}"/> | |
<mkdir dir="${DEST_DIR_OUTPUT}"/> | |
<if> | |
<and> | |
<isset property="PCH"/> | |
<not> | |
<equals arg1="${PCH}" arg2=""/> | |
</not> | |
</and> | |
<then> | |
<makedeps DepsFile="${DEST_DIR_OUTPUT}/AutoGen.h.dep" | |
TargetFile="${DEST_DIR_OUTPUT}/AutoGen.h.gch"> | |
<input file="${DEST_DIR_DEBUG}/AutoGen.h"/> | |
<EXTRA.INC/> | |
</makedeps> | |
<OnDependency> | |
<sourcefiles> | |
<file ListFile="${DEST_DIR_OUTPUT}/AutoGen.h.dep"/> | |
</sourcefiles> | |
<targetfiles> | |
<file Name="${DEST_DIR_OUTPUT}/AutoGen.h.gch"/> | |
</targetfiles> | |
<sequential> | |
<!-- Generate pre-compiled header --> | |
<cc userdefine="on"> | |
<command type="CC" cmd="${PCH}" workdir="${DEST_DIR_OUTPUT}" family="${CC_FAMILY}" | |
outputFile="${DEST_DIR_OUTPUT}/AutoGen.h.obj" dpath="${CC_DPATH}" libpath="${CC_LIBPATH}" | |
include="${CC_INCLUDEPATH}"> | |
<EXTRA.INC/> | |
<argument value="${PCH_FLAGS}"/> | |
<EXTRA.ARG/> | |
<fileset casesensitive="on" file="${DEST_DIR_DEBUG}/AutoGen.h"/> | |
</command> | |
</cc> | |
<if> | |
<equals arg1="${CC_FAMILY}" arg2="GCC"/> | |
<then> | |
<move file="${DEST_DIR_OUTPUT}/AutoGen.h.obj" tofile="${DEST_DIR_DEBUG}/AutoGen.h.gch" overwrite="true"/> | |
</then> | |
</if> | |
</sequential> | |
</OnDependency> | |
<if> | |
<not> | |
<equals arg1="${CC_FAMILY}" arg2="GCC"/> | |
</not> | |
<then> | |
<var name="OBJECTS" value="${OBJECTS} AutoGen.h.obj"/> | |
</then> | |
</if> | |
</then> | |
<else> | |
<makedeps DepsFile="${DEST_DIR_OUTPUT}/AutoGen.h.dep"> | |
<input file="${DEST_DIR_DEBUG}/AutoGen.h"/> | |
<EXTRA.INC/> | |
</makedeps> | |
</else> | |
</if> | |
</sequential> | |
</macrodef> | |
<!-- | |
macro definitions for building files with different types | |
--> | |
<!-- | |
C Code | |
--> | |
<macrodef name="Build_CCode"> | |
<attribute name="FILEPATH"/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT" default="c"/> | |
<element name="EXTRA.INC" optional="yes"/> | |
<element name="EXTRA.ARG" optional="yes"/> | |
<sequential> | |
<var name="FILE_BASENAME" value="@{FILENAME}" /> | |
<var name="FILE_PATH" value="@{FILEPATH}" /> | |
<mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/> | |
<makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep" | |
TargetFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"> | |
<input file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/> | |
<EXTRA.INC/> | |
</makedeps> | |
<OnDependency> | |
<sourcefiles> | |
<file ListFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"/> | |
<file ListFile="${DEST_DIR_OUTPUT}/AutoGen.h.dep"/> | |
</sourcefiles> | |
<targetfiles> | |
<file Name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/> | |
</targetfiles> | |
<sequential> | |
<cc userdefine="on"> | |
<command type="CC" cmd="${CC}" workdir="${DEST_DIR_OUTPUT}" family="${CC_FAMILY}" | |
outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj" dpath="${CC_DPATH}" | |
libpath="${CC_LIBPATH}" include="${CC_INCLUDEPATH}"> | |
<EXTRA.INC/> | |
<argument value="${CC_FLAGS}"/> | |
<EXTRA.ARG/> | |
<fileset casesensitive="on" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/> | |
</command> | |
</cc> | |
</sequential> | |
</OnDependency> | |
<!-- Since fileset can't scan file start with ./, remove ./ in previous. --> | |
<if> | |
<equals arg1="@{FILEPATH}" arg2="." /> | |
<then> | |
<var name="OBJECTS" value="${OBJECTS} @{FILENAME}.obj" /> | |
</then> | |
<else> | |
<var name="OBJECTS" value="${OBJECTS} @{FILEPATH}/@{FILENAME}.obj" /> | |
</else> | |
</if> | |
</sequential> | |
</macrodef> | |
<macrodef name="Build_AUTOGEN"> | |
<attribute name="FILEPATH"/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT" default="c"/> | |
<element name="EXTRA.INC" optional="yes"/> | |
<element name="EXTRA.ARG" optional="yes"/> | |
<sequential> | |
<var name="FILE_BASENAME" value="@{FILENAME}" /> | |
<var name="FILE_PATH" value="@{FILEPATH}" /> | |
<mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/> | |
<makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep" | |
TargetFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"> | |
<input file="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/> | |
<EXTRA.INC/> | |
</makedeps> | |
<OnDependency> | |
<sourcefiles> | |
<file ListFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"/> | |
<file ListFile="${DEST_DIR_OUTPUT}/AutoGen.h.dep"/> | |
</sourcefiles> | |
<targetfiles> | |
<file Name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/> | |
</targetfiles> | |
<sequential> | |
<cc userdefine="on"> | |
<command type="CC" cmd="${CC}" workdir="${DEST_DIR_OUTPUT}" family="${CC_FAMILY}" | |
outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj" dpath="${CC_DPATH}" | |
libpath="${CC_LIBPATH}" include="${CC_INCLUDEPATH}"> | |
<EXTRA.INC/> | |
<argument value="${CC_FLAGS}"/> | |
<EXTRA.ARG/> | |
<fileset casesensitive="on" file="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/> | |
</command> | |
</cc> | |
</sequential> | |
</OnDependency> | |
<!-- Since fileset can't scan file start with ./, remove ./ in previous. --> | |
<if> | |
<equals arg1="@{FILEPATH}" arg2="." /> | |
<then> | |
<var name="OBJECTS" value="${OBJECTS} @{FILENAME}.obj" /> | |
</then> | |
<else> | |
<var name="OBJECTS" value="${OBJECTS} @{FILEPATH}/@{FILENAME}.obj" /> | |
</else> | |
</if> | |
</sequential> | |
</macrodef> | |
<macrodef name="Build_DPX"> | |
<attribute name="FILEPATH"/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT" default="dxs"/> | |
<element name="EXTRA.INC" optional="yes"/> | |
<element name="EXTRA.ARG" optional="yes"/> | |
<sequential> | |
<var name="FILE_BASENAME" value="@{FILENAME}" /> | |
<var name="FILE_PATH" value="@{FILEPATH}" /> | |
<mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/> | |
<makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep" | |
TargetFile="${DEST_DIR_OUTPUT}/${BASE_NAME}.depex"> | |
<input file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/> | |
<EXTRA.INC/> | |
</makedeps> | |
<OnDependency> | |
<sourcefiles> | |
<!--file name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/--> | |
<file ListFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"/> | |
<file ListFile="${DEST_DIR_OUTPUT}/AutoGen.h.dep"/> | |
</sourcefiles> | |
<targetfiles> | |
<file name="${DEST_DIR_OUTPUT}/${BASE_NAME}.depex"/> | |
</targetfiles> | |
<sequential> | |
<cc userdefine="on"> | |
<command type="CC" cmd="${CC}" workdir="${DEST_DIR_OUTPUT}/@{FILEPATH}" family="${CC_FAMILY}" | |
outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.i" dpath="${CC_DPATH}" | |
libpath="${CC_LIBPATH}" include="${CC_INCLUDEPATH}"> | |
<EXTRA.INC/> | |
<argument value="${PP_FLAGS}"/> | |
<fileset casesensitive="on" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/> | |
</command> | |
</cc> | |
<gendepex inputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.i" outputFile="${DEST_DIR_OUTPUT}/${BASE_NAME}.depex"/> | |
</sequential> | |
</OnDependency> | |
</sequential> | |
</macrodef> | |
<macrodef name="Build_ASM"> | |
<attribute name="FILEPATH"/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT" default="asm"/> | |
<element name="EXTRA.INC" optional="yes"/> | |
<element name="EXTRA.ARG" optional="yes"/> | |
<!-- Dispath ASM file, there are three type. | |
asm - Build_Assembly | |
S - Build_Gcc_Assembly | |
s - Build_Ipf_Assembly --> | |
<sequential> | |
<if> | |
<equals arg1="@{FILEEXT}" arg2="asm" /> | |
<then> | |
<Build_Assembly FILEPATH="@{FILEPATH}" FILENAME="@{FILENAME}" FILEEXT="@{FILEEXT}"> | |
<EXTRA.INC.1><EXTRA.INC /></EXTRA.INC.1> | |
<EXTRA.ARG.1><EXTRA.ARG /></EXTRA.ARG.1> | |
</Build_Assembly> | |
</then> | |
<elseif> | |
<equals arg1="@{FILEEXT}" arg2="S" /> | |
<then> | |
<Build_Gcc_Assembly FILEPATH="@{FILEPATH}" FILENAME="@{FILENAME}" FILEEXT="@{FILEEXT}"> | |
<EXTRA.INC.1><EXTRA.INC /></EXTRA.INC.1> | |
<EXTRA.ARG.1><EXTRA.ARG /></EXTRA.ARG.1> | |
</Build_Gcc_Assembly> | |
</then> | |
</elseif> | |
<elseif> | |
<equals arg1="@{FILEEXT}" arg2="s" /> | |
<then> | |
<Build_IPF_Assembly_Code FILEPATH="@{FILEPATH}" FILENAME="@{FILENAME}" FILEEXT="@{FILEEXT}"> | |
<EXTRA.INC.1><EXTRA.INC /></EXTRA.INC.1> | |
<EXTRA.ARG.1><EXTRA.ARG /></EXTRA.ARG.1> | |
</Build_IPF_Assembly_Code> | |
</then> | |
</elseif> | |
</if> | |
</sequential> | |
</macrodef> | |
<!-- | |
IA32/x64 Assembly | |
--> | |
<macrodef name="Build_Assembly"> | |
<attribute name="FILEPATH"/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT" default="asm"/> | |
<element name="EXTRA.INC.1" optional="yes"/> | |
<element name="EXTRA.ARG.1" optional="yes"/> | |
<sequential> | |
<var name="FILE_BASENAME" value="@{FILENAME}" /> | |
<var name="FILE_PATH" value="@{FILEPATH}" /> | |
<mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/> | |
<makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep" | |
TargetFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"> | |
<input file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/> | |
<EXTRA.INC.1/> | |
</makedeps> | |
<OnDependency> | |
<sourcefiles> | |
<file Listfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"/> | |
<file ListFile="${DEST_DIR_OUTPUT}/AutoGen.h.dep"/> | |
</sourcefiles> | |
<targetfiles> | |
<file Name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/> | |
</targetfiles> | |
<sequential> | |
<cc userdefine="on"> | |
<command type="PP" cmd="${PP}" workdir="${DEST_DIR_OUTPUT}/@{FILEPATH}" family="${PP_FAMILY}" | |
dpath="${PP_DPATH}" libpath="${PP_LIBPATH}" include="${PP_INCLUDEPATH}"> | |
<EXTRA.INC.1/> | |
<argument value="${PP_FLAGS}"/> | |
<fileset casesensitive="on" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/> | |
</command> | |
</cc> | |
<replaceregexp file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.i" | |
match="^(#line +1 +.*@{FILEPATH}/@{FILENAME}\.@{FILEEXT}").+\1" | |
replace=";" | |
flags="gs"/> | |
<replaceregexp file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.i" | |
match="^(#line .*)$" | |
replace="; \1" | |
byline="true"/> | |
<replaceregexp file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.i" | |
match="([^_a-zA-Z])0x([0-9a-fA-F]+)" | |
replace="\10\2h" | |
flags="g" | |
byline="true"/> | |
<cc userdefine="on"> | |
<command type="ASM" cmd="${ASM}" workdir="${DEST_DIR_OUTPUT}" family="${ASM_FAMILY}" | |
outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj" dpath="${ASM_DPATH}" | |
libpath="${ASM_LIBPATH}" include="${ASM_INCLUDEPATH}"> | |
<EXTRA.INC.1/> | |
<argument value="${ASM_FLAGS}"/> | |
<EXTRA.ARG.1/> | |
<fileset casesensitive="on" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.i"/> | |
</command> | |
</cc> | |
</sequential> | |
</OnDependency> | |
<!-- Since fileset can't scan file start with ./, remove ./ in previous. --> | |
<if> | |
<equals arg1="@{FILEPATH}" arg2="." /> | |
<then> | |
<var name="OBJECTS" value="${OBJECTS} @{FILENAME}.obj" /> | |
</then> | |
<else> | |
<var name="OBJECTS" value="${OBJECTS} @{FILEPATH}/@{FILENAME}.obj" /> | |
</else> | |
</if> | |
</sequential> | |
</macrodef> | |
<!-- | |
Build GCC assembly code | |
--> | |
<macrodef name="Build_Gcc_Assembly"> | |
<attribute name="FILEPATH"/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT" default="asm"/> | |
<element name="EXTRA.INC.1" optional="yes"/> | |
<element name="EXTRA.ARG.1" optional="yes"/> | |
<sequential> | |
<var name="FILE_BASENAME" value="@{FILENAME}" /> | |
<var name="FILE_PATH" value="@{FILEPATH}" /> | |
<mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/> | |
<makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep" | |
TargetFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"> | |
<input file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/> | |
<EXTRA.INC.1/> | |
</makedeps> | |
<OnDependency> | |
<sourcefiles> | |
<file Listfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"/> | |
<file ListFile="${DEST_DIR_OUTPUT}/AutoGen.h.dep"/> | |
</sourcefiles> | |
<targetfiles> | |
<file Name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/> | |
</targetfiles> | |
<sequential> | |
<cc userdefine="on"> | |
<command type="ASM" cmd="${ASM}" workdir="${DEST_DIR_OUTPUT}" family="${ASM_FAMILY}" | |
outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj" dpath="${ASM_DPATH}" | |
libpath="${ASM_LIBPATH}" include="${ASM_INCLUDEPATH}"> | |
<EXTRA.INC.1/> | |
<argument value="${ASM_FLAGS}"/> | |
<EXTRA.ARG.1/> | |
<fileset casesensitive="on" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/> | |
</command> | |
</cc> | |
</sequential> | |
</OnDependency> | |
<!-- Since fileset can't scan file start with ./, remove ./ in previous. --> | |
<if> | |
<equals arg1="@{FILEPATH}" arg2="." /> | |
<then> | |
<var name="OBJECTS" value="${OBJECTS} @{FILENAME}.obj" /> | |
</then> | |
<else> | |
<var name="OBJECTS" value="${OBJECTS} @{FILEPATH}/@{FILENAME}.obj" /> | |
</else> | |
</if> | |
</sequential> | |
</macrodef> | |
<!-- | |
IPF Assembly | |
--> | |
<macrodef name="Build_IPF_Assembly_Code"> | |
<attribute name="FILEPATH"/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT" default="s"/> | |
<element name="EXTRA.INC.1" optional="yes"/> | |
<element name="EXTRA.ARG.1" optional="yes"/> | |
<sequential> | |
<mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/> | |
<makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep" | |
TargetFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"> | |
<input file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/> | |
<EXTRA.INC.1/> | |
</makedeps> | |
<OnDependency> | |
<sourcefiles> | |
<file listfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"/> | |
<file ListFile="${DEST_DIR_OUTPUT}/AutoGen.h.dep"/> | |
</sourcefiles> | |
<targetfiles> | |
<file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/> | |
</targetfiles> | |
<sequential> | |
<cc userdefine="on"> | |
<command type="PP" cmd="${APP}" workdir="${DEST_DIR_OUTPUT}/@{FILEPATH}" family="${APP_FAMILY}" | |
dpath="${APP_DPATH}" libpath="${APP_LIBPATH}" include="${APP_INCLUDEPATH}"> | |
<EXTRA.INC.1/> | |
<argument value="${APP_FLAGS}"/> | |
<fileset casesensitive="on" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/> | |
</command> | |
</cc> | |
<cc userdefine="on"> | |
<command type="ASM" cmd="${ASM}" workdir="${DEST_DIR_OUTPUT}" family="${ASM_FAMILY}" | |
includepathDelimiter="-I" outputDelimiter="-o" dpath="${ASM_DPATH}" | |
libpath="${ASM_LIBPATH}" include="${ASM_INCLUDEPATH}" | |
outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"> | |
<EXTRA.INC.1/> | |
<argument value="${ASM_FLAGS}"/> | |
<EXTRA.ARG.1/> | |
<fileset casesensitive="on" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.i"/> | |
</command> | |
</cc> | |
</sequential> | |
</OnDependency> | |
<!-- Since fileset can't scan file start with ./, remove ./ in previous. --> | |
<if> | |
<equals arg1="@{FILEPATH}" arg2="." /> | |
<then> | |
<var name="OBJECTS" value="${OBJECTS} @{FILENAME}.obj" /> | |
</then> | |
<else> | |
<var name="OBJECTS" value="${OBJECTS} @{FILEPATH}/@{FILENAME}.obj" /> | |
</else> | |
</if> | |
</sequential> | |
</macrodef> | |
<!-- | |
Assembly the preprocessed IPF assembly code | |
--> | |
<macrodef name="Build_IPF_PP_Code"> | |
<attribute name="FILEPATH"/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT" default="i"/> | |
<element name="EXTRA.INC" optional="yes"/> | |
<element name="EXTRA.ARG" optional="yes"/> | |
<sequential> | |
<mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/> | |
<cc userdefine="on"> | |
<command type="ASM" includepathDelimiter="-I" dpath="${ASM_DPATH}" | |
libpath="${ASM_LIBPATH}" include="${ASM_INCLUDEPATH}"> | |
<includepath path="${WORKSPACE_DIR}"/> | |
<includepath path="${MODULE_DIR}"/> | |
<includepath path="${MODULE_DIR}/${ARCH}"/> | |
<EXTRA.INC/> | |
<argument value="${ASM_FLAGS}"/> | |
<EXTRA.ARG/> | |
<OutputFile File="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/> | |
<fileset casesensitive="on" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/> | |
</command> | |
</cc> | |
</sequential> | |
</macrodef> | |
<!-- | |
Library | |
--> | |
<macrodef name="Build_Library"> | |
<attribute name="FILENAME" /> | |
<attribute name="FILEEXT" default="obj"/> | |
<sequential> | |
<var name="FILE_BASENAME" value="@{FILENAME}" /> | |
<var name="FILE_PATH" value="." /> | |
<mkdir dir="${BIN_DIR}"/> | |
<if> | |
<equals arg1="${OBJECTS}" arg2="" trim="true"/> | |
<then> | |
<fail message="No object files"/> | |
</then> | |
</if> | |
<OnDependency> | |
<sourcefiles> | |
<fileset dir="${DEST_DIR_OUTPUT}" includes="${OBJECTS}" /> | |
</sourcefiles> | |
<targetfiles> | |
<file name="${BIN_DIR}/@{FILENAME}.lib"/> | |
</targetfiles> | |
<sequential> | |
<cc userdefine="on"> | |
<command type="SLINK" cmd="${SLINK}" family="${SLINK_FAMILY}" | |
outputFile="${BIN_DIR}/@{FILENAME}.lib" dpath="${SLINK_DPATH}" | |
libpath="${SLINK_LIBPATH}" include="${SLINK_INCLUDEPATH}"> | |
<argument value="${SLINK_FLAGS}"/> | |
<fileset dir="${DEST_DIR_OUTPUT}" includes="${OBJECTS}"/> | |
</command> | |
</cc> | |
</sequential> | |
</OnDependency> | |
</sequential> | |
</macrodef> | |
<!-- | |
Unicode -> .sdb | |
--> | |
<macrodef name="Build_UNI"> | |
<attribute name="FILEPATH"/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT" default="uni"/> | |
<element name="EXTRA.INC" optional="yes"/> | |
<element name="EXTRA.ARG" optional="yes"/> | |
<sequential> | |
<mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/> | |
<makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep" | |
TargetFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb"> | |
<input file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/> | |
<EXTRA.INC/> | |
</makedeps> | |
<OnDependency> | |
<sourcefiles> | |
<file listfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"/> | |
</sourcefiles> | |
<targetfiles> | |
<file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb"/> | |
</targetfiles> | |
<sequential> | |
<strgather commandtype="parse" newdatabase="true"> | |
<database name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb"/> | |
<EXTRA.INC/> | |
<EXTRA.ARG/> | |
<inputfile name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/> | |
</strgather> | |
</sequential> | |
</OnDependency> | |
<var name="SDB_FILES" value="${SDB_FILES}, ${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb"/> | |
</sequential> | |
</macrodef> | |
<!-- | |
.sdb(s) -> .c, .h -> .obj | |
--> | |
<macrodef name="Build_Unicode_Database"> | |
<attribute name="FILEPATH"/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT" default="sdb"/> | |
<element name="EXTRA.INC" optional="yes"/> | |
<element name="EXTRA.ARG" optional="yes"/> | |
<sequential> | |
<var name="FILE_BASENAME" value="@{FILENAME}" /> | |
<var name="FILE_PATH" value="@{FILEPATH}" /> | |
<OnDependency> | |
<sourcefiles> | |
<file list="${SDB_FILES}"/> | |
<file list="${SOURCE_FILES}"/> | |
</sourcefiles> | |
<targetfiles> | |
<file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb"/> | |
</targetfiles> | |
<sequential> | |
<strgather commandtype="scan" outputdatabase="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb" verbose="read"> | |
<skipext name=".uni"/> | |
<skipext name=".h"/> | |
<database list="${SDB_FILES}"/> | |
<inputfile name="${SOURCE_FILES}"/> | |
</strgather> | |
</sequential> | |
</OnDependency> | |
<OnDependency> | |
<sourcefiles> | |
<file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb"/> | |
</sourcefiles> | |
<targetfiles> | |
<file name="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}StrDefs.h"/> | |
<file name="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}Strings.hpk"/> | |
<file name="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}Strings.c"/> | |
</targetfiles> | |
<sequential> | |
<strgather basename="@{FILENAME}Strings" commandtype="dump" | |
outputdefines="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}StrDefs.h" | |
outputhpk="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}Strings.hpk" | |
outputstring="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}Strings.c"> | |
<database name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb"/> | |
</strgather> | |
</sequential> | |
</OnDependency> | |
<OnDependency> | |
<sourcefiles> | |
<file name="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}Strings.c"/> | |
<file ListFile="${DEST_DIR_OUTPUT}/AutoGen.h.dep"/> | |
</sourcefiles> | |
<targetfiles> | |
<file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}Strings.obj"/> | |
</targetfiles> | |
<sequential> | |
<cc userdefine="on"> | |
<command type="CC" cmd="${CC}" workdir="${DEST_DIR_OUTPUT}" family="${CC_FAMILY}" | |
includepathDelimiter="-I" dpath="${CC_DPATH}" | |
libpath="${CC_LIBPATH}" include="${CC_INCLUDEPATH}" | |
outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}Strings.obj"> | |
<argument value="${CC_FLAGS}"/> | |
<EXTRA.INC /> | |
<fileset casesensitive="on" file="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}Strings.c"/> | |
</command> | |
</cc> | |
</sequential> | |
</OnDependency> | |
<!-- Since fileset can't scan file start with ./, remove ./ in previous. --> | |
<if> | |
<equals arg1="@{FILEPATH}" arg2="." /> | |
<then> | |
<var name="OBJECTS" value="${OBJECTS} @{FILENAME}Strings.obj" /> | |
</then> | |
<else> | |
<var name="OBJECTS" value="${OBJECTS} @{FILEPATH}/@{FILENAME}Strings.obj" /> | |
</else> | |
</if> | |
</sequential> | |
</macrodef> | |
<!-- | |
Vfr | |
--> | |
<macrodef name="Build_VFR"> | |
<attribute name="FILEPATH"/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT" default="vfr"/> | |
<element name="EXTRA.INC" optional="yes"/> | |
<element name="EXTRA.ARG" optional="yes"/> | |
<sequential> | |
<mkdir dir="${DEST_DIR_DEBUG}/@{FILEPATH}"/> | |
<makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep" | |
TargetFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"> | |
<input file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/> | |
<EXTRA.INC/> | |
</makedeps> | |
<OnDependency> | |
<sourcefiles> | |
<file listfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"/> | |
<file ListFile="${DEST_DIR_OUTPUT}/AutoGen.h.dep"/> | |
</sourcefiles> | |
<targetfiles> | |
<file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/> | |
</targetfiles> | |
<sequential> | |
<!-- if "TOOLCHIAN FAMILY" is "GCC", it should point the ouput file for preprocess compiler --> | |
<if> | |
<equals arg1="${CC_FAMILY}" arg2="GCC"/> | |
<then> | |
<cc userdefine="on"> | |
<command type="PP" cmd="${PP}" workdir="${DEST_DIR_OUTPUT}/@{FILEPATH}" family="${PP_FAMILY}" | |
dpath="${PP_DPATH}" libpath="${PP_LIBPATH}" include="${PP_INCLUDEPATH}"> | |
<argument value="${VFRPP_FLAGS} -o ${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.i"/> | |
<!-- Output file of the preprocess --> | |
<EXTRA.INC/> | |
<fileset casesensitive="on" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/> | |
</command> | |
</cc> | |
</then> | |
<else> | |
<cc userdefine="on"> | |
<command type="PP" cmd="${PP}" workdir="${DEST_DIR_OUTPUT}/@{FILEPATH}" family="${PP_FAMILY}" | |
dpath="${PP_DPATH}" libpath="${PP_LIBPATH}" include="${PP_INCLUDEPATH}"> | |
<argument value="${VFRPP_FLAGS}"/> | |
<!-- Output file of the preprocess --> | |
<EXTRA.INC/> | |
<fileset casesensitive="on" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/> | |
</command> | |
</cc> | |
</else> | |
</if> | |
<vfrcompile createIfrBinFile="on" createListFile="on" outPutDir="${DEST_DIR_DEBUG}/@{FILEPATH}" vfrFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.i"> | |
<EXTRA.INC/> | |
</vfrcompile> | |
<cc userdefine="on"> | |
<command type="CC" cmd="${CC}" workdir="${DEST_DIR_OUTPUT}" | |
includepathDelimiter="-I" family="${CC_FAMILY}" dpath="${CC_DPATH}" | |
libpath="${CC_LIBPATH}" include="${CC_INCLUDEPATH}" | |
outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj" > | |
<argument value="${CC_FLAGS}"/> | |
<EXTRA.INC/> | |
<EXTRA.ARG/> | |
<fileset casesensitive="on" file="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.c"/> | |
</command> | |
</cc> | |
</sequential> | |
</OnDependency> | |
<!-- Since fileset can't scan file start with ./, remove ./ in previous. --> | |
<if> | |
<equals arg1="@{FILEPATH}" arg2="." /> | |
<then> | |
<var name="OBJECTS" value="${OBJECTS} @{FILENAME}.obj" /> | |
</then> | |
<else> | |
<var name="OBJECTS" value="${OBJECTS} @{FILEPATH}/@{FILENAME}.obj" /> | |
</else> | |
</if> | |
</sequential> | |
</macrodef> | |
<!-- | |
Build the real mode ASM file | |
--> | |
<macrodef name="Build_RealAsm"> | |
<attribute name="FILEPATH"/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT" default="asm"/> | |
<element name="EXTRA.INC" optional="yes"/> | |
<element name="EXTRA.ARG" optional="yes"/> | |
<sequential> | |
<OnDependency> | |
<sourcefiles> | |
<file name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/> | |
</sourcefiles> | |
<targetfiles> | |
<file name="${DEST_DIR_OUTPUT}/@{FILENAME}.cat"/> | |
</targetfiles> | |
<sequential> | |
<exec dir="${DEST_DIR_OUTPUT}" executable="${ASM}" failonerror="true"> | |
<arg line="/nologo /omf ${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT} /Bl${ASMLINK} ${ASMLINK_FLAGS}"/> | |
</exec> | |
<concat destfile="${DEST_DIR_OUTPUT}/@{FILENAME}.cat" binary="yes"> | |
<filelist dir="${MODULE_DIR}" files="Blank2.pad"/> | |
<filelist dir="${DEST_DIR_OUTPUT}" files="@{FILENAME}.com"/> | |
</concat> | |
</sequential> | |
</OnDependency> | |
</sequential> | |
</macrodef> | |
<!-- | |
Build Asl table file | |
--> | |
<macrodef name="Build_ASL"> | |
<attribute name="FILEPATH"/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT" default="asl"/> | |
<element name="EXTRA.INC" optional="yes"/> | |
<element name="EXTRA.ARG" optional="yes"/> | |
<sequential> | |
<mkdir dir="${DEST_DIR_OUTPUT}"/> | |
<OnDependency> | |
<sourcefiles> | |
<file name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/> | |
</sourcefiles> | |
<targetfiles> | |
<file name="${DEST_DIR_OUTPUT}/@{FILENAME}.sec"/> | |
</targetfiles> | |
<sequential> | |
<cc userdefine="on"> | |
<command type="PP" cmd="${PP}" workdir="${DEST_DIR_OUTPUT}" family="${PP_FAMILY}" | |
dpath="${PP_DPATH}" libpath="${PP_LIBPATH}" include="${PP_INCLUDEPATH}"> | |
<argument value="${APP_FLAGS}"/> | |
<EXTRA.INC/> | |
<fileset casesensitive="on" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/> | |
</command> | |
</cc> | |
<exec dir="${DEST_DIR_OUTPUT}" executable="${ASL}" failonerror="true" outputproperty="ASL_OUTPUT"> | |
<arg line="${DEST_DIR_OUTPUT}/@{FILENAME}.i"/> | |
</exec> | |
<if> | |
<or> | |
<contains string="${ASL_OUTPUT}" substring="Supports ACPI Specification Revision 2.0"/> | |
<contains string="${ASL_OUTPUT}" substring="Supports ACPI Specification Revision 1.0"/> | |
</or> | |
<then> | |
<fail message="Current Asl tool not support Acpi Spec 3.0. Pls update your Asl compiler."/> | |
</then> | |
</if> | |
<EFI_SECTION_RAW FILEPATH="." FILENAME="@{FILENAME}" FILEEXT="aml"/> | |
</sequential> | |
</OnDependency> | |
</sequential> | |
</macrodef> | |
<!-- | |
Build Asl table c file | |
--> | |
<macrodef name="Build_CCASL"> | |
<attribute name="FILEPATH"/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT" default="c"/> | |
<element name="EXTRA.INC" optional="yes"/> | |
<element name="EXTRA.ARG" optional="yes"/> | |
<sequential> | |
<mkdir dir="${DEST_DIR_OUTPUT}"/> | |
<OnDependency> | |
<sourcefiles> | |
<file name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/> | |
</sourcefiles> | |
<targetfiles> | |
<file name="${DEST_DIR_OUTPUT}/@{FILENAME}.sec"/> | |
</targetfiles> | |
<sequential> | |
<cc userdefine="on"> | |
<command type="CC" cmd="${CC}" workdir="${DEST_DIR_OUTPUT}" family="${CC_FAMILY}" | |
outputFile="${DEST_DIR_OUTPUT}/@{FILENAME}.obj" dpath="${CC_DPATH}" | |
libpath="${CC_LIBPATH}" include="${CC_INCLUDEPATH}"> | |
<EXTRA.INC/> | |
<argument value="${CC_FLAGS}"/> | |
<EXTRA.ARG/> | |
<fileset casesensitive="on" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/> | |
</command> | |
</cc> | |
<cc userdefine="on"> | |
<command type="DLINK" cmd="${DLINK}" family="${DLINK_FAMILY}" | |
outputFile="${DEST_DIR_OUTPUT}/@{FILENAME}.exe" dpath="${DLINK_DPATH}" > | |
<argument value="${SLINK_FLAGS}"/> | |
<fileset casesensitive="on" file="${DEST_DIR_OUTPUT}/@{FILENAME}.obj"/> | |
</command> | |
</cc> | |
<genacpitable inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.exe" outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.acpi" /> | |
<EFI_SECTION_RAW FILEPATH="." FILENAME="@{FILENAME}" FILEEXT="acpi"/> | |
</sequential> | |
</OnDependency> | |
</sequential> | |
</macrodef> | |
<!-- | |
Build ACPI Bin File | |
--> | |
<macrodef name="Build_ACPIBIN"> | |
<attribute name="FILEPATH"/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT" default="bin"/> | |
<element name="EXTRA.INC" optional="yes"/> | |
<element name="EXTRA.ARG" optional="yes"/> | |
<sequential> | |
<mkdir dir="${DEST_DIR_OUTPUT}"/> | |
<OnDependency> | |
<sourcefiles> | |
<file name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/> | |
</sourcefiles> | |
<targetfiles> | |
<file name="${DEST_DIR_OUTPUT}/@{FILENAME}.sec"/> | |
</targetfiles> | |
<sequential> | |
<copy file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" tofile="${DEST_DIR_OUTPUT}/@{FILENAME}.acpi" /> | |
<exec executable="attrib"> | |
<arg line="-r ${DEST_DIR_OUTPUT}/@{FILENAME}.acpi"/> | |
</exec> | |
<EFI_SECTION_RAW FILEPATH="." FILENAME="@{FILENAME}" FILEEXT="acpi"/> | |
</sequential> | |
</OnDependency> | |
</sequential> | |
</macrodef> | |
<!-- | |
DUMMY - for skipping the source file which should not be built | |
--> | |
<macrodef name="Build_DUMMY"> | |
<attribute name="FILEPATH"/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT"/> | |
<element name="EXTRA.INC" optional="yes"/> | |
<element name="EXTRA.ARG" optional="yes"/> | |
<sequential> | |
<!--echo message="Ignoring ${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" level="info" /--> | |
</sequential> | |
</macrodef> | |
<!-- | |
Generate efi file | |
--> | |
<macrodef name="GenEfi"> | |
<attribute name="FILEPATH"/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT" default="efi"/> | |
<element name="LIB.ARG" optional="yes"/> | |
<element name="LINK.ARG" optional="yes"/> | |
<sequential> | |
<var name="FILE_BASENAME" value="@{FILENAME}" /> | |
<var name="FILE_PATH" value="@{FILEPATH}" /> | |
<OnDependency> | |
<sourcefiles> | |
<file list="${LIBS}"/> | |
<fileset dir="${DEST_DIR_OUTPUT}" includes="${OBJECTS}" /> | |
</sourcefiles> | |
<targetfiles> | |
<file name="${DEST_DIR_DEBUG}/@{FILENAME}.efi"/> | |
</targetfiles> | |
<sequential> | |
<!-- Generate a temporary lib file for object files --> | |
<cc userdefine="on"> | |
<command type="SLINK" cmd="${SLINK}" family="${SLINK_FAMILY}" dpath="${SLINK_DPATH}" | |
outputFile="${DEST_DIR_OUTPUT}/@{FILENAME}Local.lib" | |
libpath="${SLINKLIBPATH}" include="${SLINK_INCLUDEPATH}"> | |
<argument value="${SLINK_FLAGS}"/> | |
<fileset dir="${DEST_DIR_OUTPUT}" includes="${OBJECTS}"/> | |
</command> | |
</cc> | |
<!-- Link the temporary lib file with dependent libraries --> | |
<cc userdefine="on"> | |
<command type="DLINK" cmd="${DLINK}" family="${DLINK_FAMILY}" | |
outputFile="${DEST_DIR_DEBUG}/@{FILENAME}.dll" dpath="${DLINK_DPATH}" | |
libpath="${DLINK_LIBPATH}" include="${DLINK_INCLUDEPATH}"> | |
<argument value="${DLINK_FLAGS}"/> | |
<libset libs="${DEST_DIR_OUTPUT}/@{FILENAME}Local.lib ${LIBS} ${DLINK_SPATH}"/> | |
<LINK.ARG/> | |
</command> | |
</cc> | |
<!-- Convert the dll file to efi file --> | |
<fwimage componentType="${MODULE_TYPE}" outImage="${DEST_DIR_OUTPUT}/@{FILENAME}.efi" | |
peImage="${DEST_DIR_DEBUG}/@{FILENAME}.dll" time="0"/> | |
<!-- Copy the efi file to BIN and OUTPUT directory --> | |
<copy file="${DEST_DIR_OUTPUT}/@{FILENAME}.efi" tofile="${BIN_DIR}/@{FILENAME}.efi" /> | |
<copy file="${DEST_DIR_OUTPUT}/@{FILENAME}.efi" tofile="${DEST_DIR_DEBUG}/@{FILENAME}.efi" /> | |
<if> | |
<available file="${DEST_DIR_DEBUG}/@{FILENAME}.map" /> | |
<then> | |
<copy file="${DEST_DIR_DEBUG}/@{FILENAME}.map" tofile="${BIN_DIR}/@{FILENAME}.map" /> | |
</then> | |
</if> | |
</sequential> | |
</OnDependency> | |
</sequential> | |
</macrodef> | |
<!-- | |
Binary | |
--> | |
<macrodef name="Build_Binary"> | |
<attribute name="FILEPATH"/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT" default="bin"/> | |
<element name="EXTRA.INC" optional="yes"/> | |
<element name="EXTRA.ARG" optional="yes"/> | |
<sequential> | |
<copy file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" | |
tofile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.bin"/> | |
</sequential> | |
</macrodef> | |
<!-- | |
Microcode | |
--> | |
<macrodef name="Build_MICROCODE"> | |
<attribute name="FILEPATH"/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT" default="TXT"/> | |
<element name="EXTRA.INC" optional="yes"/> | |
<element name="EXTRA.ARG" optional="yes"/> | |
<sequential> | |
<mkdir dir="${TARGET_DIR}/Microcode"/> | |
<flashmap MCIFile="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" MCOFILE="${TARGET_DIR}/Microcode/@{FILENAME}.bin"/> | |
</sequential> | |
</macrodef> | |
<!-- | |
Graphics (bmp, ...) | |
--> | |
<macrodef name="Build_BMP"> | |
<attribute name="FILEPATH"/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT" default="bmp"/> | |
<element name="EXTRA.INC" optional="yes"/> | |
<element name="EXTRA.ARG" optional="yes"/> | |
<sequential> | |
<copy file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" | |
tofile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.bin"/> | |
</sequential> | |
</macrodef> | |
<!-- | |
build EFI file | |
--> | |
<macrodef name="Build_EFI"> | |
<attribute name="FILEPATH"/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT" default="efi"/> | |
<element name="EXTRA.INC" optional="yes"/> | |
<element name="EXTRA.ARG" optional="yes"/> | |
<sequential> | |
<mkdir dir="${MODULE_DIR}/@{FILEPATH}" /> | |
<copy file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" | |
tofile="${DEST_DIR_OUTPUT}/${BASE_NAME}.efi"/> | |
</sequential> | |
</macrodef> | |
<!-- | |
Build macro for Apriori | |
--> | |
<macrodef name="Build_Apriori"> | |
<attribute name="FILEPATH" default="."/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT" default="apr"/> | |
<attribute name="GUID"/> | |
<sequential> | |
<mkdir dir="${FV_DIR}/Apriori" /> | |
<gensection inputfile="${FV_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" | |
outputfile="${FV_DIR}/Apriori/@{FILENAME}.sec" | |
sectiontype="EFI_SECTION_RAW"/> | |
<genffsfile BaseName="@{FILENAME}" ffsATTRIBCHECKSUM="TRUE" ffsFILETYPE="EFI_FV_FILETYPE_FREEFORM" | |
fileGuid="@{GUID}" moduleType="BASE" outputDir="${FV_DIR}"> | |
<sectFile fileName="${FV_DIR}/Apriori/@{FILENAME}.sec"/> | |
</genffsfile> | |
</sequential> | |
</macrodef> | |
<!--############################################################################ | |
Build Sections | |
#############################################################################--> | |
<!-- | |
EFI_SECTION_TE | |
--> | |
<macrodef name="EFI_SECTION_TE"> | |
<attribute name="FILEPATH"/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT" default="efi" /> | |
<element name="PRE.PROCESS" optional="yes"/> | |
<element name="POST.PROCESS" optional="yes"/> | |
<sequential> | |
<OnDependency> | |
<sourcefiles> | |
<file name="${DEST_DIR_OUTPUT}/@{FILENAME}.efi"/> | |
</sourcefiles> | |
<targetfiles> | |
<file name="${DEST_DIR_OUTPUT}/@{FILENAME}.tes"/> | |
</targetfiles> | |
<sequential> | |
<PRE.PROCESS/> | |
<genteimage Dump="false" Verbose="false" OutputDir="" OutputFile="${DEST_DIR_OUTPUT}/@{FILENAME}.te" InputFile="${DEST_DIR_OUTPUT}/@{FILENAME}.efi"/> | |
<gensection inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.te" | |
outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.tes" | |
sectiontype="EFI_SECTION_TE"/> | |
<POST.PROCESS/> | |
</sequential> | |
</OnDependency> | |
</sequential> | |
</macrodef> | |
<!-- | |
EFI_SECTION_PE32 | |
--> | |
<macrodef name="EFI_SECTION_PE32"> | |
<attribute name="FILEPATH"/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT" default="efi"/> | |
<element name="PRE.PROCESS" optional="yes"/> | |
<element name="POST.PROCESS" optional="yes"/> | |
<sequential> | |
<OnDependency> | |
<sourcefiles> | |
<file name="${DEST_DIR_OUTPUT}/@{FILENAME}.efi"/> | |
</sourcefiles> | |
<targetfiles> | |
<file name="${DEST_DIR_OUTPUT}/@{FILENAME}.pe32"/> | |
</targetfiles> | |
<sequential> | |
<PRE.PROCESS/> | |
<gensection inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.efi" | |
outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.pe32" | |
sectiontype="EFI_SECTION_PE32"/> | |
<POST.PROCESS/> | |
</sequential> | |
</OnDependency> | |
</sequential> | |
</macrodef> | |
<!-- | |
EFI_SECTION_VERSION | |
--> | |
<macrodef name="EFI_SECTION_VERSION"> | |
<attribute name="FILEPATH"/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT" default="" /> | |
<attribute name="VERSION" default="0000"/> | |
<element name="PRE.PROCESS" optional="yes"/> | |
<element name="POST.PROCESS" optional="yes"/> | |
<sequential> | |
<if> | |
<not> | |
<available type="file" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.ver"/> | |
</not> | |
<then> | |
<PRE.PROCESS/> | |
<gensection outputfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.ver" | |
versionnum="@{VERSION}" | |
sectiontype="EFI_SECTION_VERSION"/> | |
<POST.PROCESS/> | |
</then> | |
</if> | |
</sequential> | |
</macrodef> | |
<!-- | |
EFI_SECTION_USER_INTERFACE | |
--> | |
<macrodef name="EFI_SECTION_USER_INTERFACE"> | |
<attribute name="FILEPATH"/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT" default="" /> | |
<attribute name="UI" default="${BASE_NAME}"/> | |
<element name="PRE.PROCESS" optional="yes"/> | |
<element name="POST.PROCESS" optional="yes"/> | |
<sequential> | |
<if> | |
<not> | |
<available type="file" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.ui"/> | |
</not> | |
<then> | |
<PRE.PROCESS/> | |
<gensection interfacestring="@{UI}" | |
outputfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.ui" | |
sectiontype="EFI_SECTION_USER_INTERFACE"/> | |
<POST.PROCESS/> | |
</then> | |
</if> | |
</sequential> | |
</macrodef> | |
<!-- | |
EFI_SECTION_DXE_DEPEX | |
--> | |
<macrodef name="EFI_SECTION_DXE_DEPEX"> | |
<attribute name="FILEPATH"/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT" default="dxs"/> | |
<element name="PRE.PROCESS" optional="yes"/> | |
<element name="POST.PROCESS" optional="yes"/> | |
<sequential> | |
<PRE.PROCESS/> | |
<if> | |
<available type="file" file="${DEST_DIR_OUTPUT}/@{FILENAME}.depex"/> | |
<then> | |
<OnDependency> | |
<sourcefiles> | |
<file name="${DEST_DIR_OUTPUT}/@{FILENAME}.depex"/> | |
</sourcefiles> | |
<targetfiles> | |
<file name="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"/> | |
</targetfiles> | |
<sequential> | |
<gensection inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.depex" | |
outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx" | |
sectiontype="EFI_SECTION_DXE_DEPEX"/> | |
</sequential> | |
</OnDependency> | |
</then> | |
<else> | |
<if> | |
<not> | |
<available type="file" file="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"/> | |
</not> | |
<then> | |
<touch file="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"/> | |
</then> | |
</if> | |
</else> | |
</if> | |
<POST.PROCESS/> | |
</sequential> | |
</macrodef> | |
<!-- | |
EFI_SECTION_PEI_DEPEX | |
--> | |
<macrodef name="EFI_SECTION_PEI_DEPEX"> | |
<attribute name="FILEPATH"/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT" default="dxs"/> | |
<element name="PRE.PROCESS" optional="yes"/> | |
<element name="POST.PROCESS" optional="yes"/> | |
<sequential> | |
<PRE.PROCESS/> | |
<if> | |
<available type="file" file="${DEST_DIR_OUTPUT}/@{FILENAME}.depex"/> | |
<then> | |
<OnDependency> | |
<sourcefiles> | |
<file name="${DEST_DIR_OUTPUT}/@{FILENAME}.depex"/> | |
</sourcefiles> | |
<targetfiles> | |
<file name="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"/> | |
</targetfiles> | |
<sequential> | |
<gensection inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.depex" | |
outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx" | |
sectiontype="EFI_SECTION_PEI_DEPEX"/> | |
</sequential> | |
</OnDependency> | |
</then> | |
<else> | |
<if> | |
<not> | |
<available type="file" file="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"/> | |
</not> | |
<then> | |
<touch file="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"/> | |
</then> | |
</if> | |
</else> | |
</if> | |
<POST.PROCESS/> | |
</sequential> | |
</macrodef> | |
<!-- | |
EFI_SECTION_RAW | |
--> | |
<macrodef name="EFI_SECTION_RAW"> | |
<attribute name="FILEPATH"/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT" default="bin"/> | |
<element name="PRE.PROCESS" optional="yes"/> | |
<element name="POST.PROCESS" optional="yes"/> | |
<sequential> | |
<OnDependency> | |
<sourcefiles> | |
<file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/> | |
</sourcefiles> | |
<targetfiles> | |
<file name="${DEST_DIR_OUTPUT}/@{FILENAME}.sec"/> | |
</targetfiles> | |
<sequential> | |
<PRE.PROCESS/> | |
<gensection inputfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" | |
outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.sec" | |
sectiontype="EFI_SECTION_RAW"/> | |
<POST.PROCESS/> | |
</sequential> | |
</OnDependency> | |
</sequential> | |
</macrodef> | |
<!-- | |
EFI_SECTION_RAW_SEC | |
--> | |
<macrodef name="EFI_SECTION_RAW_SEC"> | |
<attribute name="FILEPATH"/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT" default="cat"/> | |
<element name="PRE.PROCESS" optional="yes"/> | |
<element name="POST.PROCESS" optional="yes"/> | |
<sequential> | |
<OnDependency> | |
<sourcefiles> | |
<file name="${DEST_DIR_OUTPUT}/ResetVec.@{FILEEXT}"/> | |
<file name="${DEST_DIR_OUTPUT}/@{FILENAME}.te"/> | |
</sourcefiles> | |
<targetfiles> | |
<file name="${DEST_DIR_OUTPUT}/@{FILENAME}.sec"/> | |
</targetfiles> | |
<sequential> | |
<PRE.PROCESS/> | |
<secfixup secexefile="${DEST_DIR_OUTPUT}/@{FILENAME}.te" resetvectorDatafile="${DEST_DIR_OUTPUT}/ResetVec.@{FILEEXT}" | |
outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.bin"/> | |
<gensection inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.bin" | |
outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.sec" | |
sectiontype="EFI_SECTION_RAW"/> | |
<POST.PROCESS/> | |
</sequential> | |
</OnDependency> | |
</sequential> | |
</macrodef> | |
<!-- | |
EFI_SECTION_FIRMWARE_VOLUME_IMAGE | |
--> | |
<macrodef name="EFI_SECTION_FIRMWARE_VOLUME_IMAGE"> | |
<attribute name="FILEPATH"/> | |
<attribute name="FILENAME"/> | |
<attribute name="FILEEXT" default="fv"/> | |
<element name="PRE.PROCESS" optional="yes"/> | |
<element name="POST.PROCESS" optional="yes"/> | |
<sequential> | |
<OnDependency> | |
<sourcefiles> | |
<file name="${FV_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/> | |
</sourcefiles> | |
<targetfiles> | |
<file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}fv.sec"/> | |
</targetfiles> | |
<sequential> | |
<PRE.PROCESS/> | |
<copy file="${FV_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" | |
tofile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" | |
overwrite="true"/> | |
<gensection inputfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" | |
outputfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}fv.sec" | |
sectiontype="EFI_SECTION_FIRMWARE_VOLUME_IMAGE"/> | |
<POST.PROCESS/> | |
</sequential> | |
</OnDependency> | |
</sequential> | |
</macrodef> | |
</project> |