]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/Python/Workspace/BuildClassObject.py
BaseTools/Build: Add SDL support
[mirror_edk2.git] / BaseTools / Source / Python / Workspace / BuildClassObject.py
CommitLineData
30fdf114
LG
1## @file\r
2# This file is used to define each component of the build database\r
3#\r
82a6a960 4# Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>\r
40d841f6 5# This program and the accompanying materials\r
30fdf114
LG
6# are licensed and made available under the terms and conditions of the BSD License\r
7# which accompanies this distribution. The full text of the license may be found at\r
8# http://opensource.org/licenses/bsd-license.php\r
9#\r
10# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12#\r
13\r
1be2ed90 14import Common.LongFilePathOs as os\r
30fdf114
LG
15\r
16from Common.Misc import sdict\r
17from Common.Misc import RealPath2\r
18from Common.BuildToolError import *\r
19\r
20## PcdClassObject\r
21#\r
22# This Class is used for PcdObject\r
23#\r
24# @param object: Inherited from object class\r
25# @param Name: Input value for Name of Pcd, default is None\r
26# @param Guid: Input value for Guid of Pcd, default is None\r
27# @param Type: Input value for Type of Pcd, default is None\r
28# @param DatumType: Input value for DatumType of Pcd, default is None\r
29# @param Value: Input value for Value of Pcd, default is None\r
30# @param Token: Input value for Token of Pcd, default is None\r
31# @param MaxDatumSize: Input value for MaxDatumSize of Pcd, default is None\r
32# @param SkuInfoList: Input value for SkuInfoList of Pcd, default is {}\r
33# @param IsOverrided: Input value for IsOverrided of Pcd, default is False\r
e56468c0 34# @param GuidValue: Input value for TokenSpaceGuidValue of Pcd, default is None\r
30fdf114
LG
35#\r
36# @var TokenCName: To store value for TokenCName\r
37# @var TokenSpaceGuidCName: To store value for TokenSpaceGuidCName\r
38# @var Type: To store value for Type\r
39# @var DatumType: To store value for DatumType\r
40# @var TokenValue: To store value for TokenValue\r
41# @var MaxDatumSize: To store value for MaxDatumSize\r
42# @var SkuInfoList: To store value for SkuInfoList\r
43# @var IsOverrided: To store value for IsOverrided\r
44# @var Phase: To store value for Phase, default is "DXE"\r
45#\r
46class PcdClassObject(object):\r
82a6a960 47 def __init__(self, Name = None, Guid = None, Type = None, DatumType = None, Value = None, Token = None, MaxDatumSize = None, SkuInfoList = {}, IsOverrided = False, GuidValue = None, validateranges = [], validlists = [], expressions = []):\r
30fdf114
LG
48 self.TokenCName = Name\r
49 self.TokenSpaceGuidCName = Guid\r
50 self.TokenSpaceGuidValue = GuidValue\r
51 self.Type = Type\r
52 self.DatumType = DatumType\r
53 self.DefaultValue = Value\r
54 self.TokenValue = Token\r
55 self.MaxDatumSize = MaxDatumSize\r
56 self.SkuInfoList = SkuInfoList\r
57 self.Phase = "DXE"\r
58 self.Pending = False\r
e56468c0 59 self.IsOverrided = IsOverrided\r
a0a2cd1e
FB
60 self.IsFromBinaryInf = False\r
61 self.IsFromDsc = False\r
82a6a960
BF
62 self.validateranges = validateranges\r
63 self.validlists = validlists\r
64 self.expressions = expressions\r
e56468c0 65 \r
30fdf114
LG
66 ## Convert the class to a string\r
67 #\r
68 # Convert each member of the class to string\r
69 # Organize to a signle line format string\r
70 #\r
71 # @retval Rtn Formatted String\r
72 #\r
73 def __str__(self):\r
74 Rtn = '\tTokenCName=' + str(self.TokenCName) + ', ' + \\r
75 'TokenSpaceGuidCName=' + str(self.TokenSpaceGuidCName) + ', ' + \\r
76 'Type=' + str(self.Type) + ', ' + \\r
77 'DatumType=' + str(self.DatumType) + ', ' + \\r
78 'DefaultValue=' + str(self.DefaultValue) + ', ' + \\r
79 'TokenValue=' + str(self.TokenValue) + ', ' + \\r
80 'MaxDatumSize=' + str(self.MaxDatumSize) + ', '\r
81 for Item in self.SkuInfoList.values():\r
82 Rtn = Rtn + 'SkuId=' + Item.SkuId + ', ' + 'SkuIdName=' + Item.SkuIdName\r
e56468c0 83 Rtn = Rtn + ', IsOverrided=' + str(self.IsOverrided)\r
30fdf114
LG
84\r
85 return Rtn\r
86\r
87 ## Override __eq__ function\r
88 #\r
89 # Check whether pcds are the same\r
90 #\r
91 # @retval False The two pcds are different\r
92 # @retval True The two pcds are the same\r
93 #\r
94 def __eq__(self, Other):\r
95 return Other and self.TokenCName == Other.TokenCName and self.TokenSpaceGuidCName == Other.TokenSpaceGuidCName\r
96\r
97 ## Override __hash__ function\r
98 #\r
99 # Use (TokenCName, TokenSpaceGuidCName) as key in hash table\r
100 #\r
101 # @retval truple() Key for hash table\r
102 #\r
103 def __hash__(self):\r
104 return hash((self.TokenCName, self.TokenSpaceGuidCName))\r
105\r
106## LibraryClassObject\r
107#\r
108# This Class defines LibraryClassObject used in BuildDatabase\r
109#\r
110# @param object: Inherited from object class\r
111# @param Name: Input value for LibraryClassName, default is None\r
112# @param SupModList: Input value for SupModList, default is []\r
113# @param Type: Input value for Type, default is None\r
114#\r
115# @var LibraryClass: To store value for LibraryClass\r
116# @var SupModList: To store value for SupModList\r
117# @var Type: To store value for Type\r
118#\r
119class LibraryClassObject(object):\r
120 def __init__(self, Name = None, SupModList = [], Type = None):\r
121 self.LibraryClass = Name\r
122 self.SupModList = SupModList\r
123 if Type != None:\r
124 self.SupModList = CleanString(Type).split(DataType.TAB_SPACE_SPLIT)\r
125\r
126## ModuleBuildClassObject\r
127#\r
128# This Class defines ModuleBuildClass\r
129#\r
130# @param object: Inherited from object class\r
131#\r
132# @var MetaFile: To store value for module meta file path\r
133# @var BaseName: To store value for BaseName\r
134# @var ModuleType: To store value for ModuleType\r
135# @var Guid: To store value for Guid\r
136# @var Version: To store value for Version\r
137# @var PcdIsDriver: To store value for PcdIsDriver\r
138# @var BinaryModule: To store value for BinaryModule\r
139# @var CustomMakefile: To store value for CustomMakefile\r
140# @var Specification: To store value for Specification\r
141# @var Shadow To store value for Shadow\r
142# @var LibraryClass: To store value for LibraryClass, it is a list structure as\r
143# [ LibraryClassObject, ...]\r
144# @var ModuleEntryPointList: To store value for ModuleEntryPointList\r
145# @var ModuleUnloadImageList: To store value for ModuleUnloadImageList\r
146# @var ConstructorList: To store value for ConstructorList\r
147# @var DestructorList: To store value for DestructorList\r
148# @var Binaries: To store value for Binaries, it is a list structure as\r
149# [ ModuleBinaryClassObject, ...]\r
150# @var Sources: To store value for Sources, it is a list structure as\r
151# [ ModuleSourceFilesClassObject, ... ]\r
152# @var LibraryClasses: To store value for LibraryClasses, it is a set structure as\r
153# { [LibraryClassName, ModuleType] : LibraryClassInfFile }\r
154# @var Protocols: To store value for Protocols, it is a list structure as\r
155# [ ProtocolName, ... ]\r
156# @var Ppis: To store value for Ppis, it is a list structure as\r
157# [ PpiName, ... ]\r
158# @var Guids: To store value for Guids, it is a list structure as\r
159# [ GuidName, ... ]\r
160# @var Includes: To store value for Includes, it is a list structure as\r
161# [ IncludePath, ... ]\r
162# @var Packages: To store value for Packages, it is a list structure as\r
163# [ DecFileName, ... ]\r
164# @var Pcds: To store value for Pcds, it is a set structure as\r
165# { [(PcdCName, PcdGuidCName)] : PcdClassObject}\r
166# @var BuildOptions: To store value for BuildOptions, it is a set structure as\r
167# { [BuildOptionKey] : BuildOptionValue}\r
168# @var Depex: To store value for Depex\r
169#\r
170class ModuleBuildClassObject(object):\r
171 def __init__(self):\r
172 self.AutoGenVersion = 0\r
173 self.MetaFile = ''\r
174 self.BaseName = ''\r
175 self.ModuleType = ''\r
176 self.Guid = ''\r
177 self.Version = ''\r
178 self.PcdIsDriver = ''\r
179 self.BinaryModule = ''\r
180 self.Shadow = ''\r
181 self.SourceOverridePath = ''\r
182 self.CustomMakefile = {}\r
183 self.Specification = {}\r
184 self.LibraryClass = []\r
185 self.ModuleEntryPointList = []\r
186 self.ModuleUnloadImageList = []\r
187 self.ConstructorList = []\r
188 self.DestructorList = []\r
189\r
190 self.Binaries = []\r
191 self.Sources = []\r
192 self.LibraryClasses = sdict()\r
193 self.Libraries = []\r
194 self.Protocols = []\r
195 self.Ppis = []\r
196 self.Guids = []\r
197 self.Includes = []\r
198 self.Packages = []\r
199 self.Pcds = {}\r
200 self.BuildOptions = {}\r
201 self.Depex = {}\r
202\r
203 ## Convert the class to a string\r
204 #\r
205 # Convert member MetaFile of the class to a string\r
206 #\r
207 # @retval string Formatted String\r
208 #\r
209 def __str__(self):\r
210 return str(self.MetaFile)\r
211\r
212 ## Override __eq__ function\r
213 #\r
214 # Check whether ModuleBuildClassObjects are the same\r
215 #\r
216 # @retval False The two ModuleBuildClassObjects are different\r
217 # @retval True The two ModuleBuildClassObjects are the same\r
218 #\r
219 def __eq__(self, Other):\r
220 return self.MetaFile == Other\r
221\r
222 ## Override __hash__ function\r
223 #\r
224 # Use MetaFile as key in hash table\r
225 #\r
226 # @retval string Key for hash table\r
227 #\r
228 def __hash__(self):\r
229 return hash(self.MetaFile)\r
230\r
231## PackageBuildClassObject\r
232#\r
233# This Class defines PackageBuildClass\r
234#\r
235# @param object: Inherited from object class\r
236#\r
237# @var MetaFile: To store value for package meta file path\r
238# @var PackageName: To store value for PackageName\r
239# @var Guid: To store value for Guid\r
240# @var Version: To store value for Version\r
241# @var Protocols: To store value for Protocols, it is a set structure as\r
242# { [ProtocolName] : Protocol Guid, ... }\r
243# @var Ppis: To store value for Ppis, it is a set structure as\r
244# { [PpiName] : Ppi Guid, ... }\r
245# @var Guids: To store value for Guids, it is a set structure as\r
246# { [GuidName] : Guid, ... }\r
247# @var Includes: To store value for Includes, it is a list structure as\r
248# [ IncludePath, ... ]\r
249# @var LibraryClasses: To store value for LibraryClasses, it is a set structure as\r
250# { [LibraryClassName] : LibraryClassInfFile }\r
251# @var Pcds: To store value for Pcds, it is a set structure as\r
252# { [(PcdCName, PcdGuidCName)] : PcdClassObject}\r
253#\r
254class PackageBuildClassObject(object):\r
255 def __init__(self):\r
256 self.MetaFile = ''\r
257 self.PackageName = ''\r
258 self.Guid = ''\r
259 self.Version = ''\r
260\r
261 self.Protocols = {}\r
262 self.Ppis = {}\r
263 self.Guids = {}\r
264 self.Includes = []\r
265 self.LibraryClasses = {}\r
266 self.Pcds = {}\r
267\r
268 ## Convert the class to a string\r
269 #\r
270 # Convert member MetaFile of the class to a string\r
271 #\r
272 # @retval string Formatted String\r
273 #\r
274 def __str__(self):\r
275 return str(self.MetaFile)\r
276\r
277 ## Override __eq__ function\r
278 #\r
279 # Check whether PackageBuildClassObjects are the same\r
280 #\r
281 # @retval False The two PackageBuildClassObjects are different\r
282 # @retval True The two PackageBuildClassObjects are the same\r
283 #\r
284 def __eq__(self, Other):\r
285 return self.MetaFile == Other\r
286\r
287 ## Override __hash__ function\r
288 #\r
289 # Use MetaFile as key in hash table\r
290 #\r
291 # @retval string Key for hash table\r
292 #\r
293 def __hash__(self):\r
294 return hash(self.MetaFile)\r
295\r
296## PlatformBuildClassObject\r
297#\r
298# This Class defines PlatformBuildClass\r
299#\r
300# @param object: Inherited from object class\r
301#\r
302# @var MetaFile: To store value for platform meta-file path\r
303# @var PlatformName: To store value for PlatformName\r
304# @var Guid: To store value for Guid\r
305# @var Version: To store value for Version\r
306# @var DscSpecification: To store value for DscSpecification\r
307# @var OutputDirectory: To store value for OutputDirectory\r
308# @var FlashDefinition: To store value for FlashDefinition\r
309# @var BuildNumber: To store value for BuildNumber\r
310# @var MakefileName: To store value for MakefileName\r
311# @var SkuIds: To store value for SkuIds, it is a set structure as\r
312# { 'SkuName' : SkuId, '!include' : includefilename, ...}\r
313# @var Modules: To store value for Modules, it is a list structure as\r
314# [ InfFileName, ... ]\r
315# @var Libraries: To store value for Libraries, it is a list structure as\r
316# [ InfFileName, ... ]\r
317# @var LibraryClasses: To store value for LibraryClasses, it is a set structure as\r
318# { (LibraryClassName, ModuleType) : LibraryClassInfFile }\r
319# @var Pcds: To store value for Pcds, it is a set structure as\r
320# { [(PcdCName, PcdGuidCName)] : PcdClassObject }\r
321# @var BuildOptions: To store value for BuildOptions, it is a set structure as\r
322# { [BuildOptionKey] : BuildOptionValue }\r
323#\r
324class PlatformBuildClassObject(object):\r
325 def __init__(self):\r
326 self.MetaFile = ''\r
327 self.PlatformName = ''\r
328 self.Guid = ''\r
329 self.Version = ''\r
330 self.DscSpecification = ''\r
331 self.OutputDirectory = ''\r
332 self.FlashDefinition = ''\r
333 self.BuildNumber = ''\r
334 self.MakefileName = ''\r
335\r
336 self.SkuIds = {}\r
337 self.Modules = []\r
338 self.LibraryInstances = []\r
339 self.LibraryClasses = {}\r
340 self.Libraries = {}\r
341 self.Pcds = {}\r
342 self.BuildOptions = {}\r
343\r
344 ## Convert the class to a string\r
345 #\r
346 # Convert member MetaFile of the class to a string\r
347 #\r
348 # @retval string Formatted String\r
349 #\r
350 def __str__(self):\r
351 return str(self.MetaFile)\r
352\r
353 ## Override __eq__ function\r
354 #\r
355 # Check whether PlatformBuildClassObjects are the same\r
356 #\r
357 # @retval False The two PlatformBuildClassObjects are different\r
358 # @retval True The two PlatformBuildClassObjects are the same\r
359 #\r
360 def __eq__(self, Other):\r
361 return self.MetaFile == Other\r
362\r
363 ## Override __hash__ function\r
364 #\r
365 # Use MetaFile as key in hash table\r
366 #\r
367 # @retval string Key for hash table\r
368 #\r
369 def __hash__(self):\r
370 return hash(self.MetaFile)\r
371\r