mirror of https://github.com/acidanthera/audk.git
BaseTools: Add Guid name support in GenFfs.
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2762 The Fv Section in the FDF files use hard coding Guid values which is inconvenient to manage. This patch adds Guid name support in GenFfs to solve this problem. Signed-off-by: Yuwei Chen <yuwei.chen@intel.com> Reviewed-by: Bob Feng<bob.c.feng@intel.com>
This commit is contained in:
parent
21a23e6966
commit
d35773d5c0
|
@ -108,6 +108,10 @@ class WorkspaceAutoGen(AutoGen):
|
||||||
#
|
#
|
||||||
# Mark now build in AutoGen Phase
|
# Mark now build in AutoGen Phase
|
||||||
#
|
#
|
||||||
|
#
|
||||||
|
# Collect Platform Guids to support Guid name in Fdfparser.
|
||||||
|
#
|
||||||
|
self.CollectPlatformGuids()
|
||||||
GlobalData.gAutoGenPhase = True
|
GlobalData.gAutoGenPhase = True
|
||||||
self.ProcessModuleFromPdf()
|
self.ProcessModuleFromPdf()
|
||||||
self.ProcessPcdType()
|
self.ProcessPcdType()
|
||||||
|
@ -153,6 +157,26 @@ class WorkspaceAutoGen(AutoGen):
|
||||||
EdkLogger.error("build", PARAMETER_INVALID,
|
EdkLogger.error("build", PARAMETER_INVALID,
|
||||||
ExtraData="Build target [%s] is not supported by the platform. [Valid target: %s]"
|
ExtraData="Build target [%s] is not supported by the platform. [Valid target: %s]"
|
||||||
% (self.BuildTarget, " ".join(self.Platform.BuildTargets)))
|
% (self.BuildTarget, " ".join(self.Platform.BuildTargets)))
|
||||||
|
|
||||||
|
def CollectPlatformGuids(self):
|
||||||
|
oriInfList = []
|
||||||
|
oriPkgSet = set()
|
||||||
|
PlatformPkg = set()
|
||||||
|
for Arch in self.ArchList:
|
||||||
|
Platform = self.BuildDatabase[self.MetaFile, Arch, self.BuildTarget, self.ToolChain]
|
||||||
|
oriInfList = Platform.Modules
|
||||||
|
for ModuleFile in oriInfList:
|
||||||
|
ModuleData = self.BuildDatabase[ModuleFile, Platform._Arch, Platform._Target, Platform._Toolchain]
|
||||||
|
oriPkgSet.update(ModuleData.Packages)
|
||||||
|
for Pkg in oriPkgSet:
|
||||||
|
Guids = Pkg.Guids
|
||||||
|
GlobalData.gGuidDict.update(Guids)
|
||||||
|
if Platform.Packages:
|
||||||
|
PlatformPkg.update(Platform.Packages)
|
||||||
|
for Pkg in PlatformPkg:
|
||||||
|
Guids = Pkg.Guids
|
||||||
|
GlobalData.gGuidDict.update(Guids)
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def FdfProfile(self):
|
def FdfProfile(self):
|
||||||
if not self.FdfFile:
|
if not self.FdfFile:
|
||||||
|
|
|
@ -29,6 +29,7 @@ gProcessingFile = ''
|
||||||
gBuildingModule = ''
|
gBuildingModule = ''
|
||||||
gSkuids = []
|
gSkuids = []
|
||||||
gDefaultStores = []
|
gDefaultStores = []
|
||||||
|
gGuidDict = {}
|
||||||
|
|
||||||
# definition for a MACRO name. used to create regular expressions below.
|
# definition for a MACRO name. used to create regular expressions below.
|
||||||
_MacroNamePattern = "[A-Z][A-Z0-9_]*"
|
_MacroNamePattern = "[A-Z][A-Z0-9_]*"
|
||||||
|
|
|
@ -18,7 +18,7 @@ from uuid import UUID
|
||||||
|
|
||||||
from Common.BuildToolError import *
|
from Common.BuildToolError import *
|
||||||
from Common import EdkLogger
|
from Common import EdkLogger
|
||||||
from Common.Misc import PathClass, tdict, ProcessDuplicatedInf
|
from Common.Misc import PathClass, tdict, ProcessDuplicatedInf, GuidStructureStringToGuidString
|
||||||
from Common.StringUtils import NormPath, ReplaceMacro
|
from Common.StringUtils import NormPath, ReplaceMacro
|
||||||
from Common import GlobalData
|
from Common import GlobalData
|
||||||
from Common.Expression import *
|
from Common.Expression import *
|
||||||
|
@ -1087,6 +1087,8 @@ class FdfParser:
|
||||||
return False
|
return False
|
||||||
if GlobalData.gGuidPattern.match(self._Token) is not None:
|
if GlobalData.gGuidPattern.match(self._Token) is not None:
|
||||||
return True
|
return True
|
||||||
|
elif self._Token in GlobalData.gGuidDict:
|
||||||
|
return True
|
||||||
else:
|
else:
|
||||||
self._UndoToken()
|
self._UndoToken()
|
||||||
return False
|
return False
|
||||||
|
@ -2248,6 +2250,8 @@ class FdfParser:
|
||||||
|
|
||||||
if not self._GetNextGuid():
|
if not self._GetNextGuid():
|
||||||
raise Warning.Expected("GUID value", self.FileName, self.CurrentLineNumber)
|
raise Warning.Expected("GUID value", self.FileName, self.CurrentLineNumber)
|
||||||
|
if self._Token in GlobalData.gGuidDict:
|
||||||
|
self._Token = GuidStructureStringToGuidString(GlobalData.gGuidDict[self._Token]).upper()
|
||||||
|
|
||||||
FvObj.FvNameGuid = self._Token
|
FvObj.FvNameGuid = self._Token
|
||||||
|
|
||||||
|
@ -2459,6 +2463,8 @@ class FdfParser:
|
||||||
raise Warning.ExpectedEquals(self.FileName, self.CurrentLineNumber)
|
raise Warning.ExpectedEquals(self.FileName, self.CurrentLineNumber)
|
||||||
if not self._GetNextGuid():
|
if not self._GetNextGuid():
|
||||||
raise Warning.Expected("GUID value", self.FileName, self.CurrentLineNumber)
|
raise Warning.Expected("GUID value", self.FileName, self.CurrentLineNumber)
|
||||||
|
if self._Token in GlobalData.gGuidDict:
|
||||||
|
self._Token = GuidStructureStringToGuidString(GlobalData.gGuidDict[self._Token]).upper()
|
||||||
FfsInfObj.OverrideGuid = self._Token
|
FfsInfObj.OverrideGuid = self._Token
|
||||||
|
|
||||||
if self._IsKeyword("RuleOverride"):
|
if self._IsKeyword("RuleOverride"):
|
||||||
|
@ -2550,6 +2556,8 @@ class FdfParser:
|
||||||
raise Warning.Expected("')'", self.FileName, self.CurrentLineNumber)
|
raise Warning.Expected("')'", self.FileName, self.CurrentLineNumber)
|
||||||
self._Token = 'PCD('+PcdPair[1]+TAB_SPLIT+PcdPair[0]+')'
|
self._Token = 'PCD('+PcdPair[1]+TAB_SPLIT+PcdPair[0]+')'
|
||||||
|
|
||||||
|
if self._Token in GlobalData.gGuidDict:
|
||||||
|
self._Token = GuidStructureStringToGuidString(GlobalData.gGuidDict[self._Token]).upper()
|
||||||
FfsFileObj.NameGuid = self._Token
|
FfsFileObj.NameGuid = self._Token
|
||||||
|
|
||||||
self._GetFilePart(FfsFileObj)
|
self._GetFilePart(FfsFileObj)
|
||||||
|
@ -2980,6 +2988,8 @@ class FdfParser:
|
||||||
elif self._IsKeyword("GUIDED"):
|
elif self._IsKeyword("GUIDED"):
|
||||||
GuidValue = None
|
GuidValue = None
|
||||||
if self._GetNextGuid():
|
if self._GetNextGuid():
|
||||||
|
if self._Token in GlobalData.gGuidDict:
|
||||||
|
self._Token = GuidStructureStringToGuidString(GlobalData.gGuidDict[self._Token]).upper()
|
||||||
GuidValue = self._Token
|
GuidValue = self._Token
|
||||||
|
|
||||||
AttribDict = self._GetGuidAttrib()
|
AttribDict = self._GetGuidAttrib()
|
||||||
|
@ -4049,6 +4059,8 @@ class FdfParser:
|
||||||
elif self._IsKeyword("GUIDED"):
|
elif self._IsKeyword("GUIDED"):
|
||||||
GuidValue = None
|
GuidValue = None
|
||||||
if self._GetNextGuid():
|
if self._GetNextGuid():
|
||||||
|
if self._Token in GlobalData.gGuidDict:
|
||||||
|
self._Token = GuidStructureStringToGuidString(GlobalData.gGuidDict[self._Token]).upper()
|
||||||
GuidValue = self._Token
|
GuidValue = self._Token
|
||||||
|
|
||||||
if self._IsKeyword("$(NAMED_GUID)"):
|
if self._IsKeyword("$(NAMED_GUID)"):
|
||||||
|
|
Loading…
Reference in New Issue