]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Conf/BuildMacro.xml
Fix CygWinGCC build failed. When GCC build, map file is not generated. We don't need...
[mirror_edk2.git] / Tools / Conf / BuildMacro.xml
index 115680c732693a08d64b2ca0606481a20cddce66..2e1d6ad737e194aa75393c9e075af4db9c4835d8 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>\r
+<?xml version="1.0" encoding="UTF-8"?>\r
 <!--\r
 Copyright (c) 2006, Intel Corporation\r
 All rights reserved. This program and the accompanying materials\r
@@ -10,17 +10,23 @@ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 -->\r
 <project name="common">\r
+  <!-- for user extended tasks or macros -->\r
+  <import file="UserExtension.xml" optional="true"/>\r
+\r
   <!--\r
-    Macro for intialize some properties. This Macro build will be called before source file build.  \r
+    Macro for intialize some properties. This Macro build will be called before source file build.\r
     -->\r
   <macrodef name="Build_Init">\r
     <element name="EXTRA.INC" optional="yes"/>\r
     <element name="EXTRA.ARG" optional="yes"/>\r
-    \r
+\r
     <sequential>\r
       <var name="OBJECTS" value="" />\r
       <var name="SDB_FILES" value="" />\r
 \r
+      <mkdir dir="${DEST_DIR_DEBUG}"/>\r
+      <mkdir dir="${DEST_DIR_OUTPUT}"/>\r
+\r
       <if>\r
         <and>\r
           <isset property="PCH"/>\r
@@ -29,16 +35,12 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
           </not>\r
         </and>\r
         <then>\r
-          <if>\r
-            <available type="file" file="${DEST_DIR_OUTPUT}/AutoGen.h.gch"/>\r
-            <then>\r
-              <makedeps DepsFile="${DEST_DIR_OUTPUT}/AutoGen.h.dep">\r
-                <input file="${DEST_DIR_DEBUG}/AutoGen.h"/>\r
-                <EXTRA.INC/>\r
-              </makedeps>\r
-            </then>\r
-          </if>\r
-    \r
+          <makedeps DepsFile="${DEST_DIR_OUTPUT}/AutoGen.h.dep"\r
+                    TargetFile="${DEST_DIR_OUTPUT}/AutoGen.h.gch">\r
+            <input file="${DEST_DIR_DEBUG}/AutoGen.h"/>\r
+            <EXTRA.INC/>\r
+          </makedeps>\r
+\r
           <OnDependency>\r
             <sourcefiles>\r
               <file ListFile="${DEST_DIR_OUTPUT}/AutoGen.h.dep"/>\r
@@ -46,12 +48,12 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
             <targetfiles>\r
               <file Name="${DEST_DIR_OUTPUT}/AutoGen.h.gch"/>\r
             </targetfiles>\r
-    \r
+\r
             <sequential>\r
               <!-- Generate pre-compiled header -->\r
               <cc userdefine="on">\r
                 <command type="CC" cmd="${PCH}" workdir="${DEST_DIR_OUTPUT}" family="${CC_FAMILY}"\r
-                    outputFile="${DEST_DIR_OUTPUT}/AutoGen.h.obj" dpath="${CC_DPATH}" libpath="${CC_LIBPATH}" \r
+                    outputFile="${DEST_DIR_OUTPUT}/AutoGen.h.obj" dpath="${CC_DPATH}" libpath="${CC_LIBPATH}"\r
                     include="${CC_INCLUDEPATH}">\r
                   <EXTRA.INC/>\r
                   <argument value="${PCH_FLAGS}"/>\r
@@ -78,6 +80,12 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
             </then>\r
           </if>\r
         </then>\r
+        <else>\r
+          <makedeps DepsFile="${DEST_DIR_OUTPUT}/AutoGen.h.dep">\r
+            <input file="${DEST_DIR_DEBUG}/AutoGen.h"/>\r
+            <EXTRA.INC/>\r
+          </makedeps>\r
+        </else>\r
       </if>\r
     </sequential>\r
   </macrodef>\r
@@ -93,29 +101,25 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     <attribute name="FILEPATH"/>\r
     <attribute name="FILENAME"/>\r
     <attribute name="FILEEXT" default="c"/>\r
-    \r
+\r
     <element name="EXTRA.INC" optional="yes"/>\r
     <element name="EXTRA.ARG" optional="yes"/>\r
-    \r
+\r
     <sequential>\r
       <var name="FILE_BASENAME" value="@{FILENAME}" />\r
       <var name="FILE_PATH" value="@{FILEPATH}" />\r
       <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>\r
 \r
-      <if>\r
-        <available type="file" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>\r
-        <then>\r
-          <makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep">\r
-            <input file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
-            <input file="${DEST_DIR_DEBUG}/AutoGen.h"/>\r
-            <EXTRA.INC/>\r
-          </makedeps>\r
-        </then>\r
-      </if>\r
+      <makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"\r
+                TargetFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj">\r
+        <input file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
+        <EXTRA.INC/>\r
+      </makedeps>\r
 \r
       <OnDependency>\r
         <sourcefiles>\r
           <file ListFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"/>\r
+          <file ListFile="${DEST_DIR_OUTPUT}/AutoGen.h.dep"/>\r
         </sourcefiles>\r
         <targetfiles>\r
           <file Name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>\r
@@ -124,7 +128,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
         <sequential>\r
           <cc userdefine="on">\r
             <command type="CC" cmd="${CC}" workdir="${DEST_DIR_OUTPUT}" family="${CC_FAMILY}"\r
-                outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj" dpath="${CC_DPATH}" \r
+                outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj" dpath="${CC_DPATH}"\r
                 libpath="${CC_LIBPATH}" include="${CC_INCLUDEPATH}">\r
               <EXTRA.INC/>\r
               <argument value="${CC_FLAGS}"/>\r
@@ -161,20 +165,16 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
       <var name="FILE_PATH" value="@{FILEPATH}" />\r
       <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>\r
 \r
