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