]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/AutoGen/AutoGen.py
BaseTools: use set instead of list for a variable to be used with in
[mirror_edk2.git] / BaseTools / Source / Python / AutoGen / AutoGen.py
index 5baabf2a0c74f293648ef46e216fbef5ea8e496b..a4e36d1a2fb4f3a47157f932157d7a7e8a86f222 100644 (file)
@@ -256,12 +256,6 @@ class WorkspaceAutoGen(AutoGen):
     def _InitWorker(self, WorkspaceDir, ActivePlatform, Target, Toolchain, ArchList, MetaFileDb,\r
               BuildConfig, ToolDefinition, FlashDefinitionFile='', Fds=None, Fvs=None, Caps=None, SkuId='', UniFlag=None,\r
               Progress=None, BuildModule=None):\r
-        if Fds is None:\r
-            Fds = []\r
-        if Fvs is None:\r
-            Fvs = []\r
-        if Caps is None:\r
-            Caps = []\r
         self.BuildDatabase  = MetaFileDb\r
         self.MetaFile       = ActivePlatform\r
         self.WorkspaceDir   = WorkspaceDir\r
@@ -276,9 +270,9 @@ class WorkspaceAutoGen(AutoGen):
         self.TargetTxt      = BuildConfig\r
         self.ToolDef        = ToolDefinition\r
         self.FdfFile        = FlashDefinitionFile\r
-        self.FdTargetList   = Fds\r
-        self.FvTargetList   = Fvs\r
-        self.CapTargetList  = Caps\r
+        self.FdTargetList   = Fds if Fds else []\r
+        self.FvTargetList   = Fvs if Fvs else []\r
+        self.CapTargetList  = Caps if Caps else []\r
         self.AutoGenObjectList = []\r
         self._BuildDir      = None\r
         self._FvDir         = None\r
@@ -361,13 +355,12 @@ class WorkspaceAutoGen(AutoGen):
             # but the path (self.MetaFile.Path) is the real path\r
             for key in self.FdfProfile.InfDict:\r
                 if key == 'ArchTBD':\r
-                    Platform_cache = {}\r
                     MetaFile_cache = {}\r
                     for Arch in self.ArchList:\r
-                        Platform_cache[Arch] = self.BuildDatabase[self.MetaFile, Arch, Target, Toolchain]\r
+                        Current_Platform_cache = self.BuildDatabase[self.MetaFile, Arch, Target, Toolchain]\r
                         MetaFile_cache[Arch] = set()\r
-                        for Pkey in Platform_cache[Arch].Modules:\r
-                            MetaFile_cache[Arch].add(Platform_cache[Arch].Modules[Pkey].MetaFile)\r
+                        for Pkey in Current_Platform_cache.Modules:\r
+                            MetaFile_cache[Arch].add(Current_Platform_cache.Modules[Pkey].MetaFile)\r
                     for Inf in self.FdfProfile.InfDict[key]:\r
                         ModuleFile = PathClass(NormPath(Inf), GlobalData.gWorkspace, Arch)\r
                         for Arch in self.ArchList:\r
@@ -410,7 +403,8 @@ class WorkspaceAutoGen(AutoGen):
         # apply SKU and inject PCDs from Flash Definition file\r
         for Arch in self.ArchList:\r
             Platform = self.BuildDatabase[self.MetaFile, Arch, Target, Toolchain]\r
-\r
+            PlatformPcds = Platform.Pcds\r
+            self._GuidDict = Platform._GuidDict\r
             SourcePcdDict = {'DynamicEx':set(), 'PatchableInModule':set(),'Dynamic':set(),'FixedAtBuild':set()}\r
             BinaryPcdDict = {'DynamicEx':set(), 'PatchableInModule':set()}\r
             SourcePcdDict_Keys = SourcePcdDict.keys()\r
@@ -1295,7 +1289,7 @@ class PlatformAutoGen(AutoGen):
                     if DscPcd.Type != "FixedAtBuild":\r
                         continue\r
                 if key in ShareFixedAtBuildPcdsSameValue and ShareFixedAtBuildPcdsSameValue[key]:                    \r
-                    LibAuto.ConstPcd[key] = Pcd.DefaultValue\r
+                    LibAuto.ConstPcd[key] = FixedAtBuildPcds[key]\r
 \r
     def CollectVariables(self, DynamicPcdSet):\r
 \r
