BaseTools: Fix the bug for Pcd used in command line's override

V2: remove the not used parameter i

Fix the bug for Pcd used in command line not override the Pcd used
in the [component] driver's sub-section.

Case:
DSC file:
[PcdsFixedAtBuild]
TokenSpaceGuid.PcdTest

[Components]
 TestPkg/TestDriver.inf {
  <PcdsFixedAtBuild>
  TokenSpaceGuid.PcdTest|"b"
  }

build command with --pcd TokenSpaceGuid.PcdTest="AAAABB"

Then we found the Pcd value in the AutoGen.c file is incorrect,
because of the incorrect logic that use the pcd in the [component]
section to re-override it.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Yonghong Zhu <yonghong.zhu@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
Yonghong Zhu 2018-10-24 14:46:09 +08:00
parent 8411c9d5c4
commit 5d54ab94db
2 changed files with 12 additions and 0 deletions

View File

@ -2120,6 +2120,13 @@ class PlatformAutoGen(AutoGen):
if Module in self.Platform.Modules: if Module in self.Platform.Modules:
PlatformModule = self.Platform.Modules[str(Module)] PlatformModule = self.Platform.Modules[str(Module)]
for Key in PlatformModule.Pcds: for Key in PlatformModule.Pcds:
if GlobalData.BuildOptionPcd:
for pcd in GlobalData.BuildOptionPcd:
(TokenSpaceGuidCName, TokenCName, FieldName, pcdvalue, _) = pcd
if (TokenCName, TokenSpaceGuidCName) == Key and FieldName =="":
PlatformModule.Pcds[Key].DefaultValue = pcdvalue
PlatformModule.Pcds[Key].PcdValueFromComm = pcdvalue
break
Flag = False Flag = False
if Key in Pcds: if Key in Pcds:
ToPcd = Pcds[Key] ToPcd = Pcds[Key]

View File

@ -1067,7 +1067,12 @@ class DscBuildData(PlatformBuildClassObject):
EdkLogger.error("build", FORMAT_INVALID, Cause, ExtraData="%s.%s" % (TokenSpaceGuidCName, TokenCName)) EdkLogger.error("build", FORMAT_INVALID, Cause, ExtraData="%s.%s" % (TokenSpaceGuidCName, TokenCName))
GlobalData.BuildOptionPcd[i] = (TokenSpaceGuidCName, TokenCName, FieldName, pcdvalue, ("build command options", 1)) GlobalData.BuildOptionPcd[i] = (TokenSpaceGuidCName, TokenCName, FieldName, pcdvalue, ("build command options", 1))
if GlobalData.BuildOptionPcd:
for pcd in GlobalData.BuildOptionPcd:
(TokenSpaceGuidCName, TokenCName, FieldName, pcdvalue, _) = pcd
for BuildData in self._Bdb._CACHE_.values(): for BuildData in self._Bdb._CACHE_.values():
if BuildData.Arch != self.Arch:
continue
if BuildData.MetaFile.Ext == '.dec' or BuildData.MetaFile.Ext == '.dsc': if BuildData.MetaFile.Ext == '.dec' or BuildData.MetaFile.Ext == '.dsc':
continue continue
for key in BuildData.Pcds: for key in BuildData.Pcds: