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 != 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
# 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