-      <if>\r
-        <available type="file" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>\r
-        <then>\r
-          <makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep">\r
-            <input file="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
-            <input file="${DEST_DIR_DEBUG}/AutoGen.h"/>\r
-            <EXTRA.INC/>\r
-          </makedeps>\r
-        </then>\r
-      </if>\r
+      <makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"\r
+                TargetFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj">\r
+        <input file="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
+        <EXTRA.INC/>\r
+      </makedeps>\r
 \r
       <OnDependency>\r
         <sourcefiles>\r
           <file ListFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"/>\r
+          <file ListFile="${DEST_DIR_OUTPUT}/AutoGen.h.dep"/>\r
         </sourcefiles>\r
         <targetfiles>\r
           <file Name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>\r
@@ -213,16 +213,24 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
     <element name="EXTRA.INC" optional="yes"/>\r
     <element name="EXTRA.ARG" optional="yes"/>\r
-        \r
+\r
 \r
     <sequential>\r
       <var name="FILE_BASENAME" value="@{FILENAME}" />\r
       <var name="FILE_PATH" value="@{FILEPATH}" />\r
       <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>\r
 \r
+      <makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"\r
+                TargetFile="${DEST_DIR_OUTPUT}/${BASE_NAME}.depex">\r
+        <input file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
+        <EXTRA.INC/>\r
+      </makedeps>\r
+\r
       <OnDependency>\r
         <sourcefiles>\r
-          <file name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
+          <!--file name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/-->\r
+          <file ListFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"/>\r
+          <file ListFile="${DEST_DIR_OUTPUT}/AutoGen.h.dep"/>\r
         </sourcefiles>\r
         <targetfiles>\r
           <file name="${DEST_DIR_OUTPUT}/${BASE_NAME}.depex"/>\r
@@ -238,13 +246,13 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
               <fileset casesensitive="on" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
             </command>\r
           </cc>\r
-    \r
+\r
           <gendepex inputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.i" outputFile="${DEST_DIR_OUTPUT}/${BASE_NAME}.depex"/>\r
         </sequential>\r
       </OnDependency>\r
     </sequential>\r
   </macrodef>\r
-  \r
+\r
   <macrodef name="Build_ASM">\r
     <attribute name="FILEPATH"/>\r
     <attribute name="FILENAME"/>\r
@@ -252,8 +260,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
     <element name="EXTRA.INC" optional="yes"/>\r
     <element name="EXTRA.ARG" optional="yes"/>\r
-    \r
-    <!-- Dispath ASM file, there are three type. \r
+\r
+    <!-- Dispath ASM file, there are three type.\r
          asm     -   Build_Assembly\r
          S       -   Build_Gcc_Assembly\r
          s       -   Build_Ipf_Assembly -->\r
@@ -287,7 +295,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
            </if>\r
     </sequential>\r
   </macrodef>\r
-  \r
+\r
   <!--\r
     IA32/x64 Assembly\r
     -->\r
@@ -304,9 +312,16 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
       <var name="FILE_PATH" value="@{FILEPATH}" />\r
       <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>\r
 \r
+      <makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"\r
+                TargetFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj">\r
+        <input file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
+        <EXTRA.INC.1/>\r
+      </makedeps>\r
+\r
       <OnDependency>\r
         <sourcefiles>\r
-          <file Name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
+          <file Listfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"/>\r
+          <file ListFile="${DEST_DIR_OUTPUT}/AutoGen.h.dep"/>\r
         </sourcefiles>\r
         <targetfiles>\r
           <file Name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>\r
@@ -314,7 +329,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
         <sequential>\r
           <cc userdefine="on">\r
-            <command type="PP" cmd="${PP}" workdir="${DEST_DIR_OUTPUT}/@{FILEPATH}" family="${PP_FAMILY}" \r
+            <command type="PP" cmd="${PP}" workdir="${DEST_DIR_OUTPUT}/@{FILEPATH}" family="${PP_FAMILY}"\r
                 dpath="${PP_DPATH}" libpath="${PP_LIBPATH}" include="${PP_INCLUDEPATH}">\r
               <EXTRA.INC.1/>\r
               <argument value="${PP_FLAGS}"/>\r
@@ -341,10 +356,10 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
                 outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj" dpath="${ASM_DPATH}"\r
                 libpath="${ASM_LIBPATH}" include="${ASM_INCLUDEPATH}">\r
               <EXTRA.INC.1/>\r
-      \r
+\r
               <argument value="${ASM_FLAGS}"/>\r
               <EXTRA.ARG.1/>\r
-      \r
+\r
               <fileset casesensitive="on" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.i"/>\r
             </command>\r
           </cc>\r
@@ -379,9 +394,16 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
       <var name="FILE_PATH" value="@{FILEPATH}" />\r
       <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>\r
 \r
+      <makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"\r
+                TargetFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj">\r
+        <input file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
+        <EXTRA.INC.1/>\r
+      </makedeps>\r
+\r
       <OnDependency>\r
         <sourcefiles>\r
-          <file Name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
+          <file Listfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"/>\r
+          <file ListFile="${DEST_DIR_OUTPUT}/AutoGen.h.dep"/>\r
         </sourcefiles>\r
         <targetfiles>\r
           <file Name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>\r
@@ -393,10 +415,10 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
                 outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj" dpath="${ASM_DPATH}"\r
                 libpath="${ASM_LIBPATH}" include="${ASM_INCLUDEPATH}">\r
               <EXTRA.INC.1/>\r
-      \r
+\r
               <argument value="${ASM_FLAGS}"/>\r
               <EXTRA.ARG.1/>\r
-      \r
+\r
               <fileset casesensitive="on" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
             </command>\r
           </cc>\r
@@ -429,20 +451,16 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     <sequential>\r
       <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>\r
 \r
-      <if>\r
-        <available type="file" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>\r
-        <then>\r
-          <makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep">\r
-            <input file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
-            <input file="${DEST_DIR_DEBUG}/AutoGen.h"/>\r
-            <EXTRA.INC.1/>\r
-          </makedeps>\r
-        </then>\r
-      </if>\r
+      <makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"\r
+                TargetFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj">\r
+        <input file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
+        <EXTRA.INC.1/>\r
+      </makedeps>\r
 \r
       <OnDependency>\r
         <sourcefiles>\r
           <file listfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"/>\r
