## @file # Open an FPD file and load all its contents to a PlatformClass object. # # Copyright (c) 2007, Intel Corporation # All rights reserved. This program and the accompanying materials # are licensed and made available under the terms and conditions of the BSD License # which accompanies this distribution. The full text of the license may be found at # http://opensource.org/licenses/bsd-license.php # # THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. # ## # Import Modules # import os from CommonDataClass.PlatformClass import * from CommonDataClass.FdfClass import * from Common.XmlRoutines import * from Common.MigrationUtilities import * from EdkIIWorkspaceGuidsInfo import gEdkIIWorkspaceGuidsInfo ## Load Platform Header # # Read an input Platform XML DOM object and return Platform Header class object # contained in the DOM object. # # @param XmlFpd An XML DOM object read from FPD file # @param FpdFileName The file path of FPD File # # @retvel PlatformHeader A new Platform Header object loaded from XmlFpd # def LoadPlatformHeader(XmlFpd, FpdFileName): PlatformHeader = PlatformHeaderClass() XmlTag = "PlatformSurfaceArea/PlatformHeader" FpdHeader = XmlNode(XmlFpd, XmlTag) SetIdentification(PlatformHeader, FpdHeader, "PlatformName", FpdFileName) SetCommonHeader(PlatformHeader, FpdHeader) XmlTag = "PlatformSurfaceArea/PlatformHeader/Specification" List = XmlElement(XmlFpd, XmlTag).split() SpecificationName = List[0] SpecificationValue = List[1] PlatformHeader.Specification = {SpecificationName:SpecificationValue} XmlTag = "PlatformSurfaceArea/PlatformDefinitions/SupportedArchitectures" PlatformHeader.SupArchList = XmlElement(XmlFpd, XmlTag).split() XmlTag = "PlatformSurfaceArea/PlatformDefinitions/BuildTargets" PlatformHeader.BuildTargets = XmlElement(XmlFpd, XmlTag).split() XmlTag = "PlatformSurfaceArea/PlatformDefinitions/IntermediateDirectories" PlatformHeader.IntermediateDirectories = XmlElement(XmlFpd, XmlTag) XmlTag = "PlatformSurfaceArea/PlatformDefinitions/OutputDirectory" PlatformHeader.OutputDirectory = XmlElement(XmlFpd, XmlTag) XmlTag = "PlatformSurfaceArea/PlatformDefinitions/SkuInfo" List = map(LoadSkuId, XmlList(XmlFpd, XmlTag)) if List != []: PlatformHeader.SkuIdName = List[0] return PlatformHeader ## Load a Platform SkuId # # Read an input Platform XML DOM object and return a list of Platform SkuId # contained in the DOM object. # # @param XmlPlatformSkuInfo An XML DOM object read from FPD file # # @retvel PlatformSkuInfo A SkuInfo loaded from XmlFpd # def LoadPlatformSkuInfo(XmlPlatformSkuInfo): XmlTag = "SkuInfo/SkuId" SkuInfo = [] SkuId = XmlElement(XmlPlatformSkuInfo, XmlTag) SkuInfo.append(SkuId) XmlTag = "SkuInfo/Value" Value = XmlElement(XmlPlatformSkuInfo, XmlTag) SkuInfo.append(Value) return SkuInfo ## Load a Platform SkuId # # Read an input Platform XML DOM object and return a list of Platform SkuId # contained in the DOM object. # # @param XmlSkuInfo An XML DOM object read from FPD file # # @retvel List A list of SkuId and SkuValue loaded from XmlFpd # def LoadSkuId(XmlSkuInfo): XmlTag = "SkuInfo/UiSkuName" SkuValue = XmlElement(XmlSkuInfo, XmlTag) XmlTag = "SkuInfo/UiSkuName" List = map(LoadSkuID, XmlList(XmlSkuInfo, XmlTag)) if List != []: SkuID = List[0] #SkuID = XmlAttribute(XmlSkuInfo, XmlTag) List = [] List.append(SkuID) List.append(SkuValue) return List def LoadSkuID(XmlUiSkuName): XmlTag = "SkuID" SkuID = XmlAttribute(XmlUiSkuName, XmlTag) return SkuID ## Load a list of Platform SkuIds # # Read an input Platform XML DOM object and return a list of Platform SkuId # contained in the DOM object. # # @param XmlFpd An XML DOM object read from FPD file # # @retvel PlatformSkuIds A platform SkuIds object loaded from XmlFpd # def LoadPlatformSkuInfos(XmlFpd): PlatformSkuIds = SkuInfoListClass() SkuInfoList = [] XmlTag = "PlatformSurfaceArea/PlatformDefinitions/SkuInfo" List = map(LoadSkuId, XmlList(XmlFpd, XmlTag)) SkuInfoList = List XmlTag = "PlatformSurfaceArea/PlatformDefinitions/SkuInfo/UiSkuName" Value = XmlElement(XmlFpd, XmlTag) XmlTag = "PlatformSurfaceArea/DynamicPcdBuildDefinitions/PcdBuildData/SkuInfo" # here return a List List = map(LoadPlatformSkuInfo, XmlList(XmlFpd, XmlTag)) for SkuInfo in List: SkuId = SkuInfo[0] Value = SkuInfo[1] SkuInfoList.append(SkuInfo) PlatformSkuIds.SkuInfoList = SkuInfoList return PlatformSkuIds ## Load Platform Module Build Option # # Read an input Platform XML DOM object and return Platform Module Build Option class object # contained in the DOM object. # # @param XmlModuleBuildOption An XML DOM object read from FPD file # # @retvel PlatformBuildOption A Platform Build Option object loaded from XmlFpd # def LoadModuleBuildOption(XmlModuleBuildOption): PlatformBuildOption = PlatformBuildOptionClass() PlatformBuildOption.UserDefinedAntTasks = {} XmlTag = "BuildOptions/Options/Option" PlatformBuildOption.Options = map(LoadBuildOption, XmlList(XmlModuleBuildOption, XmlTag)) PlatformBuildOption.UserExtensions = {} PlatformBuildOption.FfsKeyList = {} return PlatformBuildOption ## Load Platform Module Extern # # Read an input Platform XML DOM object and return Platform Module Extern class object # contained in the DOM object. # # @param XmlModuleExtern An XML DOM object read from FPD file # # @retvel PlatformModuleExtern A Platform Module Extern object loaded from XmlFpd # def LoadModuleExtern(XmlModuleExtern): PlatformModuleExtern = [] XmlTag = "Externs/PcdIsDriver" PcdIsDriver = XmlElement(XmlModuleExtern, XmlTag) PlatformModuleExtern.append(PcdIsDriver) XmlTag = "Externs/Specification" Specification = XmlElement(XmlModuleExtern, XmlTag) PlatformModuleExtern.append(Specification) XmlTag = "Externs/Extern" return PlatformModuleExtern ## Load Platform ModuleSaBuildOptions # # Read an input Platform XML DOM object and return Platform ModuleSaBuildOptions class object # contained in the DOM object. # # @param XmlModuleSaBuildOptions An XML DOM object read from FPD file # # @retvel PlatformBuildOptions A list of Platform ModuleSaBuildOption object loaded from XmlFpd # def LoadPlatformModuleSaBuildOption(XmlModuleSA): PlatformModuleSaBuildOption = PlatformBuildOptionClasses() XmlTag = "ModuleSA/ModuleSaBuildOptions/FvBinding" PlatformModuleSaBuildOption.FvBinding = XmlElement(XmlModuleSA, XmlTag) XmlTag = "ModuleSA/ModuleSaBuildOptions/FfsFormatKey" PlatformModuleSaBuildOption.FfsFormatKey = XmlElement(XmlModuleSA, XmlTag) XmlTag = "ModuleSA/ModuleSaBuildOptions/FfsFileNameGuid" PlatformModuleSaBuildOption.FfsFileNameGuid = XmlElement(XmlModuleSA, XmlTag) XmlTag = "ModuleSA/ModuleSaBuildOptions/Options/Option" PlatformModuleSaBuildOption.BuildOptionList = map(LoadBuildOption, XmlList(XmlModuleSA, XmlTag)) return PlatformModuleSaBuildOption ## Load a list of Platform Library Classes # # Read an input Platform XML DOM object and return a list of Library Classes # contained in the DOM object. # # @param XmlLibraryInstance An XML DOM object read from FPD file # # @retvel LibraryInstance A Library Instance loaded from XmlFpd # def LoadPlatformModuleLibraryInstance(XmlLibraryInstance): LibraryInstance = [] XmlTag = "ModuleGuid" ModuleGuid = XmlAttribute(XmlLibraryInstance, XmlTag) ModulePath = gEdkIIWorkspaceGuidsInfo.ResolveModuleFilePath(ModuleGuid) ModuleMSAFile = ModulePath.replace('.inf', '.msa') WorkSpace = os.getenv('WORKSPACE') ModuleMSAFileName = os.path.join(WorkSpace, ModuleMSAFile) XmlMsa = XmlParseFile(ModuleMSAFileName) XmlTag = "ModuleSurfaceArea/LibraryClassDefinitions/LibraryClass/Keyword" Name = XmlElement(XmlMsa, XmlTag) LibraryInstance.append(Name) LibraryInstance.append(ModulePath) #XmlTag = "PackageGuid" #PackageGuid = XmlAttribute(XmlLibraryInstance, XmlTag) #LibraryInstance.append(PackageGuid) return LibraryInstance ## Load a Library Class # # Read an input Platform XML DOM object and return a library class object # contained in the DOM object. # # @param XmlLibraryClass An XML DOM object read from FPD file # # @retvel SupModuleList A Library Class Supported Module List object loaded from XmlFpd # def LoadLibraryClassSupModuleList(XmlLibraryClass): XmlTag = "Usage" Usage = XmlAttribute(XmlLibraryClass, XmlTag) if Usage == "ALWAYS_PRODUCED": XmlTag = "SupModuleList" SupModuleList = XmlAttribute(XmlLibraryClass, XmlTag).split() return SupModuleList ## Load Platform Library Class # # Read an input Platform XML DOM object and return Platform module class object # contained in the DOM object. # # @param XmlLibraries An XML DOM object read from FPD file # # @retvel PlatformLibraryClass A Platform Library Class object loaded from XmlFpd # def LoadPlatformLibraryClass(XmlPlatformLibraryClass): PlatformLibraryInstance = PlatformLibraryClass() XmlTag = "ModuleGuid" LibraryInstanceModuleGuid = XmlAttribute(XmlPlatformLibraryClass, XmlTag) XmlTag = "PackageGuid" LibraryInstancePackageGuid = XmlAttribute(XmlPlatformLibraryClass, XmlTag) LibraryInstancePath = gEdkIIWorkspaceGuidsInfo.ResolveModuleFilePath(LibraryInstanceModuleGuid) if LibraryInstancePath != "": # if LibraryInstancePath == "" that's because the module guid cannot be resolved PlatformLibraryInstance.FilePath = LibraryInstancePath # replace *.inf to *.msa LibraryInstanceMSAName = LibraryInstancePath.replace('.inf', '.msa') WorkSpace = os.getenv('WORKSPACE') LibraryInstanceMSAPath = os.path.join(WorkSpace, LibraryInstanceMSAName) PlatformLibraryInstance.FilePath = LibraryInstancePath XmlMsa = XmlParseFile(LibraryInstanceMSAPath) XmlTag = "ModuleSurfaceArea/MsaHeader/ModuleName" PlatformLibraryInstance.Name = XmlElement(XmlMsa, XmlTag) XmlTag = "ModuleSurfaceArea/MsaHeader/ModuleType" PlatformLibraryInstance.ModuleType = XmlElement(XmlMsa, XmlTag) if PlatformLibraryInstance.ModuleType != "BASE": XmlTag = "ModuleSurfaceArea/LibraryClassDefinitions/LibraryClass" List = map(LoadLibraryClassSupModuleList, XmlList(XmlMsa, XmlTag)) if List != []: PlatformLibraryInstance.SupModuleList = List[0] XmlTag = "ModuleSurfaceArea/ModuleDefinitions/SupportedArchitectures" PlatformLibraryInstance.SupArchList = XmlElement(XmlMsa, XmlTag).split() PlatformLibraryInstance.ModuleGuid = LibraryInstanceModuleGuid XmlTag = "ModuleSurfaceArea/MsaHeader/Version" PlatformLibraryInstance.ModuleVersion = XmlElement(XmlMsa, XmlTag) PlatformLibraryInstance.PackageGuid = LibraryInstancePackageGuid PlatformLibraryInstance.PackageVersion = '' return PlatformLibraryInstance ## Load Platform Library Classes # # Read an input Platform XML DOM object and return Platform module class object # contained in the DOM object. # # @param XmlLibraries An XML DOM object read from FPD file # # @retvel PlatformLibraryClasses A list of Platform Library Class object loaded from XmlFpd # def LoadPlatformLibraryClasses(XmlFpd): PlatformLibraryInstances = PlatformLibraryClasses() PlatformLibraryInstances.LibraryList = [] List = [] XmlTag = "PlatformSurfaceArea/FrameworkModules/ModuleSA/Libraries/Instance" List = map(LoadPlatformLibraryClass, XmlList(XmlFpd, XmlTag)) #List.sort() if List == []: print "Error" else: PlatformLibraryInstances.LibraryList = List return PlatformLibraryInstances ## Load Platform module # # Read an input Platform XML DOM object and return Platform module class object # contained in the DOM object. # # @param XmlModuleSA An XML DOM object read from FPD file # # @retvel PlatformModule A Platform module object loaded from XmlFpd # def LoadModuleSA(XmlModuleSA): PlatformModule = PlatformModuleClass() # three parts: Libraries instances, PcdBuildDefinition, ModuleSaBuildOptions XmlTag = "ModuleSA/Libraries/Instance" PlatformModule.LibraryClasses = map(LoadPlatformModuleLibraryInstance, XmlList(XmlModuleSA, XmlTag)) XmlTag = "ModuleSA/PcdBuildDefinition/PcdData" PlatformModule.PcdBuildDefinitions = map(LoadPlatformPcdData, XmlList(XmlModuleSA, XmlTag)) XmlTag = "ModuleSA/ModuleSaBuildOptions" PlatformModule.ModuleSaBuildOption = LoadPlatformModuleSaBuildOption(XmlModuleSA) XmlTag = "ModuleSA/BuildOptions" PlatformModule.BuildOptions = map(LoadModuleBuildOption, XmlList(XmlModuleSA, XmlTag)) #bugbug fix me XmlTag = "ModuleSA/Externs" PlatformModule.Externs = map(LoadModuleExtern, XmlList(XmlModuleSA, XmlTag)) #bugbug fix me XmlTag = "SupArchList" PlatformModule.SupArchList = XmlAttribute(XmlModuleSA, XmlTag).split() # the package guid which the module depends on, do not care for now XmlTag = "PackageGuid" PlatformModule.PackageGuid = XmlAttribute(XmlModuleSA, XmlTag) # the module guid, use this guid to get the module *.msa file and convert it to *.inf file with path XmlTag = "ModuleGuid" PlatformModule.ModuleGuid = XmlAttribute(XmlModuleSA, XmlTag) # use this guid to find the *.msa file path or FilePath $(WORKSPACE)/EdkModulePkg/Core/Dxe/DxeMain.msa # then convert $(WORKSPACE)/EdkModulePkg/Core/Dxe/DxeMain.msa to $(WORKSPACE)/EdkModulePkg/Core/Dxe/DxeMain.inf, it's FilePath PlatformModulePath = gEdkIIWorkspaceGuidsInfo.ResolveModuleFilePath(PlatformModule.ModuleGuid) PlatformModule.FilePath = PlatformModulePath # *.inf file path # *.inf back to *.msa ModuleMSAFileName = PlatformModulePath.replace('.inf', '.msa') WorkSpace = os.getenv('WORKSPACE') ModuleMSAFileName = os.path.join(WorkSpace, ModuleMSAFileName) # Open this module #ModuleMSA = open(ModuleMSAFileName, "r") XmlMsa = XmlParseFile(ModuleMSAFileName) XmlTag = "ModuleSurfaceArea/MsaHeader/ModuleName" PlatformModule.Name = XmlElement(XmlMsa, XmlTag) # ModuleName XmlTag = "ModuleSurfaceArea/MsaHeader/ModuleType" PlatformModule.ModuleType = XmlElement(XmlMsa, XmlTag) # IA32, X64, IPF and EBC which the module support arch #XmlTag = "ModuleSurfaceArea/ModuleDefinitions/SupportedArchitectures" #PlatformModule.SupArchList = XmlElement(XmlMsa, XmlTag).split() #XmlTag = "ModuleSurfaceArea/MsaHeader/" PlatformModule.Type = '' #LIBRARY | LIBRARY_CLASS | MODULE, used by dsc. New in DSC spec PlatformModule.ExecFilePath = '' # New in DSC spec XmlTag = "ModuleSurfaceArea/MsaHeader/Specification" PlatformModule.Specifications = XmlElement(XmlMsa, XmlTag).split() return PlatformModule ## Load Platform modules # # Read an input Platform XML DOM object and return a list of Platform modules class object # contained in the DOM object. # # @param XmlFpd An XML DOM object read from FPD file # # @retvel PlatformModules A list of Platform modules object loaded from XmlFpd # def LoadPlatformModules(XmlFpd): PlatformModules = PlatformModuleClasses() XmlTag = "PlatformSurfaceArea/FrameworkModules/ModuleSA" PlatformModules.ModuleList = map(LoadModuleSA, XmlList(XmlFpd, XmlTag)) return PlatformModules ## Load Platform Flash Definition File # # Read an input Platform XML DOM object and return Platform Flash Definition File class object # contained in the DOM object. # # @param XmlFpd An XML DOM object read from FPD file # @param FpdFileName The file path of FPD File # # @retvel PlatformFlashDefinitionFile A new Platform Flash Definition File object loaded from XmlFpd # def LoadPlatformFlashDefinitionFile(XmlFpd, FpdFileName): PlatformFlashDefinitionFile = PlatformFlashDefinitionFileClass() XmlTag = "PlatformSurfaceArea/Flash/FlashDefinitionFile" PlatformFlashDefinitionFile.FilePath = XmlElement(XmlFpd, XmlTag) XmlTag = "PlatformSurfaceArea/Flash/FlashDefinitionFile/Id" PlatformFlashDefinitionFile.Id = XmlAttribute(XmlFpd, XmlTag) XmlTag = "PlatformSurfaceArea/Flash/FlashDefinitionFile/UiName" PlatformFlashDefinitionFile.UiName = XmlAttribute(XmlFpd, XmlTag) XmlTag = "PlatformSurfaceArea/Flash/FlashDefinitionFile/Preferred" PlatformFlashDefinitionFile.Preferred = XmlAttribute(XmlFpd, XmlTag) return PlatformFlashDefinitionFile ## Load Platform User Defined Ant Tasks # # Read an input Platform XML DOM object and return platform # User Defined Ant Tasks contained in the DOM object. # # @param XmlUserDefinedAntTasks An XML DOM object read from FPD file # # @retvel AntTask An Ant Task loaded from XmlFpd # def LoadUserDefinedAntTasks(XmlFpd): Dict = {} AntTask = PlatformAntTaskClass() XmlTag = "PlatformSurfaceArea/BuildOptions/UserDefinedAntTasks/AntTask/Id" AntTask.Id = XmlAttribute(XmlFpd, XmlTag) XmlTag = "PlatformSurfaceArea/BuildOptions/UserDefinedAntTasks/AntTask/AntCmdOptions" AntTask.AntCmdOptions = XmlElement(XmlFpd, XmlTag) XmlTag = "PlatformSurfaceArea/BuildOptions/UserDefinedAntTasks/AntTask/Filename" AntTask.FilePath = XmlElement(XmlFpd, XmlTag) Dict[AntTask.Id] = AntTask return Dict ## Load Platform Build Options # # Read an input Platform XML DOM object and return a list of platform # Build Option contained in the DOM object. # # @param XmlBuildOptions An XML DOM object read from FPD file # # @retvel PlatformBuildOptions A list of platform Build Options loaded from XmlFpd # def LoadBuildOptions(XmlBuildOptions): XmlTag = "Option" return map(LoadBuildOption, XmlList(XmlBuildOptions, XmlTag)) # LoadBuildOption is a method in MigrationUtilities.py ## Load Platform Build Option # # Read an input Platform XML DOM object and return a Build Option # contained in the DOM object. # # @param XmlFpd An XML DOM object read from FPD file # # @retvel PlatformBuildOption A Build Options loaded from XmlFpd # def LoadPlatformBuildOption(XmlBuildOptions): PlatformBuildOption = PlatformBuildOptionClass() # handle UserDefinedAntTasks XmlTag = "BuildOptions/UserDefinedAntTasks/AntTask" PlatformBuildOption.UserDefinedAntTasks = LoadUserDefinedAntTasks(XmlTag) # handle Options XmlTag = "BuildOptions/Options/Option" PlatformBuildOption.Options = map(LoadBuildOption, XmlList(XmlBuildOptions, XmlTag)) # handle UserExtensions XmlTag = "BuildOptions/UserExtensions" PlatformBuildOption.UserExtensions = LoadUserExtensions(XmlTag) # from MigrationUtilities.py LoadUserExtensions # handle Ffs XmlTag = "BuildOptions/Ffs/FfsKey" PlatformBuildOption.FfsKeyList = map(LoadPlatformFfs, XmlList(XmlBuildOptions, XmlTag)) return PlatformBuildOption ## Load Platform Ffs Dictionary # # Read an input Platform XML DOM object and return a platform Ffs Dictionary # contained in the DOM object. # # @param XmlFpd An XML DOM object read from FPD file # # @retvel Dict A platform Ffs Dict loaded from XmlFpd # def LoadPlatformFfsDict(XmlFpd): Dict = {} XmlTag = "PlatformSurfaceArea/BuildOptions/Ffs" List = map(LoadPlatformFfs, XmlList(XmlFpd, XmlTag)) if List != []: for Ffs in List: Dict[Ffs.Key] = Ffs return Dict ## Load Platform Ffs Section # # Read an input Platform XML DOM object and return a platform Ffs Section # contained in the DOM object. # # @param XmlFfs An XML DOM object read from FPD file # # @retvel PlatformFfsSection A platform Ffs Section loaded from XmlFpd # def LoadPlatformFfsSection(XmlFfsSection): PlatformFfsSection = PlatformFfsSectionClass() XmlTag = "" PlatformFfsSection.BindingOrder = '' XmlTag = "" PlatformFfsSection.Compressible = '' XmlTag = "SectionType" PlatformFfsSection.SectionType = XmlAttribute(XmlFfsSection, XmlTag) XmlTag = "" PlatformFfsSection.EncapsulationType = '' XmlTag = "" PlatformFfsSection.ToolName = '' XmlTag = "" PlatformFfsSection.Filenames = [] XmlTag = "" PlatformFfsSection.Args = '' XmlTag = "" PlatformFfsSection.OutFile = '' XmlTag = "" PlatformFfsSection.OutputFileExtension = '' XmlTag = "" PlatformFfsSection.ToolNameElement = '' return PlatformFfsSection ## Load Platform Ffs Sections # # Read an input Platform XML DOM object and return a platform Ffs Sections # contained in the DOM object. # # @param XmlFfs An XML DOM object read from FPD file # # @retvel PlatformFfsSections A platform Ffs Sections loaded from XmlFpd # def LoadFfsSections(): PlatformFfsSections = PlatformFfsSectionsClass() PlatformFfsSections.BindingOrder = '' PlatformFfsSections.Compressible = '' PlatformFfsSections.SectionType = '' PlatformFfsSections.EncapsulationType = '' PlatformFfsSections.ToolName = '' PlatformFfsSections.Section = [] PlatformFfsSections.Sections = [] return PlatformFfsSections ## Load Platform Ffs Sections # # Read an input Platform XML DOM object and return a platform Ffs Sections # contained in the DOM object. # # @param XmlFfs An XML DOM object read from FPD file # # @retvel PlatformFfsSections A platform Ffs Sections loaded from XmlFpd # def LoadPlatformFfsSections(XmlFfsSections): PlatformFfsSections = PlatformFfsSectionsClass() XmlTag = "" PlatformFfsSections.BindingOrder = '' XmlTag = "" Compressible = '' XmlTag = "" SectionType = '' XmlTag = "EncapsulationType" EncapsulationType = XmlAttribute(XmlFfsSections, XmlTag) XmlTag = "" ToolName = '' XmlTag = "Sections/Section" Section = [] #[ PlatformFfsSectionClass, ... ] Section = map(LoadPlatformFfsSection, XmlList(XmlFfsSections, XmlTag)) XmlTag = "Sections/Sections" Sections = map(LoadFfsSections, XmlList(XmlFfsSections, XmlTag)) #[ PlatformFfsSectionsClass, ...] return PlatformFfsSections ## Load Platform Ffs Attribute # # Read an input Platform XML DOM object and return a platform Ffs Attribute # contained in the DOM object. # # @param XmlFfs An XML DOM object read from FPD file # # @retvel List A platform Ffs Attribute loaded from XmlFpd # def LoadFfsAttribute(XmlFfs): List = [] XmlTag = "Ffs/Attribute" for XmlAttr in XmlList(XmlFfs, XmlTag): XmlTag = "Name" Name = XmlAttribute(XmlAttr, XmlTag) XmlTag = "Value" Value = XmlAttribute(XmlAttr, XmlTag) List.append([Name,Value]) return List ## Load a list of Platform Build Options # # Read an input Platform XML DOM object and return a list of Build Options # contained in the DOM object. # # @param XmlFfs An XML DOM object read from FPD file # # @retvel PlatformFfsKey A platform Ffs key loaded from XmlFpd # def LoadPlatformFfs(XmlFfs): PlatformFfs = PlatformFfsClass() PlatformFfs.Attribute = {} Dict = {} List = LoadFfsAttribute(XmlFfs) XmlTag = "Ffs/Sections/Sections" PlatformFfs.Sections = map(LoadPlatformFfsSections, XmlList(XmlFfs, XmlTag)) #[PlatformFfsSectionsClass, ...] for Item in List: Name = Item[0] Value = Item[1] for Item in PlatformFfs.Sections: Dict[(Name, Item)] = Value PlatformFfs.Attribute = Dict XmlTag = "Ffs/FfsKey" PlatformFfs.Key = XmlAttribute(XmlFfs, XmlTag) return PlatformFfs ## Load a list of Platform Build Options # # Read an input Platform XML DOM object and return a list of Build Options # contained in the DOM object. # # @param XmlFpd An XML DOM object read from FPD file # # @retvel PlatformBuildOptions A list of Build Options loaded from XmlFpd # def LoadPlatformBuildOptions(XmlFpd): PlatformBuildOptions = PlatformBuildOptionClass() PlatformBuildOptions.UserDefinedAntTasks = LoadUserDefinedAntTasks(XmlFpd) XmlTag = "PlatformSurfaceArea/BuildOptions/Options/Option" PlatformBuildOptions.Options = map(LoadBuildOption, XmlList(XmlFpd, XmlTag)) PlatformBuildOptions.UserExtensions = LoadPlatformUserExtension(XmlFpd) PlatformBuildOptions.FfsKeyList = LoadPlatformFfsDict(XmlFpd) return PlatformBuildOptions ## Load Platform Pcd Data # # Read an input Platform XML DOM object and return Platform module class object # contained in the DOM object. # # @param XmlPcd An XML DOM object read from FPD file # # @retvel PlatformPcdData A Platform Pcd object loaded from XmlFpd # def LoadPlatformPcdData(XmlPcdData): PcdData = PcdClass() # defined in CommonDataClass.CommonClass.py XmlTag = "ItemType" PcdData.ItemType = XmlAttribute(XmlPcdData, XmlTag) #DYNAMIC XmlTag = "PcdData/C_Name" PcdData.C_NAME = XmlElement(XmlPcdData, XmlTag) XmlTag = "PcdData/Token" PcdData.Token = XmlElement(XmlPcdData, XmlTag) XmlTag = "PcdData/TokenSpaceGuidCName" PcdData.TokenSpaceGuidCName = XmlElement(XmlPcdData, XmlTag) XmlTag = "PcdData/DatumType" PcdData.DatumType = XmlElement(XmlPcdData, XmlTag) XmlTag = "PcdData/MaxDatumSize" PcdData.MaxDatumSize = XmlElement(XmlPcdData, XmlTag) XmlTag = "PcdData/Value" PcdData.Value = XmlElement(XmlPcdData, XmlTag) return PcdData ## Load a Platform Pcd Build Data # # Read an input Platform XML DOM object and return a list of Pcd Dynamic # contained in the DOM object. # # @param XmlPcdBuildData An XML DOM object read from FPD file # # @retvel PcdBuildData A Platform Pcd Build Data loaded from XmlFpd # def LoadPlatformPcdBuildData(XmlPcdBuildData): PcdBuildData = PcdClass() # defined in CommonDataClass.CommonClass.py XmlTag = "ItemType" PcdBuildData.ItemType = XmlAttribute(XmlPcdBuildData, XmlTag) #DYNAMIC XmlTag = "PcdBuildData/C_Name" PcdBuildData.C_NAME = XmlElement(XmlPcdBuildData, XmlTag) XmlTag = "PcdBuildData/Token" PcdBuildData.Token = XmlElement(XmlPcdBuildData, XmlTag) XmlTag = "PcdBuildData/TokenSpaceGuidCName" PcdBuildData.TokenSpaceGuidCName = XmlElement(XmlPcdBuildData, XmlTag) XmlTag = "PcdBuildData/DatumType" PcdBuildData.DatumType = XmlElement(XmlPcdBuildData, XmlTag) XmlTag = "PcdBuildData/MaxDatumSize" PcdBuildData.MaxDatumSize = XmlElement(XmlPcdBuildData, XmlTag) #XmlTag = "PcdBuildData/Value" #PcdBuildData.Value = XmlElement(XmlPcdBuildData, XmlTag) return PcdBuildData ## Load a list of Platform Pcd Dynamic # # Read an input Platform XML DOM object and return a list of Pcd Dynamic # contained in the DOM object. # # @param XmlFpd An XML DOM object read from FPD file # # @retvel PcdDynamic A list of Pcd Dynamic loaded from XmlFpd # def LoadDynamicPcdBuildDefinitions(XmlFpd): DynamicPcdBuildDefinitions = [] XmlTag = "PlatformSurfaceArea/DynamicPcdBuildDefinitions/PcdBuildData" return map(LoadPlatformPcdBuildData, XmlList(XmlFpd, XmlTag)) ## Load a Platform NameValue object # # Read an input Platform XML DOM object and return a list of User Extensions # contained in the DOM object. # # @param XmlNameValue An XML DOM object read from FPD file # # @retvel NameValue A Platform NameValue object # def LoadNameValue(XmlNameValue): NameValue = [] XmlTag = "Name" Name = XmlAttribute(XmlNameValue, XmlTag) NameValue.append(Name) XmlTag = "Value" Value = XmlAttribute(XmlNameValue, XmlTag) NameValue.append(Value) return NameValue ## Load a Platform Fv Image Name object # # Read an input Platform XML DOM object and return a platform Fv Image # Name contained in the DOM object. # # @param XmlFvImageNames An XML DOM object read from FPD file # # @retvel FvImageNames A Platform Fv Image Name object # def LoadFvImageNames(XmlFvImageNames): XmlTag = "FvImageNames" FvImageNames = XmlElement(XmlFvImageNames, XmlTag) return FvImageNames ## Load a Platform Fv Image option object # # Read an input Platform XML DOM object and return a platform Fv Image # Option contained in the DOM object. # # @param XmlFvImageOptions An XML DOM object read from FPD file # # @retvel PlatformFvImageOption A Platform Fv Image Option object # def LoadFvImageOptions(XmlFvImageOptions): PlatformFvImageOption = PlatformFvImageOptionClass() XmlTag = "" PlatformFvImageOption.FvImageOptionName = '' XmlTag = "" PlatformFvImageOption.FvImageOptionValues = [] XmlTag = "FvImageOptions/NameValue" List = map(LoadNameValue, XmlList(XmlFvImageOptions, XmlTag)) return PlatformFvImageOption ## Load a Platform Fv Image object # # Read an input Platform XML DOM object and return a list of User Extensions # contained in the DOM object. # # @param XmlFvImage An XML DOM object read from Fpd file # # @retvel PlatformFvImage A Platform Fv Image object # def LoadPlatformFvImage(XmlFvImage): PlatformFvImage = PlatformFvImageClass() XmlTag = "Name" PlatformFvImage.Name = XmlAttribute(XmlFvImage, XmlTag) XmlTag = "Value" PlatformFvImage.Value = XmlAttribute(XmlFvImage, XmlTag) XmlTag = "Type" PlatformFvImage.Type = XmlAttribute(XmlFvImage, XmlTag) XmlTag = "FvImage/FvImageNames" PlatformFvImage.FvImageNames = map(LoadFvImageNames, XmlList(XmlFvImage, XmlTag)) XmlTag = "FvImage/FvImageOptions" PlatformFvImage.FvImageOptions = map(LoadFvImageOptions, XmlList(XmlFvImage, XmlTag)) return PlatformFvImage ## Load a Platform fdf object # # Read an input Platform XML DOM object and return a list of User Extensions # contained in the DOM object. # # @param XmlFvImages An XML DOM object read from FPD file # # @retvel PlatformFdf A Platform fdf object # def LoadPlatformFvImages(XmlFvImages): List = [] XmlTag = "FvImages/NameValue" NameValues = map(LoadNameValue, XmlList(XmlFvImages, XmlTag)) List.append(NameValues) XmlTag = "FvImages/FvImage" FvImages = map(LoadPlatformFvImage, XmlList(XmlFvImages, XmlTag)) List.append(FvImages) XmlTag = "FvImages/FvImageName" FvImageNames = map(LoadPlatformFvImageName, XmlList(XmlFvImages, XmlTag)) List.append(FvImageNames) return List ## Load a Platform Fv Image Name object # # Read an input Platform XML DOM object and return a list of User Extensions # contained in the DOM object. # # @param XmlFvImageName An XML DOM object read from FPD file # # @retvel PlatformFvImageName A Platform Fv Image Name object # def LoadPlatformFvImageName(XmlFvImageName): PlatformFvImageName = PlatformFvImageNameClass() XmlTag = "Name" PlatformFvImageName.Name = XmlAttribute(XmlFvImageName, XmlTag) XmlTag = "Type" PlatformFvImageName.Type = XmlAttribute(XmlFvImageName, XmlTag) XmlTag = "FvImageOptions" PlatformFvImageName.FvImageOptions = map(LoadFvImageOptions, XmlList(XmlFvImageName, XmlTag)) return PlatformFvImageName ## Load a list of Platform fdf objects # # Read an input Platform XML DOM object and return a list of User Extensions # contained in the DOM object. # # @param XmlFpd An XML DOM object read from FPD file # # @retvel PlatformFdfs A list of Platform fdf object # def LoadPlatformFdfs(XmlFpd): PlatformFvImages = PlatformFvImagesClass() XmlTag = "PlatformSurfaceArea/Flash/FvImages" PlatformFvImages.FvImages = map(LoadPlatformFvImages, XmlList(XmlFpd, XmlTag)) return PlatformFvImages ## Load a Platform User Extensions # # Read an input Platform XML DOM object and return an User Extension # contained in the DOM object. # # @param XmlUserExtension An XML DOM object read from FPD file # # @retvel PlatformUserExtensions A platform User Extension loaded from XmlFpd # def LoadPlatformUserExtension(XmlFpd): Dict = {} PlatformUserExtensions = UserExtensionsClass() XmlTag = "PlatformSurfaceArea/BuildOptions/UserExtensions" List = map(LoadUserExtensions, XmlList(XmlFpd, XmlTag)) if List != []: for Item in List: UserID = Item.UserID Identifier = Item.Identifier Dict[(UserID, Identifier)] = Item #XmlTag = "PlatformSurfaceArea/BuildOptions/UserExtensions/UserID" #PlatformUserExtensions.UserID = XmlAttribute(XmlFpd, XmlTag) #XmlTag = "PlatformSurfaceArea/BuildOptions/UserExtensions/Identifier" #PlatformUserExtensions.Identifier = XmlAttribute(XmlFpd, XmlTag) #PlatformUserExtensions.Content = XmlElementData(XmlFpd) #Dict[(PlatformUserExtensions.UserID,PlatformUserExtensions.Identifier)] = PlatformUserExtensions #return PlatformUserExtensions return Dict ## Load a list of Platform User Extensions # # Read an input Platform XML DOM object and return a list of User Extensions # contained in the DOM object. # # @param XmlFpd An XML DOM object read from FPD file # # @retvel UserExtensions A list of platform User Extensions loaded from XmlFpd # def LoadPlatformUserExtensions(XmlFpd): XmlTag = "PlatformSurfaceArea/UserExtensions" return map(LoadUserExtensions, XmlList(XmlFpd, XmlTag)) # from MigrationUtilities.py LoadUserExtensions ## Load a new Platform class object # # Read an input FPD File and return a new Platform class Object. # # @param FpdFileName An XML DOM object read from FPD file # # @retvel Platform A new Platform class object loaded from FPD File # def LoadFpd(FpdFileName): XmlFpd = XmlParseFile(FpdFileName) EdkLogger.verbose("Load FPD File: %s" % FpdFileName) Platform = PlatformClass() Platform.Header = LoadPlatformHeader(XmlFpd, FpdFileName) Platform.SkuInfos = LoadPlatformSkuInfos(XmlFpd) Platform.Libraries = [] #New in dsc spec, do not handle for now Platform.LibraryClasses = LoadPlatformLibraryClasses(XmlFpd) Platform.Modules = LoadPlatformModules(XmlFpd) Platform.FlashDefinitionFile = LoadPlatformFlashDefinitionFile(XmlFpd, FpdFileName) Platform.BuildOptions = LoadPlatformBuildOptions(XmlFpd) Platform.DynamicPcdBuildDefinitions = LoadDynamicPcdBuildDefinitions(XmlFpd) Platform.Fdf = LoadPlatformFdfs(XmlFpd) Platform.UserExtensions = LoadPlatformUserExtensions(XmlFpd) return Platform # This acts like the main() function for the script, unless it is 'import'ed # into another script. if __name__ == '__main__': pass