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
,ArrayIndex
15 import Common
.EdkLogger
as EdkLogger
16 from Common
.BuildToolError
import OPTION_VALUE_INVALID
17 from Common
.caching
import cached_property
18 StructPattern
= re
.compile(r
'[_a-zA-Z][0-9A-Za-z_\[\]]*$')
22 # This Class is used for PcdObject
24 # @param object: Inherited from object class
25 # @param Name: Input value for Name of Pcd, default is None
26 # @param Guid: Input value for Guid of Pcd, default is None
27 # @param Type: Input value for Type of Pcd, default is None
28 # @param DatumType: Input value for DatumType of Pcd, default is None
29 # @param Value: Input value for Value of Pcd, default is None
30 # @param Token: Input value for Token of Pcd, default is None
31 # @param MaxDatumSize: Input value for MaxDatumSize of Pcd, default is None
32 # @param SkuInfoList: Input value for SkuInfoList of Pcd, default is {}
33 # @param IsOverrided: Input value for IsOverrided of Pcd, default is False
34 # @param GuidValue: Input value for TokenSpaceGuidValue of Pcd, default is None
36 # @var TokenCName: To store value for TokenCName
37 # @var TokenSpaceGuidCName: To store value for TokenSpaceGuidCName
38 # @var Type: To store value for Type
39 # @var DatumType: To store value for DatumType
40 # @var TokenValue: To store value for TokenValue
41 # @var MaxDatumSize: To store value for MaxDatumSize
42 # @var SkuInfoList: To store value for SkuInfoList
43 # @var IsOverrided: To store value for IsOverrided
44 # @var Phase: To store value for Phase, default is "DXE"
46 class PcdClassObject(object):
47 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):
48 self
.TokenCName
= Name
49 self
.TokenSpaceGuidCName
= Guid
50 self
.TokenSpaceGuidValue
= GuidValue
52 self
._DatumType
= DatumType
53 self
.DefaultValue
= Value
54 self
.TokenValue
= Token
55 self
.MaxDatumSize
= MaxDatumSize
56 self
.MaxSizeUserSet
= None
57 self
.SkuInfoList
= SkuInfoList
if SkuInfoList
is not None else OrderedDict()
60 self
.IsOverrided
= IsOverrided
61 self
.IsFromBinaryInf
= False
62 self
.IsFromDsc
= False
63 self
.validateranges
= validateranges
if validateranges
is not None else []
64 self
.validlists
= validlists
if validlists
is not None else []
65 self
.expressions
= expressions
if expressions
is not None else []
66 self
.DscDefaultValue
= None
68 self
.DscRawValueInfo
= {}
70 self
.DscDefaultValue
= Value
71 self
.PcdValueFromComm
= ""
72 self
.PcdValueFromFdf
= ""
73 self
.PcdValueFromComponents
= {} #{ModuleGuid:value, file_path,lineNo}
74 self
.CustomAttribute
= {}
75 self
.UserDefinedDefaultStoresFlag
= UserDefinedDefaultStoresFlag
80 if self
._Capacity
is None:
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 fieldinfo
= fields
[demesionattr
]
95 deme
= ArrayIndex
.findall(demesionattr
)
96 for i
in range(len(deme
)):
97 if int(deme
[i
].lstrip("[").rstrip("]").strip()) >= int(self
._Capacity
[i
]):
98 if self
._Capacity
[i
] != "-1":
99 firstfieldinfo
= list(fieldinfo
.values())[0]
100 EdkLogger
.error('Build', OPTION_VALUE_INVALID
, "For Pcd %s, Array Index exceed the Array size. From %s Line %s \n " %
101 (".".join((self
.TokenSpaceGuidCName
, self
.TokenCName
)), firstfieldinfo
[1],firstfieldinfo
[2] ))
102 if hasattr(self
,"DefaultValues"):
103 for demesionattr
in self
.DefaultValues
:
104 fieldinfo
= self
.DefaultValues
[demesionattr
]
105 deme
= ArrayIndex
.findall(demesionattr
)
106 for i
in range(len(deme
)):
107 if int(deme
[i
].lstrip("[").rstrip("]").strip()) >= int(self
._Capacity
[i
]):
108 if self
._Capacity
[i
] != "-1":
109 firstfieldinfo
= list(fieldinfo
.values())[0]
110 EdkLogger
.error('Build', OPTION_VALUE_INVALID
, "For Pcd %s, Array Index exceed the Array size. From %s Line %s \n " %
111 (".".join((self
.TokenSpaceGuidCName
, self
.TokenCName
)), firstfieldinfo
[1],firstfieldinfo
[2] ))
112 return self
._Capacity
114 def PcdArraySize(self
):
115 if self
.Capacity
[-1] == "-1":
118 for de
in self
.Capacity
:
119 size
= size
* int(de
)
123 return self
._DatumType
126 def DatumType(self
,DataType
):
127 self
._DatumType
= DataType
128 self
._Capacity
= None
131 def BaseDatumType(self
):
133 return self
._DatumType
[:self
._DatumType
.index("[")]
135 return self
._DatumType
137 return True if len(self
.Capacity
) else False
139 def IsAggregateDatumType(self
):
140 if self
.DatumType
in [TAB_UINT8
, TAB_UINT16
, TAB_UINT32
, TAB_UINT64
, TAB_VOID
, "BOOLEAN"]:
142 if self
.IsArray() or StructPattern
.match(self
.DatumType
):
146 def IsSimpleTypeArray(self
):
147 if self
.IsArray() and self
.BaseDatumType
in [TAB_UINT8
, TAB_UINT16
, TAB_UINT32
, TAB_UINT64
, "BOOLEAN"]:
152 def GetPcdMaxSizeWorker(PcdString
, MaxSize
):
153 if PcdString
.startswith("{") and PcdString
.endswith("}"):
154 return max([len(PcdString
.split(",")),MaxSize
])
156 if PcdString
.startswith("\"") or PcdString
.startswith("\'"):
157 return max([len(PcdString
)-2+1,MaxSize
])
159 if PcdString
.startswith("L\""):
160 return max([2*(len(PcdString
)-3+1),MaxSize
])
162 return max([len(PcdString
),MaxSize
])
164 ## Get the maximum number of bytes
165 def GetPcdMaxSize(self
):
166 if self
.DatumType
in TAB_PCD_NUMERIC_TYPES
:
167 return MAX_SIZE_TYPE
[self
.DatumType
]
169 MaxSize
= int(self
.MaxDatumSize
, 10) if self
.MaxDatumSize
else 0
170 if self
.PcdValueFromFdf
:
171 MaxSize
= self
.GetPcdMaxSizeWorker(self
.PcdValueFromFdf
,MaxSize
)
172 if self
.PcdValueFromComm
:
173 MaxSize
= self
.GetPcdMaxSizeWorker(self
.PcdValueFromComm
,MaxSize
)
174 if hasattr(self
, "DefaultValueFromDec"):
175 MaxSize
= self
.GetPcdMaxSizeWorker(self
.DefaultValueFromDec
,MaxSize
)
178 ## Get the number of bytes
179 def GetPcdSize(self
):
180 if self
.DatumType
in TAB_PCD_NUMERIC_TYPES
:
181 return MAX_SIZE_TYPE
[self
.DatumType
]
182 if not self
.DefaultValue
:
184 elif self
.DefaultValue
[0] == 'L':
185 return (len(self
.DefaultValue
) - 2) * 2
186 elif self
.DefaultValue
[0] == '{':
187 return len(self
.DefaultValue
.split(','))
189 return len(self
.DefaultValue
) - 1
192 ## Convert the class to a string
194 # Convert each member of the class to string
195 # Organize to a single line format string
197 # @retval Rtn Formatted String
200 Rtn
= '\tTokenCName=' + str(self
.TokenCName
) + ', ' + \
201 'TokenSpaceGuidCName=' + str(self
.TokenSpaceGuidCName
) + ', ' + \
202 'Type=' + str(self
.Type
) + ', ' + \
203 'DatumType=' + str(self
.DatumType
) + ', ' + \
204 'DefaultValue=' + str(self
.DefaultValue
) + ', ' + \
205 'TokenValue=' + str(self
.TokenValue
) + ', ' + \
206 'MaxDatumSize=' + str(self
.MaxDatumSize
) + ', '
207 for Item
in self
.SkuInfoList
.values():
208 Rtn
= Rtn
+ 'SkuId=' + Item
.SkuId
+ ', ' + 'SkuIdName=' + Item
.SkuIdName
209 Rtn
= Rtn
+ ', IsOverrided=' + str(self
.IsOverrided
)
213 ## Override __eq__ function
215 # Check whether pcds are the same
217 # @retval False The two pcds are different
218 # @retval True The two pcds are the same
220 def __eq__(self
, Other
):
221 return Other
and self
.TokenCName
== Other
.TokenCName
and self
.TokenSpaceGuidCName
== Other
.TokenSpaceGuidCName
223 ## Override __hash__ function
225 # Use (TokenCName, TokenSpaceGuidCName) as key in hash table
227 # @retval truple() Key for hash table
230 return hash((self
.TokenCName
, self
.TokenSpaceGuidCName
))
234 return ".".join((self
.TokenSpaceGuidCName
,self
.TokenCName
))
236 def __lt__(self
,pcd
):
237 return self
._fullname
< pcd
._fullname
238 def __gt__(self
,pcd
):
239 return self
._fullname
> pcd
._fullname
241 def sharedcopy(self
,new_pcd
):
242 new_pcd
.TokenCName
= self
.TokenCName
243 new_pcd
.TokenSpaceGuidCName
= self
.TokenSpaceGuidCName
244 new_pcd
.TokenSpaceGuidValue
= self
.TokenSpaceGuidValue
245 new_pcd
.Type
= self
.Type
246 new_pcd
.DatumType
= self
.DatumType
247 new_pcd
.DefaultValue
= self
.DefaultValue
248 new_pcd
.TokenValue
= self
.TokenValue
249 new_pcd
.MaxDatumSize
= self
.MaxDatumSize
250 new_pcd
.MaxSizeUserSet
= self
.MaxSizeUserSet
252 new_pcd
.Phase
= self
.Phase
253 new_pcd
.Pending
= self
.Pending
254 new_pcd
.IsOverrided
= self
.IsOverrided
255 new_pcd
.IsFromBinaryInf
= self
.IsFromBinaryInf
256 new_pcd
.IsFromDsc
= self
.IsFromDsc
257 new_pcd
.PcdValueFromComm
= self
.PcdValueFromComm
258 new_pcd
.PcdValueFromFdf
= self
.PcdValueFromFdf
259 new_pcd
.UserDefinedDefaultStoresFlag
= self
.UserDefinedDefaultStoresFlag
260 new_pcd
.DscRawValue
= self
.DscRawValue
261 new_pcd
.DscRawValueInfo
= self
.DscRawValueInfo
262 new_pcd
.CustomAttribute
= self
.CustomAttribute
263 new_pcd
.validateranges
= [item
for item
in self
.validateranges
]
264 new_pcd
.validlists
= [item
for item
in self
.validlists
]
265 new_pcd
.expressions
= [item
for item
in self
.expressions
]
266 new_pcd
.SkuInfoList
= {key
: copy
.deepcopy(skuobj
) for key
,skuobj
in self
.SkuInfoList
.items()}
269 def __deepcopy__(self
,memo
):
270 new_pcd
= PcdClassObject()
271 self
.sharedcopy(new_pcd
)
274 class StructurePcd(PcdClassObject
):
275 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
):
276 if SkuInfoList
is None:
278 if validateranges
is None:
280 if validlists
is None:
282 if expressions
is None:
286 super(StructurePcd
, self
).__init
__(Name
, Guid
, Type
, DatumType
, Value
, Token
, MaxDatumSize
, SkuInfoList
, IsOverrided
, GuidValue
, validateranges
, validlists
, expressions
)
287 self
.StructuredPcdIncludeFile
= [] if StructuredPcdIncludeFile
is None else StructuredPcdIncludeFile
288 self
.PackageDecs
= Packages
289 self
.DefaultStoreName
= [default_store
]
290 self
.DefaultValues
= OrderedDict()
292 self
.SkuOverrideValues
= OrderedDict()
293 self
.StructName
= None
294 self
.PcdDefineLineNo
= 0
296 self
.DefaultValueFromDec
= ""
297 self
.DefaultValueFromDecInfo
= None
298 self
.ValueChain
= set()
299 self
.PcdFieldValueFromComm
= OrderedDict()
300 self
.PcdFieldValueFromFdf
= OrderedDict()
301 self
.DefaultFromDSC
=None
302 self
.PcdFiledValueFromDscComponent
= OrderedDict()
306 def AddDefaultValue (self
, FieldName
, Value
, FileName
="", LineNo
=0,DimensionAttr
="-1"):
307 if DimensionAttr
not in self
.DefaultValues
:
308 self
.DefaultValues
[DimensionAttr
] = collections
.OrderedDict()
309 if FieldName
in self
.DefaultValues
[DimensionAttr
]:
310 del self
.DefaultValues
[DimensionAttr
][FieldName
]
311 self
.DefaultValues
[DimensionAttr
][FieldName
] = [Value
.strip(), FileName
, LineNo
]
312 return self
.DefaultValues
[DimensionAttr
][FieldName
]
314 def SetDecDefaultValue(self
, DefaultValue
,decpath
=None,lineno
=None):
315 self
.DefaultValueFromDec
= DefaultValue
316 self
.DefaultValueFromDecInfo
= (decpath
,lineno
)
317 def AddOverrideValue (self
, FieldName
, Value
, SkuName
, DefaultStoreName
, FileName
="", LineNo
=0, DimensionAttr
= '-1'):
318 if SkuName
not in self
.SkuOverrideValues
:
319 self
.SkuOverrideValues
[SkuName
] = OrderedDict()
320 if DefaultStoreName
not in self
.SkuOverrideValues
[SkuName
]:
321 self
.SkuOverrideValues
[SkuName
][DefaultStoreName
] = OrderedDict()
322 if DimensionAttr
not in self
.SkuOverrideValues
[SkuName
][DefaultStoreName
]:
323 self
.SkuOverrideValues
[SkuName
][DefaultStoreName
][DimensionAttr
] = collections
.OrderedDict()
324 if FieldName
in self
.SkuOverrideValues
[SkuName
][DefaultStoreName
][DimensionAttr
]:
325 del self
.SkuOverrideValues
[SkuName
][DefaultStoreName
][DimensionAttr
][FieldName
]
326 self
.SkuOverrideValues
[SkuName
][DefaultStoreName
][DimensionAttr
][FieldName
] = [Value
.strip(), FileName
, LineNo
]
327 return self
.SkuOverrideValues
[SkuName
][DefaultStoreName
][DimensionAttr
][FieldName
]
329 def AddComponentOverrideValue(self
,FieldName
, Value
, ModuleGuid
, FileName
="", LineNo
=0, DimensionAttr
= '-1'):
330 self
.PcdFiledValueFromDscComponent
.setdefault(ModuleGuid
, OrderedDict())
331 self
.PcdFiledValueFromDscComponent
[ModuleGuid
].setdefault(DimensionAttr
,OrderedDict())
332 self
.PcdFiledValueFromDscComponent
[ModuleGuid
][DimensionAttr
][FieldName
] = [Value
.strip(), FileName
, LineNo
]
333 return self
.PcdFiledValueFromDscComponent
[ModuleGuid
][DimensionAttr
][FieldName
]
335 def SetPcdMode (self
, PcdMode
):
336 self
.PcdMode
= PcdMode
338 def copy(self
, PcdObject
):
339 self
.TokenCName
= PcdObject
.TokenCName
if PcdObject
.TokenCName
else self
.TokenCName
340 self
.TokenSpaceGuidCName
= PcdObject
.TokenSpaceGuidCName
if PcdObject
.TokenSpaceGuidCName
else PcdObject
.TokenSpaceGuidCName
341 self
.TokenSpaceGuidValue
= PcdObject
.TokenSpaceGuidValue
if PcdObject
.TokenSpaceGuidValue
else self
.TokenSpaceGuidValue
342 self
.Type
= PcdObject
.Type
if PcdObject
.Type
else self
.Type
343 self
._DatumType
= PcdObject
.DatumType
if PcdObject
.DatumType
else self
.DatumType
344 self
.DefaultValue
= PcdObject
.DefaultValue
if PcdObject
.DefaultValue
else self
.DefaultValue
345 self
.TokenValue
= PcdObject
.TokenValue
if PcdObject
.TokenValue
else self
.TokenValue
346 self
.MaxDatumSize
= PcdObject
.MaxDatumSize
if PcdObject
.MaxDatumSize
else self
.MaxDatumSize
347 self
.SkuInfoList
= PcdObject
.SkuInfoList
if PcdObject
.SkuInfoList
else self
.SkuInfoList
348 self
.Phase
= PcdObject
.Phase
if PcdObject
.Phase
else self
.Phase
349 self
.Pending
= PcdObject
.Pending
if PcdObject
.Pending
else self
.Pending
350 self
.IsOverrided
= PcdObject
.IsOverrided
if PcdObject
.IsOverrided
else self
.IsOverrided
351 self
.IsFromBinaryInf
= PcdObject
.IsFromBinaryInf
if PcdObject
.IsFromBinaryInf
else self
.IsFromBinaryInf
352 self
.IsFromDsc
= PcdObject
.IsFromDsc
if PcdObject
.IsFromDsc
else self
.IsFromDsc
353 self
.validateranges
= PcdObject
.validateranges
if PcdObject
.validateranges
else self
.validateranges
354 self
.validlists
= PcdObject
.validlists
if PcdObject
.validlists
else self
.validlists
355 self
.expressions
= PcdObject
.expressions
if PcdObject
.expressions
else self
.expressions
356 self
.DscRawValue
= PcdObject
.DscRawValue
if PcdObject
.DscRawValue
else self
.DscRawValue
357 self
.DscRawValueInfo
= PcdObject
.DscRawValueInfo
if PcdObject
.DscRawValueInfo
else self
.DscRawValueInfo
358 self
.PcdValueFromComm
= PcdObject
.PcdValueFromComm
if PcdObject
.PcdValueFromComm
else self
.PcdValueFromComm
359 self
.PcdValueFromFdf
= PcdObject
.PcdValueFromFdf
if PcdObject
.PcdValueFromFdf
else self
.PcdValueFromFdf
360 self
.CustomAttribute
= PcdObject
.CustomAttribute
if PcdObject
.CustomAttribute
else self
.CustomAttribute
361 self
.UserDefinedDefaultStoresFlag
= PcdObject
.UserDefinedDefaultStoresFlag
if PcdObject
.UserDefinedDefaultStoresFlag
else self
.UserDefinedDefaultStoresFlag
362 if isinstance(PcdObject
, StructurePcd
):
363 self
.StructuredPcdIncludeFile
= PcdObject
.StructuredPcdIncludeFile
if PcdObject
.StructuredPcdIncludeFile
else self
.StructuredPcdIncludeFile
364 self
.PackageDecs
= PcdObject
.PackageDecs
if PcdObject
.PackageDecs
else self
.PackageDecs
365 self
.DefaultValues
= PcdObject
.DefaultValues
if PcdObject
.DefaultValues
else self
.DefaultValues
366 self
.PcdMode
= PcdObject
.PcdMode
if PcdObject
.PcdMode
else self
.PcdMode
367 self
.DefaultValueFromDec
= PcdObject
.DefaultValueFromDec
if PcdObject
.DefaultValueFromDec
else self
.DefaultValueFromDec
368 self
.DefaultValueFromDecInfo
= PcdObject
.DefaultValueFromDecInfo
if PcdObject
.DefaultValueFromDecInfo
else self
.DefaultValueFromDecInfo
369 self
.SkuOverrideValues
= PcdObject
.SkuOverrideValues
if PcdObject
.SkuOverrideValues
else self
.SkuOverrideValues
370 self
.StructName
= PcdObject
.DatumType
if PcdObject
.DatumType
else self
.StructName
371 self
.PcdDefineLineNo
= PcdObject
.PcdDefineLineNo
if PcdObject
.PcdDefineLineNo
else self
.PcdDefineLineNo
372 self
.PkgPath
= PcdObject
.PkgPath
if PcdObject
.PkgPath
else self
.PkgPath
373 self
.ValueChain
= PcdObject
.ValueChain
if PcdObject
.ValueChain
else self
.ValueChain
374 self
.PcdFieldValueFromComm
= PcdObject
.PcdFieldValueFromComm
if PcdObject
.PcdFieldValueFromComm
else self
.PcdFieldValueFromComm
375 self
.PcdFieldValueFromFdf
= PcdObject
.PcdFieldValueFromFdf
if PcdObject
.PcdFieldValueFromFdf
else self
.PcdFieldValueFromFdf
376 self
.PcdFiledValueFromDscComponent
= PcdObject
.PcdFiledValueFromDscComponent
if PcdObject
.PcdFiledValueFromDscComponent
else self
.PcdFiledValueFromDscComponent
378 def __deepcopy__(self
,memo
):
379 new_pcd
= StructurePcd()
380 self
.sharedcopy(new_pcd
)
382 new_pcd
.DefaultValueFromDec
= self
.DefaultValueFromDec
383 new_pcd
.DefaultValueFromDecInfo
= self
.DefaultValueFromDecInfo
384 new_pcd
.PcdMode
= self
.PcdMode
385 new_pcd
.StructName
= self
.DatumType
386 new_pcd
.PcdDefineLineNo
= self
.PcdDefineLineNo
387 new_pcd
.PkgPath
= self
.PkgPath
388 new_pcd
.StructuredPcdIncludeFile
= [item
for item
in self
.StructuredPcdIncludeFile
]
389 new_pcd
.PackageDecs
= [item
for item
in self
.PackageDecs
]
390 new_pcd
.DefaultValues
= CopyDict(self
.DefaultValues
)
391 new_pcd
.DefaultFromDSC
=CopyDict(self
.DefaultFromDSC
)
392 new_pcd
.SkuOverrideValues
= CopyDict(self
.SkuOverrideValues
)
393 new_pcd
.PcdFieldValueFromComm
= CopyDict(self
.PcdFieldValueFromComm
)
394 new_pcd
.PcdFieldValueFromFdf
= CopyDict(self
.PcdFieldValueFromFdf
)
395 new_pcd
.PcdFiledValueFromDscComponent
= CopyDict(self
.PcdFiledValueFromDscComponent
)
396 new_pcd
.ValueChain
= {item
for item
in self
.ValueChain
}
399 LibraryClassObject
= namedtuple('LibraryClassObject', ['LibraryClass','SupModList'])
401 ## ModuleBuildClassObject
403 # This Class defines ModuleBuildClass
405 # @param object: Inherited from object class
407 # @var MetaFile: To store value for module meta file path
408 # @var BaseName: To store value for BaseName
409 # @var ModuleType: To store value for ModuleType
410 # @var Guid: To store value for Guid
411 # @var Version: To store value for Version
412 # @var PcdIsDriver: To store value for PcdIsDriver
413 # @var BinaryModule: To store value for BinaryModule
414 # @var CustomMakefile: To store value for CustomMakefile
415 # @var Specification: To store value for Specification
416 # @var Shadow To store value for Shadow
417 # @var LibraryClass: To store value for LibraryClass, it is a list structure as
418 # [ LibraryClassObject, ...]
419 # @var ModuleEntryPointList: To store value for ModuleEntryPointList
420 # @var ModuleUnloadImageList: To store value for ModuleUnloadImageList
421 # @var ConstructorList: To store value for ConstructorList
422 # @var DestructorList: To store value for DestructorList
423 # @var Binaries: To store value for Binaries, it is a list structure as
424 # [ ModuleBinaryClassObject, ...]
425 # @var Sources: To store value for Sources, it is a list structure as
426 # [ ModuleSourceFilesClassObject, ... ]
427 # @var LibraryClasses: To store value for LibraryClasses, it is a set structure as
428 # { [LibraryClassName, ModuleType] : LibraryClassInfFile }
429 # @var Protocols: To store value for Protocols, it is a list structure as
430 # [ ProtocolName, ... ]
431 # @var Ppis: To store value for Ppis, it is a list structure as
433 # @var Guids: To store value for Guids, it is a list structure as
435 # @var Includes: To store value for Includes, it is a list structure as
436 # [ IncludePath, ... ]
437 # @var Packages: To store value for Packages, it is a list structure as
438 # [ DecFileName, ... ]
439 # @var Pcds: To store value for Pcds, it is a set structure as
440 # { [(PcdCName, PcdGuidCName)] : PcdClassObject}
441 # @var BuildOptions: To store value for BuildOptions, it is a set structure as
442 # { [BuildOptionKey] : BuildOptionValue}
443 # @var Depex: To store value for Depex
445 class ModuleBuildClassObject(object):
447 self
.AutoGenVersion
= 0
453 self
.PcdIsDriver
= ''
454 self
.BinaryModule
= ''
456 self
.CustomMakefile
= {}
457 self
.Specification
= {}
458 self
.LibraryClass
= []
459 self
.ModuleEntryPointList
= []
460 self
.ModuleUnloadImageList
= []
461 self
.ConstructorList
= []
462 self
.DestructorList
= []
466 self
.LibraryClasses
= OrderedDict()
474 self
.BuildOptions
= {}
477 self
.StrPcdOverallValue
= {}
479 ## Convert the class to a string
481 # Convert member MetaFile of the class to a string
483 # @retval string Formatted String
486 return str(self
.MetaFile
)
488 ## Override __eq__ function
490 # Check whether ModuleBuildClassObjects are the same
492 # @retval False The two ModuleBuildClassObjects are different
493 # @retval True The two ModuleBuildClassObjects are the same
495 def __eq__(self
, Other
):
496 return self
.MetaFile
== Other
498 ## Override __hash__ function
500 # Use MetaFile as key in hash table
502 # @retval string Key for hash table
505 return hash(self
.MetaFile
)
507 ## PackageBuildClassObject
509 # This Class defines PackageBuildClass
511 # @param object: Inherited from object class
513 # @var MetaFile: To store value for package meta file path
514 # @var PackageName: To store value for PackageName
515 # @var Guid: To store value for Guid
516 # @var Version: To store value for Version
517 # @var Protocols: To store value for Protocols, it is a set structure as
518 # { [ProtocolName] : Protocol Guid, ... }
519 # @var Ppis: To store value for Ppis, it is a set structure as
520 # { [PpiName] : Ppi Guid, ... }
521 # @var Guids: To store value for Guids, it is a set structure as
522 # { [GuidName] : Guid, ... }
523 # @var Includes: To store value for Includes, it is a list structure as
524 # [ IncludePath, ... ]
525 # @var LibraryClasses: To store value for LibraryClasses, it is a set structure as
526 # { [LibraryClassName] : LibraryClassInfFile }
527 # @var Pcds: To store value for Pcds, it is a set structure as
528 # { [(PcdCName, PcdGuidCName)] : PcdClassObject}
530 class PackageBuildClassObject(object):
533 self
.PackageName
= ''
541 self
.LibraryClasses
= {}
544 ## Convert the class to a string
546 # Convert member MetaFile of the class to a string
548 # @retval string Formatted String
551 return str(self
.MetaFile
)
553 ## Override __eq__ function
555 # Check whether PackageBuildClassObjects are the same
557 # @retval False The two PackageBuildClassObjects are different
558 # @retval True The two PackageBuildClassObjects are the same
560 def __eq__(self
, Other
):
561 return self
.MetaFile
== Other
563 ## Override __hash__ function
565 # Use MetaFile as key in hash table
567 # @retval string Key for hash table
570 return hash(self
.MetaFile
)
572 ## PlatformBuildClassObject
574 # This Class defines PlatformBuildClass
576 # @param object: Inherited from object class
578 # @var MetaFile: To store value for platform meta-file path
579 # @var PlatformName: To store value for PlatformName
580 # @var Guid: To store value for Guid
581 # @var Version: To store value for Version
582 # @var DscSpecification: To store value for DscSpecification
583 # @var OutputDirectory: To store value for OutputDirectory
584 # @var FlashDefinition: To store value for FlashDefinition
585 # @var BuildNumber: To store value for BuildNumber
586 # @var MakefileName: To store value for MakefileName
587 # @var SkuIds: To store value for SkuIds, it is a set structure as
588 # { 'SkuName' : SkuId, '!include' : includefilename, ...}
589 # @var Modules: To store value for Modules, it is a list structure as
590 # [ InfFileName, ... ]
591 # @var Libraries: To store value for Libraries, it is a list structure as
592 # [ InfFileName, ... ]
593 # @var LibraryClasses: To store value for LibraryClasses, it is a set structure as
594 # { (LibraryClassName, ModuleType) : LibraryClassInfFile }
595 # @var Pcds: To store value for Pcds, it is a set structure as
596 # { [(PcdCName, PcdGuidCName)] : PcdClassObject }
597 # @var BuildOptions: To store value for BuildOptions, it is a set structure as
598 # { [BuildOptionKey] : BuildOptionValue }
600 class PlatformBuildClassObject(object):
603 self
.PlatformName
= ''
606 self
.DscSpecification
= ''
607 self
.OutputDirectory
= ''
608 self
.FlashDefinition
= ''
609 self
.BuildNumber
= ''
610 self
.MakefileName
= ''
614 self
.LibraryInstances
= []
615 self
.LibraryClasses
= {}
618 self
.BuildOptions
= {}
620 ## Convert the class to a string
622 # Convert member MetaFile of the class to a string
624 # @retval string Formatted String
627 return str(self
.MetaFile
)
629 ## Override __eq__ function
631 # Check whether PlatformBuildClassObjects are the same
633 # @retval False The two PlatformBuildClassObjects are different
634 # @retval True The two PlatformBuildClassObjects are the same
636 def __eq__(self
, Other
):
637 return self
.MetaFile
== Other
639 ## Override __hash__ function
641 # Use MetaFile as key in hash table
643 # @retval string Key for hash table
646 return hash(self
.MetaFile
)