PcdItem = BuildData.Pcds[key]\r
if (TokenSpaceGuidCName, TokenCName) == (PcdItem.TokenSpaceGuidCName, PcdItem.TokenCName) and FieldName =="":\r
PcdItem.DefaultValue = pcdvalue\r
+ #In command line, the latter full assign value in commandLine should override the former field assign value.\r
+ #For example, --pcd Token.pcd.field="" --pcd Token.pcd=H"{}"\r
+ delete_assign = []\r
+ field_assign = {}\r
+ if GlobalData.BuildOptionPcd:\r
+ for pcdTuple in GlobalData.BuildOptionPcd:\r
+ TokenSpaceGuid, Token, Field = pcdTuple[0], pcdTuple[1], pcdTuple[2]\r
+ if Field:\r
+ if (TokenSpaceGuid, Token) not in field_assign:\r
+ field_assign[TokenSpaceGuid, Token] = []\r
+ field_assign[TokenSpaceGuid, Token].append(pcdTuple)\r
+ else:\r
+ if (TokenSpaceGuid, Token) in field_assign:\r
+ delete_assign.extend(field_assign[TokenSpaceGuid, Token])\r
+ field_assign[TokenSpaceGuid, Token] = []\r
+ for item in delete_assign:\r
+ GlobalData.BuildOptionPcd.remove(item)\r
\r
@staticmethod\r
def HandleFlexiblePcd(TokenSpaceGuidCName, TokenCName, PcdValue, PcdDatumType, GuidDict, FieldName=''):\r
PcdValue = DecDefaultValue\r
if DscDefaultValue:\r
PcdValue = DscDefaultValue\r
- Pcd.DefaultValue = PcdValue\r
+ #The DefaultValue of StructurePcd already be the latest, no need to update.\r
+ if not self.IsStructurePcd(Pcd.TokenCName, Pcd.TokenSpaceGuidCName):\r
+ Pcd.DefaultValue = PcdValue\r
if ModulePcdSet is not None:\r
if (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type) not in ModulePcdSet:\r
continue\r
InfDefaultValue, PcdValue = ModulePcdSet[Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Type]\r
- Pcd.DefaultValue = PcdValue\r
+ #The DefaultValue of StructurePcd already be the latest, no need to update.\r
+ if not self.IsStructurePcd(Pcd.TokenCName, Pcd.TokenSpaceGuidCName):\r
+ Pcd.DefaultValue = PcdValue\r
if InfDefaultValue:\r
try:\r
InfDefaultValue = ValueExpressionEx(InfDefaultValue, Pcd.DatumType, self._GuidDict)(True)\r
if pcd[2]:\r
continue\r
PcdValue = pcd[3]\r
- Pcd.DefaultValue = PcdValue\r
+ #The DefaultValue of StructurePcd already be the latest, no need to update.\r
+ if not self.IsStructurePcd(Pcd.TokenCName, Pcd.TokenSpaceGuidCName):\r
+ Pcd.DefaultValue = PcdValue\r
BuildOptionMatch = True\r
break\r
\r
DscMatch = (DscDefaultValue.strip() == PcdValue.strip())\r
\r
IsStructure = False\r
- if GlobalData.gStructurePcd and (self.Arch in GlobalData.gStructurePcd) and ((Pcd.TokenCName, Pcd.TokenSpaceGuidCName) in GlobalData.gStructurePcd[self.Arch]):\r
+ if self.IsStructurePcd(Pcd.TokenCName, Pcd.TokenSpaceGuidCName):\r
IsStructure = True\r
if TypeName in ('DYNVPD', 'DEXVPD'):\r
SkuInfoList = Pcd.SkuInfoList\r
else:\r
return value\r
\r
+ def IsStructurePcd(self, PcdToken, PcdTokenSpaceGuid):\r
+ if GlobalData.gStructurePcd and (self.Arch in GlobalData.gStructurePcd) and ((PcdToken, PcdTokenSpaceGuid) in GlobalData.gStructurePcd[self.Arch]):\r
+ return True\r
+ else:\r
+ return False\r
+\r
##\r
# Reports platform and module Prediction information\r
#\r