]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/GenBuild/org/tianocore/build/fpd/FpdParserTask.java
added the support for new schema and old schema at the same time
[mirror_edk2.git] / Tools / Source / GenBuild / org / tianocore / build / fpd / FpdParserTask.java
index 1de29ea373a1c34ab1dc4e6c05c296fe29245548..21197b5c626ffac05961204a01cba979a2361864 100644 (file)
@@ -352,6 +352,7 @@ public class FpdParserTask extends Task {
             }\r
             Map<String, XmlObject> msaMap = GlobalData.getNativeMsa(baseName);\r
             Map<String, XmlObject> mbdMap = GlobalData.getNativeMbd(baseName);\r
+            Map<String, XmlObject> fpdMap = new HashMap<String, XmlObject>();\r
             Map<String, XmlObject> map = new HashMap<String, XmlObject>();\r
             //\r
             // Whether the Module SA has parsed before or not\r
@@ -363,9 +364,13 @@ public class FpdParserTask extends Task {
                 // Here we can also put platform Build override\r
                 //\r
                 map = op.override(mbdMap, msaMap);\r
-                Map<String, XmlObject> overrideMap = op.override(\r
-                                getPlatformOverrideInfo(moduleSAs[i]),\r
-                                OverrideProcess.deal(map));\r
+                fpdMap = getPlatformOverrideInfo(moduleSAs[i]);\r
+                XmlObject buildOption = (XmlObject)fpdMap.get("BuildOptions");\r
+                buildOption = (XmlObject)fpdMap.get("PackageDependencies");\r
+                buildOption = (XmlObject)fpdMap.get("BuildOptions");\r
+                buildOption = op.override(buildOption, platformBuildOptions);\r
+                fpdMap.put("BuildOptions", ((BuildOptionsDocument)buildOption).getBuildOptions());\r
+                Map<String, XmlObject> overrideMap = op.override(fpdMap, OverrideProcess.deal(map));\r
                 GlobalData.registerModule(baseName, overrideMap);\r
             } else {\r
                 map = GlobalData.getDoc(baseName);\r
@@ -460,6 +465,7 @@ public class FpdParserTask extends Task {
         Map<String, XmlObject> map = new HashMap<String, XmlObject>();\r
         map.put("SourceFiles", sa.getSourceFiles());\r
         map.put("Includes", sa.getIncludes());\r
+        map.put("PackageDependencies", null);\r
         map.put("Libraries", sa.getLibraries());\r
         map.put("Protocols", sa.getProtocols());\r
         map.put("Events", sa.getEvents());\r
@@ -472,7 +478,7 @@ public class FpdParserTask extends Task {
         map.put("Formsets", sa.getFormsets());\r
         map.put("Guids", sa.getGuids());\r
         map.put("Externs", sa.getExterns());\r
-        map.put("BuildOptions", platformBuildOptions);\r
+        map.put("BuildOptions", sa.getBuildOptions());//platformBuildOptions);\r
         return map;\r
     }\r
 \r
@@ -783,26 +789,24 @@ public class FpdParserTask extends Task {
     }\r
 \r
     public void collectPCDInformation() {\r
-      CollectPCDAction collectAction = new CollectPCDAction ();\r
-      //\r
-      // Set memory database log file path. It should be put into same directory with FPD file. \r
-      //\r
-      GlobalData.getPCDMemoryDBManager().setLogFileName(\r
-                   fpdFilename.getPath() + ".PCDMemroyDatabaseLog.txt"\r
-                   );\r
-      //\r
-      // Collect all PCD information from FPD to MSA, and get help information from SPD.\r
-      // These all information will be stored into memory database for future usage such \r
-      // as autogen.\r
-      //\r
-      try {\r
-        collectAction.perform (\r
-          getProject().getProperty("WORKSPACE_DIR"),\r
-          fpdFilename.getPath(),\r
-          ActionMessage.MAX_MESSAGE_LEVEL\r
-          );\r
-      } catch (Exception exp) {\r
-        throw new BuildException (exp.getMessage());\r
-      }\r
+        String           exceptionString = null;\r
+        CollectPCDAction collectAction   = new CollectPCDAction ();\r
+        //\r
+        // Collect all PCD information from FPD to MSA, and get help information from SPD.\r
+        // These all information will be stored into memory database for future usage such \r
+        // as autogen.\r
+        //\r
+        try {\r
+            collectAction.perform (getProject().getProperty("WORKSPACE_DIR"),\r
+                                   fpdFilename.getPath(),\r
+                                   ActionMessage.MAX_MESSAGE_LEVEL\r
+                                   );\r
+        } catch (Exception exp) {\r
+            exceptionString = exp.getMessage();\r
+            if (exceptionString == null) {\r
+                exceptionString = "[Internal Error]Pcd tools catch a internel errors, Please report this bug into TianoCore or send email to Wang, scott or Lu, ken!";\r
+            }\r
+            throw new BuildException (String.format("Fail to do PCD preprocess from FPD file: %s", exceptionString));\r
+        }\r
     }\r
 }\r