]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/GenBuild/org/tianocore/build/pcd/action/PCDAutoGenAction.java
New tool.
[mirror_edk2.git] / Tools / Source / GenBuild / org / tianocore / build / pcd / action / PCDAutoGenAction.java
index c363aab6a5340a7bd0b9670daa19e4e3c52adeb5..7365345c39c131b1da72f9404060bc5cf5b16f01 100644 (file)
@@ -19,11 +19,15 @@ package org.tianocore.build.pcd.action;
 import java.io.File;\r
 import java.util.ArrayList;\r
 import java.util.List;\r
+import java.util.Map;\r
+import java.util.Set;\r
 import java.util.UUID;\r
 import java.util.regex.Matcher;\r
 import java.util.regex.Pattern;\r
 \r
+import org.apache.xmlbeans.XmlObject;\r
 import org.tianocore.build.global.GlobalData;\r
+import org.tianocore.build.global.SurfaceAreaQuery;\r
 import org.tianocore.build.pcd.entity.MemoryDatabaseManager;\r
 import org.tianocore.build.pcd.entity.Token;\r
 import org.tianocore.build.pcd.entity.UsageInstance;\r
@@ -167,36 +171,167 @@ public class PCDAutoGenAction extends BuildAction {
         return cAutoGenString;\r
     }\r
 \r
