self._VpdToolGuid = None\r
self._MacroDict = None\r
self.DefaultStores = None\r
+ self.UsedStructurePcd = None\r
\r
## handle Override Path of Module\r
def _HandleOverridePath(self):\r
else:\r
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}\r
S_pcd_set[Pcd] = str_pcd_obj_str\r
+ self.FilterStrcturePcd(S_pcd_set)\r
if S_pcd_set:\r
GlobalData.gStructurePcd[self.Arch] = S_pcd_set\r
for stru_pcd in S_pcd_set.values():\r
\r
map(self.FilterSkuSettings, [Pcds[pcdkey] for pcdkey in Pcds if Pcds[pcdkey].Type in DynamicPcdType])\r
return Pcds\r
+ #Filter the StrucutrePcd that is not used by any module in dsc file and fdf file.\r
+ def FilterStrcturePcd(self, S_pcd_set):\r
+ if not self.UsedStructurePcd:\r
+ FdfInfList = []\r
+ if GlobalData.gFdfParser:\r
+ FdfInfList = GlobalData.gFdfParser.Profile.InfList\r
+ FdfModuleList = [PathClass(NormPath(Inf), GlobalData.gWorkspace, Arch=self._Arch) for Inf in FdfInfList]\r
+ AllModulePcds = set()\r
+ ModuleSet = set(self._Modules.keys() + self.LibraryInstances + FdfModuleList)\r
+ for ModuleFile in ModuleSet:\r
+ ModuleData = self._Bdb[ModuleFile, self._Arch, self._Target, self._Toolchain]\r
+ AllModulePcds = AllModulePcds | set(ModuleData.Pcds.keys())\r
+\r
+ self.UsedStructurePcd = AllModulePcds\r
+ UnusedStruPcds = set(S_pcd_set.keys()) - self.UsedStructurePcd\r
+ for (Token, TokenSpaceGuid) in UnusedStruPcds:\r
+ del S_pcd_set[(Token, TokenSpaceGuid)]\r
\r
## Retrieve non-dynamic PCD settings\r
#\r