+          <file ListFile="${DEST_DIR_OUTPUT}/AutoGen.h.dep"/>\r
         </sourcefiles>\r
         <targetfiles>\r
           <file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>\r
@@ -450,14 +468,14 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
         <sequential>\r
           <cc userdefine="on">\r
-            <command type="PP" cmd="${APP}" workdir="${DEST_DIR_OUTPUT}/@{FILEPATH}" family="${APP_FAMILY}" \r
+            <command type="PP" cmd="${APP}" workdir="${DEST_DIR_OUTPUT}/@{FILEPATH}" family="${APP_FAMILY}"\r
                 dpath="${APP_DPATH}" libpath="${APP_LIBPATH}" include="${APP_INCLUDEPATH}">\r
               <EXTRA.INC.1/>\r
               <argument value="${APP_FLAGS}"/>\r
               <fileset casesensitive="on" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
             </command>\r
           </cc>\r
-      \r
+\r
           <cc userdefine="on">\r
             <command type="ASM" cmd="${ASM}" workdir="${DEST_DIR_OUTPUT}" family="${ASM_FAMILY}"\r
                 includepathDelimiter="-I" outputDelimiter="-o" dpath="${ASM_DPATH}"\r
@@ -485,6 +503,9 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
   </macrodef>\r
 \r
 \r
+  <!--\r
+    Assembly the preprocessed IPF assembly code\r
+  -->\r
   <macrodef name="Build_IPF_PP_Code">\r
     <attribute name="FILEPATH"/>\r
     <attribute name="FILENAME"/>\r
@@ -495,7 +516,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
     <sequential>\r
       <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>\r
-  \r
+\r
       <cc userdefine="on">\r
         <command type="ASM" includepathDelimiter="-I" dpath="${ASM_DPATH}"\r
              libpath="${ASM_LIBPATH}" include="${ASM_INCLUDEPATH}">\r
@@ -503,30 +524,37 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
           <includepath path="${MODULE_DIR}"/>\r
           <includepath path="${MODULE_DIR}/${ARCH}"/>\r
           <EXTRA.INC/>\r
-  \r
+\r
           <argument value="${ASM_FLAGS}"/>\r
           <EXTRA.ARG/>\r
           <OutputFile File="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>\r
-  \r
+\r
           <fileset casesensitive="on" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
         </command>\r
       </cc>\r
     </sequential>\r
   </macrodef>\r
-  \r
-  \r
-    <!--\r
-    Library    private HashMap map = new HashMap();\r
-    -->\r
+\r
+\r
+  <!--\r
+    Library\r
+  -->\r
   <macrodef name="Build_Library">\r
     <attribute name="FILENAME" />\r
     <attribute name="FILEEXT" default="obj"/>\r
-    \r
+\r
     <sequential>\r
       <var name="FILE_BASENAME" value="@{FILENAME}" />\r
       <var name="FILE_PATH" value="." />\r
       <mkdir dir="${BIN_DIR}"/>\r
 \r
+      <if>\r
+        <equals arg1="${OBJECTS}" arg2="" trim="true"/>\r
+        <then>\r
+          <fail message="No object files"/>\r
+        </then>\r
+      </if>\r
+\r
       <OnDependency>\r
         <sourcefiles>\r
           <fileset dir="${DEST_DIR_OUTPUT}" includes="${OBJECTS}" />\r
@@ -563,10 +591,15 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
     <sequential>\r
       <mkdir dir="${DEST_DIR_OUTPUT}/@{FILEPATH}"/>\r
+      <makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"\r
+                TargetFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb">\r
+        <input file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
+        <EXTRA.INC/>\r
+      </makedeps>\r
 \r
       <OnDependency>\r
         <sourcefiles>\r
-          <file name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
+          <file listfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"/>\r
         </sourcefiles>\r
         <targetfiles>\r
           <file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb"/>\r
@@ -608,7 +641,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
         <targetfiles>\r
           <file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb"/>\r
         </targetfiles>\r
-        \r
+\r
         <sequential>\r
           <strgather commandtype="scan" outputdatabase="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.sdb" verbose="read">\r
             <skipext name=".uni"/>\r
@@ -628,7 +661,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
           <file name="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}Strings.hpk"/>\r
           <file name="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}Strings.c"/>\r
         </targetfiles>\r
-        \r
+\r
         <sequential>\r
           <strgather basename="@{FILENAME}Strings" commandtype="dump"\r
                      outputdefines="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}StrDefs.h"\r
@@ -647,7 +680,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
         <targetfiles>\r
           <file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}Strings.obj"/>\r
         </targetfiles>\r
-        \r
+\r
         <sequential>\r
           <cc userdefine="on">\r
             <command type="CC" cmd="${CC}" workdir="${DEST_DIR_OUTPUT}" family="${CC_FAMILY}"\r
@@ -689,32 +722,55 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     <sequential>\r
       <mkdir dir="${DEST_DIR_DEBUG}/@{FILEPATH}"/>\r
 \r
-      <if>\r
-        <available type="file" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>\r
-        <then>\r
-          <makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep">\r
-            <input file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
-            <input file="${DEST_DIR_DEBUG}/AutoGen.h"/>\r
-            <EXTRA.INC/>\r
-          </makedeps>\r
-        </then>\r
-      </if>\r
+      <makedeps DepsFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"\r
+                TargetFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj">\r
+        <input file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
+        <EXTRA.INC/>\r
+      </makedeps>\r
 \r
       <OnDependency>\r
         <sourcefiles>\r
           <file listfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}.dep"/>\r
+          <file ListFile="${DEST_DIR_OUTPUT}/AutoGen.h.dep"/>\r
         </sourcefiles>\r
         <targetfiles>\r
           <file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>\r
         </targetfiles>\r
 \r
         <sequential>\r
