]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/GenBuild/org/tianocore/build/pcd/action/CollectPCDAction.java
1) Change the schema type for <VariableGuid> used in PCD HiiEnable group in FPD file.
[mirror_edk2.git] / Tools / Source / GenBuild / org / tianocore / build / pcd / action / CollectPCDAction.java
index 1dbcb2306a10b287a1a66cf3c991f84c0246b923..dc60cc6eb75ae1d5e29cfaf68ce43e055bacfc4c 100644 (file)
@@ -1530,9 +1530,22 @@ public class CollectPCDAction {
                 pcdType      = Token.getpcdTypeFromString(pcdBuildData.getItemType().toString());\r
                 datumType    = Token.getdatumTypeFromString(pcdBuildData.getDatumType().toString());\r
                 tokenNumber  = Integer.decode(pcdBuildData.getToken().toString());\r
-                datum        = pcdBuildData.getValue();\r
+                if (pcdBuildData.getValue() != null) {\r
+                    datum = pcdBuildData.getValue().toString();\r
+                } else {\r
+                    datum = null;\r
+                }\r
                 maxDatumSize = pcdBuildData.getMaxDatumSize();\r
 \r
+                if ((pcdType    == Token.PCD_TYPE.FEATURE_FLAG) &&\r
+                    (datumType  != Token.DATUM_TYPE.BOOLEAN)){\r
+                    exceptionString = String.format("[FPD file error] For PCD %s in module %s, the PCD type is FEATRUE_FLAG but "+\r
+                                                    "datum type of this PCD entry is not BOOLEAN!",\r
+                                                    pcdBuildData.getCName(),\r
+                                                    moduleName);\r
+                    throw new EntityException(exceptionString);\r
+                }\r
+\r
                 //\r
                 // Check <TokenSpaceGuid> is exist? In future, because all schema verification will tools\r
                 // will check that, following checking code could be removed.\r
@@ -2119,6 +2132,8 @@ public class CollectPCDAction {
         boolean             hasSkuId0       = false;\r
         Token.PCD_TYPE      pcdType         = Token.PCD_TYPE.UNKNOWN;\r
         int                 tokenNumber     = 0;\r
+        String              hiiDefaultValue = null;\r
+        String[]            variableGuidString = null;\r
 \r
         List<DynamicPcdBuildDefinitions.PcdBuildData.SkuInfo>   skuInfoList = null;\r
         DynamicPcdBuildDefinitions.PcdBuildData                 dynamicInfo = null;\r
@@ -2189,10 +2204,10 @@ public class CollectPCDAction {
             // Judge whether is DefaultGroup at first, because most case is DefautlGroup.\r
             // \r
             if (skuInfoList.get(index).getValue() != null) {\r
-                skuInstance.value.setValue(skuInfoList.get(index).getValue());\r
+                skuInstance.value.setValue(skuInfoList.get(index).getValue().toString());\r
                 if ((exceptionString = verifyDatum(token.cName, \r
                                                    null, \r
-                                                   skuInfoList.get(index).getValue(), \r
+                                                   skuInfoList.get(index).getValue().toString()\r
                                                    token.datumType, \r
                                                    token.datumSize)) != null) {\r
                     throw new EntityException(exceptionString);\r
@@ -2206,7 +2221,7 @@ public class CollectPCDAction {
                 // \r
                 if (datum != null) {\r
                     if ((skuInstance.id == 0)                                   &&\r
-                        !datum.equalsIgnoreCase(skuInfoList.get(index).getValue())) {\r
+                        !datum.toString().equalsIgnoreCase(skuInfoList.get(index).getValue().toString())) {\r
                         exceptionString = "[FPD file error] For dynamic PCD " + token.cName + ", the value in module " + moduleName + " is " + datum.toString() + " but the "+\r
                                           "value of sku 0 data in <DynamicPcdBuildDefinition> is " + skuInstance.value.value + ". They are must be same!"+\r
                                           " or you could not define value for a dynamic PCD in every <ModuleSA>!"; \r
@@ -2226,7 +2241,9 @@ public class CollectPCDAction {
                                                     "file, who use HII, but there is no <VariableGuid> defined for Sku %d data!",\r
                                                     token.cName,\r
                                                     index);\r
-                                                    \r
+                    if (exceptionString != null) {\r
+                        throw new EntityException(exceptionString);\r
+                    }                                                    \r
                 }\r
 \r
                 if (skuInfoList.get(index).getVariableOffset() == null) {\r
@@ -2234,6 +2251,9 @@ public class CollectPCDAction {
                                                     "file, who use HII, but there is no <VariableOffset> defined for Sku %d data!",\r
                                                     token.cName,\r
                                                     index);\r
+                    if (exceptionString != null) {\r
+                        throw new EntityException(exceptionString);\r
+                    }\r
                 }\r
 \r
                 if (skuInfoList.get(index).getHiiDefaultValue() == null) {\r
@@ -2241,15 +2261,20 @@ public class CollectPCDAction {
                                                     "file, who use HII, but there is no <HiiDefaultValue> defined for Sku %d data!",\r
                                                     token.cName,\r
                                                     index);\r
+                    if (exceptionString != null) {\r
+                        throw new EntityException(exceptionString);\r
+                    }\r
                 }\r
 \r
-                if (exceptionString != null) {\r
-                    throw new EntityException(exceptionString);\r
+                if (skuInfoList.get(index).getHiiDefaultValue() != null) {\r
+                    hiiDefaultValue = skuInfoList.get(index).getHiiDefaultValue().toString();\r
+                } else {\r
+                    hiiDefaultValue = null;\r
                 }\r
 \r
                 if ((exceptionString = verifyDatum(token.cName, \r
                                                    null, \r
-                                                   skuInfoList.get(index).getHiiDefaultValue()\r
+                                                   hiiDefaultValue\r
                                                    token.datumType, \r
                                                    token.datumSize)) != null) {\r
                     throw new EntityException(exceptionString);\r
@@ -2263,10 +2288,20 @@ public class CollectPCDAction {
                                                             index));\r
                 }\r
 \r
+                //\r
+                // Get variable guid string according to the name of guid which will be mapped into a GUID in SPD file.\r
+                // \r
+                variableGuidString = GlobalData.getGuidInfoGuid(skuInfoList.get(index).getVariableGuid().toString());\r
+                if (variableGuidString == null) {\r
+                    throw new EntityException(String.format("[GUID Error] For dynamic PCD %s,  the variable guid %s can be found in all SPD file!",\r
+                                                            token.cName, \r
+                                                            skuInfoList.get(index).getVariableGuid().toString()));\r
+                }\r
+\r
                 skuInstance.value.setHiiData(skuInfoList.get(index).getVariableName(),\r
-                                             translateSchemaStringToUUID(skuInfoList.get(index).getVariableGuid().toString()),\r
+                                             translateSchemaStringToUUID(variableGuidString[1]),\r
                                              skuInfoList.get(index).getVariableOffset(),\r
-                                             skuInfoList.get(index).getHiiDefaultValue());\r
+                                             skuInfoList.get(index).getHiiDefaultValue().toString());\r
                 token.skuData.add(skuInstance);\r
                 continue;\r
             }\r
@@ -2330,6 +2365,9 @@ public class CollectPCDAction {
             return new UUID(0, 0);\r
         }\r
 \r
+        uuidString = uuidString.replaceAll("\\{", "");\r
+        uuidString = uuidString.replaceAll("\\}", "");\r
+\r
         //\r
         // If the UUID schema string is GuidArrayType type then need translate \r
         // to GuidNamingConvention type at first.\r
@@ -2414,11 +2452,11 @@ public class CollectPCDAction {
     **/\r
     public static void main(String argv[]) throws EntityException {\r
         CollectPCDAction ca = new CollectPCDAction();\r
-        ca.setWorkspacePath("m:/tianocore_latest/edk2");\r
-        ca.setFPDFilePath("m:/tianocore_latest/edk2/EdkNt32Pkg/Nt32.fpd");\r
+        ca.setWorkspacePath("m:/tianocore/edk2");\r
+        ca.setFPDFilePath("m:/tianocore/edk2/EdkNt32Pkg/Nt32.fpd");\r
         ca.setActionMessageLevel(ActionMessage.MAX_MESSAGE_LEVEL);\r
         GlobalData.initInfo("Tools" + File.separator + "Conf" + File.separator + "FrameworkDatabase.db",\r
-                            "m:/tianocore_latest/edk2");\r
+                            "m:/tianocore/edk2");\r
         ca.execute();\r
     }\r
 }\r