]> git.proxmox.com Git - mirror_edk2.git/commitdiff
EDKT96.
authorqouyang <qouyang@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 11 Jul 2006 08:19:18 +0000 (08:19 +0000)
committerqouyang <qouyang@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 11 Jul 2006 08:19:18 +0000 (08:19 +0000)
Build tools need to auto-generated the FlashMap.h from .fdf file before a module is built, and then included by Autogen.h based on attributes of module in build time, and copy FlashMap.h to Module\DEBUG dir and change "FlashMap.h" to "TianoR8FlashMap.h".

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@874 6f19259b-4bc3-4df7-8a09-765794883524

Tools/Source/GenBuild/org/tianocore/build/GenBuildTask.java
Tools/Source/GenBuild/org/tianocore/build/autogen/AutoGen.java
Tools/Source/GenBuild/org/tianocore/build/autogen/CommonDefinition.java
Tools/Source/GenBuild/org/tianocore/build/global/GlobalData.java
Tools/Source/GenBuild/org/tianocore/build/global/SurfaceAreaQuery.java

index c01ca93985d94df73fbff40166bfdabba2c1a0b7..665ab89232a157f7a1895132b2a8a748c2f9b363 100644 (file)
@@ -542,7 +542,7 @@ public class GenBuildTask extends Ant {
         // AutoGen\r
         //\r
         \r
-        AutoGen autogen = new AutoGen(getProject().getProperty("DEST_DIR_DEBUG"), fpdModuleId.getModule(),fpdModuleId.getArch());\r
+        AutoGen autogen = new AutoGen(getProject().getProperty("FV_DIR"), getProject().getProperty("DEST_DIR_DEBUG"), fpdModuleId.getModule(),fpdModuleId.getArch());\r
         autogen.genAutogen();\r
         \r
         \r
index 3aff06f9569303bc3c56946ec39210d1e33ad11e..e36945501b5a7806fb335424910843e9d408b8f3 100644 (file)
 \r
 package org.tianocore.build.autogen;\r
 \r
-import org.tianocore.build.global.GlobalData;\r
-import org.tianocore.build.global.Spd;\r
-import org.tianocore.build.global.SurfaceAreaQuery;\r
-import org.tianocore.build.id.ModuleIdentification;\r
-import org.tianocore.build.id.PackageIdentification;\r
-import org.tianocore.GuidsDocument;\r
-import org.tianocore.LibraryClassDocument.LibraryClass;\r
-import org.tianocore.PPIsDocument;\r
-import org.tianocore.ProtocolsDocument;\r
-import org.tianocore.build.pcd.action.PCDAutoGenAction;\r
-import org.tianocore.build.exception.*;\r
-import org.tianocore.logger.EdkLog;\r
-import org.apache.tools.ant.BuildException;\r
-import org.apache.xmlbeans.XmlObject;\r
-\r
 import java.io.File;\r
+import java.io.FileInputStream;\r
+import java.io.FileOutputStream;\r
 import java.io.FileReader;\r
 import java.io.FileWriter;\r
 import java.util.ArrayList;\r
@@ -43,6 +30,21 @@ import java.util.List;
 import java.util.Map;\r
 import java.util.Set;\r
 \r
+import org.apache.tools.ant.BuildException;\r
+import org.apache.xmlbeans.XmlObject;\r
+import org.tianocore.GuidsDocument;\r
+import org.tianocore.LibraryClassDocument.LibraryClass;\r
+import org.tianocore.PPIsDocument;\r
+import org.tianocore.ProtocolsDocument;\r
+import org.tianocore.build.exception.*;\r
+import org.tianocore.build.global.GlobalData;\r
+import org.tianocore.build.global.Spd;\r
+import org.tianocore.build.global.SurfaceAreaQuery;\r
+import org.tianocore.build.id.ModuleIdentification;\r
+import org.tianocore.build.id.PackageIdentification;\r
+import org.tianocore.build.pcd.action.PCDAutoGenAction;\r
+import org.tianocore.logger.EdkLog;\r
+\r
 /**\r
  * This class is to generate Autogen.h and Autogen.c according to module surface\r
  * area or library surface area.\r
@@ -52,7 +54,10 @@ public class AutoGen {
        // / The output path of Autogen.h and Autogen.c\r
        // /\r
        private String outputPath;\r
-\r
+    /// \r
+    /// The name of FV directory \r
+    /// \r
+    private String fvDir;\r
        // /\r
        // / The base name of module or library.\r
        // /\r
@@ -104,10 +109,11 @@ public class AutoGen {
         * @param arch\r
         *            Target architecture.\r
         */\r
-       public AutoGen(String outputPath, ModuleIdentification moduleId, String arch) {\r
+       public AutoGen(String fvDir, String outputPath, ModuleIdentification moduleId, String arch) {\r
                this.outputPath = outputPath;\r
                this.moduleId = moduleId;\r
                this.arch = arch;\r
+        this.fvDir = fvDir;\r
 \r
        }\r
 \r
@@ -316,7 +322,17 @@ public class AutoGen {
                }\r
                fileBuffer.append("\r\n");\r
 \r
-               //\r
+        //\r
+        //  If is TianoR8FlashMap, copy {Fv_DIR}/FlashMap.h to \r
+        // {DEST_DIR_DRBUG}/FlashMap.h\r
+        // \r
+        if (SurfaceAreaQuery.isHaveTianoR8FlashMap()) {\r
+            fileBuffer.append(CommonDefinition.include);\r
+            fileBuffer.append("  <");\r
+            fileBuffer.append(CommonDefinition.tianoR8FlashMapH + ">\r\n");\r
+            copyFlashMapHToDebugDir();\r
+        }\r
+\r
                // Write PCD autogen information to AutoGen.h.\r
                //\r
                if (this.myPcdAutogen != null) {\r
@@ -544,6 +560,17 @@ public class AutoGen {
                }\r
                fileBuffer.append("\r\n");\r
 \r
+        //\r
+        //  If is TianoR8FlashMap, copy {Fv_DIR}/FlashMap.h to \r
+        // {DEST_DIR_DRBUG}/FlashMap.h\r
+        // \r
+        if (SurfaceAreaQuery.isHaveTianoR8FlashMap()) {\r
+            fileBuffer.append(CommonDefinition.include);\r
+            fileBuffer.append("  <");\r
+            fileBuffer.append(CommonDefinition.tianoR8FlashMapH + ">\r\n");\r
+            copyFlashMapHToDebugDir();\r
+        }\r
+\r
                //\r
                // Write PCD information to library AutoGen.h.\r
                //\r
@@ -2029,4 +2056,27 @@ public class AutoGen {
 \r
        }\r
 \r
+    private void copyFlashMapHToDebugDir() throws  AutoGenException{\r
+        \r
+        File inFile = new File(fvDir + File.separatorChar + CommonDefinition.flashMapH);\r
+        int size = (int)inFile.length();\r
+        byte[] buffer = new byte[size];\r
+        File outFile = new File (this.outputPath + File.separatorChar + CommonDefinition.tianoR8FlashMapH);\r
+        try{\r
+            if (inFile.exists()) {\r
+                FileInputStream fis = new FileInputStream (inFile);\r
+                fis.read(buffer);\r
+                FileOutputStream fos = new FileOutputStream(outFile);\r
+                fos.write(buffer);\r
+                fis.close();\r
+                fos.close();\r
+            }else {\r
+                throw new AutoGenException("The flashMap.h file don't exist!!");\r
+            }\r
+        } catch (Exception e){\r
+            throw new AutoGenException(e.getMessage());\r
+        }\r
+        \r
+    }\r
+\r
 }
\ No newline at end of file
index ad245edd172a11b7033a8ba515c9bd6a1c0ecd84..5f83e4d9dff33e3bc976925daea03ecbbd53b5a6 100644 (file)
@@ -54,6 +54,9 @@ public class CommonDefinition {
     public final static String protocolGuid = "ProtocolGuid";\r
     public final static String ppiGuid = "PpiGuid";\r
     public final static String guidGuid = "Guid";\r
+\r
+       public final static String tianoR8FlashMapH = "TianoR8FlashMap.h";\r
+       public final static String flashMapH = "FlashMap.h";\r
     \r
     //\r
     // AutoGen.h and AutoGen.c file's header\r
index 51f198571a9241a11999f017d2697e3a75cdb242..19725167c555a342a5480f7cc51c2098c54054c3 100644 (file)
@@ -16,13 +16,23 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 **/\r
 package org.tianocore.build.global;\r
 \r
+import java.io.File;\r
+import java.util.HashMap;\r
+import java.util.HashSet;\r
+import java.util.Iterator;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.Set;\r
+import java.util.logging.Logger;\r
+\r
 import org.apache.tools.ant.BuildException;\r
+import org.apache.tools.ant.Project;\r
 import org.apache.xmlbeans.XmlObject;\r
 import org.tianocore.DbPathAndFilename;\r
 import org.tianocore.FrameworkDatabaseDocument;\r
 import org.tianocore.ModuleSurfaceAreaDocument;\r
-import org.tianocore.PcdBuildDefinitionDocument;\r
 import org.tianocore.ModuleSurfaceAreaDocument.ModuleSurfaceArea;\r
+import org.tianocore.PcdBuildDefinitionDocument;\r
 import org.tianocore.build.id.FpdModuleIdentification;\r
 import org.tianocore.build.id.ModuleIdentification;\r
 import org.tianocore.build.id.PackageIdentification;\r
@@ -37,15 +47,6 @@ import org.tianocore.build.toolchain.ToolChainMap;
 import org.tianocore.exception.EdkException;\r
 import org.tianocore.logger.EdkLog;\r
 \r
-import java.io.File;\r
-import java.util.HashMap;\r
-import java.util.HashSet;\r
-import java.util.Iterator;\r
-import java.util.List;\r
-import java.util.Map;\r
-import java.util.Set;\r
-import java.util.logging.Logger;\r
-\r
 /**\r
   GlobalData provide initializing, instoring, querying and update global data.\r
   It is a bridge to intercommunicate between multiple component, such as AutoGen,\r
@@ -133,8 +134,6 @@ public class GlobalData {
 \r
     private static final MemoryDatabaseManager pcdDbManager = new MemoryDatabaseManager();\r
 \r
-    \r
-\r
     /**\r
       Parse framework database (DB) and all SPD files listed in DB to initialize\r
       the environment for next build. This method will only be executed only once\r
@@ -145,7 +144,7 @@ public class GlobalData {
       @throws BuildException\r
             Framework Dababase or SPD or MSA file is not valid\r
     **/\r
-    public synchronized static void initInfo(String workspaceDatabaseFile, String workspaceDir, String toolsDefFilename) throws BuildException {\r
+    public synchronized static void initInfo(String workspaceDatabaseFile, String workspaceDir, String toolsDefFilename ) throws BuildException {\r
         //\r
         // ensure this method will be revoked only once\r
         //\r
@@ -153,8 +152,8 @@ public class GlobalData {
             return;\r
         }\r
         globalFlag = true;\r
-        \r
-        //\r
+\r
+               // \r
         // Backup workspace directory. It will be used by other method\r
         //\r
         GlobalData.workspaceDir = workspaceDir.replaceAll("(\\\\)", "/");\r
index 37c60643e784bd2b788f07ea21aed97384dd21e8..c2918b7b3b87a956251c305aac2dacbd6e4df372 100644 (file)
@@ -1916,4 +1916,24 @@ public class SurfaceAreaQuery {
 \r
         return false;\r
     }\r
+\r
+       public static boolean isHaveTianoR8FlashMap(){\r
+        PcdCodedDocument.PcdCoded.PcdEntry[] pcdEntries  = null;\r
+        String[]            results;\r
+        int                 index;\r
+        String[]            xPath       = new String[] {"/"};\r
+        Object[]         returns     = get ("Externs", xPath);\r
+\r
+        if (returns == null) {\r
+            return false;\r
+        }\r
+\r
+               ExternsDocument.Externs ext = (ExternsDocument.Externs)returns[0];\r
+               \r
+               if (ext.getTianoR8FlashMapH()){\r
+                       return true;\r
+           }else {\r
+                       return false;\r
+               }\r
+       }\r
 }\r