audk/BaseTools/Source/Python/fpd2dsc/LoadFpd.py

1039 lines
36 KiB
Python

## @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