+ if GlobalData.BuildOptionPcd:\r
+ for i, pcd in enumerate(GlobalData.BuildOptionPcd):\r
+ (pcdname, pcdvalue) = pcd.split('=')\r
+ if not pcdvalue:\r
+ EdkLogger.error('build', AUTOGEN_ERROR, "No Value specified for the PCD %s." % (pcdname))\r
+ if '.' in pcdname:\r
+ (TokenSpaceGuidCName, TokenCName) = pcdname.split('.')\r
+ HasTokenSpace = True\r
+ else:\r
+ TokenCName = pcdname\r
+ TokenSpaceGuidCName = ''\r
+ HasTokenSpace = False\r
+ TokenSpaceGuidCNameList = []\r
+ FoundFlag = False\r
+ PcdDatumType = ''\r
+ NewValue = ''\r
+ for package in PGen.PackageList:\r
+ for key in package.Pcds:\r
+ PcdItem = package.Pcds[key]\r
+ if HasTokenSpace:\r
+ if (PcdItem.TokenCName, PcdItem.TokenSpaceGuidCName) == (TokenCName, TokenSpaceGuidCName):\r
+ PcdDatumType = PcdItem.DatumType\r
+ NewValue = self._BuildOptionPcdValueFormat(TokenSpaceGuidCName, TokenCName, PcdDatumType, pcdvalue)\r
+ FoundFlag = True\r
+ else:\r
+ if PcdItem.TokenCName == TokenCName:\r
+ if not PcdItem.TokenSpaceGuidCName in TokenSpaceGuidCNameList:\r
+ if len (TokenSpaceGuidCNameList) < 1:\r
+ TokenSpaceGuidCNameList.append(PcdItem.TokenSpaceGuidCName)\r
+ PcdDatumType = PcdItem.DatumType\r
+ TokenSpaceGuidCName = PcdItem.TokenSpaceGuidCName\r
+ NewValue = self._BuildOptionPcdValueFormat(TokenSpaceGuidCName, TokenCName, PcdDatumType, pcdvalue)\r
+ FoundFlag = True\r
+ else:\r
+ EdkLogger.error(\r
+ 'build',\r
+ AUTOGEN_ERROR,\r
+ "The Pcd %s is found under multiple different TokenSpaceGuid: %s and %s." % (TokenCName, PcdItem.TokenSpaceGuidCName, TokenSpaceGuidCNameList[0])\r
+ )\r
+\r
+ GlobalData.BuildOptionPcd[i] = (TokenSpaceGuidCName, TokenCName, NewValue)\r
+\r
+ if not FoundFlag:\r
+ if HasTokenSpace:\r
+ EdkLogger.error('build', AUTOGEN_ERROR, "The Pcd %s.%s is not found in the DEC file." % (TokenSpaceGuidCName, TokenCName))\r
+ else:\r
+ EdkLogger.error('build', AUTOGEN_ERROR, "The Pcd %s is not found in the DEC file." % (TokenCName))\r
+\r
+ for BuildData in PGen.BuildDatabase._CACHE_.values():\r
+ if BuildData.Arch != Arch:\r
+ continue\r
+ if BuildData.MetaFile.Ext == '.dec':\r
+ continue\r
+ for key in BuildData.Pcds:\r
+ PcdItem = BuildData.Pcds[key]\r
+ if (TokenSpaceGuidCName, TokenCName) == (PcdItem.TokenSpaceGuidCName, PcdItem.TokenCName):\r
+ PcdItem.DefaultValue = NewValue\r
+\r
+ if (TokenCName, TokenSpaceGuidCName) in PcdSet:\r
+ PcdSet[(TokenCName, TokenSpaceGuidCName)] = NewValue\r
+\r