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