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