BaseTool: Filter out unused structure pcds
V2: Fixed the issue that V1 adds new check to the Pcds in the platform unused library INF files. It breaks the existing platform. V1? The current code handle all the structure pcds even if there is no module or library use them. This patch is going to filter out the unused structure pcds. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Bob Feng <bob.c.feng@intel.com> Cc: Liming Gao <liming.gao@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
@ -1493,6 +1493,7 @@ class DscBuildData(PlatformBuildClassObject):
|
||||
else:
|
||||
str_pcd_obj_str.DefaultFromDSC = {skuname:{defaultstore: str_pcd_obj.SkuInfoList[skuname].DefaultStoreDict.get(defaultstore, str_pcd_obj.SkuInfoList[skuname].DefaultValue) for defaultstore in DefaultStores} for skuname in str_pcd_obj.SkuInfoList}
|
||||
S_pcd_set[Pcd] = str_pcd_obj_str
|
||||
self.FilterStrcturePcd(S_pcd_set)
|
||||
if S_pcd_set:
|
||||
GlobalData.gStructurePcd[self.Arch] = S_pcd_set
|
||||
for stru_pcd in S_pcd_set.values():
|
||||
@ -1588,6 +1589,27 @@ class DscBuildData(PlatformBuildClassObject):
|
||||
|
||||
map(self.FilterSkuSettings, [Pcds[pcdkey] for pcdkey in Pcds if Pcds[pcdkey].Type in DynamicPcdType])
|
||||
return Pcds
|
||||
@cached_property
|
||||
def PlatformUsedPcds(self):
|
||||
FdfInfList = []
|
||||
if GlobalData.gFdfParser:
|
||||
FdfInfList = GlobalData.gFdfParser.Profile.InfList
|
||||
FdfModuleList = [PathClass(NormPath(Inf), GlobalData.gWorkspace, Arch=self._Arch) for Inf in FdfInfList]
|
||||
AllModulePcds = set()
|
||||
ModuleSet = set(self._Modules.keys() + FdfModuleList)
|
||||
for ModuleFile in ModuleSet:
|
||||
ModuleData = self._Bdb[ModuleFile, self._Arch, self._Target, self._Toolchain]
|
||||
AllModulePcds = AllModulePcds | ModuleData.PcdsName
|
||||
for ModuleFile in self.LibraryInstances:
|
||||
ModuleData = self._Bdb.CreateBuildObject(ModuleFile, self._Arch, self._Target, self._Toolchain)
|
||||
AllModulePcds = AllModulePcds | ModuleData.PcdsName
|
||||
return AllModulePcds
|
||||
|
||||
#Filter the StrucutrePcd that is not used by any module in dsc file and fdf file.
|
||||
def FilterStrcturePcd(self, S_pcd_set):
|
||||
UnusedStruPcds = set(S_pcd_set.keys()) - self.PlatformUsedPcds
|
||||
for (Token, TokenSpaceGuid) in UnusedStruPcds:
|
||||
del S_pcd_set[(Token, TokenSpaceGuid)]
|
||||
|
||||
## Retrieve non-dynamic PCD settings
|
||||
#
|
||||
|
Reference in New Issue
Block a user