Added doxygen comments
[people/mcb30/basetools.git] / Source / Python / AutoGen / BuildInfo.py
1 ## @file
2 # Class definitions for storing build information
3 #
4 # Copyright (c) 2007, Intel Corporation
5 # All rights reserved. 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 ## Base class of build information
15
16 #   BuildInfo defines basic operations which are needed for it to be used as KEY
17 # in dictionary. This should be used for derivation only.
18
19 class BuildInfo(object):
20     ## Constructor
21     #
22     #   @param  MetaInfo    The raw information the build information will be 
23     #                       extracted from
24     # 
25     def __init__(self, MetaInfo):
26         self._Key = str(MetaInfo)
27
28     ## str() operator
29     def __str__(self):
30         return self._Key
31
32     ## "==" operator
33     def __eq__(self, other):
34         return self._Key == str(other)
35
36     ## hash() operator
37     def __hash__(self):
38         return hash(self._Key)
39
40 ## Build information of a module
41
42 #   ModuleBuildInfo class is intended to gather build information for a module.
43 # The input "Module" ojbect must support str() operation.
44
45 class ModuleBuildInfo(BuildInfo):
46     ## Constructor
47     #
48     #   @param  Module  The ModuleBuildClassObject object
49     # 
50     def __init__(self, Module):
51         BuildInfo.__init__(self, Module)
52         self.Module     = Module
53         self.AutoGenVersion = Module.AutoGenVersion
54
55         self.Name       = Module.BaseName
56         self.Guid       = Module.Guid
57         self.Version    = Module.Version
58         self.ModuleType = Module.ModuleType
59
60         self.PlatformInfo = None
61         self.PackageInfo = None
62         self.Arch = ""
63         self.ToolChain = ""
64         self.BuildTarget = ""
65         self.PcdIsDriver = ""
66
67         self.IsLibrary = False
68         self.IsBinary = False
69
70         self.BaseName = ""
71         self.FileBase = ""
72         self.FileExt = ""
73
74         self.WorkspaceDir = ""
75         self.SourceDir = ""
76         self.BuildDir = ""
77         self.OutputDir = ""
78         self.DebugDir = ""
79         self.MakeFileDir = ""
80         self.CustomMakefile = {}
81
82         self.IncludePathList = []
83         self.AutoGenFileList = []
84         self.UnicodeFileList = []
85         self.SourceFileList = []
86         self.ObjectFileList = []
87         self.BinaryFileDict = {} # FileType : [File List]
88
89         self.DependentPackageList = []
90         self.DependentLibraryList = []
91         self.LibraryAutoGenList = []
92         self.DerivedPackageList = []
93
94         self.FileDependency = {}
95         self.BuildOption = {}
96
97         self.PcdList = []
98         self.GuidList = []
99         self.ProtocolList = []
100         self.PpiList = []
101
102         self.Macro = {}
103         self.DepexList = []
104
105 ## Build information of a package
106
107 #   PackageBuildInfo class is intended to gather build information for a package.
108 # The input "Package" ojbect must support str() operation.
109
110 class PackageBuildInfo(BuildInfo):
111     ## Constructor
112     #
113     #   @param  Package     The PackageBuildClassObject object
114     # 
115     def __init__(self, Package):
116         BuildInfo.__init__(self, Package)
117         self.Package    = Package
118         self.Name       = Package.PackageName
119         self.Guid       = Package.Guid
120         self.Version    = Package.Version
121
122         self.SourceDir = ""
123         self.IncludePathList = []
124
125 ## Build information of a platform
126
127 #   PlatformBuildInfo class is intended to gather build information for a platform.
128 # The input "Platform" ojbect must support str() operation.
129
130 class PlatformBuildInfo(BuildInfo):
131     ## Constructor
132     #
133     #   @param  Platform    The PlatformBuildClassObject object
134     # 
135     def __init__(self, Platform):
136         BuildInfo.__init__(self, Platform)
137         self.Platform   = Platform
138         self.Name       = Platform.PlatformName
139         self.Guid       = Platform.Guid
140         self.Version    = Platform.Version
141
142         self.ArchList = []
143         self.ToolChain = ""
144         self.BuildTarget = ""
145         self.BuildRule = ""
146
147         self.WorkspaceDir = ""
148         self.SourceDir = ""
149         self.BuildDir = ""
150         self.OutputDir = ""
151         self.DebugDir = ""
152         self.LibraryDir = ""
153         self.FvDir = ""
154         self.MakeFileDir = ""
155         self.FdfFile = ""
156
157         self.ModuleAutoGenList = []
158         self.LibraryAutoGenList = []
159         self.PackageList = []
160
161         self.PcdTokenNumber = {}    # (TokenCName, TokenSpaceGuidCName) : GeneratedTokenNumber
162         self.DynamicPcdList = []    # [(TokenCName1, TokenSpaceGuidCName1), (TokenCName2, TokenSpaceGuidCName2), ...]
163         self.NonDynamicPcdList = [] # [(TokenCName1, TokenSpaceGuidCName1), (TokenCName2, TokenSpaceGuidCName2), ...]
164
165         self.ToolPath = {}          # toolcode : tool path
166         self.ToolDllPath = {}       # toolcode : lib path
167         self.ToolStaticLib = {}     # toolcode : lib path
168         self.ToolChainFamily = {}   # toolcode : tool chain family
169         self.BuildOption = {}       # toolcode : option
170         self.OutputFlag = {}        # toolcode : output flag
171         self.IncludeFlag = {}       # toolcode : include flag
172         self.ToolOption = {}        # toolcode : tool option string
173