From 30fdf1140b8d1ce93f3821d986fa165552023440 Mon Sep 17 00:00:00 2001 From: lgao4 Date: Fri, 17 Jul 2009 09:10:31 +0000 Subject: Check In tool source code based on Build tool project revision r1655. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8964 6f19259b-4bc3-4df7-8a09-765794883524 --- BaseTools/Source/Python/spd2dec/StoreDec.py | 247 ++++++++++++++++++++++++++++ 1 file changed, 247 insertions(+) create mode 100644 BaseTools/Source/Python/spd2dec/StoreDec.py (limited to 'BaseTools/Source/Python/spd2dec/StoreDec.py') diff --git a/BaseTools/Source/Python/spd2dec/StoreDec.py b/BaseTools/Source/Python/spd2dec/StoreDec.py new file mode 100644 index 0000000000..67cbd11e9b --- /dev/null +++ b/BaseTools/Source/Python/spd2dec/StoreDec.py @@ -0,0 +1,247 @@ +## @file +# Store a Package class object to a DEC file. +# +# 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 Common.MigrationUtilities import * +from LoadSpd import LoadSpd +from CommonDataClass.PackageClass import * + + +## Store Defines section. +# +# Write [Defines] section to the DecFile based on Package class object. +# Different CPU architectures are specified in the subsection if possible. +# +# @param DecFile The output DEC file to store the Defines section. +# @param Package An input Package class object. +# +def StorePackageDefinesSection(DecFile, Package): + DefinesTupleList = [] + DefinesTupleList.append(("DEC_VERSION", Package.Header.DecSpecification)) + DefinesTupleList.append(("PACKAGE_NAME", Package.Header.Name)) + DefinesTupleList.append(("PACKAGE_GUID", Package.Header.Guid)) + + StoreDefinesSection(DecFile, DefinesTupleList) + + +## Return a Package Include Class Item. +# +# Read the input Include class object and return one Include Class Item. +# +# @param Include An input Include class object. +# +# @retval IncludeClassItem A Package Include Class Item. +# +def GetPackageIncludeClassItem(Include): + return Include.FilePath + + +## Store Includes section. +# +# Write [Includes] section to the DecFile based on Package class object. +# Different CPU architectures are specified in the subsection if possible. +# +# @param DecFile The output DEC file to store the Includes section. +# @param Package An input Package class object. +# +def StorePackageIncludesSection(DecFile, Package): + Includes = Package.Includes + Section = GetSection("Includes", GetPackageIncludeClassItem, Includes) + StoreTextFile(DecFile, Section) + + +## Return a Package Library Class Item. +# +# Read the input LibraryClass class object and return one Library Class Item. +# +# @param LibraryClass An input LibraryClass class object. +# +# @retval LibraryClassItem A Package Library Class Item. +# +def GetPackageLibraryClassItem(LibraryClass): + return "|".join((LibraryClass.LibraryClass, LibraryClass.IncludeHeader)) + + +## Store Library Classes section. +# +# Write [LibraryClasses] section to the DecFile based on Package class object. +# Different CPU architectures are specified in the subsection if possible. +# +# @param DecFile The output DEC file to store the Library Classes +# section. +# @param Package An input Package class object. +# +def StorePackageLibraryClassesSection(DecFile, Package): + LibraryClasses = Package.LibraryClassDeclarations + Section = GetSection("LibraryClasses", GetPackageLibraryClassItem, LibraryClasses) + StoreTextFile(DecFile, Section) + + +## Return a Package Guid Declaration Item. +# +# Read the input Guid class object and return one line of Guid Declaration Item. +# +# @param Guid An input Guid class object. +# +# @retval GuidDeclarationItem A Package Guid Declaration Item. +# +def GetPackageGuidDeclarationItem(Guid): + GuidCName = Guid.CName + GuidValue = Guid.Guid.replace("-", "") + GuidValueList = [GuidValue[0:8]] + GuidValueList += [GuidValue[i : i + 4] for i in range(8, 16, 4)] + GuidValueList += [GuidValue[i : i + 2] for i in range(16, 32, 2)] + + GuidCFormat = "{0x%s" + ", 0x%s" * 2 + ", {0x%s" + ", 0x%s" * 7 + "}}" + GuidCValue = GuidCFormat % tuple(GuidValueList) + return "%-30s = %s" % (GuidCName, GuidCValue) + + +## Store Protocols section. +# +# Write [Protocols] section to the DecFile based on Package class object. +# Different CPU architectures are specified in the subsection if possible. +# +# @param DecFile The output DEC file to store the Protocols section. +# @param Package An input Package class object. +# +def StorePackageProtocolsSection(DecFile, Package): + Protocols = Package.ProtocolDeclarations + Section = GetSection("Protocols", GetPackageGuidDeclarationItem, Protocols) + StoreTextFile(DecFile, Section) + + +## Store Ppis section. +# +# Write [Ppis] section to the DecFile based on Package class object. +# Different CPU architectures are specified in the subsection if possible. +# +# @param DecFile The output DEC file to store the Ppis section. +# @param Package An input Package class object. +# +def StorePackagePpisSection(DecFile, Package): + Ppis = Package.PpiDeclarations + Section = GetSection("Ppis", GetPackageGuidDeclarationItem, Ppis) + StoreTextFile(DecFile, Section) + + +## Store Guids section. +# +# Write [Guids] section to the DecFile based on Package class object. +# Different CPU architectures are specified in the subsection if possible. +# +# @param DecFile The output DEC file to store the Guids section. +# @param Package An input Package class object. +# +def StorePackageGuidsSection(DecFile, Package): + Guids = Package.GuidDeclarations + Section = GetSection("Guids", GetPackageGuidDeclarationItem, Guids) + StoreTextFile(DecFile, Section) + + +## Return a Package Pcd Item. +# +# Read the input Pcd class object and return one line of Pcd Item. +# +# @param Pcd An input Pcd class object. +# +# @retval PcdItem A Package Pcd Item. +# +def GetPackagePcdItem(Pcd): + PcdPair = "%s.%s" % (Pcd.TokenSpaceGuidCName, Pcd.CName) + DatumType = Pcd.DatumType + DefaultValue = Pcd.DefaultValue + Token = Pcd.Token + PcdList = [PcdPair, DefaultValue, DatumType, Token] + return "|".join(PcdList) + + +## DEC Pcd Section Name dictionary indexed by PCD Item Type. +mDecPcdSectionNameDict = { + "FEATURE_FLAG" : "PcdsFeatureFlag", + "FIXED_AT_BUILD" : "PcdsFixedAtBuild", + "PATCHABLE_IN_MODULE" : "PcdsPatchableInModule", + "DYNAMIC" : "PcdsDynamic", + "DYNAMIC_EX" : "PcdsDynamicEx" + } + +## Store Pcds section. +# +# Write [Pcds*] section to the DecFile based on Package class object. +# Different CPU architectures are specified in the subsection if possible. +# +# @param DecFile The output DEC file to store the Pcds section. +# @param Package An input Package class object. +# +def StorePackagePcdsSection(DecFile, Package): + PcdsDict = {} + for Pcd in Package.PcdDeclarations: + for PcdItemType in Pcd.ValidUsage: + PcdSectionName = mDecPcdSectionNameDict.get(PcdItemType) + if PcdSectionName: + PcdsDict.setdefault(PcdSectionName, []).append(Pcd) + else: + EdkLogger.info("Unknown Pcd Item Type: %s" % PcdItemType) + + Section = "" + for PcdSectionName in PcdsDict: + Pcds = PcdsDict[PcdSectionName] + Section += GetSection(PcdSectionName, GetPackagePcdItem, Pcds) + + StoreTextFile(DecFile, Section) + + +## Store User Extensions section. +# +# Write [UserExtensions] section to the DecFile based on Package class object. +# +# @param DecFile The output DEC file to store the User Extensions section. +# @param Package An input Package class object. +# +def StorePackageUserExtensionsSection(DecFile, Package): + Section = "".join(map(GetUserExtensions, Package.UserExtensions)) + StoreTextFile(DecFile, Section) + + +## Store a Package class object to a new DEC file. +# +# Read an input Package class object and ave the contents to a new DEC file. +# +# @param DecFileName The output DEC file. +# @param Package An input Package class object. +# +def StoreDec(DecFileName, Package): + DecFile = open(DecFileName, "w+") + EdkLogger.info("Save file to %s" % DecFileName) + + StoreHeader(DecFile, Package.Header) + StorePackageDefinesSection(DecFile, Package) + StorePackageIncludesSection(DecFile, Package) + StorePackageLibraryClassesSection(DecFile, Package) + StorePackageProtocolsSection(DecFile, Package) + StorePackagePpisSection(DecFile, Package) + StorePackageGuidsSection(DecFile, Package) + StorePackagePcdsSection(DecFile, Package) + StorePackageUserExtensionsSection(DecFile, Package) + + DecFile.close() + + +# This acts like the main() function for the script, unless it is 'import'ed +# into another script. +if __name__ == '__main__': + pass + \ No newline at end of file -- cgit v1.2.3