# This interface should be invoked explicitly when platform action is created.\r
#\r
def CollectPlatformDynamicPcds(self):\r
- # Override the platform Pcd's value by build option\r
- if GlobalData.BuildOptionPcd:\r
- for PcdItem in GlobalData.BuildOptionPcd:\r
- PlatformPcd = self.Platform.Pcds.get((PcdItem[1],PcdItem[0]))\r
- if PlatformPcd:\r
- if PlatformPcd.DatumType in [TAB_UINT8, TAB_UINT16, TAB_UINT32, TAB_UINT64,'BOOLEAN']:\r
- for sku in PlatformPcd.SkuInfoList:\r
- PlatformPcd.SkuInfoList[sku].DefaultValue = PcdItem[2]\r
- else:\r
- PcdDefaultValue = StringToArray(PcdItem[2])\r
- for sku in PlatformPcd.SkuInfoList:\r
- skuinfo = PlatformPcd.SkuInfoList[sku]\r
- if skuinfo.VariableGuid:\r
- skuinfo.HiiDefaultValue = PcdDefaultValue\r
- else:\r
- skuinfo.DefaultValue = PcdDefaultValue\r
- PlatformPcd.DefaultValue = PcdDefaultValue\r
- if PlatformPcd.MaxDatumSize:\r
- PlatformPcd.MaxDatumSize = str(max([int(PlatformPcd.MaxDatumSize),len(PcdDefaultValue.split(","))]))\r
- else:\r
- PlatformPcd.MaxDatumSize = str(len(PcdDefaultValue.split(",")))\r
\r
for key in self.Platform.Pcds:\r
for SinglePcd in GlobalData.MixedPcd:\r
NewOption = self.ToolDefinition["MAKE"]["FLAGS"].strip()\r
if NewOption != '':\r
self._BuildCommand += SplitOption(NewOption)\r
+ if "MAKE" in self.EdkIIBuildOption:\r
+ if "FLAGS" in self.EdkIIBuildOption["MAKE"]:\r
+ Flags = self.EdkIIBuildOption["MAKE"]["FLAGS"]\r
+ if Flags.startswith('='):\r
+ self._BuildCommand = [self._BuildCommand[0]] + [Flags[1:]]\r
+ else:\r
+ self._BuildCommand += [Flags]\r
return self._BuildCommand\r
\r
## Get tool chain definition\r
TokenCName = PcdItem[0]\r
break\r
if FromPcd != None:\r
- if GlobalData.BuildOptionPcd:\r
- for pcd in GlobalData.BuildOptionPcd:\r
- if (FromPcd.TokenSpaceGuidCName, FromPcd.TokenCName) == (pcd[0], pcd[1]):\r
- FromPcd.DefaultValue = pcd[2]\r
- break\r
if ToPcd.Pending and FromPcd.Type not in [None, '']:\r
ToPcd.Type = FromPcd.Type\r
elif (ToPcd.Type not in [None, '']) and (FromPcd.Type not in [None, ''])\\r
ToPcd.validlists = FromPcd.validlists\r
ToPcd.expressions = FromPcd.expressions\r
\r
- if ToPcd.DatumType == "VOID*" and ToPcd.MaxDatumSize in ['', None]:\r
+ if FromPcd != None and ToPcd.DatumType == "VOID*" and ToPcd.MaxDatumSize in ['', None]:\r
EdkLogger.debug(EdkLogger.DEBUG_9, "No MaxDatumSize specified for PCD %s.%s" \\r
% (ToPcd.TokenSpaceGuidCName, TokenCName))\r
Value = ToPcd.DefaultValue\r
break\r
if Flag:\r
self._OverridePcd(ToPcd, PlatformModule.Pcds[Key], Module)\r
+ # use PCD value to calculate the MaxDatumSize when it is not specified\r
+ for Name, Guid in Pcds:\r
+ Pcd = Pcds[Name, Guid]\r
+ if Pcd.DatumType == "VOID*" and Pcd.MaxDatumSize in ['', None]:\r
+ Value = Pcd.DefaultValue\r
+ if Value in [None, '']:\r
+ Pcd.MaxDatumSize = '1'\r
+ elif Value[0] == 'L':\r
+ Pcd.MaxDatumSize = str((len(Value) - 2) * 2)\r
+ elif Value[0] == '{':\r
+ Pcd.MaxDatumSize = str(len(Value.split(',')))\r
+ else:\r
+ Pcd.MaxDatumSize = str(len(Value) - 1)\r
return Pcds.values()\r
\r
## Resolve library names to library modules\r
OutputDir = self.OutputDir.replace('\\', '/').strip('/')\r
DebugDir = self.DebugDir.replace('\\', '/').strip('/')\r
for Item in self.CodaTargetList:\r
- File = Item.Target.Path.replace('\\', '/').strip('/').replace(DebugDir, '').strip('/')\r
+ File = Item.Target.Path.replace('\\', '/').strip('/').replace(DebugDir, '').replace(OutputDir, '').strip('/')\r
if File not in self.OutputFile:\r
self.OutputFile.append(File)\r
if os.path.isabs(File):\r