]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/AutoGen/AutoGen.py
BaseTools: Structure Pcd in CommandLine.
[mirror_edk2.git] / BaseTools / Source / Python / AutoGen / AutoGen.py
index 1cf50e872fcd0f695bcdce1b2596000d5a4c367e..405bfa145a22b66251b5ec92c0a2d0da8095f6cc 100644 (file)
@@ -398,89 +398,10 @@ class WorkspaceAutoGen(AutoGen):
         for Arch in self.ArchList:\r
             Platform = self.BuildDatabase[self.MetaFile, Arch, Target, Toolchain]\r
 \r
-            DecPcds = {}\r
-            DecPcdsKey = set()\r
-            PGen = PlatformAutoGen(self, self.MetaFile, Target, Toolchain, Arch)\r
-            if GlobalData.BuildOptionPcd:\r
-                for i, pcd in enumerate(GlobalData.BuildOptionPcd):\r
-                    if type(pcd) is tuple:\r
-                        continue\r
-                    (pcdname, pcdvalue) = pcd.split('=')\r
-                    if not pcdvalue:\r
-                        EdkLogger.error('build', AUTOGEN_ERROR, "No Value specified for the PCD %s." % (pcdname))\r
-                    if '.' in pcdname:\r
-                        (TokenSpaceGuidCName, TokenCName) = pcdname.split('.')\r
-                        HasTokenSpace = True\r
-                    else:\r
-                        TokenCName = pcdname\r
-                        TokenSpaceGuidCName = ''\r
-                        HasTokenSpace = False\r
-                    TokenSpaceGuidCNameList = []\r
-                    FoundFlag = False\r
-                    PcdDatumType = ''\r
-                    NewValue = ''\r
-                    for package in PGen.PackageList:\r
-                        Guids = package.Guids\r
-                        self._GuidDict.update(Guids)\r
-                    for package in PGen.PackageList:\r
-                        for key in package.Pcds:\r
-                            PcdItem = package.Pcds[key]\r
-                            if HasTokenSpace:\r
-                                if (PcdItem.TokenCName, PcdItem.TokenSpaceGuidCName) == (TokenCName, TokenSpaceGuidCName):\r
-                                    PcdDatumType = PcdItem.DatumType\r
-                                    if pcdvalue.startswith('H'):\r
-                                        try:\r
-                                            pcdvalue = ValueExpressionEx(pcdvalue[1:], PcdDatumType, self._GuidDict)(True)\r
-                                        except BadExpression, Value:\r
-                                            if Value.result > 1:\r
-                                                EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s",  %s' %\r
-                                                                (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))\r
-                                        pcdvalue = 'H' + pcdvalue\r
-                                    NewValue = BuildOptionPcdValueFormat(TokenSpaceGuidCName, TokenCName, PcdDatumType, pcdvalue)\r
-                                    FoundFlag = True\r
-                            else:\r
-                                if PcdItem.TokenCName == TokenCName:\r
-                                    if not PcdItem.TokenSpaceGuidCName in TokenSpaceGuidCNameList:\r
-                                        if len (TokenSpaceGuidCNameList) < 1:\r
-                                            TokenSpaceGuidCNameList.append(PcdItem.TokenSpaceGuidCName)\r
-                                            PcdDatumType = PcdItem.DatumType\r
-                                            TokenSpaceGuidCName = PcdItem.TokenSpaceGuidCName\r
-                                            if pcdvalue.startswith('H'):\r
-                                                try:\r
-                                                    pcdvalue = ValueExpressionEx(pcdvalue[1:], PcdDatumType, self._GuidDict)(True)\r
-                                                except BadExpression, Value:\r
-                                                    EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %\r
-                                                                    (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))\r
-                                                pcdvalue = 'H' + pcdvalue\r
-                                            NewValue = BuildOptionPcdValueFormat(TokenSpaceGuidCName, TokenCName, PcdDatumType, pcdvalue)\r
-                                            FoundFlag = True\r
-                                        else:\r
-                                            EdkLogger.error(\r
-                                                    'build',\r
-                                                     AUTOGEN_ERROR,\r
-                                                    "The Pcd %s is found under multiple different TokenSpaceGuid: %s and %s." % (TokenCName, PcdItem.TokenSpaceGuidCName, TokenSpaceGuidCNameList[0])\r
-                                                    )\r
 \r
-                    GlobalData.BuildOptionPcd[i] = (TokenSpaceGuidCName, TokenCName, NewValue)\r
 \r
-                    if not FoundFlag:\r
-                        if HasTokenSpace:\r
-                            EdkLogger.error('build', AUTOGEN_ERROR, "The Pcd %s.%s is not found in the DEC file." % (TokenSpaceGuidCName, TokenCName))\r
-                        else:\r
-                            EdkLogger.error('build', AUTOGEN_ERROR, "The Pcd %s is not found in the DEC file." % (TokenCName))\r
 \r