-          <vfrcompile createIfrBinFile="on" createListFile="on" outPutDir="${DEST_DIR_DEBUG}/@{FILEPATH}" vfrFile="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}">\r
+          <!-- if "TOOLCHIAN FAMILY" is "GCC", it should point the ouput file for preprocess compiler -->\r
+          <if>\r
+            <equals arg1="${CC_FAMILY}" arg2="GCC"/>\r
+            <then>\r
+              <cc userdefine="on">\r
+                <command type="PP" cmd="${PP}" workdir="${DEST_DIR_OUTPUT}/@{FILEPATH}" family="${PP_FAMILY}"\r
+                         dpath="${PP_DPATH}" libpath="${PP_LIBPATH}" include="${PP_INCLUDEPATH}">\r
+                  <argument value="${VFRPP_FLAGS} -o ${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.i"/>\r
+                  <!-- Output file of the preprocess -->\r
+                  <EXTRA.INC/>\r
+                  <fileset casesensitive="on" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
+                </command>\r
+              </cc>\r
+            </then>\r
+            <else>\r
+              <cc userdefine="on">\r
+                <command type="PP" cmd="${PP}" workdir="${DEST_DIR_OUTPUT}/@{FILEPATH}" family="${PP_FAMILY}"\r
+                         dpath="${PP_DPATH}" libpath="${PP_LIBPATH}" include="${PP_INCLUDEPATH}">\r
+                  <argument value="${VFRPP_FLAGS}"/>\r
+                  <!-- Output file of the preprocess -->\r
+                  <EXTRA.INC/>\r
+                  <fileset casesensitive="on" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
+                </command>\r
+              </cc>\r
+            </else>\r
+          </if>\r
+\r
+          <vfrcompile createIfrBinFile="on" createListFile="on" outPutDir="${DEST_DIR_DEBUG}/@{FILEPATH}" vfrFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.i">\r
             <EXTRA.INC/>\r
           </vfrcompile>\r
-    \r
+\r
           <cc userdefine="on">\r
-            <command type="CC" cmd="${CC}" workdir="${DEST_DIR_OUTPUT}" \r
+            <command type="CC" cmd="${CC}" workdir="${DEST_DIR_OUTPUT}"\r
                      includepathDelimiter="-I" family="${CC_FAMILY}" dpath="${CC_DPATH}"\r
                      libpath="${CC_LIBPATH}" include="${CC_INCLUDEPATH}"\r
                      outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj" >\r
@@ -749,21 +805,169 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
     <element name="EXTRA.INC" optional="yes"/>\r
     <element name="EXTRA.ARG" optional="yes"/>\r
-    \r
+\r
+    <sequential>\r
+      <OnDependency>\r
+        <sourcefiles>\r
+          <file name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
+        </sourcefiles>\r
+        <targetfiles>\r
+          <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.cat"/>\r
+        </targetfiles>\r
+\r
+        <sequential>\r
+          <exec dir="${DEST_DIR_OUTPUT}" executable="${ASM}" failonerror="true">\r
+            <arg line="/nologo /omf ${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT} /Bl${ASMLINK} ${ASMLINK_FLAGS}"/>\r
+          </exec>\r
+          <concat destfile="${DEST_DIR_OUTPUT}/@{FILENAME}.cat" binary="yes">\r
+            <filelist dir="${MODULE_DIR}" files="Blank2.pad"/>\r
+            <filelist dir="${DEST_DIR_OUTPUT}" files="@{FILENAME}.com"/>\r
+          </concat>\r
+        </sequential>\r
+      </OnDependency>\r
+    </sequential>\r
+  </macrodef>\r
+\r
+  <!--\r
+      Build Asl table file\r
+    -->\r
+  <macrodef name="Build_ASL">\r
+    <attribute name="FILEPATH"/>\r
+    <attribute name="FILENAME"/>\r
+    <attribute name="FILEEXT" default="asl"/>\r
+\r
+    <element name="EXTRA.INC" optional="yes"/>\r
+    <element name="EXTRA.ARG" optional="yes"/>\r
+\r
+    <sequential>\r
+      <mkdir dir="${DEST_DIR_OUTPUT}"/>\r
+\r
+      <OnDependency>\r
+        <sourcefiles>\r
+          <file name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
+        </sourcefiles>\r
+        <targetfiles>\r
+          <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.sec"/>\r
+        </targetfiles>\r
+\r
+        <sequential>\r
+          <cc userdefine="on">\r
+            <command type="PP" cmd="${PP}" workdir="${DEST_DIR_OUTPUT}" family="${PP_FAMILY}"\r
+                dpath="${PP_DPATH}" libpath="${PP_LIBPATH}" include="${PP_INCLUDEPATH}">\r
+              <argument value="${APP_FLAGS}"/>\r
+              <EXTRA.INC/>\r
+              <fileset casesensitive="on" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
+            </command>\r
+          </cc>\r
+\r
+          <exec dir="${DEST_DIR_OUTPUT}" executable="${ASL}" failonerror="true" outputproperty="ASL_OUTPUT">\r
+            <arg line="${DEST_DIR_OUTPUT}/@{FILENAME}.i"/>\r
+          </exec>\r
+\r
+          <if>\r
+            <or>\r
+              <contains string="${ASL_OUTPUT}" substring="Supports ACPI Specification Revision 2.0"/>\r
+              <contains string="${ASL_OUTPUT}" substring="Supports ACPI Specification Revision 1.0"/>\r
+            </or>\r
+            <then>\r
+              <fail message="Current Asl tool not support Acpi Spec 3.0. Pls update your Asl compiler."/>\r
+            </then>\r
+          </if>\r
+\r
+          <EFI_SECTION_RAW FILEPATH="." FILENAME="@{FILENAME}" FILEEXT="aml"/>\r
+\r
+        </sequential>\r
+      </OnDependency>\r
+    </sequential>\r
+  </macrodef>\r
+\r
+  <!--\r
+      Build Asl table c file\r
+    -->\r
+  <macrodef name="Build_CCASL">\r
+    <attribute name="FILEPATH"/>\r
+    <attribute name="FILENAME"/>\r
+    <attribute name="FILEEXT" default="c"/>\r
+\r
+    <element name="EXTRA.INC" optional="yes"/>\r
+    <element name="EXTRA.ARG" optional="yes"/>\r
+\r
+    <sequential>\r
+      <mkdir dir="${DEST_DIR_OUTPUT}"/>\r
+\r
+      <OnDependency>\r
+        <sourcefiles>\r
+          <file name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
+        </sourcefiles>\r
+        <targetfiles>\r
+          <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.sec"/>\r
+        </targetfiles>\r
+\r
+        <sequential>\r
+\r
+          <cc userdefine="on">\r
+            <command type="CC" cmd="${CC}" workdir="${DEST_DIR_OUTPUT}" family="${CC_FAMILY}"\r
+                outputFile="${DEST_DIR_OUTPUT}/@{FILENAME}.obj" dpath="${CC_DPATH}"\r
+                libpath="${CC_LIBPATH}" include="${CC_INCLUDEPATH}">\r
+              <EXTRA.INC/>\r
+              <argument value="${CC_FLAGS}"/>\r
+              <EXTRA.ARG/>\r
+              <fileset casesensitive="on" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
+            </command>\r
+          </cc>\r
+\r
+          <cc userdefine="on">\r
+            <command type="DLINK" cmd="${DLINK}" family="${DLINK_FAMILY}"\r
+                     outputFile="${DEST_DIR_OUTPUT}/@{FILENAME}.exe" dpath="${DLINK_DPATH}" >\r
+              <argument value="${SLINK_FLAGS}"/>\r
+              <fileset casesensitive="on" file="${DEST_DIR_OUTPUT}/@{FILENAME}.obj"/>\r
+            </command>\r
+          </cc>\r
+\r
+          <genacpitable inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.exe" outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.acpi" />\r
+\r
+          <EFI_SECTION_RAW FILEPATH="." FILENAME="@{FILENAME}" FILEEXT="acpi"/>\r
+        </sequential>\r
+      </OnDependency>\r
+    </sequential>\r
+  </macrodef>\r
+ <!--\r
+      Build ACPI Bin File\r
+    -->\r
+  <macrodef name="Build_ACPIBIN">\r
+    <attribute name="FILEPATH"/>\r
+    <attribute name="FILENAME"/>\r
+    <attribute name="FILEEXT" default="bin"/>\r
+\r
+    <element name="EXTRA.INC" optional="yes"/>\r
+    <element name="EXTRA.ARG" optional="yes"/>\r
+\r
     <sequential>\r
