From 06140766c13fb9288a922990ffde77fca93fc71d Mon Sep 17 00:00:00 2001 From: "Feng, Bob C" Date: Wed, 28 Feb 2018 13:59:18 +0800 Subject: BaseTools: Fixed the pcd value override issue. 1. the issue in the overriding value from command line. 2. dec fully value < dec field assign value < dsc fully value < dsc field assign value Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Bob Feng Cc: Liming Gao Reviewed-by: Liming Gao --- BaseTools/Source/Python/Workspace/DscBuildData.py | 24 +++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) (limited to 'BaseTools/Source/Python/Workspace/DscBuildData.py') diff --git a/BaseTools/Source/Python/Workspace/DscBuildData.py b/BaseTools/Source/Python/Workspace/DscBuildData.py index 66402c52b7..007d9b7f15 100644 --- a/BaseTools/Source/Python/Workspace/DscBuildData.py +++ b/BaseTools/Source/Python/Workspace/DscBuildData.py @@ -895,12 +895,11 @@ class DscBuildData(PlatformBuildClassObject): if pcd[2] == "": pcdset.append((pcd[0],pcd[1],pcd[3])) else: - pcdobj = self._Pcds.get((pcd[1],pcd[0])) - if pcdobj: - pcdset.append((pcd[0],pcd[1], pcdobj.DefaultValue)) - else: + if (pcd[1],pcd[0]) not in self._Pcds: pcdvalue = pcd[3] if len(pcd) == 4 else pcd[2] pcdset.append((pcd[0],pcd[1],pcdvalue)) + #else: + # remove the settings from command line since it has been handled. GlobalData.BuildOptionPcd = pcdset def GetFieldValueFromComm(self,ValueStr,TokenSpaceGuidCName, TokenCName, FieldName): PredictedFieldType = "VOID*" @@ -1677,6 +1676,23 @@ class DscBuildData(PlatformBuildClassObject): # Assign field values in PCD # CApp = CApp + "// Default value in Dec \n" + DefaultValueFromDec = Pcd.DefaultValueFromDec + IsArray = self.IsFieldValueAnArray(Pcd.DefaultValueFromDec) + if IsArray: + try: + DefaultValueFromDec = ValueExpressionEx(Pcd.DefaultValueFromDec, "VOID*")(True) + except BadExpression: + EdkLogger.error("Build", FORMAT_INVALID, "Invalid value format for %s.%s, from DEC: %s" % + (Pcd.TokenSpaceGuidCName, Pcd.TokenCName, DefaultValueFromDec)) + Value, ValueSize = ParseFieldValue (DefaultValueFromDec) + if isinstance(Value, str): + CApp = CApp + ' Pcd = %s; // From DEC Default Value %s\n' % (Value, Pcd.DefaultValueFromDec) + elif IsArray: + # + # Use memcpy() to copy value into field + # + CApp = CApp + ' Value = %s; // From DEC Default Value %s\n' % (self.IntToCString(Value, ValueSize), Pcd.DefaultValueFromDec) + CApp = CApp + ' memcpy (Pcd, Value, %d);\n' % (ValueSize) for FieldList in [Pcd.DefaultValues]: if not FieldList: continue -- cgit v1.2.3