Re: [edk2] [PATCH] BaseTools: pcd in commandLine.
The patch's subject is too generic. Best Regards, Zhu Yonghong -Original Message- From: Zhao, ZhiqiangX Sent: Wednesday, September 12, 2018 9:41 AM To: edk2-devel@lists.01.org Cc: Zhao, ZhiqiangX ; Gao, Liming ; Zhu, Yonghong ; Feng, Bob C Subject: [PATCH] BaseTools: pcd in commandLine. In command line, the latter full assign value in commandLine should override the former field assign value. For example, --pcd Token.pcd.field="" --pcd Token.pcd=H"{}". Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: ZhiqiangX Zhao Cc: Liming Gao Cc: Yonghong Zhu Cc: Bob Feng --- BaseTools/Source/Python/Workspace/DscBuildData.py | 17 + BaseTools/Source/Python/build/BuildReport.py | 20 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/BaseTools/Source/Python/Workspace/DscBuildData.py b/BaseTools/Source/Python/Workspace/DscBuildData.py index aaef404772..74cb135bbd 100644 --- a/BaseTools/Source/Python/Workspace/DscBuildData.py +++ b/BaseTools/Source/Python/Workspace/DscBuildData.py @@ -1032,6 +1032,23 @@ class DscBuildData(PlatformBuildClassObject): PcdItem = BuildData.Pcds[key] if (TokenSpaceGuidCName, TokenCName) == (PcdItem.TokenSpaceGuidCName, PcdItem.TokenCName) and FieldName =="": PcdItem.DefaultValue = pcdvalue +#In command line, the latter full assign value in commandLine should override the former field assign value. +#For example, --pcd Token.pcd.field="" --pcd Token.pcd=H"{}" +delete_assign = [] +field_assign = {} +if GlobalData.BuildOptionPcd: +for pcdTuple in GlobalData.BuildOptionPcd: +TokenSpaceGuid, Token, Field = pcdTuple[0], pcdTuple[1], pcdTuple[2] +if Field: +if (TokenSpaceGuid, Token) not in field_assign: +field_assign[TokenSpaceGuid, Token] = [] +field_assign[TokenSpaceGuid, Token].append(pcdTuple) +else: +if (TokenSpaceGuid, Token) in field_assign: +delete_assign.extend(field_assign[TokenSpaceGuid, Token]) +field_assign[TokenSpaceGuid, Token] = [] +for item in delete_assign: +GlobalData.BuildOptionPcd.remove(item) @staticmethod def HandleFlexiblePcd(TokenSpaceGuidCName, TokenCName, PcdValue, PcdDatumType, GuidDict, FieldName=''): diff --git a/BaseTools/Source/Python/build/BuildReport.py b/BaseTools/Source/Python/build/BuildReport.py index a598d64244..3886a7a55e 100644 --- a/BaseTools/Source/Python/build/BuildReport.py +++ b/BaseTools/Source/Python/build/BuildReport.py @@ -982,12 +982,16 @@ class PcdReport(object): PcdValue = DecDefaultValue if DscDefaultValue: PcdValue = DscDefaultValue -Pcd.DefaultValue = PcdValue +#The DefaultValue of StructurePcd already be the latest, no need to update. +if not self.IsStructurePcd(Pcd.TokenCName, Pcd.TokenSpaceGuidCName): +Pcd.DefaultValue = PcdValue if ModulePcdSet is not None: if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type) not in ModulePcdSet: continue InfDefaultValue, PcdValue = ModulePcdSet[Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type] -Pcd.DefaultValue = PcdValue +#The DefaultValue of StructurePcd already be the latest, no need to update. +if not self.IsStructurePcd(Pcd.TokenCName, Pcd.TokenSpaceGuidCName): +Pcd.DefaultValue = PcdValue if InfDefaultValue: try: InfDefaultValue = ValueExpressionEx(InfDefaultValue, Pcd.DatumType, self._GuidDict)(True) @@ -1003,7 +1007,9 @@ class PcdReport(object): if pcd[2]: continue PcdValue = pcd[3] -Pcd.DefaultValue = PcdValue +#The DefaultValue of StructurePcd already be the latest, no need to update. +if not self.IsStructurePcd(Pcd.TokenCName, Pcd.TokenSpaceGuidCName): +Pcd.DefaultValue = PcdValue BuildOptionMatch = True break @@ -1050,7 +1056,7 @@ class PcdReport(object): DscMatch = (DscDefaultValue.strip() == PcdValue.strip()) IsStructure = False -if GlobalData.gStructurePcd and (self.Arch in GlobalData.gStructurePcd) and ((Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in GlobalData.gStructurePcd[self.Arch]): +if self.IsStructurePcd(Pcd.TokenCName,
[edk2] [PATCH] BaseTools: pcd in commandLine.
In command line, the latter full assign value in commandLine should override the former field assign value. For example, --pcd Token.pcd.field="" --pcd Token.pcd=H"{}". Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: ZhiqiangX Zhao Cc: Liming Gao Cc: Yonghong Zhu Cc: Bob Feng --- BaseTools/Source/Python/Workspace/DscBuildData.py | 17 + BaseTools/Source/Python/build/BuildReport.py | 20 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/BaseTools/Source/Python/Workspace/DscBuildData.py b/BaseTools/Source/Python/Workspace/DscBuildData.py index aaef404772..74cb135bbd 100644 --- a/BaseTools/Source/Python/Workspace/DscBuildData.py +++ b/BaseTools/Source/Python/Workspace/DscBuildData.py @@ -1032,6 +1032,23 @@ class DscBuildData(PlatformBuildClassObject): PcdItem = BuildData.Pcds[key] if (TokenSpaceGuidCName, TokenCName) == (PcdItem.TokenSpaceGuidCName, PcdItem.TokenCName) and FieldName =="": PcdItem.DefaultValue = pcdvalue +#In command line, the latter full assign value in commandLine should override the former field assign value. +#For example, --pcd Token.pcd.field="" --pcd Token.pcd=H"{}" +delete_assign = [] +field_assign = {} +if GlobalData.BuildOptionPcd: +for pcdTuple in GlobalData.BuildOptionPcd: +TokenSpaceGuid, Token, Field = pcdTuple[0], pcdTuple[1], pcdTuple[2] +if Field: +if (TokenSpaceGuid, Token) not in field_assign: +field_assign[TokenSpaceGuid, Token] = [] +field_assign[TokenSpaceGuid, Token].append(pcdTuple) +else: +if (TokenSpaceGuid, Token) in field_assign: +delete_assign.extend(field_assign[TokenSpaceGuid, Token]) +field_assign[TokenSpaceGuid, Token] = [] +for item in delete_assign: +GlobalData.BuildOptionPcd.remove(item) @staticmethod def HandleFlexiblePcd(TokenSpaceGuidCName, TokenCName, PcdValue, PcdDatumType, GuidDict, FieldName=''): diff --git a/BaseTools/Source/Python/build/BuildReport.py b/BaseTools/Source/Python/build/BuildReport.py index a598d64244..3886a7a55e 100644 --- a/BaseTools/Source/Python/build/BuildReport.py +++ b/BaseTools/Source/Python/build/BuildReport.py @@ -982,12 +982,16 @@ class PcdReport(object): PcdValue = DecDefaultValue if DscDefaultValue: PcdValue = DscDefaultValue -Pcd.DefaultValue = PcdValue +#The DefaultValue of StructurePcd already be the latest, no need to update. +if not self.IsStructurePcd(Pcd.TokenCName, Pcd.TokenSpaceGuidCName): +Pcd.DefaultValue = PcdValue if ModulePcdSet is not None: if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type) not in ModulePcdSet: continue InfDefaultValue, PcdValue = ModulePcdSet[Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type] -Pcd.DefaultValue = PcdValue +#The DefaultValue of StructurePcd already be the latest, no need to update. +if not self.IsStructurePcd(Pcd.TokenCName, Pcd.TokenSpaceGuidCName): +Pcd.DefaultValue = PcdValue if InfDefaultValue: try: InfDefaultValue = ValueExpressionEx(InfDefaultValue, Pcd.DatumType, self._GuidDict)(True) @@ -1003,7 +1007,9 @@ class PcdReport(object): if pcd[2]: continue PcdValue = pcd[3] -Pcd.DefaultValue = PcdValue +#The DefaultValue of StructurePcd already be the latest, no need to update. +if not self.IsStructurePcd(Pcd.TokenCName, Pcd.TokenSpaceGuidCName): +Pcd.DefaultValue = PcdValue BuildOptionMatch = True break @@ -1050,7 +1056,7 @@ class PcdReport(object): DscMatch = (DscDefaultValue.strip() == PcdValue.strip()) IsStructure = False -if GlobalData.gStructurePcd and (self.Arch in GlobalData.gStructurePcd) and ((Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in GlobalData.gStructurePcd[self.Arch]): +if self.IsStructurePcd(Pcd.TokenCName, Pcd.TokenSpaceGuidCName): IsStructure = True if TypeName in ('DYNVPD', 'DEXVPD'): SkuInfoList = Pcd.SkuInfoList @@ -1413,6 +1419,12 @@ class PcdReport(object): else: return value +def IsStructurePcd(self, PcdToken,