-      <!-- Lack Dependency Check -->\r
-      <exec dir="${DEST_DIR_OUTPUT}" executable="${ASM}" failonerror="true">\r
-        <arg line="/nologo /omf ${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT} /Bl${ASMLINK} ${ASMLINK_FLAGS}"/>\r
-      </exec>\r
-      <concat destfile="${DEST_DIR_OUTPUT}/@{FILENAME}.cat" binary="yes">\r
-        <filelist dir="${MODULE_DIR}" files="Blank2.pad"/>\r
-        <filelist dir="${DEST_DIR_OUTPUT}" files="@{FILENAME}.com"/>\r
-      </concat>\r
+      <mkdir dir="${DEST_DIR_OUTPUT}"/>\r
+\r
+      <OnDependency>\r
+        <sourcefiles>\r
+          <file name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
+        </sourcefiles>\r
+        <targetfiles>\r
+          <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.sec"/>\r
+        </targetfiles>\r
+\r
+        <sequential>\r
+          <copy file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" tofile="${DEST_DIR_OUTPUT}/@{FILENAME}.acpi" />\r
+\r
+          <exec executable="attrib">\r
+            <arg line="-r ${DEST_DIR_OUTPUT}/@{FILENAME}.acpi"/>\r
+          </exec>\r
+\r
+          <EFI_SECTION_RAW FILEPATH="." FILENAME="@{FILENAME}" FILEEXT="acpi"/>\r
+        </sequential>\r
+      </OnDependency>\r
     </sequential>\r
   </macrodef>\r
-  \r
+\r
   <!--\r
-    DUMMY\r
+    DUMMY - for skipping the source file which should not be built\r
     -->\r
   <macrodef name="Build_DUMMY">\r
     <attribute name="FILEPATH"/>\r
@@ -774,20 +978,17 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     <element name="EXTRA.ARG" optional="yes"/>\r
 \r
     <sequential>\r
-      <echo message="Ignoring ${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" level="info" />\r
+      <!--echo message="Ignoring ${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" level="info" /-->\r
     </sequential>\r
   </macrodef>\r
 \r
-<!--############################################################################\r
-  Build Sections\r
-#############################################################################-->\r
   <!--\r
-    DLL\r
+    Generate efi file\r
     -->\r
-  <macrodef name="GenDll">\r
+  <macrodef name="GenEfi">\r
     <attribute name="FILEPATH"/>\r
     <attribute name="FILENAME"/>\r
-    <attribute name="FILEEXT"/>\r
+    <attribute name="FILEEXT" default="efi"/>\r
 \r
     <element name="LIB.ARG" optional="yes"/>\r
     <element name="LINK.ARG" optional="yes"/>\r
@@ -801,102 +1002,158 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
           <fileset dir="${DEST_DIR_OUTPUT}" includes="${OBJECTS}" />\r
         </sourcefiles>\r
         <targetfiles>\r
-          <file name="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.dll"/>\r
+          <file name="${DEST_DIR_DEBUG}/@{FILENAME}.efi"/>\r
         </targetfiles>\r
 \r
         <sequential>\r
+          <!-- Generate a temporary lib file for object files -->\r
           <cc userdefine="on">\r
             <command type="SLINK" cmd="${SLINK}" family="${SLINK_FAMILY}" dpath="${SLINK_DPATH}"\r
-                outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}Local.lib"\r
+                outputFile="${DEST_DIR_OUTPUT}/@{FILENAME}Local.lib"\r
                 libpath="${SLINKLIBPATH}" include="${SLINK_INCLUDEPATH}">\r
               <argument value="${SLINK_FLAGS}"/>\r
 \r
               <fileset dir="${DEST_DIR_OUTPUT}" includes="${OBJECTS}"/>\r
             </command>\r
           </cc>\r
