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