]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Conf/BuildMacro.xml
Fixed the GCC assembler issue. Now we can use full GCC tools to build our package.
[mirror_edk2.git] / Tools / Conf / BuildMacro.xml
index 28d6f0cb040c46b999f6ad09951a63133e191b56..3b315d46fae34c2125c86adf14e172fe33a01fee 100644 (file)
@@ -134,16 +134,16 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
         </targetfiles>\r
 \r
         <sequential>\r
-\r
           <cc userdefine="on">\r
-            <command type="PP" cmd="${PP}" workdir="${DEST_DIR_OUTPUT}" family="${PP_FAMILY}">\r
+            <command type="CC" cmd="${CC}" workdir="${DEST_DIR_OUTPUT}/@{FILEPATH}" family="${CC_FAMILY}"\r
+                     outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.i">\r
               <EXTRA.INC/>\r
               <argument value="${PP_FLAGS}"/>\r
               <fileset casesensitive="off" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
             </command>\r
           </cc>\r
     \r
-          <gendepex inputFile="${DEST_DIR_OUTPUT}/@{FILENAME}.i" outputFile="${DEST_DIR_OUTPUT}/${BASE_NAME}.depex"/>\r
+          <gendepex inputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.i" outputFile="${DEST_DIR_OUTPUT}/${BASE_NAME}.depex"/>\r
         </sequential>\r
       </OnDependency>\r
     </sequential>\r
@@ -158,20 +158,27 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     <element name="EXTRA.ARG" optional="yes"/>\r
     \r
     <!-- Dispath ASM file, there are three type. \r
-         asm,s   -   Build_Assembly\r
-         S       -   Build_Ipf_Assembly -->\r
+         asm     -   Build_Assembly\r
+         S       -   Build_Gcc_Assembly\r
+         s       -   Build_Ipf_Assembly -->\r
     <sequential>\r
            <if>\r
-             <or>\r
-               <equals arg1="@{FILEEXT}" arg2="asm" />\r
-               <equals arg1="@{FILEEXT}" arg2="S" />\r
-             </or>\r
+        <equals arg1="@{FILEEXT}" arg2="asm" />\r
              <then>\r
                <Build_Assembly FILEPATH="@{FILEPATH}" FILENAME="@{FILENAME}" FILEEXT="@{FILEEXT}">\r
             <EXTRA.INC.1><EXTRA.INC /></EXTRA.INC.1>\r
             <EXTRA.ARG.1><EXTRA.ARG /></EXTRA.ARG.1>\r
           </Build_Assembly>\r
              </then>\r
+        <elseif>\r
+          <equals arg1="@{FILEEXT}" arg2="S" />\r
+          <then>\r
+            <Build_Gcc_Assembly FILEPATH="@{FILEPATH}" FILENAME="@{FILENAME}" FILEEXT="@{FILEEXT}">\r
+              <EXTRA.INC.1><EXTRA.INC /></EXTRA.INC.1>\r
+              <EXTRA.ARG.1><EXTRA.ARG /></EXTRA.ARG.1>\r
+            </Build_Gcc_Assembly>\r
+          </then>\r
+        </elseif>\r
              <elseif>\r
                <equals arg1="@{FILEEXT}" arg2="s" />\r
                <then>\r
@@ -249,6 +256,67 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     </sequential>\r
   </macrodef>\r
 \r
+  <!--\r
+    Build GCC assembly code\r
+    -->\r
+  <macrodef name="Build_Gcc_Assembly">\r
+    <attribute name="FILEPATH"/>\r
+    <attribute name="FILENAME"/>\r
+    <attribute name="FILEEXT" default="asm"/>\r
+\r
+    <element name="EXTRA.INC.1" optional="yes"/>\r
+    <element name="EXTRA.ARG.1" optional="yes"/>\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
+      <OnDependency>\r
+        <sourcefiles>\r
+          <file Name="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
+        </sourcefiles>\r
+        <targetfiles>\r
+          <file Name="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj"/>\r
+        </targetfiles>\r
+\r
+        <sequential>\r
+          <cc userdefine="on">\r
+            <command type="PP" cmd="${PP}" workdir="${DEST_DIR_OUTPUT}/@{FILEPATH}" family="${PP_FAMILY}"\r
+                     outputDelimiter="-o"\r
+                     outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.i">\r
+              <EXTRA.INC.1/>\r
+              <argument value="${PP_FLAGS}"/>\r
+              <fileset casesensitive="off" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/>\r
+            </command>\r
+          </cc>\r
+\r
+          <replaceregexp file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.i"\r
+                         match="^(#[^ ]* +1 +.*@{FILEPATH}/@{FILENAME}\.@{FILEEXT}&quot;).+\1"\r
+                         replace="#"\r
+                         flags="gs"/>\r
+          <replaceregexp file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.i"\r
+                         match="^(#[^ ]* .*)$"\r
+                         replace="# \1"\r
+                         byline="true"/>\r
+\r
+          <cc userdefine="on">\r
+            <command type="ASM" cmd="${ASM}" workdir="${DEST_DIR_OUTPUT}" family="${ASM_FAMILY}"\r
+                outputFile="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.obj">\r
+              <EXTRA.INC.1/>\r
+      \r
+              <argument value="${ASM_FLAGS}"/>\r
+              <EXTRA.ARG.1/>\r
+      \r
+              <!-- fileset casesensitive="off" file="${MODULE_DIR}/@{FILEPATH}/@{FILENAME}.@{FILEEXT}"/ -->\r
+              <fileset casesensitive="off" file="${DEST_DIR_OUTPUT}/@{FILEPATH}/@{FILENAME}.i"/>\r
+            </command>\r
+          </cc>\r
+        </sequential>\r
+      </OnDependency>\r
+    </sequential>\r
+  </macrodef>\r
+\r
   <!--\r
     IPF Assembly\r
     -->\r