+\r
+          <!-- Link the temporary lib file with dependent libraries -->\r
           <cc userdefine="on">\r
             <command type="DLINK" cmd="${DLINK}" family="${DLINK_FAMILY}"\r
-                     outputFile="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.dll" dpath="${DLINK_DPATH}" \r
+                     outputFile="${DEST_DIR_DEBUG}/@{FILENAME}.dll" dpath="${DLINK_DPATH}"\r
                      libpath="${DLINK_LIBPATH}" include="${DLINK_INCLUDEPATH}">\r
               <argument value="${DLINK_FLAGS}"/>\r
-              <libset libs="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}Local.lib ${LIBS} ${DLINK_SPATH}"/>\r
+              <libset libs="${DEST_DIR_OUTPUT}/@{FILENAME}Local.lib ${LIBS} ${DLINK_SPATH}"/>\r
               <LINK.ARG/>\r
             </command>\r
           </cc>\r
+\r
+          <!-- Convert the dll file to efi file -->\r
+          <fwimage componentType="${MODULE_TYPE}" outImage="${DEST_DIR_OUTPUT}/@{FILENAME}.efi"\r
+                   peImage="${DEST_DIR_DEBUG}/@{FILENAME}.dll" time="0"/>\r
+\r
+          <!-- Copy the efi file to BIN and OUTPUT directory -->\r
+          <copy file="${DEST_DIR_OUTPUT}/@{FILENAME}.efi" tofile="${BIN_DIR}/@{FILENAME}.efi" />\r
+          <copy file="${DEST_DIR_OUTPUT}/@{FILENAME}.efi" tofile="${DEST_DIR_DEBUG}/@{FILENAME}.efi" />\r
+          <if>\r
+            <available file="${DEST_DIR_DEBUG}/@{FILENAME}.map" />\r
+            <then>\r
+              <copy file="${DEST_DIR_DEBUG}/@{FILENAME}.map" tofile="${BIN_DIR}/@{FILENAME}.map" />\r
+            </then>\r
+          </if>\r
         </sequential>\r
       </OnDependency>\r
     </sequential>\r
   </macrodef>\r
 \r
   <!--\r
-    EFI\r
+    Binary\r
     -->\r
-  <macrodef name="GenEfi">\r
+  <macrodef name="Build_Binary">\r
     <attribute name="FILEPATH"/>\r
     <attribute name="FILENAME"/>\r
-    <attribute name="FILEEXT" default="dll"/>\r
+    <attribute name="FILEEXT" default="bin"/>\r
+\r
+    <element name="EXTRA.INC" optional="yes"/>\r
+    <element name="EXTRA.ARG" optional="yes"/>\r
 \r
     <sequential>\r
-      <OnDependency>\r
-        <sourcefiles>\r
-          <file name="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
-        </sourcefiles>\r
-        <targetfiles>\r
-          <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.efi"/>\r
-        </targetfiles>\r
+      <copy file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"\r
+            tofile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.bin"/>\r
+    </sequential>\r
+  </macrodef>\r
 \r
-        <sequential>\r
-          <fwimage componentType="${MODULE_TYPE}" outImage="${DEST_DIR_OUTPUT}/@{FILENAME}.efi" \r
-                   peImage="${DEST_DIR_DEBUG}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" time="0"/>\r
-        </sequential>\r
-      </OnDependency>\r
+  <!--\r
+    Microcode\r
+   -->\r
+  <macrodef name="Build_MICROCODE">\r
+    <attribute name="FILEPATH"/>\r
+    <attribute name="FILENAME"/>\r
+    <attribute name="FILEEXT" default="TXT"/>\r
+\r
+    <element name="EXTRA.INC" optional="yes"/>\r
+    <element name="EXTRA.ARG" optional="yes"/>\r
+\r
+    <sequential>\r
+      <mkdir dir="${TARGET_DIR}/Microcode"/>\r
+      <flashmap MCIFile="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" MCOFILE="${TARGET_DIR}/Microcode/@{FILENAME}.bin"/>\r
     </sequential>\r
   </macrodef>\r
 \r
-<!--\r
-  EFI_SECTION_FREEFORM_SUBTYPE_GUID\r
-  EFI_SECTION_VERSION\r
-  EFI_SECTION_USER_INTERFACE\r
-  EFI_SECTION_DXE_DEPEX\r
-  EFI_SECTION_PEI_DEPEX\r
-  EFI_SECTION_PE32\r
-  EFI_SECTION_PIC\r
-  EFI_SECTION_TE\r
-  EFI_SECTION_RAW\r
-  EFI_SECTION_COMPRESSION\r
-  EFI_SECTION_GUID_DEFINED\r
-  EFI_SECTION_COMPATIBILITY16\r
-  EFI_SECTION_FIRMWARE_VOLUME_IMAGE\r
+  <!--\r
+    Graphics (bmp, ...)\r
+    -->\r
+  <macrodef name="Build_BMP">\r
+    <attribute name="FILEPATH"/>\r
+    <attribute name="FILENAME"/>\r
+    <attribute name="FILEEXT" default="bmp"/>\r
+\r
+    <element name="EXTRA.INC" optional="yes"/>\r
+    <element name="EXTRA.ARG" optional="yes"/>\r
+\r
+    <sequential>\r
+      <copy file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"\r
+            tofile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.bin"/>\r
+    </sequential>\r
+  </macrodef>\r
+\r
+  <!--\r
+    build EFI file\r
   -->\r
+  <macrodef name="Build_EFI">\r
+    <attribute name="FILEPATH"/>\r
+    <attribute name="FILENAME"/>\r
+    <attribute name="FILEEXT" default="efi"/>\r
+\r
+    <element name="EXTRA.INC" optional="yes"/>\r
+    <element name="EXTRA.ARG" optional="yes"/>\r
+\r
+    <sequential>\r
+      <mkdir dir="${MODULE_DIR}/@{FILEPATH}" />\r
+      <copy file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"\r
+        tofile="${DEST_DIR_OUTPUT}/${BASE_NAME}.efi"/>\r
+    </sequential>\r
+  </macrodef>\r
+\r
   <!--\r
