2 # This file is used to define each component of the build database
4 # Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
5 # SPDX-License-Identifier: BSD-2-Clause-Patent
8 from collections
import OrderedDict
, namedtuple
9 from Common
.DataType
import *
12 from collections
import OrderedDict
13 from Common
.Misc
import CopyDict
15 StructPattern
= re
.compile(r
'[_a-zA-Z][0-9A-Za-z_\[\]]*$')
16 ArrayIndex
= re
.compile("\[\s*[0-9a-fA-FxX]*\s*\]")
19 # This Class is used for PcdObject
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
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"
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
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()
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
66 self
.DscDefaultValue
= Value
67 self
.PcdValueFromComm
= ""
68 self
.PcdValueFromFdf
= ""
69 self
.CustomAttribute
= {}
70 self
.UserDefinedDefaultStoresFlag
= UserDefinedDefaultStoresFlag
76 dimension
= ArrayIndex
.findall(self
._DatumType
)
77 for item
in dimension
:
78 maxsize
= item
.lstrip("[").rstrip("]").strip()
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
]):
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
]):
101 return self
._DatumType
104 def DatumType(self
,DataType
):
105 self
._DatumType
= DataType
106 self
._Capacity
= None
109 def BaseDatumType(self
):
111 return self
._DatumType
[:self
._DatumType
.index("[")]
113 return self
._DatumType
115 return True if len(self
.Capacity
) else False
117 def IsAggregateDatumType(self
):
118 if self
.DatumType
in [TAB_UINT8
, TAB_UINT16
, TAB_UINT32
, TAB_UINT64
, TAB_VOID
, "BOOLEAN"]:
120 if self
.IsArray() or StructPattern
.match(self
.DatumType
):
124 def IsSimpleTypeArray(self
):
125 if self
.IsArray() and self
.BaseDatumType
in [TAB_UINT8
, TAB_UINT16
, TAB_UINT32
, TAB_UINT64
, "BOOLEAN"]:
130 def GetPcdMaxSizeWorker(PcdString
, MaxSize
):
131 if PcdString
.startswith("{") and PcdString
.endswith("}"):
132 return max([len(PcdString
.split(",")),MaxSize
])
134 if PcdString
.startswith("\"") or PcdString
.startswith("\'"):
135 return max([len(PcdString
)-2+1,MaxSize
])
137 if PcdString
.startswith("L\""):
138 return max([2*(len(PcdString
)-3+1),MaxSize
])
140 return max([len(PcdString
),MaxSize
])
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
]
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
)
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
:
162 elif self
.DefaultValue
[0] == 'L':
163 return (len(self
.DefaultValue
) - 2) * 2
164 elif self
.DefaultValue
[0] == '{':
165 return len(self
.DefaultValue
.split(','))
167 return len(self
.DefaultValue
) - 1
170 ## Convert the class to a string
172 # Convert each member of the class to string
173 # Organize to a single line format string
175 # @retval Rtn Formatted String
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
)
191 ## Override __eq__ function
193 # Check whether pcds are the same
195 # @retval False The two pcds are different
196 # @retval True The two pcds are the same
198 def __eq__(self
, Other
):
199 return Other
and self
.TokenCName
== Other
.TokenCName
and self
.TokenSpaceGuidCName
== Other
.TokenSpaceGuidCName
201 ## Override __hash__ function
203 # Use (TokenCName, TokenSpaceGuidCName) as key in hash table
205 # @retval truple() Key for hash table
208 return hash((self
.TokenCName
, self
.TokenSpaceGuidCName
))
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
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()}
237 def __deepcopy__(self
,memo
):
238 new_pcd
= PcdClassObject()
239 self
.sharedcopy(new_pcd
)
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:
246 if validateranges
is None:
248 if validlists
is None:
250 if expressions
is None:
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()
260 self
.SkuOverrideValues
= OrderedDict()
261 self
.StructName
= None
262 self
.PcdDefineLineNo
= 0
264 self
.DefaultValueFromDec
= ""
265 self
.ValueChain
= set()
266 self
.PcdFieldValueFromComm
= OrderedDict()
267 self
.PcdFieldValueFromFdf
= OrderedDict()
268 self
.DefaultFromDSC
=None
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
]
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
]
294 def SetPcdMode (self
, PcdMode
):
295 self
.PcdMode
= PcdMode
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
334 def __deepcopy__(self
,memo
):
335 new_pcd
= StructurePcd()
336 self
.sharedcopy(new_pcd
)
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
}
353 LibraryClassObject
= namedtuple('LibraryClassObject', ['LibraryClass','SupModList'])
355 ## ModuleBuildClassObject
357 # This Class defines ModuleBuildClass
359 # @param object: Inherited from object class
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
387 # @var Guids: To store value for Guids, it is a list structure as
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
399 class ModuleBuildClassObject(object):
401 self
.AutoGenVersion
= 0
407 self
.PcdIsDriver
= ''
408 self
.BinaryModule
= ''
410 self
.CustomMakefile
= {}
411 self
.Specification
= {}
412 self
.LibraryClass
= []
413 self
.ModuleEntryPointList
= []
414 self
.ModuleUnloadImageList
= []
415 self
.ConstructorList
= []
416 self
.DestructorList
= []
420 self
.LibraryClasses
= OrderedDict()
428 self
.BuildOptions
= {}
431 ## Convert the class to a string
433 # Convert member MetaFile of the class to a string
435 # @retval string Formatted String
438 return str(self
.MetaFile
)
440 ## Override __eq__ function
442 # Check whether ModuleBuildClassObjects are the same
444 # @retval False The two ModuleBuildClassObjects are different
445 # @retval True The two ModuleBuildClassObjects are the same
447 def __eq__(self
, Other
):
448 return self
.MetaFile
== Other
450 ## Override __hash__ function
452 # Use MetaFile as key in hash table
454 # @retval string Key for hash table
457 return hash(self
.MetaFile
)
459 ## PackageBuildClassObject
461 # This Class defines PackageBuildClass
463 # @param object: Inherited from object class
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}
482 class PackageBuildClassObject(object):
485 self
.PackageName
= ''
493 self
.LibraryClasses
= {}
496 ## Convert the class to a string
498 # Convert member MetaFile of the class to a string
500 # @retval string Formatted String
503 return str(self
.MetaFile
)
505 ## Override __eq__ function
507 # Check whether PackageBuildClassObjects are the same
509 # @retval False The two PackageBuildClassObjects are different
510 # @retval True The two PackageBuildClassObjects are the same
512 def __eq__(self
, Other
):
513 return self
.MetaFile
== Other
515 ## Override __hash__ function
517 # Use MetaFile as key in hash table
519 # @retval string Key for hash table
522 return hash(self
.MetaFile
)
524 ## PlatformBuildClassObject
526 # This Class defines PlatformBuildClass
528 # @param object: Inherited from object class
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 }
552 class PlatformBuildClassObject(object):
555 self
.PlatformName
= ''
558 self
.DscSpecification
= ''
559 self
.OutputDirectory
= ''
560 self
.FlashDefinition
= ''
561 self
.BuildNumber
= ''
562 self
.MakefileName
= ''
566 self
.LibraryInstances
= []
567 self
.LibraryClasses
= {}
570 self
.BuildOptions
= {}
572 ## Convert the class to a string
574 # Convert member MetaFile of the class to a string
576 # @retval string Formatted String
579 return str(self
.MetaFile
)
581 ## Override __eq__ function
583 # Check whether PlatformBuildClassObjects are the same
585 # @retval False The two PlatformBuildClassObjects are different
586 # @retval True The two PlatformBuildClassObjects are the same
588 def __eq__(self
, Other
):
589 return self
.MetaFile
== Other
591 ## Override __hash__ function
593 # Use MetaFile as key in hash table
595 # @retval string Key for hash table
598 return hash(self
.MetaFile
)