From 09af9bd9be2d3e31bba979f8cf6446017b0b863e Mon Sep 17 00:00:00 2001 From: Bob Feng Date: Wed, 4 Nov 2020 11:01:39 +0800 Subject: BaseTools: Enable Module Scope Structure Pcd REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2648 This patch is to enable the Module scoped Structure Pcd usage. User can set structure pcd field value in module scope. For example, under the [components] section of a dsc file, user can override some field value for a specific module. Package/Module.inf{ gUefiTokenSpaceGuid.StructurePcdModule.FieldName | 5 } Signed-off-by: Bob Feng Cc: Liming Gao Cc: Yuwei Chen Tested-by: Liming Gao Acked-by: Liming Gao --- BaseTools/Source/Python/AutoGen/DataPipe.py | 5 +++-- BaseTools/Source/Python/AutoGen/ModuleAutoGen.py | 4 ++-- BaseTools/Source/Python/AutoGen/ModuleAutoGenHelper.py | 10 +++++++--- BaseTools/Source/Python/AutoGen/PlatformAutoGen.py | 8 +++++++- 4 files changed, 19 insertions(+), 8 deletions(-) (limited to 'BaseTools/Source/Python/AutoGen') diff --git a/BaseTools/Source/Python/AutoGen/DataPipe.py b/BaseTools/Source/Python/AutoGen/DataPipe.py index 50403fb..86ac2b9 100755 --- a/BaseTools/Source/Python/AutoGen/DataPipe.py +++ b/BaseTools/Source/Python/AutoGen/DataPipe.py @@ -72,9 +72,10 @@ class MemoryDataPipe(DataPipe): #Platform Module Pcds ModulePcds = {} for m in PlatformInfo.Platform.Modules: - m_pcds = PlatformInfo.Platform.Modules[m].Pcds + module = PlatformInfo.Platform.Modules[m] + m_pcds = module.Pcds if m_pcds: - ModulePcds[(m.File,m.Root,m.Arch)] = [PCD_DATA( + ModulePcds[module.Guid] = [PCD_DATA( pcd.TokenCName,pcd.TokenSpaceGuidCName,pcd.Type, pcd.DatumType,pcd.SkuInfoList,pcd.DefaultValue, pcd.MaxDatumSize,pcd.UserDefinedDefaultStoresFlag,pcd.validateranges, diff --git a/BaseTools/Source/Python/AutoGen/ModuleAutoGen.py b/BaseTools/Source/Python/AutoGen/ModuleAutoGen.py index eebf6e8..d70b0d7 100755 --- a/BaseTools/Source/Python/AutoGen/ModuleAutoGen.py +++ b/BaseTools/Source/Python/AutoGen/ModuleAutoGen.py @@ -1032,7 +1032,7 @@ class ModuleAutoGen(AutoGen): @cached_property def ModulePcdList(self): # apply PCD settings from platform - RetVal = self.PlatformInfo.ApplyPcdSetting(self.Module, self.Module.Pcds) + RetVal = self.PlatformInfo.ApplyPcdSetting(self, self.Module.Pcds) return RetVal @cached_property @@ -1063,7 +1063,7 @@ class ModuleAutoGen(AutoGen): continue Pcds.add(Key) PcdsInLibrary[Key] = copy.copy(Library.Pcds[Key]) - RetVal.extend(self.PlatformInfo.ApplyPcdSetting(self.Module, PcdsInLibrary, Library=Library)) + RetVal.extend(self.PlatformInfo.ApplyPcdSetting(self, PcdsInLibrary, Library=Library)) return RetVal ## Get the GUID value mapping diff --git a/BaseTools/Source/Python/AutoGen/ModuleAutoGenHelper.py b/BaseTools/Source/Python/AutoGen/ModuleAutoGenHelper.py index 9dd93b9..8e60643 100644 --- a/BaseTools/Source/Python/AutoGen/ModuleAutoGenHelper.py +++ b/BaseTools/Source/Python/AutoGen/ModuleAutoGenHelper.py @@ -479,8 +479,9 @@ class PlatformInfo(AutoGenInfo): SkuName : SkuInfoClass(SkuName, self.Platform.SkuIds[SkuName][0], '', '', '', '', '', ToPcd.DefaultValue) } - def ApplyPcdSetting(self, Module, Pcds, Library=""): + def ApplyPcdSetting(self, Ma, Pcds, Library=""): # for each PCD in module + Module=Ma.Module for Name, Guid in Pcds: PcdInModule = Pcds[Name, Guid] # find out the PCD setting in platform @@ -507,9 +508,12 @@ class PlatformInfo(AutoGenInfo): ) # override PCD settings with module specific setting + ModuleScopePcds = self.DataPipe.Get("MOL_PCDS") if Module in self.Platform.Modules: PlatformModule = self.Platform.Modules[str(Module)] - for Key in PlatformModule.Pcds: + PCD_DATA = ModuleScopePcds.get(Ma.Guid,{}) + mPcds = {(pcd.TokenCName,pcd.TokenSpaceGuidCName): pcd for pcd in PCD_DATA} + for Key in mPcds: if self.BuildOptionPcd: for pcd in self.BuildOptionPcd: (TokenSpaceGuidCName, TokenCName, FieldName, pcdvalue, _) = pcd @@ -528,7 +532,7 @@ class PlatformInfo(AutoGenInfo): Flag = True break if Flag: - self._OverridePcd(ToPcd, PlatformModule.Pcds[Key], Module, Msg="DSC Components Module scoped PCD section", Library=Library) + self._OverridePcd(ToPcd, mPcds[Key], Module, Msg="DSC Components Module scoped PCD section", Library=Library) # use PCD value to calculate the MaxDatumSize when it is not specified for Name, Guid in Pcds: Pcd = Pcds[Name, Guid] diff --git a/BaseTools/Source/Python/AutoGen/PlatformAutoGen.py b/BaseTools/Source/Python/AutoGen/PlatformAutoGen.py index 26ab8e7..c001828 100644 --- a/BaseTools/Source/Python/AutoGen/PlatformAutoGen.py +++ b/BaseTools/Source/Python/AutoGen/PlatformAutoGen.py @@ -1043,7 +1043,13 @@ class PlatformAutoGen(AutoGen): @cached_property def _MbList(self): - return [self.BuildDatabase[m, self.Arch, self.BuildTarget, self.ToolChain] for m in self.Platform.Modules] + ModuleList = [] + for m in self.Platform.Modules: + component = self.Platform.Modules[m] + module = self.BuildDatabase[m, self.Arch, self.BuildTarget, self.ToolChain] + module.Guid = component.Guid + ModuleList.append(module) + return ModuleList @cached_property def _MaList(self): -- cgit v1.1