diff --git a/BaseTools/Source/Python/AutoGen/AutoGenWorker.py b/BaseTools/Source/Python/AutoGen/AutoGenWorker.py index eea15239d4..0ba2339bed 100755 --- a/BaseTools/Source/Python/AutoGen/AutoGenWorker.py +++ b/BaseTools/Source/Python/AutoGen/AutoGenWorker.py @@ -216,6 +216,7 @@ class AutoGenWorkerInProcess(mp.Process): GlobalData.gModuleHashFile = dict() GlobalData.gFileHashDict = dict() GlobalData.gEnableGenfdsMultiThread = self.data_pipe.Get("EnableGenfdsMultiThread") + GlobalData.gPlatformFinalPcds = self.data_pipe.Get("gPlatformFinalPcds") GlobalData.file_lock = self.file_lock CommandTarget = self.data_pipe.Get("CommandTarget") pcd_from_build_option = [] diff --git a/BaseTools/Source/Python/AutoGen/DataPipe.py b/BaseTools/Source/Python/AutoGen/DataPipe.py index 41af343f62..848c7a8296 100755 --- a/BaseTools/Source/Python/AutoGen/DataPipe.py +++ b/BaseTools/Source/Python/AutoGen/DataPipe.py @@ -169,3 +169,5 @@ class MemoryDataPipe(DataPipe): self.DataContainer = {"BinCacheDest":GlobalData.gBinCacheDest} self.DataContainer = {"EnableGenfdsMultiThread":GlobalData.gEnableGenfdsMultiThread} + + self.DataContainer = {"gPlatformFinalPcds":GlobalData.gPlatformFinalPcds} diff --git a/BaseTools/Source/Python/Workspace/DscBuildData.py b/BaseTools/Source/Python/Workspace/DscBuildData.py index fc1e773417..a9fdc5cafa 100644 --- a/BaseTools/Source/Python/Workspace/DscBuildData.py +++ b/BaseTools/Source/Python/Workspace/DscBuildData.py @@ -976,6 +976,7 @@ class DscBuildData(PlatformBuildClassObject): if (TokenSpaceGuid + '.' + PcdCName) in GlobalData.gPlatformPcds: if GlobalData.gPlatformPcds[TokenSpaceGuid + '.' + PcdCName] != ValueList[Index]: GlobalData.gPlatformPcds[TokenSpaceGuid + '.' + PcdCName] = ValueList[Index] + GlobalData.gPlatformFinalPcds[TokenSpaceGuid + '.' + PcdCName] = ValueList[Index] return ValueList def _FilterPcdBySkuUsage(self, Pcds): diff --git a/BaseTools/Source/Python/Workspace/InfBuildData.py b/BaseTools/Source/Python/Workspace/InfBuildData.py index cd23065b0c..5b9b3d7b4f 100644 --- a/BaseTools/Source/Python/Workspace/InfBuildData.py +++ b/BaseTools/Source/Python/Workspace/InfBuildData.py @@ -1054,17 +1054,20 @@ class InfBuildData(ModuleBuildClassObject): return True return False def CheckFeatureFlagPcd(self,Instance): - Pcds = {} - if GlobalData.gPlatformFinalPcds.get(self.Arch): - Pcds = GlobalData.gPlatformFinalPcds[self.Arch].copy() + Pcds = GlobalData.gPlatformFinalPcds.copy() if PcdPattern.search(Instance): PcdTuple = tuple(Instance.split('.')[::-1]) if PcdTuple in self.Pcds: - if not (self.Pcds[PcdTuple].Type == 'FeatureFlag' or self.Pcds[PcdTuple].Type == 'FixedAtBuild') and Instance not in Pcds: + if not (self.Pcds[PcdTuple].Type == 'FeatureFlag' or self.Pcds[PcdTuple].Type == 'FixedAtBuild'): EdkLogger.error('build', FORMAT_INVALID, - "\nit must be defined in a [PcdsFeatureFlag] or [PcdsFixedAtBuild] section of Dsc or Dec file or [FeaturePcd] or [FixedPcd] of Inf file", + "\nFeatureFlagPcd must be defined in a [PcdsFeatureFlag] or [PcdsFixedAtBuild] section of Dsc or Dec file", File=str(self), ExtraData=Instance) - Pcds[Instance] = self.Pcds[PcdTuple].DefaultValue + if not Instance in Pcds: + Pcds[Instance] = self.Pcds[PcdTuple].DefaultValue + else: #if PcdTuple not in self.Pcds: + EdkLogger.error('build', FORMAT_INVALID, + "\nFeatureFlagPcd must be defined in [FeaturePcd] or [FixedPcd] of Inf file", + File=str(self), ExtraData=Instance) if Instance in Pcds: if Pcds[Instance] == '0': return False diff --git a/BaseTools/Source/Python/Workspace/WorkspaceCommon.py b/BaseTools/Source/Python/Workspace/WorkspaceCommon.py index 6564a34ba7..53027a0e30 100644 --- a/BaseTools/Source/Python/Workspace/WorkspaceCommon.py +++ b/BaseTools/Source/Python/Workspace/WorkspaceCommon.py @@ -75,11 +75,6 @@ def GetDeclaredPcd(Platform, BuildDatabase, Arch, Target, Toolchain, additionalP break if (PcdCName, PcdTokenName) not in DecPcds: DecPcds[PcdCName, PcdTokenName] = Pkg.Pcds[Pcd] - if not GlobalData.gPlatformFinalPcds.get(Arch): - GlobalData.gPlatformFinalPcds[Arch] = OrderedDict() - for Name,Guid in DecPcds: - if DecPcds[Name,Guid].Type == 'FeatureFlag' or DecPcds[Name, Guid].Type == 'FixedAtBuild': - GlobalData.gPlatformFinalPcds[Arch]['%s.%s'%(Guid, Name)]=DecPcds[Name, Guid].DefaultValue return DecPcds, GuidDict ## Get all dependent libraries for a module