From 622b17582e7928d6938ab421848313c3976a368a Mon Sep 17 00:00:00 2001 From: Yonghong Zhu Date: Wed, 3 Aug 2016 17:09:18 +0800 Subject: [PATCH] BaseTools: Fix the bug when use FILE_GUID override the module in DSC In last commit 2502b73, it doesn't cover the case that in the DSC file use FILE_GUID to override the module. Cc: Liming Gao Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Yonghong Zhu Reviewed-by: Liming Gao --- BaseTools/Source/Python/AutoGen/AutoGen.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/BaseTools/Source/Python/AutoGen/AutoGen.py b/BaseTools/Source/Python/AutoGen/AutoGen.py index 921b979163..79bc7c6ced 100644 --- a/BaseTools/Source/Python/AutoGen/AutoGen.py +++ b/BaseTools/Source/Python/AutoGen/AutoGen.py @@ -330,15 +330,21 @@ class WorkspaceAutoGen(AutoGen): EdkLogger.error("build", OPTION_VALUE_INVALID, "No such an FV in FDF file: %s" % fvname) + # In DSC file may use FILE_GUID to override the module, then in the Platform.Modules use FILE_GUIDmodule.inf as key, + # but the path (self.MetaFile.Path) is the real path for key in self.FdfProfile.InfDict: if key == 'ArchTBD': Platform_cache = {} + MetaFile_cache = {} for Arch in self.ArchList: Platform_cache[Arch] = self.BuildDatabase[self.MetaFile, Arch, Target, Toolchain] + MetaFile_cache[Arch] = [] + for Pkey in Platform_cache[Arch].Modules.keys(): + MetaFile_cache[Arch].append(Platform_cache[Arch].Modules[Pkey].MetaFile) for Inf in self.FdfProfile.InfDict[key]: ModuleFile = PathClass(NormPath(Inf), GlobalData.gWorkspace, Arch) for Arch in self.ArchList: - if ModuleFile in Platform_cache[Arch].Modules: + if ModuleFile in MetaFile_cache[Arch]: break else: ModuleData = self.BuildDatabase[ModuleFile, Arch, Target, Toolchain] @@ -349,9 +355,12 @@ class WorkspaceAutoGen(AutoGen): for Arch in self.ArchList: if Arch == key: Platform = self.BuildDatabase[self.MetaFile, Arch, Target, Toolchain] + MetaFileList = [] + for Pkey in Platform.Modules.keys(): + MetaFileList.append(Platform.Modules[Pkey].MetaFile) for Inf in self.FdfProfile.InfDict[key]: ModuleFile = PathClass(NormPath(Inf), GlobalData.gWorkspace, Arch) - if ModuleFile in Platform.Modules: + if ModuleFile in MetaFileList: continue ModuleData = self.BuildDatabase[ModuleFile, Arch, Target, Toolchain] if not ModuleData.IsBinaryModule: -- 2.39.2