summaryrefslogtreecommitdiffstats
path: root/BaseTools/Source/Python/Common/Misc.py
diff options
context:
space:
mode:
authorLiming Gao <liming.gao@intel.com>2017-12-22 20:53:01 +0800
committerLiming Gao <liming.gao@intel.com>2017-12-25 11:05:54 +0800
commitc05c2c0526aadb0bc9ff0939bab1dec21c41c3ef (patch)
treede18cd50d2b1dc9f41ec45fd8df316b53b15b06b /BaseTools/Source/Python/Common/Misc.py
parent8ac167890f2a8ef4918586e7e94190c52d59a4cc (diff)
downloadedk2-c05c2c0526aadb0bc9ff0939bab1dec21c41c3ef.tar.gz
edk2-c05c2c0526aadb0bc9ff0939bab1dec21c41c3ef.tar.bz2
edk2-c05c2c0526aadb0bc9ff0939bab1dec21c41c3ef.zip
BaseTools: Fixed the issue of structure pcd filed sku inherit override
Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Feng Bob C <bob.c.feng@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
Diffstat (limited to 'BaseTools/Source/Python/Common/Misc.py')
-rw-r--r--BaseTools/Source/Python/Common/Misc.py48
1 files changed, 47 insertions, 1 deletions
diff --git a/BaseTools/Source/Python/Common/Misc.py b/BaseTools/Source/Python/Common/Misc.py
index 549c879176..0374be0631 100644
--- a/BaseTools/Source/Python/Common/Misc.py
+++ b/BaseTools/Source/Python/Common/Misc.py
@@ -2145,12 +2145,21 @@ class SkuClass():
def __init__(self,SkuIdentifier='', SkuIds=None):
if SkuIds is None:
SkuIds = {}
+
+ for SkuName in SkuIds:
+ SkuId = SkuIds[SkuName][0]
+ skuid_num = int(SkuId,16) if SkuId.upper().startswith("0X") else int(SkuId)
+ if skuid_num > 0xFFFF:
+ EdkLogger.error("build", PARAMETER_INVALID,
+ ExtraData = "SKU-ID [%s] must less than 65535"
+ % (SkuName))
self.AvailableSkuIds = sdict()
self.SkuIdSet = []
self.SkuIdNumberSet = []
self.SkuData = SkuIds
self.__SkuInherit = {}
+ self.__SkuIdentifier = SkuIdentifier
if SkuIdentifier == '' or SkuIdentifier is None:
self.SkuIdSet = ['DEFAULT']
self.SkuIdNumberSet = ['0U']
@@ -2189,14 +2198,48 @@ class SkuClass():
for item in self.SkuData.values():
self.__SkuInherit[item[1]]=item[2] if item[2] else "DEFAULT"
return self.__SkuInherit.get(skuname,"DEFAULT")
+
+ def GetSkuChain(self,sku):
+ skulist = [sku]
+ nextsku = sku
+ while 1:
+ nextsku = self.GetNextSkuId(nextsku)
+ skulist.append(nextsku)
+ if nextsku == "DEFAULT":
+ break
+ skulist.reverse()
+ return skulist
+ def SkuOverrideOrder(self):
+ skuorderset = []
+ for skuname in self.SkuIdSet:
+ skuorderset.append(self.GetSkuChain(skuname))
+ skuorder = []
+ for index in range(max([len(item) for item in skuorderset])):
+ for subset in skuorderset:
+ if index > len(subset)-1:
+ continue
+ if subset[index] in skuorder:
+ continue
+ skuorder.append(subset[index])
+
+ return skuorder
+
def __SkuUsageType(self):
+ if self.__SkuIdentifier.upper() == "ALL":
+ return SkuClass.MULTIPLE
+
if len(self.SkuIdSet) == 1:
if self.SkuIdSet[0] == 'DEFAULT':
return SkuClass.DEFAULT
else:
return SkuClass.SINGLE
+ elif len(self.SkuIdSet) == 2:
+ if 'DEFAULT' in self.SkuIdSet:
+ return SkuClass.SINGLE
+ else:
+ return SkuClass.MULTIPLE
else:
return SkuClass.MULTIPLE
def DumpSkuIdArrary(self):
@@ -2219,7 +2262,10 @@ class SkuClass():
def __GetSystemSkuID(self):
if self.__SkuUsageType() == SkuClass.SINGLE:
- return self.SkuIdSet[0]
+ if len(self.SkuIdSet) == 1:
+ return self.SkuIdSet[0]
+ else:
+ return self.SkuIdSet[0] if self.SkuIdSet[0] != 'DEFAULT' else self.SkuIdSet[1]
else:
return 'DEFAULT'
def __GetAvailableSkuIdNumber(self):