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