| <?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> |