]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/GenBuild/org/tianocore/build/pcd/action/CollectPCDAction.java
Fixed EDKT102;
[mirror_edk2.git] / Tools / Source / GenBuild / org / tianocore / build / pcd / action / CollectPCDAction.java
index 3a781c8001160160548ed411c8fcef3a9eb5730d..a0c371d063b5ffd1edae7023930a654d3f8630f9 100644 (file)
@@ -229,16 +229,24 @@ class StringTable {
 \r
 **/\r
 class SizeTable {\r
-    private ArrayList<Integer>  al;\r
+    private ArrayList<ArrayList<Integer>>  al;\r
     private ArrayList<String>   alComments;\r
-    private String              phase;\r
     private int                 len;\r
+    private String              phase;\r
     \r
     public SizeTable (String phase) {\r
-        this.phase = phase;\r
-        al = new ArrayList<Integer>();\r
+        al = new ArrayList<ArrayList<Integer>>();\r
         alComments = new ArrayList<String>();\r
         len = 0;\r
+        this.phase = phase;\r
+    }\r
+\r
+    public String getSizeMacro () {\r
+        return String.format(PcdDatabase.SizeTableSizeMacro, phase, getSize());\r
+    }\r
+    \r
+    private int getSize() {\r
+        return len == 0 ? 1 : len;\r
     }\r
 \r
     public void genCode (ArrayList<CStructTypeDeclaration> declaList, HashMap<String, String> instTable, String phase) {\r
@@ -262,6 +270,7 @@ class SizeTable {
     }\r
 \r
     private ArrayList<String> getInstantiation () {\r
+        final String comma   = ",";\r
         ArrayList<String> Output = new ArrayList<String>();\r
 \r
         Output.add("/* SizeTable */");\r
@@ -270,14 +279,23 @@ class SizeTable {
             Output.add("\t0");\r
         } else {\r
             for (int index = 0; index < al.size(); index++) {\r
-                Integer n = al.get(index);\r
-                String str = "\t" + n.toString();\r
+                ArrayList<Integer> ial = al.get(index);\r
+                \r
+                String str = "\t";\r
+                \r
+                for (int index2 = 0; index2 < ial.size(); index2++) {\r
+                    str += " " + ial.get(index2).toString();\r
+                    if (index2 != ial.size() - 1) {\r
+                        str += comma;\r
+                    }\r
+                }\r
 \r
+                str += " /* " + alComments.get(index) + " */"; \r
+                \r
                 if (index != (al.size() - 1)) {\r
-                    str += ",";\r
+                    str += comma;\r
                 }\r
 \r
-                str += " /* " + alComments.get(index) + " */"; \r
                 Output.add(str);\r
     \r
             }\r
@@ -287,20 +305,25 @@ class SizeTable {
         return Output;\r
     }\r
 \r
-    public int add (Token token) {\r
-        int index = len;\r
+    public void add (Token token) {\r
 \r
-        len++; \r
-        al.add(token.datumSize);\r
+        //\r
+        // We only have size information for POINTER type PCD entry.\r
+        //\r
+        if (token.datumType != Token.DATUM_TYPE.POINTER) {\r
+            return;\r
+        }\r
+        \r
+        ArrayList<Integer> ial = token.getPointerTypeSize();\r
+        \r
+        len+= ial.size(); \r
+\r
+        al.add(ial);\r
         alComments.add(token.getPrimaryKeyString());\r
 \r
-        return index;\r
+        return;\r
     }\r
     \r
-    public int getTableLen () {\r
-        return al.size() == 0 ? 1 : al.size();\r
-    }\r
-\r
 }\r
 \r
 /**\r
@@ -344,7 +367,7 @@ class GuidTable {
         cCode += String.format(PcdDatabase.GuidTableDeclaration, phase); \r
         decl = new CStructTypeDeclaration (\r
                                             name,\r
-                                            8,\r
+                                            4,\r
                                             cCode,\r
                                             true\r
                                            );  \r
@@ -407,7 +430,7 @@ class GuidTable {
         // If so, return the GuidTable index.\r
         //\r
         for (int i = 0; i < al.size(); i++) {\r
-            if (al.get(i).equals(uuid)) {\r
+            if (al.get(i).compareTo(uuid) == 0) {\r
                 return i;\r
             }\r
         }\r
@@ -674,6 +697,25 @@ class LocalTokenNumberTable {
             str += " | PCD_TYPE_VPD";\r
         }\r
         \r
+        switch (token.datumType) {\r
+        case UINT8:\r
+        case BOOLEAN:\r
+            str += " | PCD_DATUM_TYPE_UINT8";\r
+            break;\r
+        case UINT16:\r
+            str += " | PCD_DATUM_TYPE_UINT16";\r
+            break;\r
+        case UINT32:\r
+            str += " | PCD_DATUM_TYPE_UINT32";\r
+            break;\r
+        case UINT64:\r
+            str += " | PCD_DATUM_TYPE_UINT64";\r
+            break;\r
+        case POINTER:\r
+            str += " | PCD_DATUM_TYPE_POINTER";\r
+            break;\r
+        }\r
+        \r
         al.add(str);\r
         alComment.add(token.getPrimaryKeyString());\r
 \r
@@ -710,7 +752,7 @@ class ExMapTable {
     }\r
 \r
     private ArrayList<ExTriplet> al;\r
-    private ArrayList<String>    alComment;\r
+    private Map<ExTriplet, String> alComment;\r
     private String               phase;\r
     private int                  len;\r
     private int                   bodyLineNum;\r
@@ -718,7 +760,7 @@ class ExMapTable {
     public ExMapTable (String phase) {\r
         this.phase = phase;\r
         al = new ArrayList<ExTriplet>();\r
-        alComment = new ArrayList<String>();\r
+        alComment = new HashMap<ExTriplet, String>();\r
         bodyLineNum = 0;\r
         len = 0;\r
     }\r
@@ -773,7 +815,7 @@ class ExMapTable {
             str += e.localTokenIdx.toString() + ", ";\r
             str += e.guidTableIdx.toString();\r
 \r
-            str += "}" + " /* " + alComment.get(index) + " */" ;\r
+            str += "}" + " /* " + alComment.get(e) + " */" ;\r
 \r
             if (index != al.size() - 1) {\r
                 str += ",";\r
@@ -792,9 +834,11 @@ class ExMapTable {
     public int add (int localTokenIdx, long exTokenNum, int guidTableIdx, String name) {\r
         int index = len;\r
 \r
-        len++; \r
-        al.add(new ExTriplet(guidTableIdx, exTokenNum, localTokenIdx));\r
-        alComment.add(name);\r
+        len++;\r
+        ExTriplet et = new ExTriplet(guidTableIdx, exTokenNum, localTokenIdx); \r
+\r
+        al.add(et);\r
+        alComment.put(et, name);\r
 \r
         return index;\r
     }\r
@@ -851,7 +895,7 @@ class PcdDatabase {
     public final static String GuidTableDeclaration             = "EFI_GUID            GuidTable[%s_GUID_TABLE_SIZE];\r\n";\r
     public final static String LocalTokenNumberTableDeclaration = "UINT32              LocalTokenNumberTable[%s_LOCAL_TOKEN_NUMBER_TABLE_SIZE];\r\n";\r
     public final static String StringTableDeclaration           = "UINT16              StringTable[%s_STRING_TABLE_SIZE];\r\n";\r
-    public final static String SizeTableDeclaration             = "UINT16              SizeTable[%s_LOCAL_TOKEN_NUMBER_TABLE_SIZE];\r\n";\r
+    public final static String SizeTableDeclaration             = "SIZE_INFO           SizeTable[%s_SIZE_TABLE_SIZE];\r\n";\r
     public final static String SkuIdTableDeclaration            = "UINT8               SkuIdTable[%s_SKUID_TABLE_SIZE];\r\n";\r
 \r
 \r
@@ -860,6 +904,7 @@ class PcdDatabase {
     public final static String GuidTableSizeMacro               = "#define %s_GUID_TABLE_SIZE         %d\r\n"; \r
     public final static String LocalTokenNumberTableSizeMacro   = "#define %s_LOCAL_TOKEN_NUMBER_TABLE_SIZE            %d\r\n";\r
     public final static String LocalTokenNumberSizeMacro               = "#define %s_LOCAL_TOKEN_NUMBER            %d\r\n";\r
+    public final static String SizeTableSizeMacro               = "#define %s_SIZE_TABLE_SIZE            %d\r\n";\r
     public final static String StringTableSizeMacro             = "#define %s_STRING_TABLE_SIZE       %d\r\n";\r
     public final static String SkuIdTableSizeMacro              = "#define %s_SKUID_TABLE_SIZE        %d\r\n";\r
 \r
@@ -1144,6 +1189,7 @@ class PcdDatabase {
         macroStr += skuIdTable.getSizeMacro();\r
         macroStr += localTokenNumberTable.getSizeMacro();\r
         macroStr += exMapTable.getSizeMacro();\r
+        macroStr += sizeTable.getSizeMacro();\r
 \r
         //\r
         // Generate existance info Macro for all Tables\r
@@ -1311,6 +1357,9 @@ class PcdDatabase {
         }\r
     }\r
     \r
+    //\r
+    // privateGlobalName and privateGlobalCCode is used to pass output to caller of getCDeclarationString\r
+    //\r
     private void getCDeclarationString(Token t) \r
         throws EntityException {\r
         \r
@@ -1321,7 +1370,7 @@ class PcdDatabase {
         }\r
 \r
         String type = getCType(t);\r
-        if ((t.datumType == Token.DATUM_TYPE.POINTER) && (!t.isHiiEnable())) {\r
+        if ((t.datumType == Token.DATUM_TYPE.POINTER) && (!t.isHiiEnable()) && (!t.isUnicodeStringType())) {\r
             int bufferSize;\r
             if (t.isASCIIStringType()) {\r
                 //\r
@@ -2728,9 +2777,7 @@ public class CollectPCDAction {
         }\r
 \r
         pcdType = Token.getpcdTypeFromString(dynamicInfo.getItemType().toString());\r
-        if (pcdType == Token.PCD_TYPE.DYNAMIC_EX) {\r
-            token.dynamicExTokenNumber = tokenNumber;\r
-        }\r
+        token.dynamicExTokenNumber = tokenNumber;\r
 \r
         skuInfoList = dynamicInfo.getSkuInfoList();\r
 \r
@@ -3007,14 +3054,16 @@ public class CollectPCDAction {
     **/\r
     public static void main(String argv[]) throws EntityException {\r
         CollectPCDAction ca = new CollectPCDAction();\r
-        ca.setWorkspacePath("m:/tianocore/edk2");\r
-        ca.setFPDFilePath("m:/tianocore/edk2/EdkNt32Pkg/Nt32.fpd");\r
+        String projectDir = "x:/edk2";\r
+        ca.setWorkspacePath(projectDir);\r
+        ca.setFPDFilePath(projectDir + "/EdkNt32Pkg/Nt32.fpd");\r
         ca.setActionMessageLevel(ActionMessage.MAX_MESSAGE_LEVEL);\r
         GlobalData.initInfo("Tools" + File.separator + "Conf" + File.separator + "FrameworkDatabase.db",\r
-                            "m:/tianocore/edk2",\r
+                            projectDir,\r
                             "tools_def.txt");\r
+        System.out.println("After initInfo!");\r
         FpdParserTask fpt = new FpdParserTask();\r
-        fpt.parseFpdFile(new File("m:/tianocore/edk2/EdkNt32Pkg/Nt32.fpd"));\r
+        fpt.parseFpdFile(new File(projectDir + "/EdkNt32Pkg/Nt32.fpd"));\r
         ca.execute();\r
     }\r
 }\r