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