git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8964 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			1039 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			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 |