]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/GenBuild/org/tianocore/build/pcd/action/CollectPCDAction.java
Add PcdDxe and PcdPEIM to all-arch for EdkModulePkg-All-Archs.fpd
[mirror_edk2.git] / Tools / Source / GenBuild / org / tianocore / build / pcd / action / CollectPCDAction.java
index 37f74713d6a8241348049a3a3b9837d46f62c565..6686de9f1d8592387800cd5f09a849b3d09bc549 100644 (file)
@@ -1008,6 +1008,30 @@ class PcdDatabase {
         }\r
     }\r
     \r
+    private int getHiiPtrTypeAlignmentSize(Token token) {\r
+        switch (token.datumType) {\r
+        case UINT8:\r
+            return 1;\r
+        case UINT16:\r
+            return 2;\r
+        case UINT32:\r
+            return 4;\r
+        case UINT64:\r
+            return 8;\r
+        case POINTER:\r
+            if (token.isHiiEnable()) {\r
+                if (token.isHiiDefaultValueUnicodeStringType()) {\r
+                    return 2;\r
+                }\r
+            }\r
+            return 1;\r
+        case BOOLEAN:\r
+            return 1;\r
+        default:\r
+            return 1;\r
+        }\r
+    }\r
+    \r
     private int getAlignmentSize (Token token) {\r
         if (token.getDefaultSku().type == DynamicTokenValue.VALUE_TYPE.HII_TYPE) {\r
             return 2;\r
@@ -1599,28 +1623,25 @@ class PcdDatabase {
             privateGlobalName = t.getPrimaryKeyString();\r
         }\r
 \r
-        if (t.isUnicodeStringType()) {\r
-            privateGlobalCCode = String.format("%-20s%s[%d];\r\n", "STRING_HEAD", t.getPrimaryKeyString(), t.getSkuIdCount());\r
-        } else {\r
-            String type = getCType(t);\r
-            if (t.datumType == Token.DATUM_TYPE.POINTER) {\r
-                int bufferSize;\r
-                if (t.isASCIIStringType()) {\r
-                    //\r
-                    // Build tool will add a NULL string at the end of the ASCII string\r
-                    //\r
-                    bufferSize = t.datumSize + 1;\r
-                } else {\r
-                    bufferSize = t.datumSize;\r
-                }\r
-                privateGlobalCCode = String.format("%-20s%s[%d][%d];\r\n", type, privateGlobalName, t.getSkuIdCount(), bufferSize);\r
+        String type = getCType(t);\r
+        if ((t.datumType == Token.DATUM_TYPE.POINTER) && (!t.isHiiEnable())) {\r
+            int bufferSize;\r
+            if (t.isASCIIStringType()) {\r
+                //\r
+                // Build tool will add a NULL string at the end of the ASCII string\r
+                //\r
+                bufferSize = t.datumSize + 1;\r
             } else {\r
-                privateGlobalCCode = String.format("%-20s%s[%d];\r\n", type, privateGlobalName, t.getSkuIdCount());\r
+                bufferSize = t.datumSize;\r
             }\r
+            privateGlobalCCode = String.format("%-20s%s[%d][%d];\r\n", type, privateGlobalName, t.getSkuIdCount(), bufferSize);\r
+        } else {\r
+            privateGlobalCCode = String.format("%-20s%s[%d];\r\n", type, privateGlobalName, t.getSkuIdCount());\r
         }\r
     }\r
     \r
-    private String getDataTypeDeclarationForVariableDefault_new (Token token, String cName, int skuId) {\r
+    private String getDataTypeDeclarationForVariableDefault_new (Token token, String cName, int skuId) \r
+    throws EntityException {\r
 \r
         String typeStr;\r
 \r
@@ -1635,9 +1656,27 @@ class PcdDatabase {
         } else if (token.datumType == Token.DATUM_TYPE.BOOLEAN) {\r
             typeStr = "BOOLEAN";\r
         } else if (token.datumType == Token.DATUM_TYPE.POINTER) {\r
-            return String.format("%-20s%s[%d];\r\n", cName, token.datumSize);\r
+            int size;\r
+            if (token.isHiiDefaultValueUnicodeStringType()) {\r
+                typeStr = "UINT16";\r
+                //\r
+                // Include the NULL charactor\r
+                //\r
+                size = token.datumSize / 2 + 1;\r
+            } else {\r
+                typeStr = "UINT8";\r
+                if (token.isHiiDefaultValueASCIIStringType()) {\r
+                    //\r
+                    // Include the NULL charactor\r
+                    //\r
+                    size = token.datumSize + 1;\r
+                } else {\r
+                    size = token.datumSize;\r
+                }\r
+            }\r
+            return String.format("%-20s%s[%d];\r\n", typeStr, cName, size);\r
         } else {\r
-            typeStr = "";\r
+            throw new EntityException("Unknown DATUM_TYPE type in when generating code for VARIABLE_ENABLED PCD entry");\r
         }\r
 \r
         return String.format("%-20s%s;\r\n", typeStr, cName);\r
@@ -1678,7 +1717,7 @@ class PcdDatabase {
         s += tab + "{" + newLine;\r
 \r
         for (i = 0; i < t.skuData.size(); i++) {\r
-            if (t.isUnicodeStringType() && !t.isHiiEnable()) {\r
+            if (t.isUnicodeStringType()) {\r
                 s += tab + tab + String.format("{ %d }", stringTable.add(t.skuData.get(i).value.value, t));\r
             } else if (t.isHiiEnable()) {\r
                 /* VPD_HEAD definition\r
@@ -1686,6 +1725,7 @@ class PcdDatabase {
                       UINT16  GuidTableIndex;   // Offset in Guid Table in units of GUID.\r
                       UINT16  StringIndex;      // Offset in String Table in units of UINT16.\r
                       UINT16  Offset;           // Offset in Variable\r
+                      UINT16  DefaultValueOffset; // Offset of the Default Value\r
                     } VARIABLE_HEAD  ;\r
                  */\r
                 String variableDefaultName = String.format("%s_VariableDefault_%d", t.getPrimaryKeyString(), i); \r
@@ -1700,7 +1740,7 @@ class PcdDatabase {
                 // the instantiation for the default value.\r
                 //\r
                 CStructTypeDeclaration decl = new CStructTypeDeclaration (variableDefaultName,\r
-                                                        getDataTypeAlignmentSize(t),\r
+                                                        getHiiPtrTypeAlignmentSize(t),\r
                                                         getDataTypeDeclarationForVariableDefault_new(t, variableDefaultName, i),\r
                                                         true\r
                                                         ); \r
@@ -2077,12 +2117,12 @@ public class CollectPCDAction {
         boolean                             isDuplicate       = false;\r
         Token.PCD_TYPE                      pcdType           = Token.PCD_TYPE.UNKNOWN;\r
         Token.DATUM_TYPE                    datumType         = Token.DATUM_TYPE.UNKNOWN;\r
-        long                                 tokenNumber       = 0;\r
+        long                                tokenNumber       = 0;\r
         String                              moduleName        = null;\r
         String                              datum             = null;\r
         int                                 maxDatumSize      = 0;\r
-        String                                                         tokenSpaceGuidString = null;\r
-        \r
+        String[]                            tokenSpaceStrRet  = null;\r
+\r
         //\r
         // ----------------------------------------------\r
         // 1), Get all <ModuleSA> from FPD file.\r
@@ -2145,11 +2185,20 @@ public class CollectPCDAction {
             // ----------------------------------------------------------------------\r
             // \r
             for (pcdIndex = 0; pcdIndex < pcdBuildDataArray.size(); pcdIndex ++) {\r
-               //tokenSpaceGuidString = GlobalData.getGuidInfoFromCname(pcdBuildData.getTokenSpaceGuidCName())[1];\r
-                tokenSpaceGuidString = null;\r
                 pcdBuildData = pcdBuildDataArray.get(pcdIndex);\r
+                \r
+                try {\r
+                    tokenSpaceStrRet = GlobalData.getGuidInfoFromCname(pcdBuildData.getTokenSpaceGuidCName());\r
+                } catch ( Exception e ) {\r
+                    throw new EntityException ("Faile get Guid for token " + pcdBuildData.getCName() + ":" + e.getMessage());\r
+                }\r
+\r
+                if (tokenSpaceStrRet == null) {\r
+                    throw new EntityException ("Fail to get Token space guid for token" + pcdBuildData.getCName());\r
+                } \r
+\r
                 primaryKey   = Token.getPrimaryKeyString(pcdBuildData.getCName(),\r
-                                                         translateSchemaStringToUUID(tokenSpaceGuidString));\r
+                                                         translateSchemaStringToUUID(tokenSpaceStrRet[1]));\r
                 pcdType      = Token.getpcdTypeFromString(pcdBuildData.getItemType().toString());\r
                 datumType    = Token.getdatumTypeFromString(pcdBuildData.getDatumType().toString());\r
                 tokenNumber  = Long.decode(pcdBuildData.getToken().toString());\r
@@ -2278,10 +2327,18 @@ public class CollectPCDAction {
                     // If the token is not in database, create a new token instance and add\r
                     // a usage instance into this token in database.\r
                     // \r
-                       //String tokenSpaceString = GlobalData.getGuidInfoFromCname(pcdBuildData.getTokenSpaceGuidCName())[1];\r
-                    String tokenSpaceString = null;\r
+                    try {\r
+                        tokenSpaceStrRet = GlobalData.getGuidInfoFromCname(pcdBuildData.getTokenSpaceGuidCName());\r
+                    } catch (Exception e) {\r
+                        throw new EntityException("Fail to get token space guid for token " + token.cName);\r
+                    }\r
+\r
+                    if (tokenSpaceStrRet == null) {\r
+                        throw new EntityException("Fail to get token space guid for token " + token.cName);\r
+                    }\r
+\r
                     token = new Token(pcdBuildData.getCName(), \r
-                                      translateSchemaStringToUUID(tokenSpaceString));\r
+                                      translateSchemaStringToUUID(tokenSpaceStrRet[1]));\r
     \r
                     token.datumType     = datumType;\r
                     token.tokenNumber   = tokenNumber;\r
@@ -2674,6 +2731,7 @@ public class CollectPCDAction {
         String dynamicPrimaryKey = null;\r
         DynamicPcdBuildDefinitions                    dynamicPcdBuildDefinitions = null;\r
         List<DynamicPcdBuildDefinitions.PcdBuildData> dynamicPcdBuildDataArray   = null;\r
+        String[]                                      tokenSpaceStrRet           = null;\r
 \r
         //\r
         // If FPD document is not be opened, open and initialize it.\r
@@ -2701,8 +2759,18 @@ public class CollectPCDAction {
         for (index = 0; index < dynamicPcdBuildDataArray.size(); index ++) {\r
             //String tokenSpaceGuidString = GlobalData.getGuidInfoFromCname(dynamicPcdBuildDataArray.get(index).getTokenSpaceGuidCName())[1];\r
             String tokenSpaceGuidString = null;\r
+            try {\r
+                tokenSpaceStrRet = GlobalData.getGuidInfoFromCname(dynamicPcdBuildDataArray.get(index).getTokenSpaceGuidCName());\r
+            } catch (Exception e) {\r
+                throw new EntityException ("Fail to get token space guid for token " + dynamicPcdBuildDataArray.get(index).getCName());\r
+            }\r
+            \r
+            if (tokenSpaceStrRet == null) {\r
+                throw new EntityException ("Fail to get token space guid for token " + dynamicPcdBuildDataArray.get(index).getCName());\r
+            }\r
+\r
             dynamicPrimaryKey = Token.getPrimaryKeyString(dynamicPcdBuildDataArray.get(index).getCName(),\r
-                                                          translateSchemaStringToUUID(tokenSpaceGuidString));\r
+                                                          translateSchemaStringToUUID(tokenSpaceStrRet[1]));\r
             if (dynamicPrimaryKey.equalsIgnoreCase(token.getPrimaryKeyString())) {\r
                 return dynamicPcdBuildDataArray.get(index);\r
             }\r