+//    /**\r
+//      Construct function\r
+//  \r
+//      This function mainly initialize some member variable.\r
+//     \r
+//      @param moduleName            Parameter of this action class.\r
+//      @param isEmulatedPCDDriver   Parameter of this action class.\r
+//    **/\r
+//    public PCDAutoGenAction(String   moduleName, \r
+//                            UUID     moduleGuid, \r
+//                            String   packageName,\r
+//                            UUID     packageGuid,\r
+//                            String   arch,\r
+//                            String   version,\r
+//                            boolean  isBuildUsedLibrary,\r
+//                            String[] pcdNameArray) {\r
+//        dbManager       = null;\r
+//        hAutoGenString  = "";\r
+//        cAutoGenString  = "";\r
+//\r
+//        setModuleName(moduleName);\r
+//        setModuleGuid(moduleGuid);\r
+//        setPackageName(packageName);\r
+//        setPackageGuid(packageGuid);\r
+//        setPcdNameArray(pcdNameArray);\r
+//        setArch(arch);\r
+//        setVersion(version);\r
+//        setIsBuildUsedLibrary(isBuildUsedLibrary);\r
+//    }\r
+\r
+    \r
     /**\r
-      Construct function\r
+    Construct function\r
+\r
+    This function mainly initialize some member variable.\r
+   \r
+    @param moduleName            Parameter of this action class.\r
+    @param isEmulatedPCDDriver   Parameter of this action class.\r
+  **/\r
+  public PCDAutoGenAction(String   moduleName, \r
+                          String   moduleGuidString, \r
+                          String   packageName,\r
+                          String   packageGuidString,\r
+                          String   arch,\r
+                          String   version,\r
+                          boolean  isBuildUsedLibrary,\r
+                          String[] pcdNameArray) \r
+       throws BuildActionException {\r
+      dbManager       = null;\r
+      hAutoGenString  = "";\r
+      cAutoGenString  = "";\r
+      try {\r
+      setModuleName(moduleName);\r
+      setModuleGuid(translateSchemaStringToUUID(moduleGuidString));\r
+      setPackageName(packageName);\r
+      setPackageGuid(translateSchemaStringToUUID(packageGuidString));\r
+      setPcdNameArray(pcdNameArray);\r
+      setArch(arch);\r
+      setVersion(version);\r
+      setIsBuildUsedLibrary(isBuildUsedLibrary);\r
+      \r
+      if (isBuildUsedLibrary) {\r
+          System.out.println("Build for library");\r
+          for (int index = 0; index < pcdNameArray.length; index ++) {\r
+              System.out.println(pcdNameArray[index]);\r
+          }\r
+      }\r
+      } catch (EntityException e){\r
+         throw new BuildActionException(e.getMessage());\r
+      }\r
+  }\r
+\r
+  /**\r
+  Translate the schema string to UUID instance.\r
+  \r
+  In schema, the string of UUID is defined as following two types string:\r
+   1) GuidArrayType: pattern = 0x[a-fA-F0-9]{1,8},( )*0x[a-fA-F0-9]{1,4},(\r
+   )*0x[a-fA-F0-9]{1,4}(,( )*\{)?(,?( )*0x[a-fA-F0-9]{1,2}){8}( )*(\})?\r
+  \r
+   2) GuidNamingConvention: pattern =\r
+   [a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\r
+  \r
+  This function will convert string and create uuid instance.\r
+  \r
+  @param uuidString    UUID string in XML file\r
+  \r
+  @return UUID         UUID instance\r
+**/\r
+private UUID translateSchemaStringToUUID(String uuidString) \r
+   throws EntityException {\r
+   String      temp;\r
+   String[]    splitStringArray;\r
+   int         index;\r
+   int         chIndex;\r
+   int         chLen;\r
+\r
+   if (uuidString == null) {\r
+       return null;\r
+   }\r
+\r
+   if (uuidString.length() == 0) {\r
+       return null;\r
+   }\r
+\r
+   if (uuidString.equals("0") ||\r
+       uuidString.equalsIgnoreCase("0x0")) {\r
+       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
+   // \r
+   if ((uuidString.charAt(0) == '0') && ((uuidString.charAt(1) == 'x') || (uuidString.charAt(1) == 'X'))) {\r
+       splitStringArray = uuidString.split("," );\r
+       if (splitStringArray.length != 11) {\r
+           throw new EntityException ("[FPD file error] Wrong format for UUID string: " + uuidString);\r
+       }\r
+\r
+       //\r
+       // Remove blank space from these string and remove header string "0x"\r
+       // \r
+       for (index = 0; index < 11; index ++) {\r
+           splitStringArray[index] = splitStringArray[index].trim();\r
+           splitStringArray[index] = splitStringArray[index].substring(2, splitStringArray[index].length());\r
+       }\r
+\r
+       //\r
+       // Add heading '0' to normalize the string length\r
+       // \r
+       for (index = 3; index < 11; index ++) {\r
+           chLen = splitStringArray[index].length();\r
+           for (chIndex = 0; chIndex < 2 - chLen; chIndex ++) {\r
+               splitStringArray[index] = "0" + splitStringArray[index];\r
+           }\r
+       }\r
+\r
+       //\r
+       // construct the final GuidNamingConvention string\r
+       // \r
+       temp = String.format("%s-%s-%s-%s%s-%s%s%s%s%s%s",\r
+                            splitStringArray[0],\r
+                            splitStringArray[1],\r
+                            splitStringArray[2],\r
+                            splitStringArray[3],\r
+                            splitStringArray[4],\r
+                            splitStringArray[5],\r
+                            splitStringArray[6],\r
+                            splitStringArray[7],\r
+                            splitStringArray[8],\r
+                            splitStringArray[9],\r
+                            splitStringArray[10]);\r
+       uuidString = temp;\r
+   }\r
+\r
+   return UUID.fromString(uuidString);\r
+       }\r
   \r
-      This function mainly initialize some member variable.\r
-     \r
-      @param moduleName            Parameter of this action class.\r
-      @param isEmulatedPCDDriver   Parameter of this action class.\r
-    **/\r
-    public PCDAutoGenAction(String   moduleName, \r
-                            UUID     moduleGuid, \r
-                            String   packageName,\r
-                            UUID     packageGuid,\r
-                            String   arch,\r
-                            String   version,\r
-                            boolean  isBuildUsedLibrary,\r
-                            String[] pcdNameArray) {\r
-        dbManager       = null;\r
-        hAutoGenString  = "";\r
-        cAutoGenString  = "";\r
-\r
-        setModuleName(moduleName);\r
-        setModuleGuid(moduleGuid);\r
-        setPackageName(packageName);\r
-        setPackageGuid(packageGuid);\r
-        setPcdNameArray(pcdNameArray);\r
-        setArch(arch);\r
-        setVersion(version);\r
-        setIsBuildUsedLibrary(isBuildUsedLibrary);\r
-    }\r
-\r
     /**\r
       check the parameter for action class.\r
       \r
@@ -265,12 +400,14 @@ public class PCDAutoGenAction extends BuildAction {
             dbManager.UsageInstanceContext = usageInstanceArray;\r
             dbManager.CurrentModuleName    = moduleName; \r
         } else {\r
+            System.out.println(String.format("Generate %s 's library", dbManager.CurrentModuleName));\r
             usageContext = dbManager.UsageInstanceContext;\r
             //\r
             // For building MDE package, although all module are library, but PCD entries of \r
             // these library should be used to autogen.\r
             // \r
             if (usageContext == null) {\r
+                System.out.println("context is null");\r
                 usageInstanceArray  = dbManager.getUsageInstanceArrayByModuleName(moduleName,\r
                                                                                   moduleGuid,\r
                                                                                   packageName,\r
@@ -279,6 +416,7 @@ public class PCDAutoGenAction extends BuildAction {
                                                                                   version);\r
             } else {\r
                 usageInstanceArray = new ArrayList<UsageInstance>();\r
+                System.out.println("context is not null!");\r
                 //\r
                 // Remove PCD entries which are not belong to this library.\r
                 // \r
@@ -289,6 +427,7 @@ public class PCDAutoGenAction extends BuildAction {
 \r
                     for (index2 = 0; index2 < pcdNameArray.length; index2 ++) {\r
                         if (pcdNameArray[index2].equalsIgnoreCase(usageContext.get(index).parentToken.cName)) {\r
+                            System.out.println("Found! for PCD entry " + pcdNameArray[index2]);\r
                             usageInstanceArray.add(usageContext.get(index));\r
                             break;\r
                         }\r
@@ -404,7 +543,7 @@ public class PCDAutoGenAction extends BuildAction {
         //\r
         CollectPCDAction collectionAction = new CollectPCDAction();\r
         GlobalData.initInfo("Tools" + File.separator + "Conf" + File.separator + "FrameworkDatabase.db",\r
-                            WorkSpace);\r
+                            WorkSpace,null);\r
 \r
         try {\r
             collectionAction.perform(WorkSpace, \r
@@ -417,18 +556,18 @@ public class PCDAutoGenAction extends BuildAction {
         //\r
         // Then execute the PCDAuotoGenAction to get generated Autogen.h and Autogen.c\r
         //\r
-        PCDAutoGenAction autogenAction = new PCDAutoGenAction("PcdPeim",\r
-                                                              null,\r
-                                                              null,\r
-                                                              null,\r
-                                                              "IA32",\r
-                                                              null,\r
-                                                              true,\r
-                                                              nameArray);\r
-        autogenAction.execute();\r
-\r
-        System.out.println(autogenAction.OutputH());\r
-        System.out.println("WQWQWQWQWQ");\r
-        System.out.println(autogenAction.OutputC());\r
+//        PCDAutoGenAction autogenAction = new PCDAutoGenAction("MonoStatusCode",\r
+//                                                              null,\r
+//                                                              null,\r
+//                                                              null,\r
+//                                                              "IA32",\r
+//                                                              null,\r
+//                                                              false,\r
+//                                                              nameArray);\r
+//        autogenAction.execute();\r
+//\r
+//        System.out.println(autogenAction.OutputH());\r
+//        System.out.println("WQWQWQWQWQ");\r
+//        System.out.println(autogenAction.OutputC());\r
     }\r
 }\r