-                    for BuildData in PGen.BuildDatabase._CACHE_.values():\r
-                        if BuildData.Arch != Arch:\r
-                            continue\r
-                        if BuildData.MetaFile.Ext == '.dec':\r
-                            continue\r
-                        for key in BuildData.Pcds:\r
-                            PcdItem = BuildData.Pcds[key]\r
-                            if (TokenSpaceGuidCName, TokenCName) == (PcdItem.TokenSpaceGuidCName, PcdItem.TokenCName):\r
-                                PcdItem.DefaultValue = NewValue\r
 \r
-                    if (TokenCName, TokenSpaceGuidCName) in PcdSet:\r
-                        PcdSet[(TokenCName, TokenSpaceGuidCName)] = NewValue\r
 \r
             SourcePcdDict = {'DynamicEx':[], 'PatchableInModule':[],'Dynamic':[],'FixedAtBuild':[]}\r
             BinaryPcdDict = {'DynamicEx':[], 'PatchableInModule':[]}\r
@@ -488,6 +409,7 @@ class WorkspaceAutoGen(AutoGen):
             BinaryPcdDict_Keys = BinaryPcdDict.keys()\r
 \r
             # generate the SourcePcdDict and BinaryPcdDict\r
+            PGen = PlatformAutoGen(self, self.MetaFile, Target, Toolchain, Arch)\r
             for BuildData in PGen.BuildDatabase._CACHE_.values():\r
                 if BuildData.Arch != Arch:\r
                     continue\r
@@ -630,6 +552,8 @@ class WorkspaceAutoGen(AutoGen):
                 ModuleData = self.BuildDatabase[ModuleFile, Arch, Target, Toolchain]\r
                 PkgSet.update(ModuleData.Packages)\r
             Pkgs = list(PkgSet) + list(PGen.PackageList)\r
+            DecPcds = {}\r
+            DecPcdsKey = set()\r
             for Pkg in Pkgs:\r
                 for Pcd in Pkg.Pcds:\r
                     DecPcds[Pcd[0], Pcd[1]] = Pkg.Pcds[Pcd]\r
@@ -1446,15 +1370,25 @@ class PlatformAutoGen(AutoGen):
     def CollectPlatformDynamicPcds(self):\r
         # Override the platform Pcd's value by build option\r
         if GlobalData.BuildOptionPcd:\r
-            for key in self.Platform.Pcds:\r
-                PlatformPcd = self.Platform.Pcds[key]\r
-                for PcdItem in GlobalData.BuildOptionPcd:\r
-                    if (PlatformPcd.TokenSpaceGuidCName, PlatformPcd.TokenCName) == (PcdItem[0], PcdItem[1]):\r
-                        PlatformPcd.DefaultValue = PcdItem[2]\r
-                        if PlatformPcd.SkuInfoList:\r
-                            Sku = PlatformPcd.SkuInfoList[PlatformPcd.SkuInfoList.keys()[0]]\r
-                            Sku.DefaultValue = PcdItem[2]\r
-                        break\r
+            for PcdItem in GlobalData.BuildOptionPcd:\r
+                PlatformPcd = self.Platform.Pcds.get((PcdItem[1],PcdItem[0]))\r
+                if PlatformPcd:\r
+                    if PlatformPcd.DatumType in [TAB_UINT8, TAB_UINT16, TAB_UINT32, TAB_UINT64,'BOOLEAN']:\r
+                        for sku in PlatformPcd.SkuInfoList:\r
+                            PlatformPcd.SkuInfoList[sku].DefaultValue = PcdItem[2]\r
+                    else:\r
+                        PcdDefaultValue = StringToArray(PcdItem[2])\r
+                        for sku in PlatformPcd.SkuInfoList:\r
+                            skuinfo = PlatformPcd.SkuInfoList[sku]\r
+                            if skuinfo.VariableGuid:\r
+                                skuinfo.HiiDefaultValue = PcdDefaultValue\r
+                            else:\r
+                                skuinfo.DefaultValue = PcdDefaultValue\r
+                        PlatformPcd.DefaultValue = PcdDefaultValue\r
+                        if PlatformPcd.MaxDatumSize:\r
+                            PlatformPcd.MaxDatumSize = str(max([int(PlatformPcd.MaxDatumSize),len(PcdDefaultValue.split(","))]))\r
+                        else:\r
+                            PlatformPcd.MaxDatumSize = str(len(PcdDefaultValue.split(",")))\r
 \r
         for key in self.Platform.Pcds:\r
             for SinglePcd in GlobalData.MixedPcd:\r