1## @file
2# This file is used to define a class object to describe a module
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# Import Modules
15#
16from CommonClass import *
17
18## ModuleHeaderClass
19#
20# This class defined header items used in Module file
21#
22# @param IdentificationClass:    Inherited from IdentificationClass class
23# @param CommonHeaderClass:      Inherited from CommonHeaderClass class
24# @param DefineClass:            Inherited from DefineClass class
25#
26# @var ModuleType:               To store value for ModuleType
27# @var SupArchList:              To store value for SupArchList, selection scope is in below list
28#                                EBC | IA32 | X64 | IPF | ARM | PPC | AARCH64
29# @var BinaryModule:             To store value for BinaryModule
30# @var OutputFileBasename:       To store value for OutputFileBasename
31# @var ClonedFrom:               To store value for ClonedFrom, it is a set structure as
32#                                [ ClonedRecordClass, ... ]
33# @var PcdIsDriver:              To store value for PcdIsDriver, selection scope is in below list
34#                                PEI_PCD_DRIVER | DXE_PCD_DRIVER
35# @var TianoEdkFlashMap_h:       To store value for TianoEdkFlashMap_h
36# @var InfVersion:               To store value for InfVersion
37# @var UefiSpecificationVersion: To store value for UefiSpecificationVersion
38# @var EdkReleaseVersion:        To store value for EdkReleaseVersion
39# @var LibraryClass:             To store value for LibraryClass, it is a set structure as
40#                                [ LibraryClassClass, ...]
41# @var ComponentType:            To store value for ComponentType, selection scope is in below list
42#                                LIBRARY | SECURITY_CORE | PEI_CORE | COMBINED_PEIM_DRIVER | PIC_PEIM | RELOCATABLE_PEIM | BS_DRIVER | RT_DRIVER | SAL_RT_DRIVER | APPLICATION
43# @var MakefileName:             To store value for MakefileName
44# @var BuildNumber:              To store value for BuildNumber
45# @var BuildType:                To store value for BuildType
46# @var FfsExt:                   To store value for FfsExt
47# @var FvExt:                    To store value for FvExt
48# @var SourceFv:                 To store value for SourceFv
49# @var CustomMakefile:           To store value for CustomMakefile, it is a set structure as
50#                                { Family : Filename, ... }
51# @var Shadow:                   To store value for Shadow
52# @var MacroDefines              To store the defined macros
53#
54class ModuleHeaderClass(IdentificationClass, CommonHeaderClass, DefineClass):
55    def __init__(self):
56        IdentificationClass.__init__(self)
57        CommonHeaderClass.__init__(self)
58        DefineClass.__init__(self)
59        self.ModuleType = ''
60        self.SupModuleList = []
61        self.SupArchList = []
62        self.BinaryModule = False
63        self.OutputFileBasename = ''
64        self.ClonedFrom = []
65        self.PcdIsDriver = ''
66        self.TianoEdkFlashMap_h = False
67        self.InfVersion = ''
68        self.PiSpecificationVersion = ''
69        self.UefiSpecificationVersion = ''
70        self.EdkReleaseVersion = ''
71        self.LibraryClass = []
72        self.ComponentType = ''
73        self.MakefileName = ''
74        self.BuildNumber = ''
75        self.BuildType = ''
76        self.FfsExt = ''
77        self.FvExt = ''
78        self.SourceFv = ''
79        self.CustomMakefile = {}
80        self.Shadow = ''
81        self.MacroDefines = {}
82        self.SourceOverridePath = ''
83        self.Specification = []
84
85## ModuleSourceFileClass
86#
87# This class defined source file item used in Module file
88#
89# @param CommonClass:      Inherited from CommonClass class
90# @param SourceFile:       Input value for SourceFile, default is ''
91# @param TagName:          Input value for TagName, default is ''
92# @param ToolCode:         Input value for ToolCode, default is ''
93# @param ToolChainFamily:  Input value for ToolChainFamily, default is ''
94# @param FeatureFlag:      Input value for FeatureFlag, default is ''
95# @param SupArchList:      Input value for SupArchList, default is []
96#
97# @var SourceFile:         To store value for SourceFile
98# @var TagName:            To store value for TagName
99# @var ToolCode:           To store value for ToolCode
100# @var ToolChainFamily:    To store value for ToolChainFamily
101#
102class ModuleSourceFileClass(CommonClass):
103    def __init__(self, SourceFile = '', TagName = '', ToolCode = '', ToolChainFamily = '', FeatureFlag = '', SupArchList = None):
104        self.SourceFile = SourceFile
105        self.TagName = TagName
106        self.ToolCode = ToolCode
107        self.ToolChainFamily = ToolChainFamily
108        self.FileType = ''
109        CommonClass.__init__(self, FeatureFlag = FeatureFlag, SupArchList = SupArchList)
110
111## ModuleBinaryFileClass
112#
113# This class defined binary file item used in Module file
114#
115# @param CommonClass:    Inherited from CommonClass class
116# @param BinaryFile:     Input value for BinaryFile, default is ''
117# @param FileType:       Input value for FileType, default is ''
118# @param FeatureFlag:    Input value for FeatureFlag, default is ''
119# @param SupArchList:    Input value for SupArchList, default is []
120#
121# @var BinaryFile:       To store value for BinaryFile
122# @var FileType:         To store value for FileType, selection scope is in below list
123#                        FW | GUID | PREEFORM | UEFI_APP | UNI_UI | UNI_VER | LIB | PE32 | PIC | PEI_DEPEX | DXE_DEPEX | SMM_DEPEX| TE | VER | UI | BIN | FV
124# @var Target:           To store value for Target
125# @var ToolChainFamily:  To store value for ToolChainFamily
126#
127class ModuleBinaryFileClass(CommonClass):
128    def __init__(self, BinaryFile = '', FileType = '', Target = '', FeatureFlag = '', SupArchList = None):
129        self.BinaryFile = BinaryFile
130        self.FileType = FileType
131        self.Target = Target
132        CommonClass.__init__(self, FeatureFlag = FeatureFlag, SupArchList = SupArchList)
133        self.Filenames = []
134        self.PatchPcdValues = []
135        self.PcdExValues = []
136        self.LibraryInstances = []
137        self.BuildFlags = []
138
139## ModulePackageDependencyClass
140#
141# This class defined package dependency item used in Module file
142#
143# @param CommonClass:   Inherited from CommonClass class
144# @param DefineClass:   Input value for DefineClass class
145#
146# @var FilePath:        To store value for FilePath
147# @var PackageName:     To store value for PackageName
148# @var PackageVersion:  To store value for PackageVersion
149# @var PackageGuid:     To store value for PackageGuid
150#
151class ModulePackageDependencyClass(CommonClass, DefineClass):
152    def __init__(self):
153        self.FilePath = ''
154        self.PackageName = ''
155        self.PackageVersion = ''
156        self.PackageGuid = ''
157        self.Description = ''
158        CommonClass.__init__(self)
159        DefineClass.__init__(self)
160
161## ModuleLibraryClass
162#
163# This class defined library item used in Module file
164#
165# @param CommonClass:  Inherited from CommonClass class
166#
167# @var Library:        To store value for Library
168#
169class ModuleLibraryClass(CommonClass):
170    def __init__(self):
171        self.Library = ''
172        CommonClass.__init__(self)
173
174## ModuleEventClass
175#
176# This class defined event item used in Module file
177#
178# @param CommonClass:  Inherited from CommonClass class
179#
180# @var CName:          To store value for CName
181# @var GuidCName:      To store value for GuidCName
182# @var Type:           To store value for Type, selection scope is in below list
183#                      CREATE_EVENT | SIGNAL_EVENT
184#
185class ModuleEventClass(CommonClass):
186    def __init__(self):
187        self.CName = ''
188        self.GuidCName = ''
189        self.Type = ''
190        CommonClass.__init__(self)
191
192## ModuleHobClass
193#
194# This class defined hob item used in Module file
195#
196# @param CommonClass:  Inherited from CommonClass class
197#
198# @var GuidCName:      To store value for GuidCName
199# @var Type:           To store value for Type, selection scope is in below list
200#                      PHIT | MEMORY_ALLOCATION | RESOURCE_DESCRIPTOR | GUID_EXTENSION | FIRMWARE_VOLUME | CPU | POOL | CAPSULE_VOLUME
201#
202class ModuleHobClass(CommonClass):
203    def __init__(self):
204        self.Type = ''
205        self.GuidCName = ''
206        CommonClass.__init__(self)
207
208## ModuleVariableClass
209#
210# This class defined variable item used in Module file
211#
212# @param CommonClass:  Inherited from CommonClass class
213#
214# @var GuidCName:      To store value for GuidCName
215# @var Name:           To store value for Name
216#
217class ModuleVariableClass(CommonClass):
218    def __init__(self):
219        self.Name = ''
220        self.GuidCName = ''
221        CommonClass.__init__(self)
222
223## ModuleBootModeClass
224#
225# This class defined boot mode item used in Module file
226#
227# @param CommonClass:  Inherited from CommonClass class
228#
229# @var Name:           To store value for Name, selection scope is in below list
230#                      FULL | MINIMAL | NO_CHANGE | DIAGNOSTICS | DEFAULT | S2_RESUME | S3_RESUME | S4_RESUME | S5_RESUME | FLASH_UPDATE | RECOVERY_FULL | RECOVERY_MINIMAL | RECOVERY_NO_CHANGE | RECOVERY_DIAGNOSTICS | RECOVERY_DEFAULT | RECOVERY_S2_RESUME | RECOVERY_S3_RESUME | RECOVERY_S4_RESUME | RECOVERY_S5_RESUME | RECOVERY_FLASH_UPDATE
231#
232class ModuleBootModeClass(CommonClass):
233    def __init__(self):
234        self.Name = ''
235        CommonClass.__init__(self)
236
237## ModuleSystemTableClass
238#
239# This class defined system table item used in Module file
240#
241# @param CommonClass:  Inherited from CommonClass class
242#
243# @var CName:          To store value for CName
244#
245class ModuleSystemTableClass(CommonClass):
246    def __init__(self):
247        self.CName = ''
248        CommonClass.__init__(self)
249
250## ModuleDataHubClass
251#
252# This class defined data hub item used in Module file
253#
254# @param CommonClass:  Inherited from CommonClass class
255#
256# @var CName:          To store value for CName
257#
258class ModuleDataHubClass(CommonClass):
259    def __init__(self):
260        self.CName = ''
261        CommonClass.__init__(self)
262
263## ModuleHiiPackageClass
264#
265# This class defined Hii package item used in Module file
266#
267# @param CommonClass:  Inherited from CommonClass class
268#
269# @var CName:          To store value for CName
270#
271class ModuleHiiPackageClass(CommonClass):
272    def __init__(self):
273        self.CName = ''
274        CommonClass.__init__(self)
275
276## ModuleExternImageClass
277#
278# This class defined Extern Image item used in Module file
279#
280# @param object:           Inherited from object class
281#
282# @var ModuleEntryPoint:   To store value for ModuleEntryPoint
283# @var ModuleUnloadImage:  To store value for ModuleUnloadImage
284#
285class ModuleExternImageClass(object):
286    def __init__(self):
287        self.ModuleEntryPoint = ''
288        self.ModuleUnloadImage = ''
289
290## ModuleExternLibraryClass
291#
292# This class defined Extern Library item used in Module file
293#
294# @param object:     Inherited from object class
295#
296# @var Constructor:  To store value for Constructor
297# @var Destructor:   To store value for Destructor
298#
299class ModuleExternLibraryClass(object):
300    def __init__(self):
301        self.Constructor = ''
302        self.Destructor = ''
303
304## ModuleExternDriverClass
305#
306# This class defined Extern Driver item used in Module file
307#
308# @param object:       Inherited from object class
309#
310# @var DriverBinding:  To store value for DriverBinding
311# @var ComponentName:  To store value for ComponentName
312# @var DriverConfig:   To store value for DriverConfig
313# @var DriverDiag:     To store value for DriverDiag
314#
315class ModuleExternDriverClass(object):
316    def __init__(self):
317        self.DriverBinding= ''
318        self.ComponentName = ''
319        self.DriverConfig = ''
320        self.DriverDiag = ''
321
322## ModuleExternCallBackClass
323#
324# This class defined Extern Call Back item used in Module file
325#
326# @param object:                      Inherited from object class
327#
328# @var SetVirtualAddressMapCallBack:  To store value for SetVirtualAddressMapCallBack
329# @var ExitBootServicesCallBack:      To store value for ExitBootServicesCallBack
330#
331class ModuleExternCallBackClass(object):
332    def __init__(self):
333        self.SetVirtualAddressMapCallBack = ''
334        self.ExitBootServicesCallBack = ''
335
336## ModuleExternClass
337#
338# This class defined Extern used in Module file
339#
340# @param object:                      Inherited from object class
341#
342#
343class ModuleExternClass(CommonClass):
344    def __init__(self):
345        self.EntryPoint = ''
346        self.UnloadImage = ''
347        self.Constructor = ''
348        self.Destructor = ''
349        CommonClass.__init__(self)
350
351## ModuleDepexClass
352#
353# This class defined depex item used in Module file
354#
355# @param CommonClass:  Inherited from CommonClass class
356# @param DefineClass:  Input value for DefineClass class
357#
358# @var Depex:          To store value for Depex
359#
360class ModuleDepexClass(CommonClass, DefineClass):
361    def __init__(self):
362        CommonClass.__init__(self)
363        DefineClass.__init__(self)
364        self.Depex = ''
365
366## ModuleNmakeClass
367#
368# This class defined nmake item used in Module file
369#
370# @param CommonClass:  Inherited from CommonClass class
371#
372# @var Name:           To store value for Name
373# @var Value:          To store value for Value
374#
375class ModuleNmakeClass(CommonClass):
376    def __init__(self):
377        CommonClass.__init__(self)
378        self.Name = ''
379        self.Value = ''
380
381## ModuleClass
382#
383# This class defined a complete module item
384#
385# @param object:    Inherited from object class
386#
387# @var Header:               To store value for Header, it is a structure as
388#                            {Arch : ModuleHeaderClass}
389# @var LibraryClasses:       To store value for LibraryClasses, it is a list structure as
390#                            [ LibraryClassClass, ...]
391# @var Libraries:            To store value for Libraries, it is a list structure as
392#                            [ ModuleLibraryClass, ...]
393# @var Sources:              To store value for Sources, it is a list structure as
394#                            [ ModuleSourceFileClass, ...]
395# @var Binaries:             To store value for Binaries, it is a list structure as
396#                            [ ModuleBinaryFileClass, ...]
397# @var NonProcessedFiles:    To store value for NonProcessedFiles, it is a list structure as
398#                            [ '', '', ...]
399# @var PackageDependencies:  To store value for PackageDependencies, it is a list structure as
400#                            [ ModulePackageDependencyClass, ... ]
401# @var Nmake:                To store value for Nmake, it is a list structure as
402#                            [ ModuleNmakeClass, ... ]
403# @var Depex:                To store value for Depex, it is a list structure as
404#                            [ ModuleDepexClass, ... ]
405# @var Includes:             To store value for Includes, it is a list structure as
406#                            [ IncludeClass, ...]
407# @var Protocols:            To store value for Protocols, it is a list structure as
408#                            [ ProtocolClass, ...]
409# @var Ppis:                 To store value for Ppis, it is a list structure as
410#                            [ PpiClass, ...]
411# @var Events:               To store value for Events, it is a list structure as
412#                            [ ModuleEventClass, ...]
413# @var Hobs:                 To store value for Hobs, it is a list structure as
414#                            [ ModuleHobClass, ...]
415# @var Variables:            To store value for Variables, it is a list structure as
416#                            [ ModuleVariableClass, ...]
417# @var BootModes:            To store value for BootModes, it is a list structure as
418#                            [ ModuleBootModeClass, ...]
419# @var SystemTables:         To store value for SystemTables, it is a list structure as
420#                            [ ModuleSystemTableClass, ...]
421# @var DataHubs:             To store value for DataHubs, it is a list structure as
422#                            [ ModuleDataHubClass, ...]
423# @var HiiPackages:          To store value for HiiPackages, it is a list structure as
424#                            [ ModuleHiiPackageClass, ...]
425# @var Guids:                To store value for Guids, it is a list structure as
426#                            [ GuidClass, ...]
427# @var PcdCodes:             To store value for PcdCodes, it is a list structure as
428#                            [ PcdClass, ...]
429# @var ExternImages:         To store value for ExternImages, it is a list structure as
430#                            [ ModuleExternImageClass, ...]
431# @var ExternLibraries:      To store value for ExternLibraries, it is a list structure as
432#                            [ ModuleExternLibraryClass, ...]
433# @var ExternDrivers:        To store value for ExternDrivers, it is a list structure as
434#                            [ ModuleExternDriverClass, ...]
435# @var ExternCallBacks:      To store value for ExternCallBacks, it is a list structure as
436#                            [ ModuleExternCallBackClass, ...]
437# @var BuildOptions:         To store value for BuildOptions, it is a list structure as
438#                            [ BuildOptionClass, ...]
439# @var UserExtensions:       To store value for UserExtensions, it is a list structure as
440#                            [ UserExtensionsClass, ...]
441#
442class ModuleClass(object):
443    def __init__(self):
444        self.Header = {}
445        self.ModuleHeader = ModuleHeaderClass()
446        self.LibraryClasses = []
447        self.Libraries = []
448        self.Sources = []
449        self.Binaries = []
450        self.NonProcessedFiles = []
451        self.PackageDependencies = []
452        self.Nmake = []
453        self.Depex = []
454        self.PeiDepex = None
455        self.DxeDepex = None
456        self.SmmDepex = None
457        self.Includes = []
458        self.Protocols = []
459        self.Ppis = []
460        self.Events = []
461        self.Hobs = []
462        self.Variables = []
463        self.BootModes = []
464        self.SystemTables = []
465        self.DataHubs = []
466        self.HiiPackages = []
467        self.Guids = []
468        self.PcdCodes = []
469        self.ExternImages = []
470        self.ExternLibraries = []
471        self.ExternDrivers = []
472        self.ExternCallBacks = []
473        self.Externs = []
474        self.BuildOptions = []
475        self.UserExtensions = None
476        self.MiscFiles = None
477        self.FileList = []
478
479##
480#
481# This acts like the main() function for the script, unless it is 'import'ed into another
482# script.
483#
484if __name__ == '__main__':
485    M = ModuleClass()
486