mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-10-30 18:53:45 +01:00 
			
		
		
		
	git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10502 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			247 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			247 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| ## @file
 | |
| # Store a Package class object to a DEC file.
 | |
| #
 | |
| # Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
 | |
| # 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
 | |
|      |