-    EFI_SECTION_PE32\r
+    Build macro for Apriori\r
+  -->\r
+  <macrodef name="Build_Apriori">\r
+    <attribute name="FILEPATH" default="."/>\r
+    <attribute name="FILENAME"/>\r
+    <attribute name="FILEEXT" default="apr"/>\r
+    <attribute name="GUID"/>\r
+\r
+    <sequential>\r
+      <mkdir dir="${FV_DIR}/Apriori" />\r
+      <gensection inputfile="${FV_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"\r
+                  outputfile="${FV_DIR}/Apriori/@{FILENAME}.sec"\r
+                  sectiontype="EFI_SECTION_RAW"/>\r
+\r
+      <genffsfile BaseName="@{FILENAME}" ffsATTRIBCHECKSUM="TRUE" ffsFILETYPE="EFI_FV_FILETYPE_FREEFORM"\r
+                  fileGuid="@{GUID}" moduleType="BASE" outputDir="${FV_DIR}">\r
+        <sectFile fileName="${FV_DIR}/Apriori/@{FILENAME}.sec"/>\r
+      </genffsfile>\r
+\r
+    </sequential>\r
+  </macrodef>\r
+\r
+<!--############################################################################\r
+  Build Sections\r
+#############################################################################-->\r
+  <!--\r
+    EFI_SECTION_TE\r
     -->\r
 \r
   <macrodef name="EFI_SECTION_TE">\r
     <attribute name="FILEPATH"/>\r
     <attribute name="FILENAME"/>\r
-    <attribute name="FILEEXT" default="" />\r
+    <attribute name="FILEEXT" default="efi" />\r
 \r
     <element name="PRE.PROCESS" optional="yes"/>\r
     <element name="POST.PROCESS" optional="yes"/>\r
 \r
     <sequential>\r
-      <PRE.PROCESS/>\r
-      <if>\r
-        <not>\r
-          <equals arg1="${LIBS}" arg2=""/>\r
-        </not>\r
-\r
-        <then>\r
-          <GenDll FILEPATH="." FILENAME="@{FILENAME}" FILEEXT="">\r
-            <LIB.ARG></LIB.ARG>\r
-            <LINK.ARG></LINK.ARG>\r
-          </GenDll>\r
-\r
-          <GenEfi FILEPATH="." FILENAME="@{FILENAME}" FILEEXT="dll"/>\r
-        </then>\r
-      </if>\r
-\r
       <OnDependency>\r
         <sourcefiles>\r
           <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.efi"/>\r
@@ -906,44 +1163,31 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
         </targetfiles>\r
 \r
         <sequential>\r
-          <copy file="${DEST_DIR_OUTPUT}/@{FILENAME}.efi" tofile="${BIN_DIR}/@{FILENAME}.efi" />\r
-          <copy file="${DEST_DIR_OUTPUT}/@{FILENAME}.efi" tofile="${DEST_DIR_DEBUG}/@{FILENAME}.efi" />          \r
+          <PRE.PROCESS/>\r
+\r
           <genteimage Dump="false" Verbose="false" OutputDir="" OutputFile="${DEST_DIR_OUTPUT}/@{FILENAME}.te" InputFile="${DEST_DIR_OUTPUT}/@{FILENAME}.efi"/>\r
-          <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.te" \r
-                      outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.tes" \r
+          <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.te"\r
+                      outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.tes"\r
                       sectiontype="EFI_SECTION_TE"/>\r
+\r
           <POST.PROCESS/>\r
         </sequential>\r
       </OnDependency>\r
     </sequential>\r
   </macrodef>\r
 \r
+  <!--\r
+    EFI_SECTION_PE32\r
+    -->\r
   <macrodef name="EFI_SECTION_PE32">\r
     <attribute name="FILEPATH"/>\r
     <attribute name="FILENAME"/>\r
-    <attribute name="FILEEXT" default="/>\r
+    <attribute name="FILEEXT" default="efi"/>\r
 \r
     <element name="PRE.PROCESS" optional="yes"/>\r
     <element name="POST.PROCESS" optional="yes"/>\r
 \r
     <sequential>\r
-      <PRE.PROCESS/>\r
-      <if>\r
-        <not>\r
-          <!-- TBD ${OBJECTS} -->\r
-          <equals arg1="${LIBS}" arg2=""/>\r
-        </not>\r
-\r
-        <then>\r
-          <GenDll FILEPATH="." FILENAME="@{FILENAME}" FILEEXT="">\r
-            <LIB.ARG></LIB.ARG>\r
-            <LINK.ARG></LINK.ARG>\r
-          </GenDll>\r
-\r
-          <GenEfi FILEPATH="." FILENAME="@{FILENAME}" FILEEXT="dll"/>\r
-        </then>\r
-      </if>\r
-      \r
       <OnDependency>\r
         <sourcefiles>\r
           <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.efi"/>\r
@@ -953,12 +1197,12 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
         </targetfiles>\r
 \r
         <sequential>\r
-          <copy file="${DEST_DIR_OUTPUT}/@{FILENAME}.efi" tofile="${BIN_DIR}/@{FILENAME}.efi" />\r
-          <copy file="${DEST_DIR_OUTPUT}/@{FILENAME}.efi" tofile="${DEST_DIR_DEBUG}/@{FILENAME}.efi" />\r
-          <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.efi" \r
-                      outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.pe32" \r
+          <PRE.PROCESS/>\r
+\r
+          <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.efi"\r
+                      outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.pe32"\r
                       sectiontype="EFI_SECTION_PE32"/>\r
-    \r
+\r
           <POST.PROCESS/>\r
         </sequential>\r
       </OnDependency>\r
@@ -985,7 +1229,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
         <then>\r
           <PRE.PROCESS/>\r
-          <gensection outputfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.ver" \r
+          <gensection outputfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.ver"\r
                       versionnum="@{VERSION}"\r
                       sectiontype="EFI_SECTION_VERSION"/>\r
           <POST.PROCESS/>\r
