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 # This program and the accompanying materials
6 # are licensed and made available under the terms and conditions of the BSD License
7 # which accompanies this distribution. The full text of the license may be found at
8 # http://opensource.org/licenses/bsd-license.php
10 # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14 from collections
import OrderedDict
, namedtuple
15 from Common
.DataType
import *
18 from collections
import OrderedDict
19 from Common
.Misc
import CopyDict
21 StructPattern
= re
.compile(r
'[_a-zA-Z][0-9A-Za-z_\[\]]*$')
22 ArrayIndex
= re
.compile("\[\s*[0-9a-fA-FxX]*\s*\]")
25 # This Class is used for PcdObject
27 # @param object: Inherited from object class
28 # @param Name: Input value for Name of Pcd, default is None
29 # @param Guid: Input value for Guid of Pcd, default is None
30 # @param Type: Input value for Type of Pcd, default is None
31 # @param DatumType: Input value for DatumType of Pcd, default is None
32 # @param Value: Input value for Value of Pcd, default is None
33 # @param Token: Input value for Token of Pcd, default is None
34 # @param MaxDatumSize: Input value for MaxDatumSize of Pcd, default is None
35 # @param SkuInfoList: Input value for SkuInfoList of Pcd, default is {}
36 # @param IsOverrided: Input value for IsOverrided of Pcd, default is False
37 # @param GuidValue: Input value for TokenSpaceGuidValue of Pcd, default is None
39 # @var TokenCName: To store value for TokenCName
40 # @var TokenSpaceGuidCName: To store value for TokenSpaceGuidCName
41 # @var Type: To store value for Type
42 # @var DatumType: To store value for DatumType
43 # @var TokenValue: To store value for TokenValue
44 # @var MaxDatumSize: To store value for MaxDatumSize
45 # @var SkuInfoList: To store value for SkuInfoList
46 # @var IsOverrided: To store value for IsOverrided
47 # @var Phase: To store value for Phase, default is "DXE"
49 class PcdClassObject(object):
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):
51 self
.TokenCName
= Name
52 self
.TokenSpaceGuidCName
= Guid
53 self
.TokenSpaceGuidValue
= GuidValue
55 self
._DatumType
= DatumType
56 self
.DefaultValue
= Value
57 self
.TokenValue
= Token
58 self
.MaxDatumSize
= MaxDatumSize
59 self
.MaxSizeUserSet
= None
60 self
.SkuInfoList
= SkuInfoList
if SkuInfoList
is not None else OrderedDict()
63 self
.IsOverrided
= IsOverrided
64 self
.IsFromBinaryInf
= False
65 self
.IsFromDsc
= False
66 self
.validateranges
= validateranges
if validateranges
is not None else []
67 self
.validlists
= validlists
if validlists
is not None else []
68 self
.expressions
= expressions
if expressions
is not None else []
69 self
.DscDefaultValue
= None
72 self
.DscDefaultValue
= Value
73 self
.PcdValueFromComm
= ""
74 self
.PcdValueFromFdf
= ""
75 self
.CustomAttribute
= {}
76 self
.UserDefinedDefaultStoresFlag
= UserDefinedDefaultStoresFlag
82 dimension
= ArrayIndex
.findall(self
._DatumType
)
83 for item
in dimension
:
84 maxsize
= item
.lstrip("[").rstrip("]").strip()
87 maxsize
= str(int(maxsize
,16)) if maxsize
.startswith(("0x","0X")) else maxsize
88 self
._Capacity
.append(maxsize
)
89 if hasattr(self
, "SkuOverrideValues"):
90 for sku
in self
.SkuOverrideValues
:
91 for defaultstore
in self
.SkuOverrideValues
[sku
]:
92 fields
= self
.SkuOverrideValues
[sku
][defaultstore
]
93 for demesionattr
in fields
:
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
]):
98 if hasattr(self
,"DefaultValues"):
99 for demesionattr
in self
.DefaultValues
:
100 deme
= ArrayIndex
.findall(demesionattr
)
101 for i
in range(len(deme
)-1):
102 if int(deme
[i
].lstrip("[").rstrip("]").strip()) > int(self
._Capacity
[i
]):
104 return self
._Capacity
107 return self
._DatumType
110 def DatumType(self
,DataType
):
111 self
._DatumType
= DataType
112 self
._Capacity
= None
115 def BaseDatumType(self
):
117 return self
._DatumType
[:self
._DatumType
.index("[")]
119 return self
._DatumType
121 return True if len(self
.Capacity
) else False
123 def IsAggregateDatumType(self
):
124 if self
.DatumType
in [TAB_UINT8
, TAB_UINT16
, TAB_UINT32
, TAB_UINT64
, TAB_VOID
, "BOOLEAN"]:
126 if self
.IsArray() or StructPattern
.match(self
.DatumType
):
130 def IsSimpleTypeArray(self
):
131 if self
.IsArray() and self
.BaseDatumType
in [TAB_UINT8
, TAB_UINT16
, TAB_UINT32
, TAB_UINT64
, "BOOLEAN"]:
136 def GetPcdMaxSizeWorker(PcdString
, MaxSize
):
137 if PcdString
.startswith("{") and PcdString
.endswith("}"):
138 return max([len(PcdString
.split(",")),MaxSize
])
140 if PcdString
.startswith("\"") or PcdString
.startswith("\'"):
141 return max([len(PcdString
)-2+1,MaxSize
])
143 if PcdString
.startswith("L\""):
144 return max([2*(len(PcdString
)-3+1),MaxSize
])
146 return max([len(PcdString
),MaxSize
])
148 ## Get the maximum number of bytes
149 def GetPcdMaxSize(self
):
150 if self
.DatumType
in TAB_PCD_NUMERIC_TYPES
:
151 return MAX_SIZE_TYPE
[self
.DatumType
]
153 MaxSize
= int(self
.MaxDatumSize
, 10) if self
.MaxDatumSize
else 0
154 if self
.PcdValueFromFdf
:
155 MaxSize
= self
.GetPcdMaxSizeWorker(self
.PcdValueFromFdf
,MaxSize
)
156 if self
.PcdValueFromComm
:
157 MaxSize
= self
.GetPcdMaxSizeWorker(self
.PcdValueFromComm
,MaxSize
)
158 if hasattr(self
, "DefaultValueFromDec"):
159 MaxSize
= self
.GetPcdMaxSizeWorker(self
.DefaultValueFromDec
,MaxSize
)
162 ## Get the number of bytes
163 def GetPcdSize(self
):
164 if self
.DatumType
in TAB_PCD_NUMERIC_TYPES
:
165 return MAX_SIZE_TYPE
[self
.DatumType
]
166 if not self
.DefaultValue
:
168 elif self
.DefaultValue
[0] == 'L':
169 return (len(self
.DefaultValue
) - 2) * 2
170 elif self
.DefaultValue
[0] == '{':
171 return len(self
.DefaultValue
.split(','))
173 return len(self
.DefaultValue
) - 1
176 ## Convert the class to a string
178 # Convert each member of the class to string
179 # Organize to a single line format string
181 # @retval Rtn Formatted String
184 Rtn
= '\tTokenCName=' + str(self
.TokenCName
) + ', ' + \
185 'TokenSpaceGuidCName=' + str(self
.TokenSpaceGuidCName
) + ', ' + \
186 'Type=' + str(self
.Type
) + ', ' + \
187 'DatumType=' + str(self
.DatumType
) + ', ' + \
188 'DefaultValue=' + str(self
.DefaultValue
) + ', ' + \
189 'TokenValue=' + str(self
.TokenValue
) + ', ' + \
190 'MaxDatumSize=' + str(self
.MaxDatumSize
) + ', '
191 for Item
in self
.SkuInfoList
.values():
192 Rtn
= Rtn
+ 'SkuId=' + Item
.SkuId
+ ', ' + 'SkuIdName=' + Item
.SkuIdName
193 Rtn
= Rtn
+ ', IsOverrided=' + str(self
.IsOverrided
)
197 ## Override __eq__ function
199 # Check whether pcds are the same
201 # @retval False The two pcds are different
202 # @retval True The two pcds are the same
204 def __eq__(self
, Other
):
205 return Other
and self
.TokenCName
== Other
.TokenCName
and self
.TokenSpaceGuidCName
== Other
.TokenSpaceGuidCName
207 ## Override __hash__ function
209 # Use (TokenCName, TokenSpaceGuidCName) as key in hash table
211 # @retval truple() Key for hash table
214 return hash((self
.TokenCName
, self
.TokenSpaceGuidCName
))
216 def sharedcopy(self
,new_pcd
):
217 new_pcd
.TokenCName
= self
.TokenCName
218 new_pcd
.TokenSpaceGuidCName
= self
.TokenSpaceGuidCName
219 new_pcd
.TokenSpaceGuidValue
= self
.TokenSpaceGuidValue
220 new_pcd
.Type
= self
.Type
221 new_pcd
.DatumType
= self
.DatumType
222 new_pcd
.DefaultValue
= self
.DefaultValue
223 new_pcd
.TokenValue
= self
.TokenValue
224 new_pcd
.MaxDatumSize
= self
.MaxDatumSize
225 new_pcd
.MaxSizeUserSet
= self
.MaxSizeUserSet
227 new_pcd
.Phase
= self
.Phase
228 new_pcd
.Pending
= self
.Pending
229 new_pcd
.IsOverrided
= self
.IsOverrided
230 new_pcd
.IsFromBinaryInf
= self
.IsFromBinaryInf
231 new_pcd
.IsFromDsc
= self
.IsFromDsc
232 new_pcd
.PcdValueFromComm
= self
.PcdValueFromComm
233 new_pcd
.PcdValueFromFdf
= self
.PcdValueFromFdf
234 new_pcd
.UserDefinedDefaultStoresFlag
= self
.UserDefinedDefaultStoresFlag
235 new_pcd
.DscRawValue
= self
.DscRawValue
236 new_pcd
.CustomAttribute
= self
.CustomAttribute
237 new_pcd
.validateranges
= [item
for item
in self
.validateranges
]
238 new_pcd
.validlists
= [item
for item
in self
.validlists
]
239 new_pcd
.expressions
= [item
for item
in self
.expressions
]
240 new_pcd
.SkuInfoList
= {key
: copy
.deepcopy(skuobj
) for key
,skuobj
in self
.SkuInfoList
.items()}
243 def __deepcopy__(self
,memo
):
244 new_pcd
= PcdClassObject()
245 self
.sharedcopy(new_pcd
)
248 class StructurePcd(PcdClassObject
):
249 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
):
250 if SkuInfoList
is None:
252 if validateranges
is None:
254 if validlists
is None:
256 if expressions
is None:
260 super(StructurePcd
, self
).__init
__(Name
, Guid
, Type
, DatumType
, Value
, Token
, MaxDatumSize
, SkuInfoList
, IsOverrided
, GuidValue
, validateranges
, validlists
, expressions
)
261 self
.StructuredPcdIncludeFile
= [] if StructuredPcdIncludeFile
is None else StructuredPcdIncludeFile
262 self
.PackageDecs
= Packages
263 self
.DefaultStoreName
= [default_store
]
264 self
.DefaultValues
= OrderedDict()
266 self
.SkuOverrideValues
= OrderedDict()
267 self
.StructName
= None
268 self
.PcdDefineLineNo
= 0
270 self
.DefaultValueFromDec
= ""
271 self
.ValueChain
= set()
272 self
.PcdFieldValueFromComm
= OrderedDict()
273 self
.PcdFieldValueFromFdf
= OrderedDict()
274 self
.DefaultFromDSC
=None
278 def AddDefaultValue (self
, FieldName
, Value
, FileName
="", LineNo
=0,DimensionAttr
="-1"):
279 if DimensionAttr
not in self
.DefaultValues
:
280 self
.DefaultValues
[DimensionAttr
] = collections
.OrderedDict()
281 if FieldName
in self
.DefaultValues
[DimensionAttr
]:
282 del self
.DefaultValues
[DimensionAttr
][FieldName
]
283 self
.DefaultValues
[DimensionAttr
][FieldName
] = [Value
.strip(), FileName
, LineNo
]
284 return self
.DefaultValues
[DimensionAttr
][FieldName
]
286 def SetDecDefaultValue(self
, DefaultValue
):
287 self
.DefaultValueFromDec
= DefaultValue
288 def AddOverrideValue (self
, FieldName
, Value
, SkuName
, DefaultStoreName
, FileName
="", LineNo
=0, DimensionAttr
= '-1'):
289 if SkuName
not in self
.SkuOverrideValues
:
290 self
.SkuOverrideValues
[SkuName
] = OrderedDict()
291 if DefaultStoreName
not in self
.SkuOverrideValues
[SkuName
]:
292 self
.SkuOverrideValues
[SkuName
][DefaultStoreName
] = OrderedDict()
293 if DimensionAttr
not in self
.SkuOverrideValues
[SkuName
][DefaultStoreName
]:
294 self
.SkuOverrideValues
[SkuName
][DefaultStoreName
][DimensionAttr
] = collections
.OrderedDict()
295 if FieldName
in self
.SkuOverrideValues
[SkuName
][DefaultStoreName
][DimensionAttr
]:
296 del self
.SkuOverrideValues
[SkuName
][DefaultStoreName
][DimensionAttr
][FieldName
]
297 self
.SkuOverrideValues
[SkuName
][DefaultStoreName
][DimensionAttr
][FieldName
] = [Value
.strip(), FileName
, LineNo
]
298 return self
.SkuOverrideValues
[SkuName
][DefaultStoreName
][DimensionAttr
][FieldName
]
300 def SetPcdMode (self
, PcdMode
):
301 self
.PcdMode
= PcdMode
303 def copy(self
, PcdObject
):
304 self
.TokenCName
= PcdObject
.TokenCName
if PcdObject
.TokenCName
else self
.TokenCName
305 self
.TokenSpaceGuidCName
= PcdObject
.TokenSpaceGuidCName
if PcdObject
.TokenSpaceGuidCName
else PcdObject
.TokenSpaceGuidCName
306 self
.TokenSpaceGuidValue
= PcdObject
.TokenSpaceGuidValue
if PcdObject
.TokenSpaceGuidValue
else self
.TokenSpaceGuidValue
307 self
.Type
= PcdObject
.Type
if PcdObject
.Type
else self
.Type
308 self
._DatumType
= PcdObject
.DatumType
if PcdObject
.DatumType
else self
.DatumType
309 self
.DefaultValue
= PcdObject
.DefaultValue
if PcdObject
.DefaultValue
else self
.DefaultValue
310 self
.TokenValue
= PcdObject
.TokenValue
if PcdObject
.TokenValue
else self
.TokenValue
311 self
.MaxDatumSize
= PcdObject
.MaxDatumSize
if PcdObject
.MaxDatumSize
else self
.MaxDatumSize
312 self
.SkuInfoList
= PcdObject
.SkuInfoList
if PcdObject
.SkuInfoList
else self
.SkuInfoList
313 self
.Phase
= PcdObject
.Phase
if PcdObject
.Phase
else self
.Phase
314 self
.Pending
= PcdObject
.Pending
if PcdObject
.Pending
else self
.Pending
315 self
.IsOverrided
= PcdObject
.IsOverrided
if PcdObject
.IsOverrided
else self
.IsOverrided
316 self
.IsFromBinaryInf
= PcdObject
.IsFromBinaryInf
if PcdObject
.IsFromBinaryInf
else self
.IsFromBinaryInf
317 self
.IsFromDsc
= PcdObject
.IsFromDsc
if PcdObject
.IsFromDsc
else self
.IsFromDsc
318 self
.validateranges
= PcdObject
.validateranges
if PcdObject
.validateranges
else self
.validateranges
319 self
.validlists
= PcdObject
.validlists
if PcdObject
.validlists
else self
.validlists
320 self
.expressions
= PcdObject
.expressions
if PcdObject
.expressions
else self
.expressions
321 self
.DscRawValue
= PcdObject
.DscRawValue
if PcdObject
.DscRawValue
else self
.DscRawValue
322 self
.PcdValueFromComm
= PcdObject
.PcdValueFromComm
if PcdObject
.PcdValueFromComm
else self
.PcdValueFromComm
323 self
.PcdValueFromFdf
= PcdObject
.PcdValueFromFdf
if PcdObject
.PcdValueFromFdf
else self
.PcdValueFromFdf
324 self
.CustomAttribute
= PcdObject
.CustomAttribute
if PcdObject
.CustomAttribute
else self
.CustomAttribute
325 self
.UserDefinedDefaultStoresFlag
= PcdObject
.UserDefinedDefaultStoresFlag
if PcdObject
.UserDefinedDefaultStoresFlag
else self
.UserDefinedDefaultStoresFlag
326 if isinstance(PcdObject
, StructurePcd
):
327 self
.StructuredPcdIncludeFile
= PcdObject
.StructuredPcdIncludeFile
if PcdObject
.StructuredPcdIncludeFile
else self
.StructuredPcdIncludeFile
328 self
.PackageDecs
= PcdObject
.PackageDecs
if PcdObject
.PackageDecs
else self
.PackageDecs
329 self
.DefaultValues
= PcdObject
.DefaultValues
if PcdObject
.DefaultValues
else self
.DefaultValues
330 self
.PcdMode
= PcdObject
.PcdMode
if PcdObject
.PcdMode
else self
.PcdMode
331 self
.DefaultValueFromDec
= PcdObject
.DefaultValueFromDec
if PcdObject
.DefaultValueFromDec
else self
.DefaultValueFromDec
332 self
.SkuOverrideValues
= PcdObject
.SkuOverrideValues
if PcdObject
.SkuOverrideValues
else self
.SkuOverrideValues
333 self
.StructName
= PcdObject
.DatumType
if PcdObject
.DatumType
else self
.StructName
334 self
.PcdDefineLineNo
= PcdObject
.PcdDefineLineNo
if PcdObject
.PcdDefineLineNo
else self
.PcdDefineLineNo
335 self
.PkgPath
= PcdObject
.PkgPath
if PcdObject
.PkgPath
else self
.PkgPath
336 self
.ValueChain
= PcdObject
.ValueChain
if PcdObject
.ValueChain
else self
.ValueChain
337 self
.PcdFieldValueFromComm
= PcdObject
.PcdFieldValueFromComm
if PcdObject
.PcdFieldValueFromComm
else self
.PcdFieldValueFromComm
338 self
.PcdFieldValueFromFdf
= PcdObject
.PcdFieldValueFromFdf
if PcdObject
.PcdFieldValueFromFdf
else self
.PcdFieldValueFromFdf
340 def __deepcopy__(self
,memo
):
341 new_pcd
= StructurePcd()
342 self
.sharedcopy(new_pcd
)
344 new_pcd
.DefaultValueFromDec
= self
.DefaultValueFromDec
345 new_pcd
.PcdMode
= self
.PcdMode
346 new_pcd
.StructName
= self
.DatumType
347 new_pcd
.PcdDefineLineNo
= self
.PcdDefineLineNo
348 new_pcd
.PkgPath
= self
.PkgPath
349 new_pcd
.StructuredPcdIncludeFile
= [item
for item
in self
.StructuredPcdIncludeFile
]
350 new_pcd
.PackageDecs
= [item
for item
in self
.PackageDecs
]
351 new_pcd
.DefaultValues
= CopyDict(self
.DefaultValues
)
352 new_pcd
.DefaultFromDSC
=CopyDict(self
.DefaultFromDSC
)
353 new_pcd
.SkuOverrideValues
= CopyDict(self
.SkuOverrideValues
)
354 new_pcd
.PcdFieldValueFromComm
= CopyDict(self
.PcdFieldValueFromComm
)
355 new_pcd
.PcdFieldValueFromFdf
= CopyDict(self
.PcdFieldValueFromFdf
)
356 new_pcd
.ValueChain
= {item
for item
in self
.ValueChain
}
359 LibraryClassObject
= namedtuple('LibraryClassObject', ['LibraryClass','SupModList'])
361 ## ModuleBuildClassObject
363 # This Class defines ModuleBuildClass
365 # @param object: Inherited from object class
367 # @var MetaFile: To store value for module meta file path
368 # @var BaseName: To store value for BaseName
369 # @var ModuleType: To store value for ModuleType
370 # @var Guid: To store value for Guid
371 # @var Version: To store value for Version
372 # @var PcdIsDriver: To store value for PcdIsDriver
373 # @var BinaryModule: To store value for BinaryModule
374 # @var CustomMakefile: To store value for CustomMakefile
375 # @var Specification: To store value for Specification
376 # @var Shadow To store value for Shadow
377 # @var LibraryClass: To store value for LibraryClass, it is a list structure as
378 # [ LibraryClassObject, ...]
379 # @var ModuleEntryPointList: To store value for ModuleEntryPointList
380 # @var ModuleUnloadImageList: To store value for ModuleUnloadImageList
381 # @var ConstructorList: To store value for ConstructorList
382 # @var DestructorList: To store value for DestructorList
383 # @var Binaries: To store value for Binaries, it is a list structure as
384 # [ ModuleBinaryClassObject, ...]
385 # @var Sources: To store value for Sources, it is a list structure as
386 # [ ModuleSourceFilesClassObject, ... ]
387 # @var LibraryClasses: To store value for LibraryClasses, it is a set structure as
388 # { [LibraryClassName, ModuleType] : LibraryClassInfFile }
389 # @var Protocols: To store value for Protocols, it is a list structure as
390 # [ ProtocolName, ... ]
391 # @var Ppis: To store value for Ppis, it is a list structure as
393 # @var Guids: To store value for Guids, it is a list structure as
395 # @var Includes: To store value for Includes, it is a list structure as
396 # [ IncludePath, ... ]
397 # @var Packages: To store value for Packages, it is a list structure as
398 # [ DecFileName, ... ]
399 # @var Pcds: To store value for Pcds, it is a set structure as
400 # { [(PcdCName, PcdGuidCName)] : PcdClassObject}
401 # @var BuildOptions: To store value for BuildOptions, it is a set structure as
402 # { [BuildOptionKey] : BuildOptionValue}
403 # @var Depex: To store value for Depex
405 class ModuleBuildClassObject(object):
407 self
.AutoGenVersion
= 0
413 self
.PcdIsDriver
= ''
414 self
.BinaryModule
= ''
416 self
.SourceOverridePath
= ''
417 self
.CustomMakefile
= {}
418 self
.Specification
= {}
419 self
.LibraryClass
= []
420 self
.ModuleEntryPointList
= []
421 self
.ModuleUnloadImageList
= []
422 self
.ConstructorList
= []
423 self
.DestructorList
= []
427 self
.LibraryClasses
= OrderedDict()
435 self
.BuildOptions
= {}
438 ## Convert the class to a string
440 # Convert member MetaFile of the class to a string
442 # @retval string Formatted String
445 return str(self
.MetaFile
)
447 ## Override __eq__ function
449 # Check whether ModuleBuildClassObjects are the same
451 # @retval False The two ModuleBuildClassObjects are different
452 # @retval True The two ModuleBuildClassObjects are the same
454 def __eq__(self
, Other
):
455 return self
.MetaFile
== Other
457 ## Override __hash__ function
459 # Use MetaFile as key in hash table
461 # @retval string Key for hash table
464 return hash(self
.MetaFile
)
466 ## PackageBuildClassObject
468 # This Class defines PackageBuildClass
470 # @param object: Inherited from object class
472 # @var MetaFile: To store value for package meta file path
473 # @var PackageName: To store value for PackageName
474 # @var Guid: To store value for Guid
475 # @var Version: To store value for Version
476 # @var Protocols: To store value for Protocols, it is a set structure as
477 # { [ProtocolName] : Protocol Guid, ... }
478 # @var Ppis: To store value for Ppis, it is a set structure as
479 # { [PpiName] : Ppi Guid, ... }
480 # @var Guids: To store value for Guids, it is a set structure as
481 # { [GuidName] : Guid, ... }
482 # @var Includes: To store value for Includes, it is a list structure as
483 # [ IncludePath, ... ]
484 # @var LibraryClasses: To store value for LibraryClasses, it is a set structure as
485 # { [LibraryClassName] : LibraryClassInfFile }
486 # @var Pcds: To store value for Pcds, it is a set structure as
487 # { [(PcdCName, PcdGuidCName)] : PcdClassObject}
489 class PackageBuildClassObject(object):
492 self
.PackageName
= ''
500 self
.LibraryClasses
= {}
503 ## Convert the class to a string
505 # Convert member MetaFile of the class to a string
507 # @retval string Formatted String
510 return str(self
.MetaFile
)
512 ## Override __eq__ function
514 # Check whether PackageBuildClassObjects are the same
516 # @retval False The two PackageBuildClassObjects are different
517 # @retval True The two PackageBuildClassObjects are the same
519 def __eq__(self
, Other
):
520 return self
.MetaFile
== Other
522 ## Override __hash__ function
524 # Use MetaFile as key in hash table
526 # @retval string Key for hash table
529 return hash(self
.MetaFile
)
531 ## PlatformBuildClassObject
533 # This Class defines PlatformBuildClass
535 # @param object: Inherited from object class
537 # @var MetaFile: To store value for platform meta-file path
538 # @var PlatformName: To store value for PlatformName
539 # @var Guid: To store value for Guid
540 # @var Version: To store value for Version
541 # @var DscSpecification: To store value for DscSpecification
542 # @var OutputDirectory: To store value for OutputDirectory
543 # @var FlashDefinition: To store value for FlashDefinition
544 # @var BuildNumber: To store value for BuildNumber
545 # @var MakefileName: To store value for MakefileName
546 # @var SkuIds: To store value for SkuIds, it is a set structure as
547 # { 'SkuName' : SkuId, '!include' : includefilename, ...}
548 # @var Modules: To store value for Modules, it is a list structure as
549 # [ InfFileName, ... ]
550 # @var Libraries: To store value for Libraries, it is a list structure as
551 # [ InfFileName, ... ]
552 # @var LibraryClasses: To store value for LibraryClasses, it is a set structure as
553 # { (LibraryClassName, ModuleType) : LibraryClassInfFile }
554 # @var Pcds: To store value for Pcds, it is a set structure as
555 # { [(PcdCName, PcdGuidCName)] : PcdClassObject }
556 # @var BuildOptions: To store value for BuildOptions, it is a set structure as
557 # { [BuildOptionKey] : BuildOptionValue }
559 class PlatformBuildClassObject(object):
562 self
.PlatformName
= ''
565 self
.DscSpecification
= ''
566 self
.OutputDirectory
= ''
567 self
.FlashDefinition
= ''
568 self
.BuildNumber
= ''
569 self
.MakefileName
= ''
573 self
.LibraryInstances
= []
574 self
.LibraryClasses
= {}
577 self
.BuildOptions
= {}
579 ## Convert the class to a string
581 # Convert member MetaFile of the class to a string
583 # @retval string Formatted String
586 return str(self
.MetaFile
)
588 ## Override __eq__ function
590 # Check whether PlatformBuildClassObjects are the same
592 # @retval False The two PlatformBuildClassObjects are different
593 # @retval True The two PlatformBuildClassObjects are the same
595 def __eq__(self
, Other
):
596 return self
.MetaFile
== Other
598 ## Override __hash__ function
600 # Use MetaFile as key in hash table
602 # @retval string Key for hash table
605 return hash(self
.MetaFile
)