1## @file
2# This file is used to define common items of class object
3#
4# Copyright (c) 2007 - 2010, 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
9#
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.
12
13
14#
15# Generate help text
16#
17def GenerateHelpText(Text, Lang):
18    if Text:
19        Ht = HelpTextClass()
20        Ht.Lang = Lang
21        Ht.String = Text
22
23        return Ht
24
25    return None
26
27## CommonClass
28#
29# This class defined common items used in Module/Platform/Package files
30#
31# @param object:       Inherited from object class
32# @param Usage:        Input value for Usage, default is []
33# @param FeatureFlag:  Input value for FeatureFalg, default is ''
34# @param SupArchList:  Input value for SupArchList, default is []
35# @param HelpText:     Input value for HelpText, default is ''
36#
37# @var Usage:          To store value for Usage, selection scope is in below list
38#                      ALWAYS_CONSUMED | SOMETIMES_CONSUMED | ALWAYS_PRODUCED | SOMETIMES_PRODUCED | TO_START | BY_START | PRIVATE
39# @var FeatureFlag:    To store value for FeatureFlag
40# @var SupArchList:    To store value for SupArchList, selection scope is in below list
41#                      EBC | IA32 | X64 | IPF | ARM | PPC | AARCH64
42# @var HelpText:       To store value for HelpText
43#
44class CommonClass(object):
45    def __init__(self, Usage = None, FeatureFlag = '', SupArchList = None, HelpText = ''):
46        self.Usage = Usage
47        if self.Usage == None:
48            self.Usage = []
49        self.FeatureFlag = FeatureFlag
50        self.SupArchList = SupArchList
51        if self.SupArchList == None:
52            self.SupArchList = []
53        self.HelpText = HelpText
54        self.HelpTextList = []
55
56## CommonHeaderClass
57#
58# This class defined common items used in Module/Platform/Package files
59#
60# @param object:          Inherited from object class
61#
62# @var Abstract:          To store value for Abstract
63# @var Description:       To store value for Description
64# @var Copyright:         To store value for Copyright
65# @var License:           To store value for License
66# @var Specification:     To store value for Specification
67#
68class CommonHeaderClass(object):
69    def __init__(self):
70        self.Abstract = ''
71        self.Description = ''
72        self.Copyright = ''
73        self.License = ''
74        self.Specification = {}
75
76## HelpTextClass
77#
78# This class defined HelpText item used in PKG file
79#
80# @param object:     Inherited from object class
81#
82# @var Lang:         To store value for Lang
83# @var String:       To store value for String
84#
85class HelpTextClass(object):
86    def __init__(self):
87        self.Lang = ''
88        self.String = ''
89
90## DefineClass
91#
92# This class defined item DEFINE used in Module/Platform/Package files
93#
94# @param object:  Inherited from object class
95#
96# @var Define:    To store value for Define, it is a set structure as
97#                 { (DefineName, Arch) : DefineValue, ... }
98#
99class DefineClass(object):
100    def __init__(self):
101        self.Define = {}
102
103## ClonedRecordClass
104#
105# This class defined ClonedRecord items used in Module/Platform/Package files
106#
107# @param object:        Inherited from object class
108#
109# @var Id:              To store value for Id
110# @var FarGuid:         To store value for FarGuid
111# @var PackageGuid:     To store value for PackageGuid
112# @var PackageVersion:  To store value for PackageVersion
113# @var ModuleGuid:      To store value for ModuleGuid
114# @var ModuleVersion:   To store value for ModuleVersion
115#
116class ClonedRecordClass(object):
117    def __init__(self):
118        self.Id = 0
119        self.FarGuid = ''
120        self.PackageGuid = ''
121        self.PackageVersion = ''
122        self.ModuleGuid = ''
123        self.ModuleVersion = ''
124
125## IdentificationClass
126#
127# This class defined Identification items used in Module/Platform/Package files
128#
129# @param object:  Inherited from object class
130#
131# @var Name:      To store value for Name
132#                 ModuleName(Inf) / PackageName(Dec) / PlatformName(Dsc)
133# @var Guid:      To store value for Guid
134# @var Version:   To store value for Version
135# @var FileName:  To store value for FileName
136# @var FullPath:  To store value for FullPath
137#
138class IdentificationClass(object):
139    def __init__(self):
140        self.Name = ''
141        self.BaseName = ''
142        self.Guid = ''
143        self.Version = ''
144        self.FileName = ''
145        self.FullPath = ''
146        self.RelaPath = ''
147        self.PackagePath = ''
148        self.ModulePath = ''
149        self.CombinePath = ''
150
151## IncludeStatementClass
152#
153# This class defined IncludeFiles item used in Module/Platform/Package files
154#
155# @param object:      Inherited from object class
156#
157# @var IncludeFiles:  To store value for IncludeFiles
158#                     It is a set structure as { IncludeFile : [Arch1, Arch2, ...], ... }
159#
160class IncludeStatementClass(object):
161    def __init__(self):
162        self.IncludeFiles = {}
163
164## GuidProtocolPpiCommonClass
165#
166# This class defined Guid, Protocol and Ppi like items used in Module/Platform/Package files
167#
168# @param CommonClass:  Inherited from CommonClass class
169#
170# @var Name:           To store value for Name
171# @var CName:          To store value for CName
172# @var Guid:           To store value for Guid
173# @var Notify:         To store value for Notify
174# @var GuidTypeList:   To store value for GuidTypeList, selection scope is in below list
175#                      DATA_HUB_RECORD | EFI_EVENT | EFI_SYSTEM_CONFIGURATION_TABLE | EFI_VARIABLE | GUID | HII_PACKAGE_LIST | HOB | TOKEN_SPACE_GUID
176# @var SupModuleList:  To store value for SupModuleList, selection scope is in below list
177#                      BASE | SEC | PEI_CORE | PEIM | DXE_CORE | DXE_DRIVER | DXE_RUNTIME_DRIVER | DXE_SAL_DRIVER | DXE_SMM_DRIVER | UEFI_DRIVER | UEFI_APPLICATION | USER_DEFINED | SMM_CORE
178#
179class GuidProtocolPpiCommonClass(CommonClass):
180    def __init__(self):
181        self.Name = ''
182        self.CName = ''
183        self.Guid = ''
184        self.VariableName = ''
185        self.Notify = False
186        self.GuidTypeList = []
187        self.GuidTypeLists = []
188        self.SupModuleList = []
189        CommonClass.__init__(self)
190
191## LibraryClassClass
192#
193# This class defined Library item used in Module/Platform/Package files
194#
195# @param CommonClass:               Inherited from CommonClass class
196# @param DefineClass:               Inherited from DefineClass class
197#
198# @var LibraryClass:                To store value for LibraryClass
199# @var IncludeHeader:               To store value for IncludeHeader
200# @var RecommendedInstanceVersion:  To store value for RecommendedInstanceVersion
201# @var RecommendedInstanceGuid:     To store value for RecommendedInstanceGuid
202# @var RecommendedInstance:         To store value for RecommendedInstance, selection scope is in below list
203#                                   DATA_HUB_RECORD | EFI_EVENT | EFI_SYSTEM_CONFIGURATION_TABLE | EFI_VARIABLE | GUID | HII_PACKAGE_LIST | HOB | TOKEN_SPACE_GUID
204# @var SupModuleList:               To store value for SupModuleList, selection scope is in below list
205#                                   BASE | SEC | PEI_CORE | PEIM | DXE_CORE | DXE_DRIVER | DXE_RUNTIME_DRIVER | DXE_SAL_DRIVER | DXE_SMM_DRIVER | UEFI_DRIVER | UEFI_APPLICATION | USER_DEFINED | SMM_CORE
206#
207class LibraryClassClass(CommonClass, DefineClass):
208    def __init__(self):
209        self.LibraryClass = ''
210        self.IncludeHeader = ''
211        self.RecommendedInstanceVersion = ''
212        self.RecommendedInstanceGuid = ''
213        self.RecommendedInstance = ''
214        self.SupModuleList = []
215        CommonClass.__init__(self)
216        DefineClass.__init__(self)
217
218## GuidClass
219#
220# This class defined Guid item used in Module/Platform/Package files
221#
222# @param GuidProtocolPpiCommonClass:  Inherited from GuidProtocolPpiCommonClass class
223#
224class GuidClass(GuidProtocolPpiCommonClass):
225    def __init__(self):
226        GuidProtocolPpiCommonClass.__init__(self)
227
228## ProtocolClass
229#
230# This class defined Protocol item used in Module/Platform/Package files
231#
232# @param GuidProtocolPpiCommonClass:  Inherited from GuidProtocolPpiCommonClass class
233#
234class ProtocolClass(GuidProtocolPpiCommonClass):
235    def __init__(self):
236        GuidProtocolPpiCommonClass.__init__(self)
237
238## PpiClass
239#
240# This class defined Ppi item used in Module/Platform/Package files
241#
242# @param GuidProtocolPpiCommonClass:  Inherited from GuidProtocolPpiCommonClass class
243#
244class PpiClass(GuidProtocolPpiCommonClass):
245    def __init__(self):
246        GuidProtocolPpiCommonClass.__init__(self)
247
248## SkuInfoClass
249#
250# This class defined SkuInfo item used in Module/Platform/Package files
251#
252# @param object:           Inherited from object class
253# @param SkuIdName:        Input value for SkuIdName, default is ''
254# @param SkuId:            Input value for SkuId, default is ''
255# @param VariableName:     Input value for VariableName, default is ''
256# @param VariableGuid:     Input value for VariableGuid, default is ''
257# @param VariableOffset:   Input value for VariableOffset, default is ''
258# @param HiiDefaultValue:  Input value for HiiDefaultValue, default is ''
259# @param VpdOffset:        Input value for VpdOffset, default is ''
260# @param DefaultValue:     Input value for DefaultValue, default is ''
261#
262# @var SkuIdName:          To store value for SkuIdName
263# @var SkuId:              To store value for SkuId
264# @var VariableName:       To store value for VariableName
265# @var VariableGuid:       To store value for VariableGuid
266# @var VariableOffset:     To store value for VariableOffset
267# @var HiiDefaultValue:    To store value for HiiDefaultValue
268# @var VpdOffset:          To store value for VpdOffset
269# @var DefaultValue:       To store value for DefaultValue
270#
271class SkuInfoClass(object):
272    def __init__(self, SkuIdName = '', SkuId = '', VariableName = '', VariableGuid = '', VariableOffset = '',
273                 HiiDefaultValue = '', VpdOffset = '', DefaultValue = '', VariableGuidValue = ''):
274        self.SkuIdName = SkuIdName
275        self.SkuId = SkuId
276
277        #
278        # Used by Hii
279        #
280        self.VariableName = VariableName
281        self.VariableGuid = VariableGuid
282        self.VariableGuidValue = VariableGuidValue
283        self.VariableOffset = VariableOffset
284        self.HiiDefaultValue = HiiDefaultValue
285
286        #
287        # Used by Vpd
288        #
289        self.VpdOffset = VpdOffset
290
291        #
292        # Used by Default
293        #
294        self.DefaultValue = DefaultValue
295
296    ## Convert the class to a string
297    #
298    #  Convert each member of the class to string
299    #  Organize to a signle line format string
300    #
301    #  @retval Rtn Formatted String
302    #
303    def __str__(self):
304        Rtn = 'SkuId = ' + str(self.SkuId) + "," + \
305                    'SkuIdName = ' + str(self.SkuIdName) + "," + \
306                    'VariableName = ' + str(self.VariableName) + "," + \
307                    'VariableGuid = ' + str(self.VariableGuid) + "," + \
308                    'VariableOffset = ' + str(self.VariableOffset) + "," + \
309                    'HiiDefaultValue = ' + str(self.HiiDefaultValue) + "," + \
310                    'VpdOffset = ' + str(self.VpdOffset) + "," + \
311                    'DefaultValue = ' + str(self.DefaultValue) + ","
312        return Rtn
313## PcdErrorClass
314#
315#
316#
317class PcdErrorClass(object):
318    def __init__(self):
319        self.ValidValueList = ''
320        self.ValidValueListLang = ''
321        self.ValidValueRange = ''
322        self.Expression = ''
323        self.ErrorNumber = ''
324        self.ErrorMessage = []
325
326## PcdClass
327#
328# This class defined Pcd item used in Module/Platform/Package files
329#
330# @param CommonClass:          Inherited from CommonClass class
331# @param CName:                Input value for CName, default is ''
332# @param Token:                Input value for Token, default is ''
333# @param TokenSpaceGuidCName:  Input value for TokenSpaceGuidCName, default is ''
334# @param DatumType:            Input value for DatumType, default is ''
335# @param MaxDatumSize:         Input value for MaxDatumSize, default is ''
336# @param DefaultValue:         Input value for DefaultValue, default is ''
337# @param ItemType:             Input value for ItemType, default is ''
338# @param ValidUsage:           Input value for ValidUsage, default is []
339# @param SkuInfoList:          Input value for SkuInfoList, default is {}
340# @param SupModuleList:        Input value for SupModuleList, default is []
341#
342# @var CName:                  To store value for CName
343# @var Token:                  To store value for Token
344# @var TokenSpaceGuidCName:    To store value for TokenSpaceGuidCName
345# @var DatumType:              To store value for DatumType, selection scope is in below list
346#                              UINT8 | UINT16 | UINT32 | UINT64 | VOID* | BOOLEAN
347# @var MaxDatumSize:           To store value for MaxDatumSize
348# @var DefaultValue:           To store value for DefaultValue
349# @var ItemType:               To store value for ItemType, selection scope is in below list
350#                              FEATURE_FLAG | FIXED_AT_BUILD | PATCHABLE_IN_MODULE | DYNAMIC | DYNAMIC_EX
351# @var ValidUsage:             To store value for ValidUsage, selection scope is in below list
352#                              FEATURE_FLAG | FIXED_AT_BUILD | PATCHABLE_IN_MODULE | DYNAMIC | DYNAMIC_EX
353# @var SkuInfoList:            To store value for SkuInfoList
354#                              It is a set structure as { [SkuIdName] : SkuInfoClass }
355# @var SupModuleList:          To store value for SupModuleList, selection scope is in below list
356#                              BASE | SEC | PEI_CORE | PEIM | DXE_CORE | DXE_DRIVER | DXE_RUNTIME_DRIVER | DXE_SAL_DRIVER | DXE_SMM_DRIVER | UEFI_DRIVER | UEFI_APPLICATION | USER_DEFINED | SMM_CORE
357#
358class PcdClass(CommonClass):
359    def __init__(self, CName = '', Token = '', TokenSpaceGuidCName = '', DatumType = '', MaxDatumSize = '', DefaultValue = '', ItemType = '', ValidUsage = None, SkuInfoList = None, SupModuleList = None):
360        self.CName = CName
361        self.Token = Token
362        self.TokenSpaceGuidCName = TokenSpaceGuidCName
363        self.DatumType = DatumType
364        self.MaxDatumSize = MaxDatumSize
365        self.DefaultValue = DefaultValue
366        self.ItemType = ItemType
367        self.ValidUsage = ValidUsage
368        self.PcdItemType = ''
369        self.TokenSpaceGuidValue = ''
370        self.PcdUsage = ''
371        self.PcdCName = ''
372        self.Value = ''
373        self.Offset = ''
374        if self.ValidUsage == None:
375            self.ValidUsage = []
376        self.SkuInfoList = SkuInfoList
377        if self.SkuInfoList  == None:
378            self.SkuInfoList  = {}
379        self.SupModuleList = SupModuleList
380        if self.SupModuleList == None:
381            self.SupModuleList = []
382        CommonClass.__init__(self)
383        self.PcdErrors = []
384
385## BuildOptionClass
386#
387# This class defined BuildOption item used in Module/Platform/Package files
388#
389# @param IncludeStatementClass:  Inherited from IncludeStatementClass class
390# @param ToolChainFamily:        Input value for ToolChainFamily, default is ''
391# @param ToolChain:              Input value for ToolChain, default is ''
392# @param Option:                 Input value for Option, default is ''
393#
394# @var Statement:                To store value for Statement
395#                                It is a string in a special format as "Family:Target_TagName_Tarch_ToolCode_FLAGS = String"
396# @var ToolChainFamily:          To store value for ToolChainFamily
397# @var ToolChain:                To store value for ToolChain
398# @var Option:                   To store value for Option
399# @var BuildTarget:              To store value for BuildTarget
400# @var TagName:                  To store value for TagName
401# @var ToolCode:                 To store value for ToolCode
402# @var SupArchList:              To store value for SupArchList, selection scope is in below list
403#                                EBC | IA32 | X64 | IPF | ARM | PPC | AARCH64
404#
405class BuildOptionClass(IncludeStatementClass):
406    def __init__(self, ToolChainFamily = '', ToolChain = '', Option = ''):
407        IncludeStatementClass.__init__(self)
408        self.Statement = ''
409        self.ToolChainFamily = ToolChainFamily
410        self.ToolChain = ToolChain
411        self.Option = Option
412        self.BuildTarget = ''
413        self.TagName = ''
414        self.ToolCode = ''
415        self.SupArchList = []
416
417## IncludeClass
418#
419# This class defined Include item used in Module/Platform/Package files
420#
421# @param CommonClass:  Inherited from CommonClass class
422#
423# @var FilePath:       To store value for FilePath
424# @var ModuleType:     To store value for ModuleType
425# @var Comment:        To store value for Comment
426#
427class IncludeClass(CommonClass):
428    def __init__(self):
429        self.FilePath = ''
430        self.ModuleType = ''
431        self.SupModuleList = []
432        self.Comment = ''
433        CommonClass.__init__(self)
434
435## FileClass
436#
437#
438class FileClass(CommonClass):
439    def __init__(self):
440        self.Filename = ''
441        self.Executable = ''
442        self.Family = ''
443        self.FileType = ''
444        CommonClass.__init__(self)
445
446
447## MiscFileClass
448#
449#
450class MiscFileClass(CommonHeaderClass):
451    def __init__(self):
452        CommonHeaderClass.__init__(self)
453        self.Name = ''
454        self.Files = []
455
456
457## UserExtensionsClass
458#
459# This class defined UserExtensions item used in Module/Platform/Package files
460#
461# @param object:    Inherited from object class
462#
463# @var UserID:      To store value for UserID
464# @var Identifier:  To store value for Identifier
465# @var Content:     To store value for Content
466#
467class UserExtensionsClass(object):
468    def __init__(self):
469        self.UserID = ''
470        self.Identifier = 0
471        self.Content = ''
472        self.Defines = []
473        self.BuildOptions = []
474