1## @file
2# This file is used to define a class object to describe a platform
3#
4# Copyright (c) 2007, 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## SkuInfoListClass
19#
20# This class defined sku info list item used in platform file
21#
22# @param IncludeStatementClass:  Inherited from IncludeStatementClass class
23#
24# @var SkuInfoList:              To store value for SkuInfoList, it is a set structure as
25#                                { SkuName : SkuId }
26#
27class SkuInfoListClass(IncludeStatementClass):
28    def __init__(self):
29        IncludeStatementClass.__init__(self)
30        self.SkuInfoList = {}
31
32## PlatformHeaderClass
33#
34# This class defined header items used in Platform file
35#
36# @param IdentificationClass:    Inherited from IdentificationClass class
37# @param CommonHeaderClass:      Inherited from CommonHeaderClass class
38# @param DefineClass:            Inherited from DefineClass class
39#
40# @var DscSpecification:         To store value for DscSpecification
41# @var SupArchList:              To store value for SupArchList, selection scope is in below list
42#                                EBC | IA32 | X64 | IPF | ARM | PPC | AARCH64
43# @var BuildTargets:             To store value for BuildTargets, selection scope is in below list
44#                                RELEASE | DEBUG
45# @var IntermediateDirectories:  To store value for IntermediateDirectories, selection scope is in below list
46#                                MODULE | UNIFIED
47# @var OutputDirectory:          To store value for OutputDirectory
48# @var ForceDebugTarget:         To store value for ForceDebugTarget
49# @var SkuIdName:                To store value for SkuIdName
50# @var BuildNumber:              To store value for BuildNumber
51# @var MakefileName:             To store value for MakefileName
52# @var ClonedFrom:               To store value for ClonedFrom, it is a list structure as
53#                                [ ClonedRecordClass, ... ]
54#
55class PlatformHeaderClass(IdentificationClass, CommonHeaderClass, DefineClass):
56    def __init__(self):
57        IdentificationClass.__init__(self)
58        CommonHeaderClass.__init__(self)
59        DefineClass.__init__(self)
60        self.DscSpecification = ''
61        self.SupArchList = []
62        self.BuildTargets = []
63        self.IntermediateDirectories = ''
64        self.OutputDirectory = ''
65        self.ForceDebugTarget = ''
66        self.SkuIdName = []
67        self.BuildNumber = ''
68        self.MakefileName = ''
69        self.ClonedFrom = []
70
71## PlatformFlashDefinitionFileClass
72#
73# This class defined FlashDefinitionFile item used in platform file
74#
75# @param object:   Inherited from object class
76#
77# @var Id:         To store value for Id
78# @var UiName:     To store value for UiName
79# @var Preferred:  To store value for Preferred
80# @var FilePath:   To store value for FilePath
81#
82class PlatformFlashDefinitionFileClass(object):
83    def __init__(self):
84        self.Id = ''
85        self.UiName = ''
86        self.Preferred = False
87        self.FilePath = ''
88
89## PlatformFvImageOptionClass
90#
91# This class defined FvImageOption item used in platform file
92#
93# @param object:             Inherited from object class
94#
95# @var FvImageOptionName:    To store value for FvImageOptionName
96# @var FvImageOptionValues:  To store value for FvImageOptionValues
97#
98class PlatformFvImageOptionClass(object):
99    def __init__(self):
100        self.FvImageOptionName = ''
101        self.FvImageOptionValues = []
102
103## PlatformFvImageClass
104#
105# This class defined FvImage item used in platform file
106#
107# @param object:        Inherited from object class
108#
109# @var Name:            To store value for Name
110# @var Value:           To store value for Value
111# @var Type:            To store value for Type, selection scope is in below list
112#                       Attributes | Options | Components | ImageName
113# @var FvImageNames:    To store value for FvImageNames
114# @var FvImageOptions:  To store value for FvImageOptions, it is a list structure as
115#                       [ PlatformFvImageOption, ...]
116#
117class PlatformFvImageClass(object):
118    def __init__(self):
119        self.Name = ''
120        self.Value = ''
121        self.Type = ''
122        self.FvImageNames = []
123        self.FvImageOptions = []
124
125## PlatformFvImageNameClass
126#
127# This class defined FvImageName item used in platform file
128#
129# @param object:        Inherited from object class
130#
131# @var Name:            To store value for Name
132# @var Type:            To store value for Type, selection scope is in below list
133#                       FV_MAIN | FV_MAIN_COMPACT | NV_STORAGE | FV_RECOVERY | FV_RECOVERY_FLOPPY | FV_FILE | CAPSULE_CARGO | NULL | USER_DEFINED
134# @var FvImageOptions:  To store value for FvImageOptions, it is a list structure as
135#                       [ PlatformFvImageOption, ...]
136#
137class PlatformFvImageNameClass(object):
138    def __init__(self):
139        self.Name = ''
140        self.Type = ''
141        self.FvImageOptions = []
142
143## PlatformFvImagesClass
144#
145# This class defined FvImages item used in platform file
146#
147# @param object:  Inherited from object class
148#
149# @var FvImages:  To store value for FvImages
150#
151class PlatformFvImagesClass(object):
152    def __init__(self):
153        self.FvImages = []
154
155## PlatformAntTaskClass
156#
157# This class defined AntTask item used in platform file
158#
159# @param object:       Inherited from object class
160#
161# @var Id:             To store value for Id
162# @var AntCmdOptions:  To store value for AntCmdOptions
163# @var FilePath:       To store value for FilePath
164#
165class PlatformAntTaskClass(object):
166    def __init__(self):
167        self.Id = ''
168        self.AntCmdOptions = ''
169        self.FilePath = ''
170
171## PlatformFfsSectionClass
172#
173# This class defined FfsSection item used in platform file
174#
175# @param CommonClass:        Inherited from CommonClass class
176#
177# @var BindingOrder:         To store value for BindingOrder
178# @var Compressible:         To store value for Compressible
179# @var SectionType:          To store value for SectionType
180# @var EncapsulationType:    To store value for EncapsulationType
181# @var ToolName:             To store value for ToolName
182# @var Filenames:            To store value for Filenames
183# @var Args:                 To store value for Args
184# @var OutFile:              To store value for OutFile
185# @var OutputFileExtension:  To store value for OutputFileExtension
186# @var ToolNameElement:      To store value for ToolNameElement
187#
188class PlatformFfsSectionClass(CommonClass):
189    def __init__(self):
190        CommonClass.__init__(self)
191        self.BindingOrder = ''
192        self.Compressible = ''
193        self.SectionType  = ''
194        self.EncapsulationType  = ''
195        self.ToolName = ''
196        self.Filenames = []
197        self.Args = ''
198        self.OutFile = ''
199        self.OutputFileExtension = ''
200        self.ToolNameElement = ''
201
202## PlatformFfsSectionsClass
203#
204# This class defined FfsSections item used in platform file
205#
206# @param CommonClass:      Inherited from CommonClass class
207#
208# @var BindingOrder:       To store value for BindingOrder
209# @var Compressible:       To store value for Compressible
210# @var SectionType:        To store value for SectionType
211# @var EncapsulationType:  To store value for EncapsulationType
212# @var ToolName:           To store value for ToolName
213# @var Section:            To store value for Section, it is a list structure as
214#                          [ PlatformFfsSectionClass, ... ]
215# @var Sections:           To store value for Sections, it is a list structure as
216#                          [ PlatformFfsSectionsClass, ...]
217#
218class PlatformFfsSectionsClass(CommonClass):
219    def __init__(self):
220        CommonClass.__init__(self)
221        self.BindingOrder = ''
222        self.Compressible = ''
223        self.SectionType = ''
224        self.EncapsulationType = ''
225        self.ToolName = ''
226        self.Section = []
227        self.Sections = []
228
229## PlatformFfsClass
230#
231# This class defined Ffs item used in platform file
232#
233# @param object:   Inherited from object class
234#
235# @var Attribute:  To store value for Attribute, it is a set structure as
236#                  { [(Name, PlatformFfsSectionsClass)] : Value}
237# @var Sections:   To store value for Sections, it is a list structure as
238#                  [ PlatformFfsSectionsClass]
239# @var ToolName:   To store value for ToolName
240#
241class PlatformFfsClass(object):
242    def __init__(self):
243        self.Attribute = {}
244        self.Sections = []
245        self.Key = ''
246
247## PlatformBuildOptionClass
248#
249# This class defined BuildOption item used in platform file
250#
251# @param object:             Inherited from object class
252#
253# @var UserDefinedAntTasks:  To store value for UserDefinedAntTasks, it is a set structure as
254#                            { [Id] : PlatformAntTaskClass, ...}
255# @var Options:              To store value for Options, it is a list structure as
256#                            [ BuildOptionClass, ...]
257# @var UserExtensions:       To store value for UserExtensions, it is a set structure as
258#                            { [(UserID, Identifier)] : UserExtensionsClass, ...}
259# @var FfsKeyList:           To store value for FfsKeyList, it is a set structure as
260#                            { [FfsKey]: PlatformFfsClass, ...}
261#
262class PlatformBuildOptionClass(object):
263    def __init__(self):
264        self.UserDefinedAntTasks = {}
265        self.Options = []
266        self.UserExtensions = {}
267        self.FfsKeyList = {}
268
269## PlatformBuildOptionClasses
270#
271# This class defined BuildOption item list used in platform file
272#
273# @param IncludeStatementClass:  Inherited from IncludeStatementClass class
274#
275# @var FvBinding:                To store value for FvBinding
276# @var FfsFileNameGuid:          To store value for FfsFileNameGuid
277# @var FfsFormatKey:             To store value for FfsFormatKey
278# @var BuildOptionList:          To store value for BuildOptionList, it is a list structure as
279#                                [ BuildOptionClass, ... ]
280#
281class PlatformBuildOptionClasses(IncludeStatementClass):
282    def __init__(self):
283        IncludeStatementClass.__init__(self)
284        self.FvBinding = ''
285        self.FfsFileNameGuid = ''
286        self.FfsFormatKey = ''
287        self.BuildOptionList = []
288
289## PlatformLibraryClass
290#
291# This class defined Library item used in platform file
292#
293# @param CommonClass:   Inherited from CommonClass class
294# @param DefineClass:   Inherited from DefineClass class
295# @param Name:          Input value for Name, default is ''
296# @param FilePath:      Input value for FilePath, default is ''
297#
298# @var Name:            To store value for Name
299# @var FilePath:        To store value for FilePath
300# @var ModuleType:      To store value for ModuleType
301# @var SupModuleList:   To store value for SupModuleList
302# @var ModuleGuid:      To store value for ModuleGuid
303# @var ModuleVersion:   To store value for ModuleVersion
304# @var PackageGuid:     To store value for PackageGuid
305# @var PackageVersion:  To store value for PackageVersion
306#
307class PlatformLibraryClass(CommonClass, DefineClass):
308    def __init__(self, Name = '', FilePath = ''):
309        CommonClass.__init__(self)
310        DefineClass.__init__(self)
311        self.Name = Name
312        self.FilePath = FilePath
313        self.ModuleType = []
314        self.SupModuleList = []
315        self.ModuleGuid = ''
316        self.ModuleVersion = ''
317        self.PackageGuid = ''
318        self.PackageVersion = ''
319
320## PlatformLibraryClasses
321#
322# This class defined Library item list used in platform file
323#
324# @param IncludeStatementClass:  Inherited from IncludeStatementClass class
325#
326# @var LibraryList:              To store value for LibraryList, it is a list structure as
327#                                [ PlatformLibraryClass, ... ]
328#
329class PlatformLibraryClasses(IncludeStatementClass):
330    def __init__(self):
331        IncludeStatementClass.__init__(self)
332        self.LibraryList = []
333
334## PlatformModuleClass
335#
336# This class defined Module item used in platform file
337#
338# @param CommonClass:            Inherited from CommonClass class
339# @param DefineClass:            Inherited from DefineClass class
340# @param IncludeStatementClass:  Inherited from IncludeStatementClass class
341#
342# @var Name:                     To store value for Name (Library name or libraryclass name or module name)
343# @var FilePath:                 To store value for FilePath
344# @var Type:                     To store value for Type, selection scope is in below list
345#                                LIBRARY | LIBRARY_CLASS | MODULE
346# @var ModuleType:               To store value for ModuleType
347# @var ExecFilePath:             To store value for ExecFilePath
348# @var LibraryClasses:           To store value for LibraryClasses, it is a structure as
349#                                PlatformLibraryClasses
350# @var PcdBuildDefinitions:      To store value for PcdBuildDefinitions, it is a list structure as
351#                                [ PcdClass, ...]
352# @var ModuleSaBuildOption:      To store value for ModuleSaBuildOption, it is a structure as
353#                                PlatformBuildOptionClasses
354# @var Specifications:           To store value for Specifications, it is a list structure as
355#                                [ '', '', ...]
356#
357class PlatformModuleClass(CommonClass, DefineClass, IncludeStatementClass):
358    def __init__(self):
359        CommonClass.__init__(self)
360        DefineClass.__init__(self)
361        self.Name = ''
362        self.FilePath = ''
363        self.Type = ''
364        self.ModuleType = ''
365        self.ExecFilePath = ''
366        self.LibraryClasses = PlatformLibraryClasses()
367        self.PcdBuildDefinitions = []
368        self.ModuleSaBuildOption = PlatformBuildOptionClasses()
369        self.Specifications = []
370        self.SourceOverridePath = ''
371
372## PlatformModuleClasses
373#
374# This class defined Module item list used in platform file
375#
376# @param IncludeStatementClass:  Inherited from IncludeStatementClass class
377#
378# @var ModuleList:               To store value for ModuleList, it is a list structure as
379#                                [ PlatformModuleClass, ... ]
380#
381class PlatformModuleClasses(IncludeStatementClass):
382    def __init__(self):
383        IncludeStatementClass.__init__(self)
384        self.ModuleList = []
385
386## PlatformClass
387#
388# This class defined a complete platform item
389#
390# @param object:                    Inherited from object class
391#
392# @var Header:                      To store value for Header, it is a structure as
393#                                   {Arch : PlatformHeaderClass()}
394# @var SkuInfos:                    To store value for SkuInfos, it is a structure as
395#                                   SkuInfoListClass
396# @var Libraries:                   To store value for Libraries, it is a structure as
397#                                   PlatformLibraryClasses
398# @var LibraryClasses:              To store value for LibraryClasses, it is a structure as
399#                                   PlatformLibraryClasses
400# @var Modules:                     To store value for Modules, it is a structure as
401#                                   PlatformModuleClasses
402# @var FlashDefinitionFile:         To store value for FlashDefinitionFile, it is a structure as
403#                                   PlatformFlashDefinitionFileClass
404# @var BuildOptions:                To store value for BuildOptions, it is a structure as
405#                                   PlatformBuildOptionClasses
406# @var DynamicPcdBuildDefinitions:  To store value for DynamicPcdBuildDefinitions, it is a list structure as
407#                                   [ PcdClass, ...]
408# @var Fdf:                         To store value for Fdf, it is a list structure as
409#                                   [ FdfClass, ...]
410# @var UserExtensions:              To store value for UserExtensions, it is a list structure as
411#                                   [ UserExtensionsClass, ...]
412#
413class PlatformClass(object):
414    def __init__(self):
415        self.Header = {}
416        self.SkuInfos = SkuInfoListClass()
417        self.Libraries = PlatformLibraryClasses()
418        self.LibraryClasses = PlatformLibraryClasses()
419        self.Modules = PlatformModuleClasses()
420        self.FlashDefinitionFile = PlatformFlashDefinitionFileClass()
421        self.BuildOptions = PlatformBuildOptionClasses()
422        self.DynamicPcdBuildDefinitions = []
423        self.Fdf = []
424        self.UserExtensions = []
425
426##
427#
428# This acts like the main() function for the script, unless it is 'import'ed into another
429# script.
430#
431if __name__ == '__main__':
432    P = PlatformClass()
433