]> git.proxmox.com Git - mirror_edk2.git/commitdiff
BaseTools: Sort Pcd settings to make PcdTokenNumber be fixed
authorFeng, Bob C <bob.c.feng@intel.com>
Wed, 4 Sep 2019 07:53:37 +0000 (15:53 +0800)
committerFeng, Bob C <bob.c.feng@intel.com>
Tue, 10 Sep 2019 00:39:19 +0000 (08:39 +0800)
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=2147

This patch is to sort the Pcd settings so that PcdTokenNumber
will not change if the platform's Pcd settings are the same.

Signed-off-by: Bob Feng <bob.c.feng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Steven Shi <steven.shi@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
BaseTools/Source/Python/AutoGen/PlatformAutoGen.py
BaseTools/Source/Python/Workspace/BuildClassObject.py

index 1e17b6687129315e4d4b35beae44478f1a14188f..0e424ee40fb9a235c746339774e9213e7123e918 100644 (file)
@@ -441,7 +441,7 @@ class PlatformAutoGen(AutoGen):
                             File=self.MetaFile,\r
                             ExtraData="\n\tPCD(s) without MaxDatumSize:\n\t\t%s\n"\r
                                       % NoDatumTypePcdListString)\r
-        self._NonDynamicPcdList = self._NonDynaPcdList_\r
+        self._NonDynamicPcdList = sorted(self._NonDynaPcdList_)\r
         self._DynamicPcdList = self._DynaPcdList_\r
 \r
     def SortDynamicPcd(self):\r
@@ -704,6 +704,7 @@ class PlatformAutoGen(AutoGen):
         self._DynamicPcdList.extend(list(UnicodePcdArray))\r
         self._DynamicPcdList.extend(list(HiiPcdArray))\r
         self._DynamicPcdList.extend(list(OtherPcdArray))\r
+        self._DynamicPcdList.sort()\r
         allskuset = [(SkuName, Sku.SkuId) for pcd in self._DynamicPcdList for (SkuName, Sku) in pcd.SkuInfoList.items()]\r
         for pcd in self._DynamicPcdList:\r
             if len(pcd.SkuInfoList) == 1:\r
index 5d2bb733752a8f593c845e88e2971bed55369264..db40e3b10c3cf63c5f1a5934fa721fd71b8fe458 100644 (file)
@@ -14,6 +14,7 @@ from Common.Misc import CopyDict,ArrayIndex
 import copy\r
 import Common.EdkLogger as EdkLogger\r
 from Common.BuildToolError import OPTION_VALUE_INVALID\r
+from Common.caching import cached_property\r
 StructPattern = re.compile(r'[_a-zA-Z][0-9A-Za-z_\[\]]*$')\r
 \r
 ## PcdClassObject\r
@@ -227,6 +228,15 @@ class PcdClassObject(object):
     def __hash__(self):\r
         return hash((self.TokenCName, self.TokenSpaceGuidCName))\r
 \r
+    @cached_property\r
+    def _fullname(self):\r
+        return ".".join((self.TokenSpaceGuidCName,self.TokenCName))\r
+\r
+    def __lt__(self,pcd):\r
+        return self._fullname < pcd._fullname\r
+    def __gt__(self,pcd):\r
+        return self._fullname > pcd._fullname\r
+\r
     def sharedcopy(self,new_pcd):\r
         new_pcd.TokenCName = self.TokenCName\r
         new_pcd.TokenSpaceGuidCName = self.TokenSpaceGuidCName\r