BaseTools: Enhance BaseTools supports FixedAtBuild usage in VFR file
[mirror_edk2.git] / BaseTools / Source / Python / CommonDataClass / ModuleClass.py
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 #
16 from 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 #
54 class 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 #
102 class 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 #
127 class 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 #
151 class 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 #
169 class 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 #
185 class 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 #
202 class 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 #
217 class 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 #
232 class 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 #
245 class 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 #
258 class 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 #
271 class 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 #
285 class 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 #
299 class 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 #
315 class 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 #
331 class 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 #
343 class 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 #
360 class 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 #
375 class 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 #
442 class 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 #
484 if __name__ == '__main__':
485 M = ModuleClass()