X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=Tools%2FPython%2Fbuildgen%2FFrameworkElement.py;fp=Tools%2FPython%2Fbuildgen%2FFrameworkElement.py;h=6fd87407897e454453b1e49925aa2717cf603652;hp=0000000000000000000000000000000000000000;hb=2897231803d9d506f7cb7c68eeb59dcc4805084d;hpb=41ac48e930170db72a0c764b7b81c7a81c1f4ba7 diff --git a/Tools/Python/buildgen/FrameworkElement.py b/Tools/Python/buildgen/FrameworkElement.py new file mode 100644 index 0000000000..6fd8740789 --- /dev/null +++ b/Tools/Python/buildgen/FrameworkElement.py @@ -0,0 +1,523 @@ +#!/usr/bin/env python + +# Copyright (c) 2007, Intel Corporation +# All rights reserved. This program and the accompanying materials +# are licensed and made available under the terms and conditions of the BSD License +# which accompanies this distribution. The full text of the license may be found at +# http://opensource.org/licenses/bsd-license.php +# +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +"""Framework Element Classes + +TODO +""" + +################################################################################ +## +## Element class: base class for representing framework elements +## +################################################################################ +class Element: + def __init__(self, **kwargs): + """(Name, GuidValue, Version, Path, Dir, Archs, Usage, Features, Signature)""" + ## The path and directory where the information of the element comes from + self.Path = "." + self.Dir = "." + + ## Element name, guid and version + self.Name = "" + self.GuidValue = "" + self.Version = "" + + ## The element supported architecture + self.Archs = [] + + ## Indiciate how the element is used + self.Usage = "ALWAYS_CONSUMED" + + ## Indicate what kind of features this element is bound + self.Features = [] + + ## Element signature, used to check the its integerity + self.Signature = 0 + + def __str__(self): + return self.Name + "-" + self.Version + " " + " [" + self.GuidValue + "]" + + def __eq__(self, other): + if not isinstance(other, Element): + return False + + if self.GuidValue != other.GuidValue: + return False + + if self.Version != other.Version: + return False + + return True + + def __hash__(self): + return hash(self.GuidValue + self.Version) + +################################################################################ +## +## ToolOption: build tool option +## +################################################################################ +class ToolOption(Element): + + def __init__(self, **kwargs): + """Prefix, Value, Tool, Toolchains, Families, Targets""" + Element.__init__(self) + + self.Prefix = "/" + self.Value = "" + self.Tool = "" + self.Toolchains = "" + self.Families = "MSFT" + self.Targets = "DEBUG" + +################################################################################ +## +## BuildTool: build tool +## +################################################################################ +class BuildTool(Element): + def __init__(self, **kwargs): + """Options, Toolchains, Families, Targets""" + Element.__init__(self) + + self.Options = [] + self.Toolchains = [] + self.Families = [] + self.Targets = [] + +################################################################################ +## +## SourceFile: files in a module for build +## +################################################################################ +class SourceFile(Element): + def __init__(self, **kwargs): + """BaseName, Ext, Type, Toolchains, Families, Targets""" + Element.__init__(self) + + self.BaseName = "" + self.Ext = "" + self.Type = "" + self.Toolchains = [] + self.Families = [] + self.Targets = [] + +################################################################################ +## +## IncludeFile: header file +## +################################################################################ +class IncludeFile(SourceFile): + def __init__(self, **kwargs): + """Type, Package, ModuleType""" + SourceFile.__init__(self) + + self.Type = "HeaderFile" + self.Package = "" + self.ModuleType = "" + +################################################################################ +## +## IncludePath: +## +################################################################################ +class IncludePath(IncludeFile): + pass + +################################################################################ +## +## LibraryInterface: library class interface +## +################################################################################ +class LibraryInterface(Element): + def __init__(self, **kwargs): + """Package, FavoriteInstance, Instances, ModuleTypes, Consumers""" + Element.__init__(self) + + self.Package = "" + self.FavoriteInstance = "" + self.Instances = [] + self.ModuleTypes = [] + self.Consumers = [] + + def __eq__(self, other): + if not isinstance(other, LibraryInterface): + return False + return self.Name == other.Name + + def __hash__(self): + return hash(self.Name) + +################################################################################ +## +## LibraryClass: library class +## +################################################################################ +class LibraryClass(Element): + def __init__(self, **kwargs): + """ + () + """ + Element.__init__(self) + + self.Interface = "" + self.FavoriteInstance = "" + + def __eq__(self, other): + if not isinstance(other, LibraryClass): + return False + return self.Name == other.Name + + def __hash__(self): + return hash(self.Name) + +################################################################################ +## +## Guid: +## +################################################################################ +class Guid(Element): + def __init__(self, **kwargs): + """CName, Types, ModuleTypes""" + Element.__init__(self) + + self.CName = "" + self.Types = [] + self.ModuleTypes= [] + +################################################################################ +## +## Protocol: +## +################################################################################ +class Protocol(Guid): + pass + +################################################################################ +## +## ProtocolNotify: +## +################################################################################ +class ProtocolNotify(Protocol): + pass + +################################################################################ +## +## Ppi: +## +################################################################################ +class Ppi(Guid): + pass + +################################################################################ +## +## PpiNotify: +## +################################################################################ +class PpiNotify(Ppi): + pass + +################################################################################ +## +## Extern: +## +################################################################################ +class Extern(Element): + def __init__(self, **kwargs): + """Specifications, ModuleEntryPoints, ModuleUnloadImages, Constructors, Destructors, DriverBindings, ComponentNames, DriverConfigs, DriverDiags, SetVirtualAddressMapCallBacks, ExitBootServicesCallBacks""" + Element.__init__(self) + + self.Specifications = [] + self.ModuleEntryPoints = [] + self.ModuleUnloadImages = [] + self.Constructors = [] + self.Destructors = [] + self.DriverBindings = [] + self.ComponentNames = [] + self.DriverConfigs = [] + self.DriverDiags = [] + self.SetVirtualAddressMapCallBacks = [] + self.ExitBootServicesCallBacks = [] + +################################################################################ +## +## Sku: +## +################################################################################ +class Sku(Element): + def __init__(self, **kwargs): + """Id, Value""" + Element.__init__(self) + + self.Id = 0 + self.Value = "" + +################################################################################ +## +## Pcd: +## +################################################################################ +class Pcd(Element): + def __init__(self, **kwargs): + """Types, CName, Value, Token, TokenSpace, DatumType, Sku, ModuleTypes""" + Element.__init__(self) + + self.Types = [] + self.CName = "" + self.Value = "" + self.Token = "" + self.TokenSpace = "" + self.DatumType = "" + self.Default = "" + self.Sku = "" + self.ModuleTypes= [] + +################################################################################ +## +## Module: framework module +## +################################################################################ +class Module(Element): + def __init__(self, **kwargs): + """Workspace, Package, Type, BaseName, FileBaseName, IsLibrary, PcdIsDriver, + NeedsFlashMap_h, SourceFiles, IncludePaths, IncludeFiles, NonProcessedFiles, + LibraryClasses, Guids, Protocols, Ppis, Externs, Pcds, + UserExtensions, BuildOptions, Environment + """ + Element.__init__(self) + + self.Workspace = "" + self.Package = "" + self.Type = "" + self.BaseName = "" + self.FileBaseName = "" + self.IsLibrary = False + self.IsBinary = False + self.PcdIsDriver = False + self.NeedsFlashMap_h = False + self.SourceFiles = {} # arch -> {file type -> [source file list]} + self.IncludePaths = {} # arch -> [path list] + self.IncludeFiles = {} + + self.NonProcessedFiles = [] + self.LibraryClasses = {} # arch -> [library class list] + + self.Guids = {} # arch -> [guid object list] + self.Protocols = {} # arch -> [] + self.Ppis = {} # arch -> [] + + self.Externs = {} # arch -> [] + self.Pcds = {} # arch -> [] + + self.UserExtensions = {} # identifier -> ... + self.BuildOptions = {} # (toolchain, target, arch, toolcode, "FLAGS") -> flag + self.Environment = {} + + def __eq__(self, other): + if not isinstance(other, Module): + return False + + if self.GuidValue != other.GuidValue: + return False + + if self.Version != other.Version: + return False + + if self.Package != other.Package: + return False + + return True + + def __hash__(self): + return hash(self.GuidValue + self.Version + hash(self.Package)) + +################################################################################ +## +## PlatformModule: module for build +## +################################################################################ +class PlatformModule(Element): + def __init__(self, **kwargs): + """Workspace, Platform, Module, Libraries, Pcds, FfsLayouts, FvBindings + BuildOptions, BuildType, BuildFile, BuildPath, Sections, FfsFile, Environment + """ + Element.__init__(self) + self.Workspace = "" + self.Platform = "" + self.Module = "" + self.Libraries = [] + self.Pcds = [] + self.FfsLayouts = [] + self.FvBindings = [] + self.BuildOptions = {} + + self.BuildType = "efi" ## efi or lib + self.BuildFile = "build.xml" + self.BuildPath = "${MODULE_BUILD_DIR}" + self.Sections = [] + self.FfsFile = "" + + self.Environment = {} # name/value pairs + + def __eq__(self, other): + if not isinstance(other, PlatformModule): + if not isinstance(other, Module): + return False + elif self.Module != other: + return False + elif self.Module != other.Module: + return False + + return True + + def __hash__(self): + return hash(self.Module) + +################################################################################ +## +## Package: framework package +## +################################################################################ +class Package(Element): + def __init__(self, **kwargs): + """Workspace, ReadOnly, Repackage, Modules, PackageIncludes, StandardIncludes, + LibraryInterfaces, Guids, Protocols, Ppis, Pcds, Environment + """ + Element.__init__(self) + + self.Workspace = "" + self.ReadOnly = True + self.Repackage = True + self.Modules = [] + self.PackageIncludes = {} # module type -> [include file list] + self.StandardIncludes = [] + self.LibraryInterfaces = {} # class name -> include file + self.Guids = {} # cname -> guid object + self.Protocols = {} # cname -> protocol object + self.Ppis = {} # cname -> ppi object + self.Pcds = {} # token -> pcd object + + self.Environment = {} + +################################################################################ +## +## PackageDependency: +## +################################################################################ +class PackageDependency(Element): + def __init__(self, **kwargs): + """Package""" + Element.__init__(self) + + self.Package = "" + +################################################################################ +## +## Platform: +## +################################################################################ +class Platform(Element): + def __init__(self, **kwargs): + """Targets, OutputPath, Images, Modules, DynamicPcds, Fvs, Libraries + BuildFile, BuildPath, BuildOptions, UserExtensions + """ + Element.__init__(self) + + self.Targets = [] + self.OutputPath = "" + self.Images = [] + self.Modules = {} # arch -> [module list] + self.DynamicPcds = [] + self.FfsLayouts = {} + self.Fvs = {} + + self.Libraries = {} # arch -> [library instance] + self.BuildFile = "build.xml" + self.BuildPath = "${PLATFORM_BUILD_DIR}" + self.BuildOptions = {} + self.UserExtensions = {} + + self.Environment = {} # name/value pairs + +################################################################################ +## +## Workspace: +## +################################################################################ +class Workspace(Element): + def __init__(self, **kwargs): + """Packages, Platforms, Fars, Modules, PlatformIndex, PackageIndex""" + Element.__init__(self) + + self.Packages = [] + self.Platforms = [] + self.Fars = [] + self.Modules = [] + + ## "GUID" : {guid : {version : platform}} + ## "PATH" : {path : platform} + ## "NAME" : {name : [platform]} + self.PlatformXref = { + "GUID" : {}, + "PATH" : {}, + "NAME" : {}, + } + ## "GUID" : {guid : {version : package}} + ## "PATH" : {path : package} + ## "NAME" : {name : package} + self.PackageXref = { + "GUID" : {}, + "PATH" : {}, + "NAME" : {}, + } + ## "GUID" : {guid : {version : [module]}} + ## "PATH" : {path : module} + ## "NAME" : {name : module} + self.ModuleXref = { + "GUID" : {}, + "PATH" : {}, + "NAME" : {}, + } + ## "NAME" : {name : library interface} + ## "PATH" : {path : library interface} + self.LibraryInterfaceXref = { + "PATH" : {}, + "NAME" : {}, + } + ## TODO + self.FarIndex = {} + + # from target.txt + self.TargetConfig = {} + # from tools_def.txt + self.ToolConfig = {} + + self.ActivePlatform = "" + self.ActiveToolchain = "" + self.ActiveFamilies = [] + self.ActiveModules = [] + self.ActiveTargets = [] + self.ActiveArchs = [] + + self.IndividualModuleBuild = False + self.MultiThreadBuild = False + self.ThreadCount = "2" + + self.Environment = {} + +################################################################################ +## +## For test: +## +################################################################################ +if __name__ == "__main__": + pass