summaryrefslogtreecommitdiff
path: root/Tools/Python/buildgen/FrameworkElement.py
diff options
context:
space:
mode:
Diffstat (limited to 'Tools/Python/buildgen/FrameworkElement.py')
-rw-r--r--Tools/Python/buildgen/FrameworkElement.py523
1 files changed, 523 insertions, 0 deletions
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