@@ -1015,7 +1259,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
         <then>\r
           <PRE.PROCESS/>\r
           <gensection interfacestring="@{UI}"\r
-                      outputfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.ui" \r
+                      outputfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.ui"\r
                       sectiontype="EFI_SECTION_USER_INTERFACE"/>\r
           <POST.PROCESS/>\r
         </then>\r
@@ -1048,8 +1292,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
               <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"/>\r
             </targetfiles>\r
             <sequential>\r
-              <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.depex" \r
-                          outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx" \r
+              <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.depex"\r
+                          outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"\r
                           sectiontype="EFI_SECTION_DXE_DEPEX"/>\r
             </sequential>\r
           </OnDependency>\r
@@ -1094,12 +1338,12 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
             </targetfiles>\r
 \r
             <sequential>\r
-              <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.depex" \r
-                          outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx" \r
+              <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.depex"\r
+                          outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.dpx"\r
                           sectiontype="EFI_SECTION_PEI_DEPEX"/>\r
             </sequential>\r
           </OnDependency>\r
-          \r
+\r
         </then>\r
         <else>\r
           <if>\r
@@ -1131,7 +1375,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     <sequential>\r
       <OnDependency>\r
         <sourcefiles>\r
-          <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.@{FILEEXT}"/>\r
+          <file name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
         </sourcefiles>\r
         <targetfiles>\r
           <file name="${DEST_DIR_OUTPUT}/@{FILENAME}.sec"/>\r
@@ -1139,8 +1383,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
         <sequential>\r
           <PRE.PROCESS/>\r
-          <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.@{FILEEXT}" \r
-                      outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.sec" \r
+          <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"\r
+                      outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.sec"\r
                       sectiontype="EFI_SECTION_RAW"/>\r
           <POST.PROCESS/>\r
         </sequential>\r
@@ -1173,16 +1417,16 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
           <PRE.PROCESS/>\r
           <secfixup secexefile="${DEST_DIR_OUTPUT}/@{FILENAME}.te" resetvectorDatafile="${DEST_DIR_OUTPUT}/ResetVec.@{FILEEXT}"\r
                    outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.bin"/>\r
-                   \r
-          <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.bin" \r
-                      outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.sec" \r
+\r
+          <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.bin"\r
+                      outputfile="${DEST_DIR_OUTPUT}/@{FILENAME}.sec"\r
                       sectiontype="EFI_SECTION_RAW"/>\r
           <POST.PROCESS/>\r
         </sequential>\r
       </OnDependency>\r
     </sequential>\r
   </macrodef>\r
-  \r
+\r
   <!--\r
     EFI_SECTION_FIRMWARE_VOLUME_IMAGE\r
     -->\r
@@ -1205,87 +1449,18 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
         <sequential>\r
           <PRE.PROCESS/>\r
-    \r
-          <copy file="${FV_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" \r
-                tofile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" \r
+\r
+          <copy file="${FV_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"\r
+                tofile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"\r
                 overwrite="true"/>\r
-          <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" \r
-                      outputfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}fv.sec" \r
+          <gensection inputfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"\r
+                      outputfile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}fv.sec"\r
                       sectiontype="EFI_SECTION_FIRMWARE_VOLUME_IMAGE"/>\r
-    \r
+\r
           <POST.PROCESS/>\r
         </sequential>\r
       </OnDependency>\r
     </sequential>\r
   </macrodef>\r
 \r
-  <!--\r
-    Binary\r
-    -->\r
-  <macrodef name="Build_Binary">\r
-    <attribute name="FILEPATH"/>\r
-    <attribute name="FILENAME"/>\r
-    <attribute name="FILEEXT" default="bin"/>\r
-\r
-    <element name="EXTRA.INC" optional="yes"/>\r
-    <element name="EXTRA.ARG" optional="yes"/>\r
-\r
-    <sequential>\r
-      <copy file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" \r
-            tofile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.bin"/>\r
-    </sequential>\r
-  </macrodef>\r
-  \r
-  <!--\r
-    Microcode\r
-   -->\r
-  <macrodef name="Build_MICROCODE">\r
-    <attribute name="FILEPATH"/>\r
-    <attribute name="FILENAME"/>\r
-    <attribute name="FILEEXT" default="TXT"/>\r
-\r
-    <element name="EXTRA.INC" optional="yes"/>\r
-    <element name="EXTRA.ARG" optional="yes"/>\r
-\r
-    <sequential>\r
-      <mkdir dir="${TARGET_DIR}/Microcode"/>\r
-      <flashmap MCIFile="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" MCOFILE="${TARGET_DIR}/Microcode/@{FILENAME}.bin"/>\r
-    </sequential>\r
-  </macrodef> \r
-\r
-  <!--\r
-    Graphics (bmp, ...)\r
-    -->\r
-  <macrodef name="Build_BMP">\r
-    <attribute name="FILEPATH"/>\r
-    <attribute name="FILENAME"/> \r
-    <attribute name="FILEEXT" default="bmp"/>\r
-\r
-    <element name="EXTRA.INC" optional="yes"/>\r
-    <element name="EXTRA.ARG" optional="yes"/>\r
-\r
-    <sequential>\r
-      <mkdir dir="${MODULE_DIR}/@{FILEPATH}" /> \r
-      <copy file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" \r
-            tofile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.bin"/>\r
-    </sequential>\r
-  </macrodef> \r
-\r
-  <!--\r
-    build EFI file\r
-  -->\r
-  <macrodef name="Build_EFI">\r
-    <attribute name="FILEPATH"/>\r
-    <attribute name="FILENAME"/>\r
-    <attribute name="FILEEXT" default="efi"/>\r
-\r
-    <element name="EXTRA.INC" optional="yes"/>\r
-    <element name="EXTRA.ARG" optional="yes"/>\r
-\r
-    <sequential>\r
-      <mkdir dir="${MODULE_DIR}/@{FILEPATH}" /> \r
-      <copy file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}" \r
-        tofile="${DEST_DIR_OUTPUT}/${BASE_NAME}.efi"/>\r
-    </sequential>\r
-  </macrodef>\r
 </project>\r