]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/GenBuild/org/tianocore/build/pcd/action/PCDAutoGenAction.java
Fix the bug that using hardcode driver name to judge whether current driver is PCD...
[mirror_edk2.git] / Tools / Source / GenBuild / org / tianocore / build / pcd / action / PCDAutoGenAction.java
index 614bd9e4852a52cc18a48ebcd6228dcccfa42215..6d71629b6161dbab070939e58edbe4e522b12506 100644 (file)
@@ -22,16 +22,17 @@ import java.util.List;
 import java.util.regex.Matcher;\r
 import java.util.regex.Pattern;\r
 \r
+import org.tianocore.build.autogen.CommonDefinition;\r
+import org.tianocore.build.exception.PcdAutogenException;\r
 import org.tianocore.build.global.GlobalData;\r
 import org.tianocore.build.id.ModuleIdentification;\r
+import org.tianocore.pcd.action.ActionMessage;\r
+import org.tianocore.pcd.action.BuildAction;\r
 import org.tianocore.pcd.entity.MemoryDatabaseManager;\r
 import org.tianocore.pcd.entity.Token;\r
+import org.tianocore.pcd.entity.UsageIdentification;\r
 import org.tianocore.pcd.entity.UsageInstance;\r
 import org.tianocore.pcd.exception.BuildActionException;\r
-import org.tianocore.pcd.entity.UsageIdentification;\r
-import org.tianocore.pcd.action.BuildAction;\r
-import org.tianocore.pcd.action.ActionMessage;\r
-import org.tianocore.build.exception.PcdAutogenException;\r
 \r
 /** This class is to manage how to generate the PCD information into Autogen.c and\r
     Autogen.h.\r
@@ -52,6 +53,11 @@ public class PCDAutoGenAction extends BuildAction {
     ///\r
     private boolean               isBuildUsedLibrary;\r
 \r
+    ///\r
+    /// One of PEI_PCD_DRIVER, DXE_PCD_DRIVER, NOT_PCD_DRIVER \r
+    /// \r
+    private CommonDefinition.PCD_DRIVER_TYPE pcdDriverType;\r
+\r
     ///\r
     /// The generated string for header file.\r
     ///\r
@@ -76,6 +82,14 @@ public class PCDAutoGenAction extends BuildAction {
         this.usageId = usageId;\r
     }\r
 \r
+    /**\r
+       Set paramter pcdDriverType\r
+       \r
+       @param pcdDriverType the driver type for PCD\r
+    **/\r
+    public void setPcdDriverType(CommonDefinition.PCD_DRIVER_TYPE pcdDriverType) {\r
+        this.pcdDriverType = pcdDriverType;\r
+    }\r
     /**\r
        set isBuildUsedLibrary parameter.\r
 \r
@@ -122,11 +136,14 @@ public class PCDAutoGenAction extends BuildAction {
         @param arch                 the architecture for module\r
         @param isBuildUsedLibary    Is the current module library.\r
         @param pcdNameArrayInMsa    the pcd name array got from MSA file.\r
+        @param pcdDriverType        one of PEI_PCD_DRIVER, DXE_PCD_DRIVER,\r
+                                    NOT_PCD_DRIVER\r
     **/\r
     public PCDAutoGenAction(ModuleIdentification moduleId,\r
                             String               arch,\r
                             boolean              isBuildUsedLibrary,\r
-                            String[]             pcdNameArrayInMsa) {\r
+                            String[]             pcdNameArrayInMsa,\r
+                            CommonDefinition.PCD_DRIVER_TYPE pcdDriverType) {\r
         dbManager       = null;\r
         hAutoGenString  = "";\r
         cAutoGenString  = "";\r
@@ -140,6 +157,7 @@ public class PCDAutoGenAction extends BuildAction {
                                            moduleId.getModuleType()));\r
         setIsBuildUsedLibrary(isBuildUsedLibrary);\r
         setPcdNameArrayInMsa(pcdNameArrayInMsa);\r
+        setPcdDriverType(pcdDriverType);\r
     }\r
 \r
     /**\r
@@ -171,7 +189,7 @@ public class PCDAutoGenAction extends BuildAction {
         }\r
 \r
         ActionMessage.debug(this,\r
-                            "PCD memory database contains " + dbManager.getDBSize() + " PCD tokens");\r
+                            "PCD memory database contains " + dbManager.getDBSize() + " PCD tokens.");\r
 \r
         generateAutogenForModule();\r
     }\r
@@ -195,7 +213,7 @@ public class PCDAutoGenAction extends BuildAction {
 \r
         usageInstanceArray = null;\r
         if (!isBuildUsedLibrary) {\r
-            usageInstanceArray  = dbManager.getUsageInstanceArrayByModuleName(usageId);\r
+            usageInstanceArray  = dbManager.getUsageInstanceArrayById(usageId);\r
             MemoryDatabaseManager.UsageInstanceContext = usageInstanceArray;\r
             MemoryDatabaseManager.CurrentModuleName    = moduleName;\r
         } else if ((pcdNameArrayInMsa != null) && (pcdNameArrayInMsa.length > 0)) {\r
@@ -205,7 +223,7 @@ public class PCDAutoGenAction extends BuildAction {
             // these library should be used to autogen.\r
             //\r
             if (usageContext == null) {\r
-                usageInstanceArray  = dbManager.getUsageInstanceArrayByModuleName(usageId);\r
+                usageInstanceArray  = dbManager.getUsageInstanceArrayById(usageId);\r
             } else {\r
                 usageInstanceArray = new ArrayList<UsageInstance>();\r
 \r
@@ -228,9 +246,9 @@ public class PCDAutoGenAction extends BuildAction {
                         // All library's PCD should instanted in module's <ModuleSA> who\r
                         // use this library instance. If not, give errors.\r
                         //\r
-                        throw new BuildActionException (String.format("Module %s use library instance %s, the PCD %s " +\r
-                                                                      "is required by this library instance, but can not find " +\r
-                                                                      "it in the %s's <ModuleSA> in FPD file!",\r
+                        throw new BuildActionException (String.format("Module %s using library instance %s; the PCD %s " +\r
+                                                                      "is required by this library instance, but can not be found " +\r
+                                                                      "in the %s's <ModuleSA> in the FPD file!",\r
                                                                       MemoryDatabaseManager.CurrentModuleName,\r
                                                                       moduleName,\r
                                                                       pcdNameArrayInMsa[index],\r
@@ -303,10 +321,10 @@ public class PCDAutoGenAction extends BuildAction {
         // Work around code, In furture following code should be modified that get\r
         // these information from Uplevel Autogen tools.\r
         //\r
-        if (moduleName.equalsIgnoreCase("PcdPeim")) {\r
+        if (pcdDriverType == CommonDefinition.PCD_DRIVER_TYPE.PEI_PCD_DRIVER) {\r
             hAutoGenString += MemoryDatabaseManager.PcdPeimHString;\r
             cAutoGenString += MemoryDatabaseManager.PcdPeimCString;\r
-        } else if (moduleName.equalsIgnoreCase("PcdDxe")) {\r
+        } else if (pcdDriverType == CommonDefinition.PCD_DRIVER_TYPE.DXE_PCD_DRIVER) {\r
             hAutoGenString += MemoryDatabaseManager.PcdDxeHString;\r
             cAutoGenString += MemoryDatabaseManager.PcdDxeCString;\r
         }\r