# Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>\r
# Copyright (c) 2014-2016 Hewlett-Packard Development Company, L.P.<BR>\r
#\r
-# 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
+# SPDX-License-Identifier: BSD-2-Clause-Patent\r
#\r
\r
##\r
from . import RuleComplexFile\r
from CommonDataClass.FdfClass import FfsInfStatementClassObject\r
from Common.MultipleWorkspace import MultipleWorkspace as mws\r
+from Common.DataType import SUP_MODULE_USER_DEFINED\r
+from Common.DataType import SUP_MODULE_HOST_APPLICATION\r
from Common.StringUtils import *\r
from Common.Misc import PathClass\r
from Common.Misc import GuidStructureByteArrayToGuidString\r
self.FinalTargetSuffixMap.setdefault(os.path.splitext(File)[1], []).append(File)\r
\r
# Check if current INF module has DEPEX\r
- if '.depex' not in self.FinalTargetSuffixMap and self.InfModule.ModuleType != SUP_MODULE_USER_DEFINED \\r
+ if '.depex' not in self.FinalTargetSuffixMap and self.InfModule.ModuleType != SUP_MODULE_USER_DEFINED and self.InfModule.ModuleType != SUP_MODULE_HOST_APPLICATION \\r
and not self.InfModule.DxsFile and not self.InfModule.LibraryClass:\r
ModuleType = self.InfModule.ModuleType\r
PlatformDataBase = GenFdsGlobalVariable.WorkSpace.BuildObject[GenFdsGlobalVariable.ActivePlatform, self.CurrentArch, GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag]\r
\r
- if ModuleType != DataType.SUP_MODULE_USER_DEFINED:\r
+ if ModuleType != SUP_MODULE_USER_DEFINED and ModuleType != SUP_MODULE_HOST_APPLICATION:\r
for LibraryClass in PlatformDataBase.LibraryClasses.GetKeys():\r
if LibraryClass.startswith("NULL") and PlatformDataBase.LibraryClasses[LibraryClass, ModuleType]:\r
self.InfModule.LibraryClasses[LibraryClass] = PlatformDataBase.LibraryClasses[LibraryClass, ModuleType]\r
# @param self The object pointer\r
# @param Dict dictionary contains macro and value pair\r
#\r
- def __InfParse__(self, Dict = {}):\r
+ def __InfParse__(self, Dict = None, IsGenFfs=False):\r
\r
GenFdsGlobalVariable.VerboseLogger( " Begine parsing INf file : %s" %self.InfFileName)\r
\r
\r
Inf = GenFdsGlobalVariable.WorkSpace.BuildObject[PathClassObj, self.CurrentArch, GenFdsGlobalVariable.TargetName, GenFdsGlobalVariable.ToolChainTag]\r
#\r
- # Set Ffs BaseName, MdouleGuid, ModuleType, Version, OutputPath\r
+ # Set Ffs BaseName, ModuleGuid, ModuleType, Version, OutputPath\r
#\r
self.BaseName = Inf.BaseName\r
self.ModuleGuid = Inf.Guid\r
GenFdsGlobalVariable.VerboseLogger("InfFileName :%s" % self.InfFileName)\r
\r
#\r
- # Set OutputPath = ${WorkSpace}\Build\Fv\Ffs\${ModuleGuid}+ ${MdouleName}\\r
+ # Set OutputPath = ${WorkSpace}\Build\Fv\Ffs\${ModuleGuid}+ ${ModuleName}\\r
#\r
-\r
+ if IsGenFfs:\r
+ Rule = self.__GetRule__()\r
+ if GlobalData.gGuidPatternEnd.match(Rule.NameGuid):\r
+ self.ModuleGuid = Rule.NameGuid\r
self.OutputPath = os.path.join(GenFdsGlobalVariable.FfsDir, \\r
self.ModuleGuid + self.BaseName)\r
if not os.path.exists(self.OutputPath) :\r
#\r
# Only patch file if FileType is PE32 or ModuleType is USER_DEFINED\r
#\r
- if FileType != BINARY_FILE_TYPE_PE32 and self.ModuleType != SUP_MODULE_USER_DEFINED:\r
+ if FileType != BINARY_FILE_TYPE_PE32 and self.ModuleType != SUP_MODULE_USER_DEFINED and self.ModuleType != SUP_MODULE_HOST_APPLICATION:\r
return EfiFile\r
\r
#\r
# @param FvParentAddr Parent Fv base address\r
# @retval string Generated FFS file name\r
#\r
- def GenFfs(self, Dict = {}, FvChildAddr = [], FvParentAddr=None, IsMakefile=False, FvName=None):\r
+ def GenFfs(self, Dict = None, FvChildAddr = [], FvParentAddr=None, IsMakefile=False, FvName=None):\r
#\r
# Parse Inf file get Module related information\r
#\r
-\r
- self.__InfParse__(Dict)\r
+ if Dict is None:\r
+ Dict = {}\r
+ self.__InfParse__(Dict, IsGenFfs=True)\r
Arch = self.GetCurrentArch()\r
SrcFile = mws.join( GenFdsGlobalVariable.WorkSpaceDir, self.InfFileName);\r
DestFile = os.path.join( self.OutputPath, self.ModuleGuid + '.ffs')\r
if self.IsBinaryModule:\r
IsMakefile = False\r
if IsMakefile:\r
- MakefilePath = self.InfFileName, Arch\r
+ PathClassObj = PathClass(self.InfFileName, GenFdsGlobalVariable.WorkSpaceDir)\r
+ if self.OverrideGuid:\r
+ PathClassObj = ProcessDuplicatedInf(PathClassObj, self.OverrideGuid, GenFdsGlobalVariable.WorkSpaceDir)\r
+ MakefilePath = PathClassObj.Path, Arch\r
if isinstance (Rule, RuleSimpleFile.RuleSimpleFile):\r
SectionOutputList = self.__GenSimpleFileSection__(Rule, IsMakefile=IsMakefile)\r
FfsOutput = self.__GenSimpleFileFfs__(Rule, SectionOutputList, MakefilePath=MakefilePath)\r
if ImageObj.SectionAlignment < 0x400:\r
self.Alignment = str (ImageObj.SectionAlignment)\r
elif ImageObj.SectionAlignment < 0x100000:\r
- self.Alignment = str (ImageObj.SectionAlignment / 0x400) + 'K'\r
+ self.Alignment = str (ImageObj.SectionAlignment // 0x400) + 'K'\r
else:\r
- self.Alignment = str (ImageObj.SectionAlignment / 0x100000) + 'M'\r
+ self.Alignment = str (ImageObj.SectionAlignment // 0x100000) + 'M'\r
\r
if not NoStrip:\r
FileBeforeStrip = os.path.join(self.OutputPath, ModuleName + '.reloc')\r
if ImageObj.SectionAlignment < 0x400:\r
self.Alignment = str (ImageObj.SectionAlignment)\r
elif ImageObj.SectionAlignment < 0x100000:\r
- self.Alignment = str (ImageObj.SectionAlignment / 0x400) + 'K'\r
+ self.Alignment = str (ImageObj.SectionAlignment // 0x400) + 'K'\r
else:\r
- self.Alignment = str (ImageObj.SectionAlignment / 0x100000) + 'M'\r
+ self.Alignment = str (ImageObj.SectionAlignment // 0x100000) + 'M'\r
\r
if not NoStrip:\r
FileBeforeStrip = os.path.join(self.OutputPath, ModuleName + '.reloc')\r
# @retval string File name of the generated section file\r
#\r
def __GenComplexFileSection__(self, Rule, FvChildAddr, FvParentAddr, IsMakefile = False):\r
- if self.ModuleType in (SUP_MODULE_SEC, SUP_MODULE_PEI_CORE, SUP_MODULE_PEIM):\r
+ if self.ModuleType in (SUP_MODULE_SEC, SUP_MODULE_PEI_CORE, SUP_MODULE_PEIM, SUP_MODULE_MM_CORE_STANDALONE):\r
if Rule.KeepReloc is not None:\r
self.KeepRelocFromRule = Rule.KeepReloc\r
SectFiles = []\r
def __GetBuildOutputMapFileVfrUniInfo(self, VfrUniBaseName):\r
MapFileName = os.path.join(self.EfiOutputPath, self.BaseName + ".map")\r
EfiFileName = os.path.join(self.EfiOutputPath, self.BaseName + ".efi")\r
- return GetVariableOffset(MapFileName, EfiFileName, VfrUniBaseName.values())\r
+ return GetVariableOffset(MapFileName, EfiFileName, list(VfrUniBaseName.values()))\r
\r
## __GenUniVfrOffsetFile() method\r
#\r
def __GenUniVfrOffsetFile(VfrUniOffsetList, UniVfrOffsetFileName):\r
\r
# Use a instance of StringIO to cache data\r
- fStringIO = BytesIO('')\r
+ fStringIO = BytesIO()\r
\r
for Item in VfrUniOffsetList:\r
if (Item[0].find("Strings") != -1):\r
# GUID + Offset\r
# { 0x8913c5e0, 0x33f6, 0x4d86, { 0x9b, 0xf1, 0x43, 0xef, 0x89, 0xfc, 0x6, 0x66 } }\r
#\r
- UniGuid = [0xe0, 0xc5, 0x13, 0x89, 0xf6, 0x33, 0x86, 0x4d, 0x9b, 0xf1, 0x43, 0xef, 0x89, 0xfc, 0x6, 0x66]\r
- UniGuid = [chr(ItemGuid) for ItemGuid in UniGuid]\r
- fStringIO.write(''.join(UniGuid))\r
+ UniGuid = b'\xe0\xc5\x13\x89\xf63\x86M\x9b\xf1C\xef\x89\xfc\x06f'\r
+ fStringIO.write(UniGuid)\r
UniValue = pack ('Q', int (Item[1], 16))\r
fStringIO.write (UniValue)\r
else:\r
# GUID + Offset\r
# { 0xd0bc7cb4, 0x6a47, 0x495f, { 0xaa, 0x11, 0x71, 0x7, 0x46, 0xda, 0x6, 0xa2 } };\r
#\r
- VfrGuid = [0xb4, 0x7c, 0xbc, 0xd0, 0x47, 0x6a, 0x5f, 0x49, 0xaa, 0x11, 0x71, 0x7, 0x46, 0xda, 0x6, 0xa2]\r
- VfrGuid = [chr(ItemGuid) for ItemGuid in VfrGuid]\r
- fStringIO.write(''.join(VfrGuid))\r
+ VfrGuid = b'\xb4|\xbc\xd0Gj_I\xaa\x11q\x07F\xda\x06\xa2'\r
+ fStringIO.write(VfrGuid)\r
type (Item[1])\r
VfrValue = pack ('Q', int (Item[1], 16))\r
fStringIO.write (VfrValue)\r