summaryrefslogtreecommitdiffstats
path: root/BaseTools/Source/Python/AutoGen/AutoGen.py
diff options
context:
space:
mode:
authorlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>2009-11-09 11:47:35 +0000
committerlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>2009-11-09 11:47:35 +0000
commitb303ea726e1c8ed240dad2bce54821318567eab3 (patch)
tree355db6226949afd1bfcc87d69e09a320ea9b7bb7 /BaseTools/Source/Python/AutoGen/AutoGen.py
parent4c913fe619bd00861270cb0866feb34bcdc1592e (diff)
downloadedk2-b303ea726e1c8ed240dad2bce54821318567eab3.tar.gz
edk2-b303ea726e1c8ed240dad2bce54821318567eab3.tar.bz2
edk2-b303ea726e1c8ed240dad2bce54821318567eab3.zip
Sync tool code to BuildTools project r1739.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9397 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'BaseTools/Source/Python/AutoGen/AutoGen.py')
-rw-r--r--BaseTools/Source/Python/AutoGen/AutoGen.py404
1 files changed, 387 insertions, 17 deletions
diff --git a/BaseTools/Source/Python/AutoGen/AutoGen.py b/BaseTools/Source/Python/AutoGen/AutoGen.py
index 647e1d0052..9594ef0cae 100644
--- a/BaseTools/Source/Python/AutoGen/AutoGen.py
+++ b/BaseTools/Source/Python/AutoGen/AutoGen.py
@@ -21,6 +21,7 @@ import copy
import GenC
import GenMake
import GenDepex
+from StringIO import StringIO
from StrGather import *
from BuildEngine import BuildRule
@@ -48,8 +49,8 @@ gBuildRuleFile = 'Conf/build_rule.txt'
gAutoGenCodeFileName = "AutoGen.c"
gAutoGenHeaderFileName = "AutoGen.h"
gAutoGenStringFileName = "%(module_name)sStrDefs.h"
+gAutoGenStringFormFileName = "%(module_name)sStrDefs.hpk"
gAutoGenDepexFileName = "%(module_name)s.depex"
-gAutoGenSmmDepexFileName = "%(module_name)s.smm"
## Base class for AutoGen
#
@@ -137,7 +138,8 @@ class WorkspaceAutoGen(AutoGen):
# @param SkuId SKU id from command line
#
def _Init(self, WorkspaceDir, ActivePlatform, Target, Toolchain, ArchList, MetaFileDb,
- BuildConfig, ToolDefinition, FlashDefinitionFile='', Fds=[], Fvs=[], SkuId=''):
+ BuildConfig, ToolDefinition, FlashDefinitionFile='', Fds=[], Fvs=[], SkuId='',
+ ReportFile=None, ReportType=None):
self.MetaFile = ActivePlatform.MetaFile
self.WorkspaceDir = WorkspaceDir
self.Platform = ActivePlatform
@@ -145,6 +147,8 @@ class WorkspaceAutoGen(AutoGen):
self.ToolChain = Toolchain
self.ArchList = ArchList
self.SkuId = SkuId
+ self.ReportFile = ReportFile
+ self.ReportType = ReportType
self.BuildDatabase = MetaFileDb
self.TargetTxt = BuildConfig
@@ -181,6 +185,325 @@ class WorkspaceAutoGen(AutoGen):
Pa.CollectPlatformDynamicPcds()
self.AutoGenObjectList.append(Pa)
+ AllPcds = {}
+ MaxLen = 0
+ for Pcd in Pa._DynaPcdList_ + Pa._NonDynaPcdList_:
+ if Pcd.TokenSpaceGuidCName not in AllPcds:
+ AllPcds[Pcd.TokenSpaceGuidCName] = {}
+ if Pcd.Type not in AllPcds[Pcd.TokenSpaceGuidCName]:
+ AllPcds[Pcd.TokenSpaceGuidCName][Pcd.Type] = []
+ AllPcds[Pcd.TokenSpaceGuidCName][Pcd.Type] += [Pcd]
+ if len(Pcd.TokenCName) > MaxLen:
+ MaxLen = len(Pcd.TokenCName)
+
+ if self.ReportFile <> None:
+ try:
+ if os.path.exists(self.ReportFile):
+ os.remove(self.ReportFile)
+
+ Fd = open(self.ReportFile, "w")
+
+ Fd.write ('===============================================================================\n')
+ Fd.write ('Platform Configuration Database Report\n')
+ Fd.write ('===============================================================================\n')
+ Fd.write (' *P - Platform scoped PCD override in DSC file\n')
+ Fd.write (' *F - Platform scoped PCD override in FDF file\n')
+ Fd.write (' *M - Module scoped PCD override in DSC file\n')
+ Fd.write (' *C - Library has a constructor\n')
+ Fd.write (' *D - Library has a destructor\n')
+ Fd.write (' *CD - Library has both a constructor and a destructor\n')
+ Fd.write ('===============================================================================\n')
+ Fd.write ('\n')
+ Fd.write ('===============================================================================\n')
+ Fd.write ('PLATFORM: %s\n' % (ActivePlatform.MetaFile))
+ Fd.write ('===============================================================================\n')
+ for Key in AllPcds:
+ Fd.write ('%s\n' % (Key))
+ for Type in AllPcds[Key]:
+ TypeName = ''
+ DecType = Type
+ if Type == 'FixedAtBuild':
+ TypeName = 'FIXED'
+ if Type == 'PatchableInModule':
+ TypeName = 'PATCH'
+ if Type == 'FeatureFlag':
+ TypeName = 'FLAG'
+ if Type == 'Dynamic':
+ TypeName = 'DYN'
+ if Type == 'DynamicHii':
+ TypeName = 'DYNHII'
+ DecType = 'Dynamic'
+ if Type == 'DynamicVpd':
+ TypeName = 'DYNVPD'
+ DecType = 'Dynamic'
+ if Type == 'DynamicEx':
+ TypeName = 'DEX'
+ DecType = 'Dynamic'
+ if Type == 'DynamicExHii':
+ TypeName = 'DEXHII'
+ DecType = 'Dynamic'
+ if Type == 'DynamicExVpd':
+ TypeName = 'DEXVPD'
+ DecType = 'Dynamic'
+ for Pcd in AllPcds[Key][Type]:
+
+ DecDefaultValue = None
+ for F in Pa.Platform.Modules.keys():
+ for Package in Pa.Platform.Modules[F].M.Module.Packages:
+ if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, DecType) in Package.Pcds:
+ if DecDefaultValue == None:
+ DecDefaultValue = Package.Pcds[Pcd.TokenCName, Pcd.TokenSpaceGuidCName, DecType].DefaultValue
+
+ DscDefaultValue = None
+ if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in self.BuildDatabase.WorkspaceDb.PlatformList[0].Pcds:
+ DscDefaultValue = self.BuildDatabase.WorkspaceDb.PlatformList[0].Pcds[(Pcd.TokenCName, Pcd.TokenSpaceGuidCName)].DefaultValue
+
+ if Pcd.DatumType in ('UINT8', 'UINT16', 'UINT32', 'UINT64'):
+ if Pcd.DefaultValue.strip()[0:2].upper() == '0X':
+ PcdDefaultValueNumber = int(Pcd.DefaultValue.strip(), 16)
+ else:
+ PcdDefaultValueNumber = int(Pcd.DefaultValue.strip())
+
+ if DecDefaultValue == None:
+ DecMatch = True
+ else:
+ if DecDefaultValue.strip()[0:2].upper() == '0X':
+ DecDefaultValueNumber = int(DecDefaultValue.strip(), 16)
+ else:
+ DecDefaultValueNumber = int(DecDefaultValue.strip())
+ DecMatch = (DecDefaultValueNumber == PcdDefaultValueNumber)
+
+ if DscDefaultValue == None:
+ DscMatch = True
+ else:
+ if DscDefaultValue.strip()[0:2].upper() == '0X':
+ DscDefaultValueNumber = int(DscDefaultValue.strip(), 16)
+ else:
+ DscDefaultValueNumber = int(DscDefaultValue.strip())
+ DscMatch = (DscDefaultValueNumber == PcdDefaultValueNumber)
+ else:
+ if DecDefaultValue == None:
+ DecMatch = True
+ else:
+ DecMatch = (DecDefaultValue == Pcd.DefaultValue)
+
+ if DscDefaultValue == None:
+ DscMatch = True
+ else:
+ DscMatch = (DscDefaultValue == Pcd.DefaultValue)
+
+ if DecMatch:
+ Fd.write (' %-*s: %6s %10s = %-22s\n' % (MaxLen + 2, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', Pcd.DefaultValue))
+ else:
+ if DscMatch:
+ if (Pcd.TokenCName, Key) in PcdSet:
+ Fd.write (' *F %-*s: %6s %10s = %-22s\n' % (MaxLen + 2, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', Pcd.DefaultValue))
+ else:
+ Fd.write (' *P %-*s: %6s %10s = %-22s\n' % (MaxLen + 2, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', Pcd.DefaultValue))
+
+ for F in Pa.Platform.Modules.keys():
+ for ModulePcd in Pa.Platform.Modules[F].M.ModulePcdList + Pa.Platform.Modules[F].M.LibraryPcdList:
+ if ModulePcd.TokenSpaceGuidCName <> Pcd.TokenSpaceGuidCName:
+ continue
+ if ModulePcd.TokenCName <> Pcd.TokenCName:
+ continue
+ if Pcd.DatumType in ('UINT8', 'UINT16', 'UINT32', 'UINT64'):
+ if ModulePcd.DefaultValue.strip()[0:2].upper() == '0X':
+ ModulePcdDefaultValueNumber = int(ModulePcd.DefaultValue.strip(), 16)
+ else:
+ ModulePcdDefaultValueNumber = int(ModulePcd.DefaultValue.strip())
+ Match = (ModulePcdDefaultValueNumber == PcdDefaultValueNumber)
+ else:
+ Match = (ModulePcd.DefaultValue == Pcd.DefaultValue)
+ if Match:
+ continue
+ Fd.write (' *M %*s = %s\n' % (MaxLen + 21, str(F).split('\\')[-1], ModulePcd.DefaultValue))
+
+ if not DecMatch and DscMatch and DecDefaultValue <> None:
+ Fd.write (' %*s = %s\n' % (MaxLen + 21, 'DEC DEFAULT', DecDefaultValue))
+
+ Fd.write ('\n')
+
+ Fd.write ('===============================================================================\n')
+ Fd.write ('===============================================================================\n')
+
+ for F in Pa.Platform.Modules.keys():
+ Fd.write ('\n')
+ Fd.write ('===============================================================================\n')
+ Fd.write ('MODULE: %s\n' % (F))
+ Fd.write ('===============================================================================\n')
+
+ Fd.write ('PLATFORM CONFIGURATION DATABASE\n')
+ Fd.write ('-------------------------------------------------------------------------------\n')
+ ModuleFirst = True
+ for Key in AllPcds:
+ First = True
+ for Type in AllPcds[Key]:
+ TypeName = ''
+ DecType = Type
+ if Type == 'FixedAtBuild':
+ TypeName = 'FIXED'
+ if Type == 'PatchableInModule':
+ TypeName = 'PATCH'
+ if Type == 'FeatureFlag':
+ TypeName = 'FLAG'
+ if Type == 'Dynamic':
+ TypeName = 'DYN'
+ if Type == 'DynamicHii':
+ TypeName = 'DYNHII'
+ DecType = 'Dynamic'
+ if Type == 'DynamicVpd':
+ TypeName = 'DYNVPD'
+ DecType = 'Dynamic'
+ if Type == 'DynamicEx':
+ TypeName = 'DEX'
+ DecType = 'Dynamic'
+ if Type == 'DynamicExHii':
+ TypeName = 'DEXHII'
+ DecType = 'Dynamic'
+ if Type == 'DynamicExVpd':
+ TypeName = 'DEXVPD'
+ DecType = 'Dynamic'
+ for Pcd in AllPcds[Key][Type]:
+ for ModulePcd in Pa.Platform.Modules[F].M.ModulePcdList + Pa.Platform.Modules[F].M.LibraryPcdList:
+ if ModulePcd.TokenSpaceGuidCName <> Pcd.TokenSpaceGuidCName:
+ continue
+ if ModulePcd.TokenCName <> Pcd.TokenCName:
+ continue
+ if ModulePcd.Type <> Pcd.Type:
+ continue
+ if First:
+ if ModuleFirst:
+ ModuleFirst = False
+ else:
+ Fd.write ('\n')
+ Fd.write ('%s\n' % (Key))
+ First = False
+
+ InfDefaultValue = ModulePcd.InfDefaultValue
+ if InfDefaultValue == '':
+ InfDefaultValue = None
+
+ DecDefaultValue = None
+ for Package in Pa.Platform.Modules[F].M.Module.Packages:
+ if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, DecType) in Package.Pcds:
+ if DecDefaultValue == None:
+ DecDefaultValue = Package.Pcds[Pcd.TokenCName, Pcd.TokenSpaceGuidCName, DecType].DefaultValue
+
+ DscDefaultValue = None
+ if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in self.BuildDatabase.WorkspaceDb.PlatformList[0].Pcds:
+ DscDefaultValue = self.BuildDatabase.WorkspaceDb.PlatformList[0].Pcds[(Pcd.TokenCName, Pcd.TokenSpaceGuidCName)].DefaultValue
+
+ DscModuleOverrideDefaultValue = None
+ if F in self.BuildDatabase.WorkspaceDb.PlatformList[0].Modules:
+ if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in self.BuildDatabase.WorkspaceDb.PlatformList[0].Modules[F].Pcds:
+ DscModuleOverrideDefaultValue = self.BuildDatabase.WorkspaceDb.PlatformList[0].Modules[F].Pcds[(Pcd.TokenCName, Pcd.TokenSpaceGuidCName)].DefaultValue
+
+ if Pcd.DatumType in ('UINT8', 'UINT16', 'UINT32', 'UINT64'):
+ if ModulePcd.DefaultValue.strip()[0:2].upper() == '0X':
+ ModulePcdDefaultValueNumber = int(ModulePcd.DefaultValue.strip(), 16)
+ else:
+ ModulePcdDefaultValueNumber = int(ModulePcd.DefaultValue.strip())
+
+ if DecDefaultValue == None:
+ DecMatch = True
+ else:
+ if DecDefaultValue.strip()[0:2].upper() == '0X':
+ DecDefaultValueNumber = int(DecDefaultValue.strip(), 16)
+ else:
+ DecDefaultValueNumber = int(DecDefaultValue.strip())
+ DecMatch = (DecDefaultValueNumber == ModulePcdDefaultValueNumber)
+
+ if InfDefaultValue == None:
+ InfMatch = True
+ else:
+ if InfDefaultValue.strip()[0:2].upper() == '0X':
+ InfDefaultValueNumber = int(InfDefaultValue.strip(), 16)
+ else:
+ InfDefaultValueNumber = int(InfDefaultValue.strip())
+ InfMatch = (InfDefaultValueNumber == ModulePcdDefaultValueNumber)
+
+ if DscDefaultValue == None:
+ DscMatch = True
+ else:
+ if DscDefaultValue.strip()[0:2].upper() == '0X':
+ DscDefaultValueNumber = int(DscDefaultValue.strip(), 16)
+ else:
+ DscDefaultValueNumber = int(DscDefaultValue.strip())
+ DscMatch = (DscDefaultValueNumber == ModulePcdDefaultValueNumber)
+ else:
+ if DecDefaultValue == None:
+ DecMatch = True
+ else:
+ DecMatch = (DecDefaultValue == ModulePcd.DefaultValue)
+
+ if InfDefaultValue == None:
+ InfMatch = True
+ else:
+ InfMatch = (InfDefaultValue == ModulePcd.DefaultValue)
+
+ if DscDefaultValue == None:
+ DscMatch = True
+ else:
+ DscMatch = (DscDefaultValue == ModulePcd.DefaultValue)
+
+ if DecMatch and InfMatch:
+ Fd.write (' %-*s: %6s %10s = %-22s\n' % (MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', ModulePcd.DefaultValue))
+ else:
+ if DscMatch and DscModuleOverrideDefaultValue == None:
+ if (Pcd.TokenCName, Key) in PcdSet:
+ Fd.write (' *F %-*s: %6s %10s = %-22s\n' % (MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', ModulePcd.DefaultValue))
+ else:
+ Fd.write (' *P %-*s: %6s %10s = %-22s\n' % (MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', ModulePcd.DefaultValue))
+ else:
+ Fd.write (' *M %-*s: %6s %10s = %-22s\n' % (MaxLen, Pcd.TokenCName, TypeName, '('+Pcd.DatumType+')', ModulePcd.DefaultValue))
+ if DscDefaultValue <> None:
+ Fd.write (' %*s = %s\n' % (MaxLen + 19, 'DSC DEFAULT', DscDefaultValue))
+ if InfDefaultValue <> None:
+ Fd.write (' %*s = %s\n' % (MaxLen + 19, 'INF DEFAULT', InfDefaultValue))
+ if DecDefaultValue <> None and not DecMatch:
+ Fd.write (' %*s = %s\n' % (MaxLen + 19, 'DEC DEFAULT', DecDefaultValue))
+ Fd.write ('-------------------------------------------------------------------------------\n')
+ Fd.write ('LIBRARIES\n')
+ Fd.write ('-------------------------------------------------------------------------------\n')
+ for Lib in Pa.Platform.Modules[F].M.DependentLibraryList:
+ if len(Lib.ConstructorList) > 0:
+ if len(Lib.DestructorList) > 0:
+ Fd.write (' *CD')
+ else:
+ Fd.write (' *C ')
+ else:
+ if len(Lib.DestructorList) > 0:
+ Fd.write (' *D ')
+ else:
+ Fd.write (' ')
+ Fd.write (' %s\n' % (Lib))
+ for Depex in Lib.DepexExpression[Pa.Platform.Modules[F].M.Arch, Pa.Platform.Modules[F].M.ModuleType]:
+ Fd.write (' DEPEX = %s\n' % (Depex))
+ Fd.write ('-------------------------------------------------------------------------------\n')
+
+ Fd.write ('MODULE DEPENDENCY EXPRESSION\n')
+ if len(Pa.Platform.Modules[F].M.Module.DepexExpression[Pa.Platform.Modules[F].M.Arch, Pa.Platform.Modules[F].M.ModuleType]) == 0:
+ Fd.write (' NONE\n')
+ else:
+ for Depex in Pa.Platform.Modules[F].M.Module.DepexExpression[Pa.Platform.Modules[F].M.Arch, Pa.Platform.Modules[F].M.ModuleType]:
+ Fd.write (' %s\n' % (Depex))
+ Fd.write ('-------------------------------------------------------------------------------\n')
+
+ Fd.write ('MODULE + LIBRARY DEPENDENCY EXPRESSION\n')
+ if Pa.Platform.Modules[F].M.ModuleType in Pa.Platform.Modules[F].M.DepexExpressionList:
+ if Pa.Platform.Modules[F].M.DepexExpressionList[Pa.Platform.Modules[F].M.ModuleType] == '':
+ Fd.write (' NONE\n')
+ else:
+ Fd.write (' %s\n' % (Pa.Platform.Modules[F].M.DepexExpressionList[Pa.Platform.Modules[F].M.ModuleType]))
+ else:
+ Fd.write (' NONE\n')
+ Fd.write ('-------------------------------------------------------------------------------\n')
+
+ Fd.close()
+ except:
+ EdkLogger.error(None, FILE_OPEN_FAILURE, ExtraData=self.ReportFile)
+
self._BuildDir = None
self._FvDir = None
self._MakeFileDir = None
@@ -421,6 +744,9 @@ class PlatformAutoGen(AutoGen):
for F in self.Platform.Modules.keys():
M = ModuleAutoGen(self.Workspace, F, self.BuildTarget, self.ToolChain, self.Arch, self.MetaFile)
#GuidValue.update(M.Guids)
+
+ self.Platform.Modules[F].M = M
+
for PcdFromModule in M.ModulePcdList+M.LibraryPcdList:
# make sure that the "VOID*" kind of datum has MaxDatumSize set
if PcdFromModule.DatumType == "VOID*" and PcdFromModule.MaxDatumSize == None:
@@ -1260,6 +1586,7 @@ class ModuleAutoGen(AutoGen):
self._ProtocolList = None
self._PpiList = None
self._DepexList = None
+ self._DepexExpressionList = None
self._BuildOption = None
self._BuildTargets = None
self._IntroBuildTargetList = None
@@ -1433,11 +1760,7 @@ class ModuleAutoGen(AutoGen):
if self.IsLibrary or TAB_DEPENDENCY_EXPRESSION_FILE in self.FileTypes:
return self._DepexList
- if self.ModuleType == "DXE_SMM_DRIVER":
- self._DepexList["DXE_DRIVER"] = []
- self._DepexList["SMM_DRIVER"] = []
- else:
- self._DepexList[self.ModuleType] = []
+ self._DepexList[self.ModuleType] = []
for ModuleType in self._DepexList:
DepexList = self._DepexList[ModuleType]
@@ -1463,6 +1786,42 @@ class ModuleAutoGen(AutoGen):
EdkLogger.verbose('')
return self._DepexList
+ ## Merge dependency expression
+ #
+ # @retval list The token list of the dependency expression after parsed
+ #
+ def _GetDepexExpressionTokenList(self):
+ if self._DepexExpressionList == None:
+ self._DepexExpressionList = {}
+ if self.IsLibrary or TAB_DEPENDENCY_EXPRESSION_FILE in self.FileTypes:
+ return self._DepexExpressionList
+
+ self._DepexExpressionList[self.ModuleType] = ''
+
+ for ModuleType in self._DepexExpressionList:
+ DepexExpressionList = self._DepexExpressionList[ModuleType]
+ #
+ # Append depex from dependent libraries, if not "BEFORE", "AFTER" expresion
+ #
+ for M in [self.Module] + self.DependentLibraryList:
+ Inherited = False
+ for D in M.DepexExpression[self.Arch, ModuleType]:
+ if DepexExpressionList != '':
+ DepexExpressionList += ' AND '
+ DepexExpressionList += '('
+ DepexExpressionList += D
+ DepexExpressionList = DepexExpressionList.rstrip('END').strip()
+ DepexExpressionList += ')'
+ Inherited = True
+ if Inherited:
+ EdkLogger.verbose("DEPEX[%s] (+%s) = %s" % (self.Name, M.BaseName, DepexExpressionList))
+ if 'BEFORE' in DepexExpressionList or 'AFTER' in DepexExpressionList:
+ break
+ if len(DepexExpressionList) > 0:
+ EdkLogger.verbose('')
+ self._DepexExpressionList[ModuleType] = DepexExpressionList
+ return self._DepexExpressionList
+
## Return the list of specification version required for the module
#
# @retval list The list of specification defined in module file
@@ -1580,12 +1939,12 @@ class ModuleAutoGen(AutoGen):
if Source != File:
CreateDirectory(Source.Dir)
- if FileType in self.BuildRules:
+ if File.IsBinary and File == Source:
+ RuleObject = self.BuildRules[TAB_DEFAULT_BINARY_FILE]
+ elif FileType in self.BuildRules:
RuleObject = self.BuildRules[FileType]
elif Source.Ext in self.BuildRules:
RuleObject = self.BuildRules[Source.Ext]
- elif File.IsBinary and File == Source:
- RuleObject = self.BuildRules[TAB_DEFAULT_BINARY_FILE]
else:
# stop at no more rules
if LastTarget:
@@ -1599,7 +1958,8 @@ class ModuleAutoGen(AutoGen):
# stop at STATIC_LIBRARY for library
if self.IsLibrary and FileType == TAB_STATIC_LIBRARY:
- self._FinalBuildTargetList.add(LastTarget)
+ if LastTarget:
+ self._FinalBuildTargetList.add(LastTarget)
break
Target = RuleObject.Apply(Source)
@@ -1668,12 +2028,17 @@ class ModuleAutoGen(AutoGen):
# @retval list The list of auto-generated file
#
def _GetAutoGenFileList(self):
+ UniStringAutoGenC = True
+ UniStringBinBuffer = None
+ if self.BuildType == 'UEFI_HII':
+ UniStringBinBuffer = StringIO()
+ UniStringAutoGenC = False
if self._AutoGenFileList == None:
self._AutoGenFileList = {}
AutoGenC = TemplateString()
AutoGenH = TemplateString()
StringH = TemplateString()
- GenC.CreateCode(self, AutoGenC, AutoGenH, StringH)
+ GenC.CreateCode(self, AutoGenC, AutoGenH, StringH, UniStringAutoGenC, UniStringBinBuffer)
if str(AutoGenC) != "" and TAB_C_CODE_FILE in self.FileTypes:
AutoFile = PathClass(gAutoGenCodeFileName, self.DebugDir)
self._AutoGenFileList[AutoFile] = str(AutoGenC)
@@ -1686,6 +2051,13 @@ class ModuleAutoGen(AutoGen):
AutoFile = PathClass(gAutoGenStringFileName % {"module_name":self.Name}, self.DebugDir)
self._AutoGenFileList[AutoFile] = str(StringH)
self._ApplyBuildRule(AutoFile, TAB_UNKNOWN_FILE)
+ if UniStringBinBuffer != None and UniStringBinBuffer.getvalue() != "":
+ AutoFile = PathClass(gAutoGenStringFormFileName % {"module_name":self.Name}, self.OutputDir)
+ self._AutoGenFileList[AutoFile] = UniStringBinBuffer.getvalue()
+ AutoFile.IsBinary = True
+ self._ApplyBuildRule(AutoFile, TAB_UNKNOWN_FILE)
+ if UniStringBinBuffer != None:
+ UniStringBinBuffer.close()
return self._AutoGenFileList
## Return the list of library modules explicitly or implicityly used by this module
@@ -1838,7 +2210,7 @@ class ModuleAutoGen(AutoGen):
IgoredAutoGenList = []
for File in self.AutoGenFileList:
- if GenC.Generate(File.Path, self.AutoGenFileList[File]):
+ if GenC.Generate(File.Path, self.AutoGenFileList[File], File.IsBinary):
#Ignore R8 AutoGen.c
if self.AutoGenVersion < 0x00010005 and File.Name == 'AutoGen.c':
continue
@@ -1855,10 +2227,7 @@ class ModuleAutoGen(AutoGen):
if len(self.DepexList[ModuleType]) == 0:
continue
Dpx = GenDepex.DependencyExpression(self.DepexList[ModuleType], ModuleType, True)
- if ModuleType == 'SMM_DRIVER':
- DpxFile = gAutoGenSmmDepexFileName % {"module_name" : self.Name}
- else:
- DpxFile = gAutoGenDepexFileName % {"module_name" : self.Name}
+ DpxFile = gAutoGenDepexFileName % {"module_name" : self.Name}
if Dpx.Generate(path.join(self.OutputDir, DpxFile)):
AutoGenList.append(str(DpxFile))
@@ -1947,6 +2316,7 @@ class ModuleAutoGen(AutoGen):
ProtocolList = property(_GetProtocolList)
PpiList = property(_GetPpiList)
DepexList = property(_GetDepexTokenList)
+ DepexExpressionList = property(_GetDepexExpressionTokenList)
BuildOption = property(_GetModuleBuildOption)
BuildCommand = property(_GetBuildCommand)