@@ -1456,13 +1450,10 @@ class PlatformAutoGen(AutoGen):
                         self._NonDynaPcdList_.remove (self._NonDynaPcdList_[Index])\r
                         PcdFromModule.Pending = False\r
                         self._NonDynaPcdList_.append (PcdFromModule)\r
-        # Parse the DynamicEx PCD from the AsBuild INF module list of FDF.\r
-        DscModuleList = []\r
-        for ModuleInf in self.Platform.Modules.keys():\r
-            DscModuleList.append (os.path.normpath(ModuleInf.Path))\r
+        DscModuleSet = {os.path.normpath(ModuleInf.Path) for ModuleInf in self.Platform.Modules}\r
         # add the PCD from modules that listed in FDF but not in DSC to Database \r
         for InfName in FdfModuleList:\r
-            if InfName not in DscModuleList:\r
+            if InfName not in DscModuleSet:\r
                 InfClass = PathClass(InfName)\r
                 M = self.BuildDatabase[InfClass, self.Arch, self.BuildTarget, self.ToolChain]\r
                 # If a module INF in FDF but not in current arch's DSC module list, it must be module (either binary or source) \r
@@ -2354,6 +2345,7 @@ class PlatformAutoGen(AutoGen):
 \r
             if FromPcd.MaxDatumSize:\r
                 ToPcd.MaxDatumSize = FromPcd.MaxDatumSize\r
+                ToPcd.MaxSizeUserSet = FromPcd.MaxDatumSize\r
             if FromPcd.DefaultValue:\r
                 ToPcd.DefaultValue = FromPcd.DefaultValue\r
             if FromPcd.TokenValue:\r
@@ -2456,6 +2448,7 @@ class PlatformAutoGen(AutoGen):
         for Name, Guid in Pcds:\r
             Pcd = Pcds[Name, Guid]\r
             if Pcd.DatumType == "VOID*" and Pcd.MaxDatumSize in ['', None]:\r
+                Pcd.MaxSizeUserSet = None\r
                 Value = Pcd.DefaultValue\r
                 if Value in [None, '']:\r
                     Pcd.MaxDatumSize = '1'\r
@@ -2788,7 +2781,7 @@ class ModuleAutoGen(AutoGen):
 \r
         self.Workspace = Workspace\r
         self.WorkspaceDir = Workspace.WorkspaceDir\r
-\r
+        self._GuidDict = Workspace._GuidDict\r
         self.MetaFile = ModuleFile\r
         self.PlatformInfo = PlatformAutoGen(Workspace, PlatformFile, Target, Toolchain, Arch)\r
 \r
@@ -4157,9 +4150,12 @@ class ModuleAutoGen(AutoGen):
                             Padding = Padding * 2\r
                             ArraySize = ArraySize / 2\r
                         if ArraySize < (len(PcdValue) + 1):\r
-                            EdkLogger.error("build", AUTOGEN_ERROR,\r
+                            if Pcd.MaxSizeUserSet:\r
+                                EdkLogger.error("build", AUTOGEN_ERROR,\r
                                             "The maximum size of VOID* type PCD '%s.%s' is less than its actual size occupied." % (Pcd.TokenSpaceGuidCName, TokenCName)\r
                                             )\r
+                            else:\r
+                                ArraySize = len(PcdValue) + 1\r
                         if ArraySize > len(PcdValue) + 1:\r
                             NewValue = NewValue + Padding * (ArraySize - len(PcdValue) - 1)\r
                         PcdValue = NewValue + Padding.strip().rstrip(',') + '}'\r
@@ -4167,9 +4163,12 @@ class ModuleAutoGen(AutoGen):
                         PcdValue = PcdValue.rstrip('}') + ', 0x00' * (ArraySize - len(PcdValue.split(',')))\r
                         PcdValue += '}'\r
                     else:\r
-                        EdkLogger.error("build", AUTOGEN_ERROR,\r
+                        if Pcd.MaxSizeUserSet:\r
+                            EdkLogger.error("build", AUTOGEN_ERROR,\r
                                         "The maximum size of VOID* type PCD '%s.%s' is less than its actual size occupied." % (Pcd.TokenSpaceGuidCName, TokenCName)\r
                                         )\r
+                        else:\r
+                            ArraySize = len(PcdValue) + 1\r
                 PcdItem = '%s.%s|%s|0x%X' % \\r
                     (Pcd.TokenSpaceGuidCName, TokenCName, PcdValue, PatchPcd[1])\r
                 PcdComments = ''\r