]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/Python/Workspace/BuildClassObject.py
BaseTools: Fixed the build fail issue for cases
[mirror_edk2.git] / BaseTools / Source / Python / Workspace / BuildClassObject.py
CommitLineData
30fdf114
LG
1## @file\r
2# This file is used to define each component of the build database\r
3#\r
c33081c9 4# Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>\r
40d841f6 5# This program and the accompanying materials\r
30fdf114
LG
6# are licensed and made available under the terms and conditions of the BSD License\r
7# which accompanies this distribution. The full text of the license may be found at\r
8# http://opensource.org/licenses/bsd-license.php\r
9#\r
10# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12#\r
13\r
b0a26451 14from collections import OrderedDict, namedtuple\r
8518bf0b 15from Common.DataType import *\r
57ee97c0
B
16import collections\r
17import re\r
18from collections import OrderedDict\r
bf9e6366
B
19from Common.Misc import CopyDict\r
20import copy\r
57ee97c0
B
21StructPattern = re.compile(r'[_a-zA-Z][0-9A-Za-z_\[\]]*$')\r
22ArrayIndex = re.compile("\[\s*\d{0,1}\s*\]")\r
30fdf114
LG
23## PcdClassObject\r
24#\r
25# This Class is used for PcdObject\r
26#\r
27# @param object: Inherited from object class\r
28# @param Name: Input value for Name of Pcd, default is None\r
29# @param Guid: Input value for Guid of Pcd, default is None\r
30# @param Type: Input value for Type of Pcd, default is None\r
31# @param DatumType: Input value for DatumType of Pcd, default is None\r
32# @param Value: Input value for Value of Pcd, default is None\r
33# @param Token: Input value for Token of Pcd, default is None\r
34# @param MaxDatumSize: Input value for MaxDatumSize of Pcd, default is None\r
35# @param SkuInfoList: Input value for SkuInfoList of Pcd, default is {}\r
36# @param IsOverrided: Input value for IsOverrided of Pcd, default is False\r
e56468c0 37# @param GuidValue: Input value for TokenSpaceGuidValue of Pcd, default is None\r
30fdf114
LG
38#\r
39# @var TokenCName: To store value for TokenCName\r
40# @var TokenSpaceGuidCName: To store value for TokenSpaceGuidCName\r
41# @var Type: To store value for Type\r
42# @var DatumType: To store value for DatumType\r
43# @var TokenValue: To store value for TokenValue\r
44# @var MaxDatumSize: To store value for MaxDatumSize\r
45# @var SkuInfoList: To store value for SkuInfoList\r
46# @var IsOverrided: To store value for IsOverrided\r
47# @var Phase: To store value for Phase, default is "DXE"\r
48#\r
49class PcdClassObject(object):\r
57ee97c0 50 def __init__(self, Name = None, Guid = None, Type = None, DatumType = None, Value = None, Token = None, MaxDatumSize = None, SkuInfoList = None, IsOverrided = False, GuidValue = None, validateranges = None, validlists = None, expressions = None, IsDsc = False, UserDefinedDefaultStoresFlag = False):\r
30fdf114
LG
51 self.TokenCName = Name\r
52 self.TokenSpaceGuidCName = Guid\r
53 self.TokenSpaceGuidValue = GuidValue\r
54 self.Type = Type\r
72a1d776 55 self._DatumType = DatumType\r
30fdf114
LG
56 self.DefaultValue = Value\r
57 self.TokenValue = Token\r
58 self.MaxDatumSize = MaxDatumSize\r
c33081c9 59 self.MaxSizeUserSet = None\r
57ee97c0 60 self.SkuInfoList = SkuInfoList if SkuInfoList is not None else OrderedDict()\r
30fdf114
LG
61 self.Phase = "DXE"\r
62 self.Pending = False\r
e56468c0 63 self.IsOverrided = IsOverrided\r
a0a2cd1e
FB
64 self.IsFromBinaryInf = False\r
65 self.IsFromDsc = False\r
57ee97c0
B
66 self.validateranges = validateranges if validateranges is not None else []\r
67 self.validlists = validlists if validlists is not None else []\r
68 self.expressions = expressions if expressions is not None else []\r
cc71d8b7 69 self.DscDefaultValue = None\r
71127ce8 70 self.DscRawValue = {}\r
cc71d8b7
YZ
71 if IsDsc:\r
72 self.DscDefaultValue = Value\r
0f228f19 73 self.PcdValueFromComm = ""\r
543f5ac3 74 self.PcdValueFromFdf = ""\r
6a147d6d 75 self.CustomAttribute = {}\r
ced86858 76 self.UserDefinedDefaultStoresFlag = UserDefinedDefaultStoresFlag\r
72a1d776 77 self._Capacity = None\r
78\r
79 @property\r
80 def Capacity(self):\r
81 self._Capacity = []\r
82 dimension = ArrayIndex.findall(self._DatumType)\r
83 for item in dimension:\r
84 maxsize = item.lstrip("[").rstrip("]").strip()\r
85 if not maxsize:\r
86 maxsize = "-1"\r
87 self._Capacity.append(maxsize)\r
88 if hasattr(self, "SkuOverrideValues"):\r
89 for sku in self.SkuOverrideValues:\r
90 for defaultstore in self.SkuOverrideValues[sku]:\r
91 fields = self.SkuOverrideValues[sku][defaultstore]\r
92 for demesionattr in fields:\r
93 deme = ArrayIndex.findall(demesionattr)\r
94 for i in range(len(deme)-1):\r
95 if int(deme[i].lstrip("[").rstrip("]").strip()) > int(self._Capacity[i]):\r
96 print "error"\r
97 if hasattr(self,"DefaultValues"):\r
98 for demesionattr in self.DefaultValues:\r
99 deme = ArrayIndex.findall(demesionattr)\r
100 for i in range(len(deme)-1):\r
101 if int(deme[i].lstrip("[").rstrip("]").strip()) > int(self._Capacity[i]):\r
102 print "error"\r
103 self._Capacity = [str(int(d) + 1) for d in self._Capacity]\r
104 return self._Capacity\r
105 @property\r
106 def DatumType(self):\r
107 return self._DatumType\r
108\r
109 @DatumType.setter\r
110 def DatumType(self,DataType):\r
111 self._DatumType = DataType\r
112 self._Capacity = None\r
113\r
114 @property\r
115 def BaseDatumType(self):\r
116 if self.IsArray():\r
117 return self._DatumType[:self._DatumType.index("[")]\r
118 else:\r
119 return self._DatumType\r
120 def IsArray(self):\r
121 return True if len(self.Capacity) else False\r
122\r
123 def IsAggregateDatumType(self):\r
124 if self.DatumType in [TAB_UINT8, TAB_UINT16, TAB_UINT32, TAB_UINT64, TAB_VOID, "BOOLEAN"]:\r
125 return False\r
126 if self.IsArray() or StructPattern.match(self.DatumType):\r
127 return True\r
128 return False\r
129\r
130 def IsSimpleTypeArray(self):\r
131 if self.IsArray() and self.BaseDatumType in [TAB_UINT8, TAB_UINT16, TAB_UINT32, TAB_UINT64, "BOOLEAN"]:\r
132 return True\r
133 return False\r
9904222d 134\r
cfed8a37
FB
135 @staticmethod\r
136 def GetPcdMaxSizeWorker(PcdString, MaxSize):\r
137 if PcdString.startswith("{") and PcdString.endswith("}"):\r
138 return max([len(PcdString.split(",")),MaxSize])\r
139\r
140 if PcdString.startswith("\"") or PcdString.startswith("\'"):\r
141 return max([len(PcdString)-2+1,MaxSize])\r
142\r
143 if PcdString.startswith("L\""):\r
144 return max([2*(len(PcdString)-3+1),MaxSize])\r
145\r
146 return max([len(PcdString),MaxSize])\r
147\r
5565a8c4
CJ
148 ## Get the maximum number of bytes\r
149 def GetPcdMaxSize(self):\r
150 if self.DatumType in TAB_PCD_NUMERIC_TYPES:\r
151 return MAX_SIZE_TYPE[self.DatumType]\r
152\r
ccaa7754 153 MaxSize = int(self.MaxDatumSize, 10) if self.MaxDatumSize else 0\r
543f5ac3 154 if self.PcdValueFromFdf:\r
cfed8a37 155 MaxSize = self.GetPcdMaxSizeWorker(self.PcdValueFromFdf,MaxSize)\r
5565a8c4 156 if self.PcdValueFromComm:\r
cfed8a37
FB
157 MaxSize = self.GetPcdMaxSizeWorker(self.PcdValueFromComm,MaxSize)\r
158 if hasattr(self, "DefaultValueFromDec"):\r
159 MaxSize = self.GetPcdMaxSizeWorker(self.DefaultValueFromDec,MaxSize)\r
5565a8c4
CJ
160 return MaxSize\r
161\r
162 ## Get the number of bytes\r
163 def GetPcdSize(self):\r
164 if self.DatumType in TAB_PCD_NUMERIC_TYPES:\r
165 return MAX_SIZE_TYPE[self.DatumType]\r
166 if not self.DefaultValue:\r
167 return 1\r
168 elif self.DefaultValue[0] == 'L':\r
169 return (len(self.DefaultValue) - 2) * 2\r
170 elif self.DefaultValue[0] == '{':\r
171 return len(self.DefaultValue.split(','))\r
172 else:\r
173 return len(self.DefaultValue) - 1\r
174\r
175\r
30fdf114
LG
176 ## Convert the class to a string\r
177 #\r
178 # Convert each member of the class to string\r
179 # Organize to a signle line format string\r
180 #\r
181 # @retval Rtn Formatted String\r
182 #\r
183 def __str__(self):\r
184 Rtn = '\tTokenCName=' + str(self.TokenCName) + ', ' + \\r
185 'TokenSpaceGuidCName=' + str(self.TokenSpaceGuidCName) + ', ' + \\r
186 'Type=' + str(self.Type) + ', ' + \\r
187 'DatumType=' + str(self.DatumType) + ', ' + \\r
188 'DefaultValue=' + str(self.DefaultValue) + ', ' + \\r
189 'TokenValue=' + str(self.TokenValue) + ', ' + \\r
190 'MaxDatumSize=' + str(self.MaxDatumSize) + ', '\r
191 for Item in self.SkuInfoList.values():\r
192 Rtn = Rtn + 'SkuId=' + Item.SkuId + ', ' + 'SkuIdName=' + Item.SkuIdName\r
e56468c0 193 Rtn = Rtn + ', IsOverrided=' + str(self.IsOverrided)\r
30fdf114
LG
194\r
195 return Rtn\r
196\r
197 ## Override __eq__ function\r
198 #\r
199 # Check whether pcds are the same\r
200 #\r
201 # @retval False The two pcds are different\r
202 # @retval True The two pcds are the same\r
203 #\r
204 def __eq__(self, Other):\r
205 return Other and self.TokenCName == Other.TokenCName and self.TokenSpaceGuidCName == Other.TokenSpaceGuidCName\r
206\r
207 ## Override __hash__ function\r
208 #\r
209 # Use (TokenCName, TokenSpaceGuidCName) as key in hash table\r
210 #\r
211 # @retval truple() Key for hash table\r
212 #\r
213 def __hash__(self):\r
214 return hash((self.TokenCName, self.TokenSpaceGuidCName))\r
215\r
bf9e6366
B
216 def sharedcopy(self,new_pcd):\r
217 new_pcd.TokenCName = self.TokenCName\r
218 new_pcd.TokenSpaceGuidCName = self.TokenSpaceGuidCName\r
219 new_pcd.TokenSpaceGuidValue = self.TokenSpaceGuidValue\r
220 new_pcd.Type = self.Type\r
221 new_pcd.DatumType = self.DatumType\r
222 new_pcd.DefaultValue = self.DefaultValue\r
223 new_pcd.TokenValue = self.TokenValue\r
224 new_pcd.MaxDatumSize = self.MaxDatumSize\r
225\r
226 new_pcd.Phase = self.Phase\r
227 new_pcd.Pending = self.Pending\r
228 new_pcd.IsOverrided = self.IsOverrided\r
229 new_pcd.IsFromBinaryInf = self.IsFromBinaryInf\r
230 new_pcd.IsFromDsc = self.IsFromDsc\r
231 new_pcd.PcdValueFromComm = self.PcdValueFromComm\r
232 new_pcd.PcdValueFromFdf = self.PcdValueFromFdf\r
233 new_pcd.UserDefinedDefaultStoresFlag = self.UserDefinedDefaultStoresFlag\r
234 new_pcd.DscRawValue = self.DscRawValue\r
235 new_pcd.CustomAttribute = self.CustomAttribute\r
236 new_pcd.validateranges = [item for item in self.validateranges]\r
237 new_pcd.validlists = [item for item in self.validlists]\r
238 new_pcd.expressions = [item for item in self.expressions]\r
239 new_pcd.SkuInfoList = {key: copy.deepcopy(skuobj) for key,skuobj in self.SkuInfoList.items()}\r
240 return new_pcd\r
241\r
242 def __deepcopy__(self,memo):\r
243 new_pcd = PcdClassObject()\r
244 self.sharedcopy(new_pcd)\r
245 return new_pcd\r
246\r
ae7b6df8 247class StructurePcd(PcdClassObject):\r
9904222d 248 def __init__(self, StructuredPcdIncludeFile=None, Packages=None, Name=None, Guid=None, Type=None, DatumType=None, Value=None, Token=None, MaxDatumSize=None, SkuInfoList=None, IsOverrided=False, GuidValue=None, validateranges=None, validlists=None, expressions=None,default_store = TAB_DEFAULT_STORES_DEFAULT):\r
8ac64c5b
CJ
249 if SkuInfoList is None:\r
250 SkuInfoList = {}\r
251 if validateranges is None:\r
252 validateranges = []\r
253 if validlists is None:\r
254 validlists = []\r
255 if expressions is None:\r
256 expressions = []\r
257 if Packages is None:\r
258 Packages = []\r
1ccc4d89 259 super(StructurePcd, self).__init__(Name, Guid, Type, DatumType, Value, Token, MaxDatumSize, SkuInfoList, IsOverrided, GuidValue, validateranges, validlists, expressions)\r
81add864 260 self.StructuredPcdIncludeFile = [] if StructuredPcdIncludeFile is None else StructuredPcdIncludeFile\r
ae7b6df8 261 self.PackageDecs = Packages\r
8518bf0b 262 self.DefaultStoreName = [default_store]\r
b0a26451 263 self.DefaultValues = OrderedDict()\r
ae7b6df8 264 self.PcdMode = None\r
b0a26451 265 self.SkuOverrideValues = OrderedDict()\r
e651d06c 266 self.StructName = None\r
6a103440
FB
267 self.PcdDefineLineNo = 0\r
268 self.PkgPath = ""\r
06140766 269 self.DefaultValueFromDec = ""\r
88252a90 270 self.ValueChain = set()\r
b0a26451
CJ
271 self.PcdFieldValueFromComm = OrderedDict()\r
272 self.PcdFieldValueFromFdf = OrderedDict()\r
ae7b6df8
LG
273 def __repr__(self):\r
274 return self.TypeName\r
275\r
72a1d776 276 def AddDefaultValue (self, FieldName, Value, FileName="", LineNo=0,DimensionAttr ="-1"):\r
277 if DimensionAttr not in self.DefaultValues:\r
278 self.DefaultValues[DimensionAttr] = collections.OrderedDict()\r
279 if FieldName in self.DefaultValues[DimensionAttr]:\r
280 del self.DefaultValues[DimensionAttr][FieldName]\r
281 self.DefaultValues[DimensionAttr][FieldName] = [Value.strip(), FileName, LineNo]\r
282 return self.DefaultValues[DimensionAttr][FieldName]\r
ae7b6df8 283\r
ccaa7754 284 def SetDecDefaultValue(self, DefaultValue):\r
06140766 285 self.DefaultValueFromDec = DefaultValue\r
72a1d776 286 def AddOverrideValue (self, FieldName, Value, SkuName, DefaultStoreName, FileName="", LineNo=0, DimensionAttr = '-1'):\r
ae7b6df8 287 if SkuName not in self.SkuOverrideValues:\r
b0a26451 288 self.SkuOverrideValues[SkuName] = OrderedDict()\r
8518bf0b 289 if DefaultStoreName not in self.SkuOverrideValues[SkuName]:\r
b0a26451 290 self.SkuOverrideValues[SkuName][DefaultStoreName] = OrderedDict()\r
72a1d776 291 if DimensionAttr not in self.SkuOverrideValues[SkuName][DefaultStoreName]:\r
292 self.SkuOverrideValues[SkuName][DefaultStoreName][DimensionAttr] = collections.OrderedDict()\r
293 if FieldName in self.SkuOverrideValues[SkuName][DefaultStoreName][DimensionAttr]:\r
48e89045 294 del self.SkuOverrideValues[SkuName][DefaultStoreName][DimensionAttr][FieldName]\r
72a1d776 295 self.SkuOverrideValues[SkuName][DefaultStoreName][DimensionAttr][FieldName] = [Value.strip(), FileName, LineNo]\r
296 return self.SkuOverrideValues[SkuName][DefaultStoreName][DimensionAttr][FieldName]\r
ae7b6df8
LG
297\r
298 def SetPcdMode (self, PcdMode):\r
299 self.PcdMode = PcdMode\r
300\r
ae7b6df8
LG
301 def copy(self, PcdObject):\r
302 self.TokenCName = PcdObject.TokenCName if PcdObject.TokenCName else self.TokenCName\r
303 self.TokenSpaceGuidCName = PcdObject.TokenSpaceGuidCName if PcdObject.TokenSpaceGuidCName else PcdObject.TokenSpaceGuidCName\r
304 self.TokenSpaceGuidValue = PcdObject.TokenSpaceGuidValue if PcdObject.TokenSpaceGuidValue else self.TokenSpaceGuidValue\r
305 self.Type = PcdObject.Type if PcdObject.Type else self.Type\r
72a1d776 306 self._DatumType = PcdObject.DatumType if PcdObject.DatumType else self.DatumType\r
ae7b6df8
LG
307 self.DefaultValue = PcdObject.DefaultValue if PcdObject.DefaultValue else self.DefaultValue\r
308 self.TokenValue = PcdObject.TokenValue if PcdObject.TokenValue else self.TokenValue\r
309 self.MaxDatumSize = PcdObject.MaxDatumSize if PcdObject.MaxDatumSize else self.MaxDatumSize\r
310 self.SkuInfoList = PcdObject.SkuInfoList if PcdObject.SkuInfoList else self.SkuInfoList\r
311 self.Phase = PcdObject.Phase if PcdObject.Phase else self.Phase\r
312 self.Pending = PcdObject.Pending if PcdObject.Pending else self.Pending\r
313 self.IsOverrided = PcdObject.IsOverrided if PcdObject.IsOverrided else self.IsOverrided\r
314 self.IsFromBinaryInf = PcdObject.IsFromBinaryInf if PcdObject.IsFromBinaryInf else self.IsFromBinaryInf\r
315 self.IsFromDsc = PcdObject.IsFromDsc if PcdObject.IsFromDsc else self.IsFromDsc\r
316 self.validateranges = PcdObject.validateranges if PcdObject.validateranges else self.validateranges\r
317 self.validlists = PcdObject.validlists if PcdObject.validlists else self.validlists\r
318 self.expressions = PcdObject.expressions if PcdObject.expressions else self.expressions\r
f3b31433 319 self.DscRawValue = PcdObject.DscRawValue if PcdObject.DscRawValue else self.DscRawValue\r
0f228f19 320 self.PcdValueFromComm = PcdObject.PcdValueFromComm if PcdObject.PcdValueFromComm else self.PcdValueFromComm\r
543f5ac3 321 self.PcdValueFromFdf = PcdObject.PcdValueFromFdf if PcdObject.PcdValueFromFdf else self.PcdValueFromFdf\r
6a147d6d 322 self.CustomAttribute = PcdObject.CustomAttribute if PcdObject.CustomAttribute else self.CustomAttribute\r
ced86858 323 self.UserDefinedDefaultStoresFlag = PcdObject.UserDefinedDefaultStoresFlag if PcdObject.UserDefinedDefaultStoresFlag else self.UserDefinedDefaultStoresFlag\r
0d1f5b2b 324 if isinstance(PcdObject, StructurePcd):\r
ae7b6df8
LG
325 self.StructuredPcdIncludeFile = PcdObject.StructuredPcdIncludeFile if PcdObject.StructuredPcdIncludeFile else self.StructuredPcdIncludeFile\r
326 self.PackageDecs = PcdObject.PackageDecs if PcdObject.PackageDecs else self.PackageDecs\r
327 self.DefaultValues = PcdObject.DefaultValues if PcdObject.DefaultValues else self.DefaultValues\r
328 self.PcdMode = PcdObject.PcdMode if PcdObject.PcdMode else self.PcdMode\r
329 self.DefaultFromDSC=None\r
06140766 330 self.DefaultValueFromDec = PcdObject.DefaultValueFromDec if PcdObject.DefaultValueFromDec else self.DefaultValueFromDec\r
65eff519 331 self.SkuOverrideValues = PcdObject.SkuOverrideValues if PcdObject.SkuOverrideValues else self.SkuOverrideValues\r
e651d06c 332 self.StructName = PcdObject.DatumType if PcdObject.DatumType else self.StructName\r
6a103440
FB
333 self.PcdDefineLineNo = PcdObject.PcdDefineLineNo if PcdObject.PcdDefineLineNo else self.PcdDefineLineNo\r
334 self.PkgPath = PcdObject.PkgPath if PcdObject.PkgPath else self.PkgPath\r
f3b31433 335 self.ValueChain = PcdObject.ValueChain if PcdObject.ValueChain else self.ValueChain\r
b854e2bf 336 self.PcdFieldValueFromComm = PcdObject.PcdFieldValueFromComm if PcdObject.PcdFieldValueFromComm else self.PcdFieldValueFromComm\r
543f5ac3 337 self.PcdFieldValueFromFdf = PcdObject.PcdFieldValueFromFdf if PcdObject.PcdFieldValueFromFdf else self.PcdFieldValueFromFdf\r
ae7b6df8 338\r
bf9e6366
B
339 def __deepcopy__(self,memo):\r
340 new_pcd = StructurePcd()\r
341 self.sharedcopy(new_pcd)\r
342\r
343 new_pcd.DefaultValueFromDec = self.DefaultValueFromDec\r
344 new_pcd.PcdMode = self.PcdMode\r
345 new_pcd.StructName = self.DatumType\r
346 new_pcd.PcdDefineLineNo = self.PcdDefineLineNo\r
347 new_pcd.PkgPath = self.PkgPath\r
348 new_pcd.StructuredPcdIncludeFile = [item for item in self.StructuredPcdIncludeFile]\r
349 new_pcd.PackageDecs = [item for item in self.PackageDecs]\r
350 new_pcd.DefaultValues = CopyDict(self.DefaultValues)\r
351 new_pcd.DefaultFromDSC=CopyDict(self.DefaultFromDSC)\r
352 new_pcd.SkuOverrideValues = CopyDict(self.SkuOverrideValues)\r
353 new_pcd.PcdFieldValueFromComm = CopyDict(self.PcdFieldValueFromComm)\r
354 new_pcd.PcdFieldValueFromFdf = CopyDict(self.PcdFieldValueFromFdf)\r
355 new_pcd.ValueChain = {item for item in self.ValueChain}\r
356 return new_pcd\r
357\r
1ccc4d89 358LibraryClassObject = namedtuple('LibraryClassObject', ['LibraryClass','SupModList'], verbose=False)\r
30fdf114
LG
359\r
360## ModuleBuildClassObject\r
361#\r
362# This Class defines ModuleBuildClass\r
363#\r
364# @param object: Inherited from object class\r
365#\r
366# @var MetaFile: To store value for module meta file path\r
367# @var BaseName: To store value for BaseName\r
368# @var ModuleType: To store value for ModuleType\r
369# @var Guid: To store value for Guid\r
370# @var Version: To store value for Version\r
371# @var PcdIsDriver: To store value for PcdIsDriver\r
372# @var BinaryModule: To store value for BinaryModule\r
373# @var CustomMakefile: To store value for CustomMakefile\r
374# @var Specification: To store value for Specification\r
375# @var Shadow To store value for Shadow\r
376# @var LibraryClass: To store value for LibraryClass, it is a list structure as\r
377# [ LibraryClassObject, ...]\r
378# @var ModuleEntryPointList: To store value for ModuleEntryPointList\r
379# @var ModuleUnloadImageList: To store value for ModuleUnloadImageList\r
380# @var ConstructorList: To store value for ConstructorList\r
381# @var DestructorList: To store value for DestructorList\r
382# @var Binaries: To store value for Binaries, it is a list structure as\r
383# [ ModuleBinaryClassObject, ...]\r
384# @var Sources: To store value for Sources, it is a list structure as\r
385# [ ModuleSourceFilesClassObject, ... ]\r
386# @var LibraryClasses: To store value for LibraryClasses, it is a set structure as\r
387# { [LibraryClassName, ModuleType] : LibraryClassInfFile }\r
388# @var Protocols: To store value for Protocols, it is a list structure as\r
389# [ ProtocolName, ... ]\r
390# @var Ppis: To store value for Ppis, it is a list structure as\r
391# [ PpiName, ... ]\r
392# @var Guids: To store value for Guids, it is a list structure as\r
393# [ GuidName, ... ]\r
394# @var Includes: To store value for Includes, it is a list structure as\r
395# [ IncludePath, ... ]\r
396# @var Packages: To store value for Packages, it is a list structure as\r
397# [ DecFileName, ... ]\r
398# @var Pcds: To store value for Pcds, it is a set structure as\r
399# { [(PcdCName, PcdGuidCName)] : PcdClassObject}\r
400# @var BuildOptions: To store value for BuildOptions, it is a set structure as\r
401# { [BuildOptionKey] : BuildOptionValue}\r
402# @var Depex: To store value for Depex\r
403#\r
404class ModuleBuildClassObject(object):\r
405 def __init__(self):\r
406 self.AutoGenVersion = 0\r
407 self.MetaFile = ''\r
408 self.BaseName = ''\r
409 self.ModuleType = ''\r
410 self.Guid = ''\r
411 self.Version = ''\r
412 self.PcdIsDriver = ''\r
413 self.BinaryModule = ''\r
414 self.Shadow = ''\r
415 self.SourceOverridePath = ''\r
416 self.CustomMakefile = {}\r
417 self.Specification = {}\r
418 self.LibraryClass = []\r
419 self.ModuleEntryPointList = []\r
420 self.ModuleUnloadImageList = []\r
421 self.ConstructorList = []\r
422 self.DestructorList = []\r
423\r
424 self.Binaries = []\r
425 self.Sources = []\r
b0a26451 426 self.LibraryClasses = OrderedDict()\r
30fdf114
LG
427 self.Libraries = []\r
428 self.Protocols = []\r
429 self.Ppis = []\r
430 self.Guids = []\r
431 self.Includes = []\r
432 self.Packages = []\r
433 self.Pcds = {}\r
434 self.BuildOptions = {}\r
435 self.Depex = {}\r
436\r
437 ## Convert the class to a string\r
438 #\r
439 # Convert member MetaFile of the class to a string\r
440 #\r
441 # @retval string Formatted String\r
442 #\r
443 def __str__(self):\r
444 return str(self.MetaFile)\r
445\r
446 ## Override __eq__ function\r
447 #\r
448 # Check whether ModuleBuildClassObjects are the same\r
449 #\r
450 # @retval False The two ModuleBuildClassObjects are different\r
451 # @retval True The two ModuleBuildClassObjects are the same\r
452 #\r
453 def __eq__(self, Other):\r
454 return self.MetaFile == Other\r
455\r
456 ## Override __hash__ function\r
457 #\r
458 # Use MetaFile as key in hash table\r
459 #\r
460 # @retval string Key for hash table\r
461 #\r
462 def __hash__(self):\r
463 return hash(self.MetaFile)\r
464\r
465## PackageBuildClassObject\r
466#\r
467# This Class defines PackageBuildClass\r
468#\r
469# @param object: Inherited from object class\r
470#\r
471# @var MetaFile: To store value for package meta file path\r
472# @var PackageName: To store value for PackageName\r
473# @var Guid: To store value for Guid\r
474# @var Version: To store value for Version\r
475# @var Protocols: To store value for Protocols, it is a set structure as\r
476# { [ProtocolName] : Protocol Guid, ... }\r
477# @var Ppis: To store value for Ppis, it is a set structure as\r
478# { [PpiName] : Ppi Guid, ... }\r
479# @var Guids: To store value for Guids, it is a set structure as\r
480# { [GuidName] : Guid, ... }\r
481# @var Includes: To store value for Includes, it is a list structure as\r
482# [ IncludePath, ... ]\r
483# @var LibraryClasses: To store value for LibraryClasses, it is a set structure as\r
484# { [LibraryClassName] : LibraryClassInfFile }\r
485# @var Pcds: To store value for Pcds, it is a set structure as\r
486# { [(PcdCName, PcdGuidCName)] : PcdClassObject}\r
487#\r
488class PackageBuildClassObject(object):\r
489 def __init__(self):\r
490 self.MetaFile = ''\r
491 self.PackageName = ''\r
492 self.Guid = ''\r
493 self.Version = ''\r
494\r
495 self.Protocols = {}\r
496 self.Ppis = {}\r
497 self.Guids = {}\r
498 self.Includes = []\r
499 self.LibraryClasses = {}\r
500 self.Pcds = {}\r
501\r
502 ## Convert the class to a string\r
503 #\r
504 # Convert member MetaFile of the class to a string\r
505 #\r
506 # @retval string Formatted String\r
507 #\r
508 def __str__(self):\r
509 return str(self.MetaFile)\r
510\r
511 ## Override __eq__ function\r
512 #\r
513 # Check whether PackageBuildClassObjects are the same\r
514 #\r
515 # @retval False The two PackageBuildClassObjects are different\r
516 # @retval True The two PackageBuildClassObjects are the same\r
517 #\r
518 def __eq__(self, Other):\r
519 return self.MetaFile == Other\r
520\r
521 ## Override __hash__ function\r
522 #\r
523 # Use MetaFile as key in hash table\r
524 #\r
525 # @retval string Key for hash table\r
526 #\r
527 def __hash__(self):\r
528 return hash(self.MetaFile)\r
529\r
530## PlatformBuildClassObject\r
531#\r
532# This Class defines PlatformBuildClass\r
533#\r
534# @param object: Inherited from object class\r
535#\r
536# @var MetaFile: To store value for platform meta-file path\r
537# @var PlatformName: To store value for PlatformName\r
538# @var Guid: To store value for Guid\r
539# @var Version: To store value for Version\r
540# @var DscSpecification: To store value for DscSpecification\r
541# @var OutputDirectory: To store value for OutputDirectory\r
542# @var FlashDefinition: To store value for FlashDefinition\r
543# @var BuildNumber: To store value for BuildNumber\r
544# @var MakefileName: To store value for MakefileName\r
545# @var SkuIds: To store value for SkuIds, it is a set structure as\r
546# { 'SkuName' : SkuId, '!include' : includefilename, ...}\r
547# @var Modules: To store value for Modules, it is a list structure as\r
548# [ InfFileName, ... ]\r
549# @var Libraries: To store value for Libraries, it is a list structure as\r
550# [ InfFileName, ... ]\r
551# @var LibraryClasses: To store value for LibraryClasses, it is a set structure as\r
552# { (LibraryClassName, ModuleType) : LibraryClassInfFile }\r
553# @var Pcds: To store value for Pcds, it is a set structure as\r
554# { [(PcdCName, PcdGuidCName)] : PcdClassObject }\r
555# @var BuildOptions: To store value for BuildOptions, it is a set structure as\r
556# { [BuildOptionKey] : BuildOptionValue }\r
557#\r
558class PlatformBuildClassObject(object):\r
559 def __init__(self):\r
560 self.MetaFile = ''\r
561 self.PlatformName = ''\r
562 self.Guid = ''\r
563 self.Version = ''\r
564 self.DscSpecification = ''\r
565 self.OutputDirectory = ''\r
566 self.FlashDefinition = ''\r
567 self.BuildNumber = ''\r
568 self.MakefileName = ''\r
569\r
570 self.SkuIds = {}\r
571 self.Modules = []\r
572 self.LibraryInstances = []\r
573 self.LibraryClasses = {}\r
574 self.Libraries = {}\r
575 self.Pcds = {}\r
576 self.BuildOptions = {}\r
577\r
578 ## Convert the class to a string\r
579 #\r
580 # Convert member MetaFile of the class to a string\r
581 #\r
582 # @retval string Formatted String\r
583 #\r
584 def __str__(self):\r
585 return str(self.MetaFile)\r
586\r
587 ## Override __eq__ function\r
588 #\r
589 # Check whether PlatformBuildClassObjects are the same\r
590 #\r
591 # @retval False The two PlatformBuildClassObjects are different\r
592 # @retval True The two PlatformBuildClassObjects are the same\r
593 #\r
594 def __eq__(self, Other):\r
595 return self.MetaFile == Other\r
596\r
597 ## Override __hash__ function\r
598 #\r
599 # Use MetaFile as key in hash table\r
600 #\r
601 # @retval string Key for hash table\r
602 #\r
603 def __hash__(self):\r
604 return hash(self.MetaFile)\r