+++ /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