#\r
# Copyright (c) 2008 - 2019, Intel Corporation. All rights reserved.<BR>\r
# (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR>\r
-# This program and the accompanying materials\r
-# are licensed and made available under the terms and conditions of the BSD License\r
-# which accompanies this distribution. The full text of the license may be found at\r
-# http://opensource.org/licenses/bsd-license.php\r
-#\r
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+# SPDX-License-Identifier: BSD-2-Clause-Patent\r
#\r
\r
## Platform build information from DSC file\r
\r
from .WorkspaceCommon import GetDeclaredPcd\r
from Common.Misc import AnalyzeDscPcd\r
-from Common.Misc import ProcessDuplicatedInf,RemoveCComments\r
+from Common.Misc import ProcessDuplicatedInf,RemoveCComments,ArrayIndex\r
import re\r
from Common.Parsing import IsValidWord\r
from Common.VariableAttributes import VariableAttributes\r
from Common.Misc import SaveFileOnChange\r
from Workspace.BuildClassObject import PlatformBuildClassObject, StructurePcd, PcdClassObject, ModuleBuildClassObject\r
from collections import OrderedDict, defaultdict\r
-from .BuildClassObject import ArrayIndex\r
\r
def _IsFieldValueAnArray (Value):\r
Value = Value.strip()\r
if len(FileContent) == 0:\r
continue\r
\r
- if FileContent[0] == 0xff or FileContent[0] == 0xfe:\r
- FileContent = FileContent.decode('utf-16')\r
- IncludedFileList = gIncludePattern.findall(FileContent)\r
- else:\r
- try:\r
- FileContent = str(FileContent)\r
- IncludedFileList = gIncludePattern.findall(FileContent)\r
- except:\r
- pass\r
+ try:\r
+ if FileContent[0] == 0xff or FileContent[0] == 0xfe:\r
+ FileContent = FileContent.decode('utf-16')\r
+ else:\r
+ FileContent = FileContent.decode()\r
+ except:\r
+ # The file is not txt file. for example .mcb file\r
+ continue\r
IncludedFileList = gIncludePattern.findall(FileContent)\r
\r
for Inc in IncludedFileList:\r
self._Toolchain = Toolchain\r
self._ToolChainFamily = None\r
self._Clear()\r
- self._HandleOverridePath()\r
self.WorkspaceDir = os.getenv("WORKSPACE") if os.getenv("WORKSPACE") else ""\r
self.DefaultStores = None\r
self.SkuIdMgr = SkuClass(self.SkuName, self.SkuIds)\r
self._MacroDict = None\r
self.DefaultStores = None\r
\r
- ## handle Override Path of Module\r
- def _HandleOverridePath(self):\r
- RecordList = self._RawData[MODEL_META_DATA_COMPONENT, self._Arch]\r
- for Record in RecordList:\r
- ModuleId = Record[6]\r
- LineNo = Record[7]\r
- ModuleFile = PathClass(NormPath(Record[0]), GlobalData.gWorkspace, Arch=self._Arch)\r
- RecordList = self._RawData[MODEL_META_DATA_COMPONENT_SOURCE_OVERRIDE_PATH, self._Arch, None, ModuleId]\r
- if RecordList != []:\r
- SourceOverridePath = mws.join(GlobalData.gWorkspace, NormPath(RecordList[0][0]))\r
-\r
- # Check if the source override path exists\r
- if not os.path.isdir(SourceOverridePath):\r
- EdkLogger.error('build', FILE_NOT_FOUND, Message='Source override path does not exist:', File=self.MetaFile, ExtraData=SourceOverridePath, Line=LineNo)\r
-\r
- # Add to GlobalData Variables\r
- GlobalData.gOverrideDir[ModuleFile.Key] = SourceOverridePath\r
-\r
## Get current effective macros\r
@property\r
def _Macros(self):\r
@property\r
def Arch(self):\r
return self._Arch\r
+ @property\r
+ def Dir(self):\r
+ return self.MetaFile.Dir\r
\r
## Retrieve all information in [Defines] section\r
#\r
ExtraData="%s.%s" % (TokenSpaceGuid, PcdCName))\r
if PcdType in (MODEL_PCD_DYNAMIC_DEFAULT, MODEL_PCD_DYNAMIC_EX_DEFAULT, MODEL_PCD_FIXED_AT_BUILD, MODEL_PCD_PATCHABLE_IN_MODULE):\r
if self._DecPcds[PcdCName, TokenSpaceGuid].DatumType.strip() != ValueList[1].strip():\r
- EdkLogger.error('build', FORMAT_INVALID, "Pcd datumtype used in DSC file is not the same as its declaration in DEC file.", File=self.MetaFile, Line=LineNo,\r
- ExtraData="%s.%s|%s" % (TokenSpaceGuid, PcdCName, Setting))\r
+ DecPcd = self._DecPcds[PcdCName, TokenSpaceGuid]\r
+ EdkLogger.error('build', FORMAT_INVALID,\r
+ "Pcd datumtype used in DSC file is not the same as its declaration. DatumType:%s"%DecPcd.DatumType,\r
+ File=self.MetaFile, Line=LineNo,\r
+ ExtraData="Dsc:%s.%s|%s\n Dec:%s.%s|%s|%s|%s" % (TokenSpaceGuid, PcdCName, Setting, TokenSpaceGuid, \\r
+ PcdCName, DecPcd.DefaultValue, DecPcd.DatumType, DecPcd.TokenValue))\r
if (TokenSpaceGuid + '.' + PcdCName) in GlobalData.gPlatformPcds:\r
if GlobalData.gPlatformPcds[TokenSpaceGuid + '.' + PcdCName] != ValueList[Index]:\r
GlobalData.gPlatformPcds[TokenSpaceGuid + '.' + PcdCName] = ValueList[Index]\r
AvailableSkuIdSet = copy.copy(self.SkuIds)\r
\r
PcdDict = tdict(True, 4)\r
- PcdSet = set()\r
+ PcdList = []\r
# Find out all possible PCD candidates for self._Arch\r
RecordList = self._RawData[Type, self._Arch]\r
PcdValueDict = OrderedDict()\r
EdkLogger.error('build ', PARAMETER_INVALID, 'Sku %s is not defined in [SkuIds] section' % SkuName,\r
File=self.MetaFile, Line=Dummy5)\r
if SkuName in (self.SkuIdMgr.SystemSkuId, TAB_DEFAULT, TAB_COMMON):\r
- if "." not in TokenSpaceGuid and "[" not in PcdCName:\r
- PcdSet.add((PcdCName, TokenSpaceGuid, SkuName, Dummy5))\r
+ if "." not in TokenSpaceGuid and "[" not in PcdCName and (PcdCName, TokenSpaceGuid, SkuName, Dummy5) not in PcdList:\r
+ PcdList.append((PcdCName, TokenSpaceGuid, SkuName, Dummy5))\r
PcdDict[Arch, PcdCName, TokenSpaceGuid, SkuName] = Setting\r
\r
- for PcdCName, TokenSpaceGuid, SkuName, Dummy4 in PcdSet:\r
+ for PcdCName, TokenSpaceGuid, SkuName, Dummy4 in PcdList:\r
Setting = PcdDict[self._Arch, PcdCName, TokenSpaceGuid, SkuName]\r
if Setting is None:\r
continue\r
EdkLogger.error('build', FORMAT_INVALID, "The size value can't be set to negative value for %s." % ".".join((TokenSpaceGuid, PcdCName)),\r
File=self.MetaFile, Line=Dummy4)\r
if (PcdCName, TokenSpaceGuid) in PcdValueDict:\r
- PcdValueDict[PcdCName, TokenSpaceGuid][SkuName] = (PcdValue, DatumType, MaxDatumSize)\r
+ PcdValueDict[PcdCName, TokenSpaceGuid][SkuName] = (PcdValue, DatumType, MaxDatumSize,Dummy4)\r
else:\r
- PcdValueDict[PcdCName, TokenSpaceGuid] = {SkuName:(PcdValue, DatumType, MaxDatumSize)}\r
+ PcdValueDict[PcdCName, TokenSpaceGuid] = {SkuName:(PcdValue, DatumType, MaxDatumSize,Dummy4)}\r
\r
for ((PcdCName, TokenSpaceGuid), PcdSetting) in PcdValueDict.items():\r
if self.SkuIdMgr.SystemSkuId in PcdSetting:\r
- PcdValue, DatumType, MaxDatumSize = PcdSetting[self.SkuIdMgr.SystemSkuId]\r
+ PcdValue, DatumType, MaxDatumSize,_ = PcdSetting[self.SkuIdMgr.SystemSkuId]\r
elif TAB_DEFAULT in PcdSetting:\r
- PcdValue, DatumType, MaxDatumSize = PcdSetting[TAB_DEFAULT]\r
+ PcdValue, DatumType, MaxDatumSize,_ = PcdSetting[TAB_DEFAULT]\r
elif TAB_COMMON in PcdSetting:\r
- PcdValue, DatumType, MaxDatumSize = PcdSetting[TAB_COMMON]\r
+ PcdValue, DatumType, MaxDatumSize,_ = PcdSetting[TAB_COMMON]\r
else:\r
PcdValue = None\r
DatumType = None\r
Settings = PcdValueDict[PcdCName, TokenSpaceGuid][SkuName]\r
if SkuName not in Pcds[PcdCName, TokenSpaceGuid].DscRawValue:\r
Pcds[PcdCName, TokenSpaceGuid].DscRawValue[SkuName] = {}\r
+ Pcds[PcdCName, TokenSpaceGuid].DscRawValueInfo[SkuName] = {}\r
Pcds[PcdCName, TokenSpaceGuid].DscRawValue[SkuName][TAB_DEFAULT_STORES_DEFAULT] = Settings[0]\r
+ Pcds[PcdCName, TokenSpaceGuid].DscRawValueInfo[SkuName][TAB_DEFAULT_STORES_DEFAULT] = (self.MetaFile.File,Settings[3])\r
return Pcds\r
\r
@staticmethod\r
except:\r
EdkLogger.error('Build', COMMAND_FAILURE, 'Can not execute command: %s' % Command)\r
Result = Process.communicate()\r
- return Process.returncode, Result[0].decode(encoding='utf-8', errors='ignore'), Result[1].decode(encoding='utf-8', errors='ignore')\r
+ return Process.returncode, Result[0].decode(), Result[1].decode()\r
\r
@staticmethod\r
def IntToCString(Value, ValueSize):\r
def GenerateSizeFunction(self, Pcd):\r
CApp = "// Default Value in Dec \n"\r
CApp = CApp + "void Cal_%s_%s_Size(UINT32 *Size){\n" % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName)\r
- if Pcd.IsArray():\r
+\r
+ if Pcd.IsArray() and Pcd.Capacity[-1] != "-1":\r
+ CApp += " *Size = (sizeof (%s) > *Size ? sizeof (%s) : *Size);\n" % (Pcd.DatumType,Pcd.DatumType)\r
+ else:\r
+ if "{CODE(" in Pcd.DefaultValueFromDec:\r
+ CApp += " *Size = (sizeof (%s_%s_INIT_Value) > *Size ? sizeof (%s_%s_INIT_Value) : *Size);\n" % (Pcd.TokenSpaceGuidCName,Pcd.TokenCName,Pcd.TokenSpaceGuidCName,Pcd.TokenCName)\r
if Pcd.Type in PCD_DYNAMIC_TYPE_SET | PCD_DYNAMIC_EX_TYPE_SET:\r
for skuname in Pcd.SkuInfoList:\r
skuobj = Pcd.SkuInfoList[skuname]\r
if skuobj.VariableName:\r
for defaultstore in skuobj.DefaultStoreDict:\r
pcddef = self.GetPcdDscRawDefaultValue(Pcd,skuname,defaultstore)\r
- if pcddef and "{CODE(" in pcddef:\r
- CApp += " *Size = (sizeof (%s_%s_%s_%s_Value) > *Size ? sizeof (%s_%s_%s_%s_Value) : *Size);\n" % (Pcd.TokenSpaceGuidCName,Pcd.TokenCName,skuname,defaultstore,Pcd.TokenSpaceGuidCName,Pcd.TokenCName,skuname,defaultstore)\r
+ if pcddef:\r
+ if "{CODE(" in pcddef:\r
+ CApp += " *Size = (sizeof (%s_%s_%s_%s_Value) > *Size ? sizeof (%s_%s_%s_%s_Value) : *Size);\n" % (Pcd.TokenSpaceGuidCName,Pcd.TokenCName,skuname,defaultstore,Pcd.TokenSpaceGuidCName,Pcd.TokenCName,skuname,defaultstore)\r
+ else:\r
+ CApp += " *Size = %s > *Size ? %s : *Size;\n" % (self.GetStructurePcdMaxSize(Pcd),self.GetStructurePcdMaxSize(Pcd))\r
else:\r
pcddef = self.GetPcdDscRawDefaultValue(Pcd,skuname,TAB_DEFAULT_STORES_DEFAULT)\r
- if pcddef and "{CODE(" in pcddef:\r
- CApp += " *Size = (sizeof (%s_%s_%s_%s_Value) > *Size ? sizeof (%s_%s_%s_%s_Value) : *Size);\n" % (Pcd.TokenSpaceGuidCName,Pcd.TokenCName,skuname,TAB_DEFAULT_STORES_DEFAULT,Pcd.TokenSpaceGuidCName,Pcd.TokenCName,skuname,TAB_DEFAULT_STORES_DEFAULT)\r
+ if pcddef:\r
+ if "{CODE(" in pcddef:\r
+ CApp += " *Size = (sizeof (%s_%s_%s_%s_Value) > *Size ? sizeof (%s_%s_%s_%s_Value) : *Size);\n" % (Pcd.TokenSpaceGuidCName,Pcd.TokenCName,skuname,TAB_DEFAULT_STORES_DEFAULT,Pcd.TokenSpaceGuidCName,Pcd.TokenCName,skuname,TAB_DEFAULT_STORES_DEFAULT)\r
+ else:\r
+ CApp += " *Size = %s > *Size ? %s : *Size;\n" % (self.GetStructurePcdMaxSize(Pcd),self.GetStructurePcdMaxSize(Pcd))\r
else:\r
pcddef = self.GetPcdDscRawDefaultValue(Pcd,TAB_DEFAULT,TAB_DEFAULT_STORES_DEFAULT)\r
- if pcddef and "{CODE(" in pcddef:\r
- CApp += " *Size = (sizeof (%s_%s_%s_%s_Value) > *Size ? sizeof (%s_%s_%s_%s_Value) : *Size);\n" % (Pcd.TokenSpaceGuidCName,Pcd.TokenCName,TAB_DEFAULT,TAB_DEFAULT_STORES_DEFAULT,Pcd.TokenSpaceGuidCName,Pcd.TokenCName,TAB_DEFAULT,TAB_DEFAULT_STORES_DEFAULT)\r
+ if pcddef:\r
+ if "{CODE(" in pcddef:\r
+ CApp += " *Size = (sizeof (%s_%s_%s_%s_Value) > *Size ? sizeof (%s_%s_%s_%s_Value) : *Size);\n" % (Pcd.TokenSpaceGuidCName,Pcd.TokenCName,TAB_DEFAULT,TAB_DEFAULT_STORES_DEFAULT,Pcd.TokenSpaceGuidCName,Pcd.TokenCName,TAB_DEFAULT,TAB_DEFAULT_STORES_DEFAULT)\r
+ else:\r
+ CApp += " *Size = %s > *Size ? %s : *Size;\n" % (self.GetStructurePcdMaxSize(Pcd),self.GetStructurePcdMaxSize(Pcd))\r
+ ActualCap = []\r
for index in Pcd.DefaultValues:\r
+ if index:\r
+ ActualCap.append(index)\r
FieldList = Pcd.DefaultValues[index]\r
if not FieldList:\r
continue\r
EdkLogger.error('Build', FORMAT_INVALID, "Invalid value format for %s. From %s Line %d " %\r
(".".join((Pcd.TokenSpaceGuidCName, Pcd.TokenCName, FieldName.strip('.'))), FieldList[FieldName.strip(".")][1], FieldList[FieldName.strip(".")][2]))\r
Value, ValueSize = ParseFieldValue(Value)\r
- if not Pcd.IsArray:\r
+ if not Pcd.IsArray():\r
CApp = CApp + ' __FLEXIBLE_SIZE(*Size, %s, %s, %d / __ARRAY_ELEMENT_SIZE(%s, %s) + ((%d %% __ARRAY_ELEMENT_SIZE(%s, %s)) ? 1 : 0)); // From %s Line %d Value %s \n' % (Pcd.DatumType, FieldName.strip("."), ValueSize, Pcd.DatumType, FieldName.strip("."), ValueSize, Pcd.DatumType, FieldName.strip("."), FieldList[FieldName.strip(".")][1], FieldList[FieldName.strip(".")][2], FieldList[FieldName.strip(".")][0]);\r
else:\r
NewFieldName = ''\r
FieldName_ori = FieldName.strip('.')\r
while '[' in FieldName:\r
NewFieldName = NewFieldName + FieldName.split('[', 1)[0] + '[0]'\r
- ArrayIndex = int(FieldName.split('[', 1)[1].split(']', 1)[0])\r
+ Array_Index = int(FieldName.split('[', 1)[1].split(']', 1)[0])\r
FieldName = FieldName.split(']', 1)[1]\r
FieldName = NewFieldName + FieldName\r
- while '[' in FieldName and not Pcd.IsArray:\r
+ while '[' in FieldName and not Pcd.IsArray():\r
FieldName = FieldName.rsplit('[', 1)[0]\r
- CApp = CApp + ' __FLEXIBLE_SIZE(*Size, %s, %s, %d); // From %s Line %d Value %s\n' % (Pcd.DatumType, FieldName.strip("."), ArrayIndex + 1, FieldList[FieldName_ori][1], FieldList[FieldName_ori][2], FieldList[FieldName_ori][0])\r
+ CApp = CApp + ' __FLEXIBLE_SIZE(*Size, %s, %s, %d); // From %s Line %d Value %s\n' % (Pcd.DatumType, FieldName.strip("."), Array_Index + 1, FieldList[FieldName_ori][1], FieldList[FieldName_ori][2], FieldList[FieldName_ori][0])\r
for skuname in Pcd.SkuOverrideValues:\r
if skuname == TAB_COMMON:\r
continue\r
for defaultstorenameitem in Pcd.SkuOverrideValues[skuname]:\r
CApp = CApp + "// SkuName: %s, DefaultStoreName: %s \n" % (skuname, defaultstorenameitem)\r
for index in Pcd.SkuOverrideValues[skuname][defaultstorenameitem]:\r
+ if index:\r
+ ActualCap.append(index)\r
for FieldList in [Pcd.SkuOverrideValues[skuname][defaultstorenameitem][index]]:\r
if not FieldList:\r
continue\r
EdkLogger.error('Build', FORMAT_INVALID, "Invalid value format for %s. From %s Line %d " %\r
(".".join((Pcd.TokenSpaceGuidCName, Pcd.TokenCName, FieldName.strip('.'))), FieldList[FieldName.strip(".")][1], FieldList[FieldName.strip(".")][2]))\r
Value, ValueSize = ParseFieldValue(Value)\r
- if not Pcd.IsArray:\r
+ if not Pcd.IsArray():\r
CApp = CApp + ' __FLEXIBLE_SIZE(*Size, %s, %s, %d / __ARRAY_ELEMENT_SIZE(%s, %s) + ((%d %% __ARRAY_ELEMENT_SIZE(%s, %s)) ? 1 : 0)); // From %s Line %d Value %s\n' % (Pcd.DatumType, FieldName.strip("."), ValueSize, Pcd.DatumType, FieldName.strip("."), ValueSize, Pcd.DatumType, FieldName.strip("."), FieldList[FieldName.strip(".")][1], FieldList[FieldName.strip(".")][2], FieldList[FieldName.strip(".")][0]);\r
else:\r
NewFieldName = ''\r
FieldName_ori = FieldName.strip('.')\r
while '[' in FieldName:\r
NewFieldName = NewFieldName + FieldName.split('[', 1)[0] + '[0]'\r
- ArrayIndex = int(FieldName.split('[', 1)[1].split(']', 1)[0])\r
+ Array_Index = int(FieldName.split('[', 1)[1].split(']', 1)[0])\r
FieldName = FieldName.split(']', 1)[1]\r
FieldName = NewFieldName + FieldName\r
- while '[' in FieldName and not Pcd.IsArray:\r
+ while '[' in FieldName and not Pcd.IsArray():\r
FieldName = FieldName.rsplit('[', 1)[0]\r
- CApp = CApp + ' __FLEXIBLE_SIZE(*Size, %s, %s, %d); // From %s Line %d Value %s \n' % (Pcd.DatumType, FieldName.strip("."), ArrayIndex + 1, FieldList[FieldName_ori][1], FieldList[FieldName_ori][2], FieldList[FieldName_ori][0])\r
+ CApp = CApp + ' __FLEXIBLE_SIZE(*Size, %s, %s, %d); // From %s Line %d Value %s \n' % (Pcd.DatumType, FieldName.strip("."), Array_Index + 1, FieldList[FieldName_ori][1], FieldList[FieldName_ori][2], FieldList[FieldName_ori][0])\r
if Pcd.PcdFieldValueFromFdf:\r
CApp = CApp + "// From fdf \n"\r
for FieldName in Pcd.PcdFieldValueFromFdf:\r
EdkLogger.error('Build', FORMAT_INVALID, "Invalid value format for %s. From %s Line %d " %\r
(".".join((Pcd.TokenSpaceGuidCName, Pcd.TokenCName, FieldName.strip('.'))), Pcd.PcdFieldValueFromFdf[FieldName.strip(".")][1], Pcd.PcdFieldValueFromFdf[FieldName.strip(".")][2]))\r
Value, ValueSize = ParseFieldValue(Value)\r
- if not Pcd.IsArray:\r
+ if not Pcd.IsArray():\r
CApp = CApp + ' __FLEXIBLE_SIZE(*Size, %s, %s, %d / __ARRAY_ELEMENT_SIZE(%s, %s) + ((%d %% __ARRAY_ELEMENT_SIZE(%s, %s)) ? 1 : 0)); // From %s Line %d Value %s\n' % (Pcd.DatumType, FieldName.strip("."), ValueSize, Pcd.DatumType, FieldName.strip("."), ValueSize, Pcd.DatumType, FieldName.strip("."), Pcd.PcdFieldValueFromFdf[FieldName.strip(".")][1], Pcd.PcdFieldValueFromFdf[FieldName.strip(".")][2], Pcd.PcdFieldValueFromFdf[FieldName.strip(".")][0]);\r
else:\r
NewFieldName = ''\r
FieldName_ori = FieldName.strip('.')\r
while '[' in FieldName:\r
NewFieldName = NewFieldName + FieldName.split('[', 1)[0] + '[0]'\r
- ArrayIndex = int(FieldName.split('[', 1)[1].split(']', 1)[0])\r
+ Array_Index = int(FieldName.split('[', 1)[1].split(']', 1)[0])\r
FieldName = FieldName.split(']', 1)[1]\r
FieldName = NewFieldName + FieldName\r
while '[' in FieldName:\r
FieldName = FieldName.rsplit('[', 1)[0]\r
- CApp = CApp + ' __FLEXIBLE_SIZE(*Size, %s, %s, %d); // From %s Line %s Value %s \n' % (Pcd.DatumType, FieldName.strip("."), ArrayIndex + 1, Pcd.PcdFieldValueFromFdf[FieldName_ori][1], Pcd.PcdFieldValueFromFdf[FieldName_ori][2], Pcd.PcdFieldValueFromFdf[FieldName_ori][0])\r
+ CApp = CApp + ' __FLEXIBLE_SIZE(*Size, %s, %s, %d); // From %s Line %s Value %s \n' % (Pcd.DatumType, FieldName.strip("."), Array_Index + 1, Pcd.PcdFieldValueFromFdf[FieldName_ori][1], Pcd.PcdFieldValueFromFdf[FieldName_ori][2], Pcd.PcdFieldValueFromFdf[FieldName_ori][0])\r
if Pcd.PcdFieldValueFromComm:\r
CApp = CApp + "// From Command Line \n"\r
for FieldName in Pcd.PcdFieldValueFromComm:\r
EdkLogger.error('Build', FORMAT_INVALID, "Invalid value format for %s. From %s Line %d " %\r
(".".join((Pcd.TokenSpaceGuidCName, Pcd.TokenCName, FieldName.strip('.'))), Pcd.PcdFieldValueFromComm[FieldName.strip(".")][1], Pcd.PcdFieldValueFromComm[FieldName.strip(".")][2]))\r
Value, ValueSize = ParseFieldValue(Value)\r
- if not Pcd.IsArray:\r
+ if not Pcd.IsArray():\r
CApp = CApp + ' __FLEXIBLE_SIZE(*Size, %s, %s, %d / __ARRAY_ELEMENT_SIZE(%s, %s) + ((%d %% __ARRAY_ELEMENT_SIZE(%s, %s)) ? 1 : 0)); // From %s Line %d Value %s\n' % (Pcd.DatumType, FieldName.strip("."), ValueSize, Pcd.DatumType, FieldName.strip("."), ValueSize, Pcd.DatumType, FieldName.strip("."), Pcd.PcdFieldValueFromComm[FieldName.strip(".")][1], Pcd.PcdFieldValueFromComm[FieldName.strip(".")][2], Pcd.PcdFieldValueFromComm[FieldName.strip(".")][0]);\r
else:\r
NewFieldName = ''\r
FieldName_ori = FieldName.strip('.')\r
while '[' in FieldName:\r
NewFieldName = NewFieldName + FieldName.split('[', 1)[0] + '[0]'\r
- ArrayIndex = int(FieldName.split('[', 1)[1].split(']', 1)[0])\r
+ Array_Index = int(FieldName.split('[', 1)[1].split(']', 1)[0])\r
FieldName = FieldName.split(']', 1)[1]\r
FieldName = NewFieldName + FieldName\r
- while '[' in FieldName and not Pcd.IsArray:\r
+ while '[' in FieldName and not Pcd.IsArray():\r
FieldName = FieldName.rsplit('[', 1)[0]\r
- CApp = CApp + ' __FLEXIBLE_SIZE(*Size, %s, %s, %d); // From %s Line %d Value %s \n' % (Pcd.DatumType, FieldName.strip("."), ArrayIndex + 1, Pcd.PcdFieldValueFromComm[FieldName_ori][1], Pcd.PcdFieldValueFromComm[FieldName_ori][2], Pcd.PcdFieldValueFromComm[FieldName_ori][0])\r
+ CApp = CApp + ' __FLEXIBLE_SIZE(*Size, %s, %s, %d); // From %s Line %d Value %s \n' % (Pcd.DatumType, FieldName.strip("."), Array_Index + 1, Pcd.PcdFieldValueFromComm[FieldName_ori][1], Pcd.PcdFieldValueFromComm[FieldName_ori][2], Pcd.PcdFieldValueFromComm[FieldName_ori][0])\r
if Pcd.GetPcdMaxSize():\r
CApp = CApp + " *Size = (%d > *Size ? %d : *Size); // The Pcd maxsize is %d \n" % (Pcd.GetPcdMaxSize(), Pcd.GetPcdMaxSize(), Pcd.GetPcdMaxSize())\r
+ ArraySizeByAssign = self.CalculateActualCap(ActualCap)\r
+ if ArraySizeByAssign > 1:\r
+ CApp = CApp + " *Size = (%d > *Size ? %d : *Size); \n" % (ArraySizeByAssign, ArraySizeByAssign)\r
CApp = CApp + "}\n"\r
return CApp\r
+ def CalculateActualCap(self,ActualCap):\r
+ if not ActualCap:\r
+ return 1\r
+ maxsize = 1\r
+ for item in ActualCap:\r
+ index_elements = ArrayIndex.findall(item)\r
+ rt = 1\r
+ for index_e in index_elements:\r
+ index_num = index_e.lstrip("[").rstrip("]").strip()\r
+ if not index_num:\r
+ # Not support flexiable pcd array assignment\r
+ return 1\r
+ index_num = int(index_num,16) if index_num.startswith(("0x","0X")) else int(index_num)\r
+ rt = rt * (index_num+1)\r
+ if rt >maxsize:\r
+ maxsize = rt\r
+\r
+ return maxsize\r
\r
@staticmethod\r
def GenerateSizeStatments(Pcd,skuname,defaultstorename):\r
CApp = CApp + "void Assign_%s_%s_Default_Value(%s *Pcd){\n" % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName, Pcd.BaseDatumType)\r
CApp = CApp + ' UINT32 FieldSize;\n'\r
CApp = CApp + ' CHAR8 *Value;\n'\r
+ CApp = CApp + ' UINT32 PcdArraySize;\n'\r
DefaultValueFromDec = Pcd.DefaultValueFromDec\r
IsArray = _IsFieldValueAnArray(Pcd.DefaultValueFromDec)\r
if IsArray:\r
DefaultValueFromDec = StringToArray(DefaultValueFromDec)\r
Value, ValueSize = ParseFieldValue (DefaultValueFromDec)\r
if IsArray:\r
- #\r
- # Use memcpy() to copy value into field\r
- #\r
- if "{CODE(" in Pcd.DefaultValueFromDec:\r
- CApp = CApp + ' memcpy (Pcd, %s_%s_INIT_Value, sizeof(%s_%s_INIT_Value));\n' % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName,Pcd.TokenSpaceGuidCName, Pcd.TokenCName)\r
+ #\r
+ # Use memcpy() to copy value into field\r
+ #\r
+ if Pcd.IsArray():\r
+ pcdarraysize = Pcd.PcdArraySize()\r
+ if "{CODE(" in Pcd.DefaultValueFromDec:\r
+ if Pcd.Capacity[-1] != "-1":\r
+ CApp = CApp + '__STATIC_ASSERT(sizeof(%s_%s_INIT_Value) < %d * sizeof(%s), "Pcd %s.%s Value in Dec exceed the array capability %s"); // From %s Line %s \n ' % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName,pcdarraysize,Pcd.BaseDatumType,Pcd.TokenSpaceGuidCName, Pcd.TokenCName,Pcd.DatumType,Pcd.DefaultValueFromDecInfo[0],Pcd.DefaultValueFromDecInfo[1])\r
+ CApp = CApp + ' PcdArraySize = sizeof(%s_%s_INIT_Value);\n ' % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName)\r
+ CApp = CApp + ' memcpy (Pcd, %s_%s_INIT_Value,PcdArraySize);\n ' % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName)\r
+ else:\r
+ if Pcd.Capacity[-1] != "-1":\r
+ CApp = CApp + '__STATIC_ASSERT(%d < %d * sizeof(%s), "Pcd %s.%s Value in Dec exceed the array capability %s"); // From %s Line %s \n' % (ValueSize,pcdarraysize,Pcd.BaseDatumType,Pcd.TokenSpaceGuidCName, Pcd.TokenCName,Pcd.DatumType,Pcd.DefaultValueFromDecInfo[0],Pcd.DefaultValueFromDecInfo[1])\r
+ CApp = CApp + ' PcdArraySize = %d;\n' % ValueSize\r
+ CApp = CApp + ' Value = %s; // From DEC Default Value %s\n' % (DscBuildData.IntToCString(Value, ValueSize), Pcd.DefaultValueFromDec)\r
+ CApp = CApp + ' memcpy (Pcd, Value, PcdArraySize);\n'\r
else:\r
- CApp = CApp + ' Value = %s; // From DEC Default Value %s\n' % (DscBuildData.IntToCString(Value, ValueSize), Pcd.DefaultValueFromDec)\r
- CApp = CApp + ' memcpy (Pcd, Value, %d);\n' % (ValueSize)\r
+ if "{CODE(" in Pcd.DefaultValueFromDec:\r
+ CApp = CApp + ' PcdArraySize = sizeof(%s_%s_INIT_Value);\n ' % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName)\r
+ CApp = CApp + ' memcpy (Pcd, &%s_%s_INIT_Value,PcdArraySize);\n ' % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName)\r
+ else:\r
+ CApp = CApp + ' Value = %s; // From DEC Default Value %s\n' % (DscBuildData.IntToCString(Value, ValueSize), Pcd.DefaultValueFromDec)\r
+ CApp = CApp + ' memcpy (Pcd, Value, %d);\n' % (ValueSize)\r
elif isinstance(Value, str):\r
CApp = CApp + ' Pcd = %s; // From DEC Default Value %s\n' % (Value, Pcd.DefaultValueFromDec)\r
for index in Pcd.DefaultValues:\r
pcddefaultvalue = Pcd.DscRawValue.get(SkuName, {}).get(TAB_DEFAULT_STORES_DEFAULT)\r
\r
return pcddefaultvalue\r
+ def GetPcdDscRawValueInfo(self,Pcd, SkuName,DefaultStoreName):\r
+ DscValueInfo = Pcd.DscRawValueInfo.get(SkuName, {}).get(DefaultStoreName)\r
+ if DscValueInfo:\r
+ dscfilepath,lineno = DscValueInfo\r
+ else:\r
+ dscfilepath = self.MetaFile.File\r
+ lineno = ""\r
+ return dscfilepath,lineno\r
+\r
def GenerateInitValueFunction(self, Pcd, SkuName, DefaultStoreName):\r
CApp = "// Value in Dsc for Sku: %s, DefaultStore %s\n" % (SkuName, DefaultStoreName)\r
CApp = CApp + "void Assign_%s_%s_%s_%s_Value(%s *Pcd){\n" % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName, SkuName, DefaultStoreName, Pcd.BaseDatumType)\r
CApp = CApp + ' UINT32 FieldSize;\n'\r
CApp = CApp + ' CHAR8 *Value;\n'\r
+ CApp = CApp + ' UINT32 PcdArraySize;\n'\r
\r
CApp = CApp + "// SkuName: %s, DefaultStoreName: %s \n" % (TAB_DEFAULT, TAB_DEFAULT_STORES_DEFAULT)\r
inherit_OverrideValues = Pcd.SkuOverrideValues[SkuName]\r
+ dscfilepath,lineno = self.GetPcdDscRawValueInfo(Pcd, SkuName, DefaultStoreName)\r
+ if lineno:\r
+ valuefrom = "%s Line %s" % (dscfilepath,str(lineno))\r
+ else:\r
+ valuefrom = dscfilepath\r
\r
pcddefaultvalue = self.GetPcdDscRawDefaultValue(Pcd, SkuName, DefaultStoreName)\r
if pcddefaultvalue:\r
if (SkuName, DefaultStoreName) == (TAB_DEFAULT, TAB_DEFAULT_STORES_DEFAULT):\r
if isinstance(Value, str):\r
if "{CODE(" in Value:\r
- CApp = CApp + ' memcpy (Pcd, %s_%s_%s_%s_Value, sizeof(%s_%s_%s_%s_Value));\n' % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName,SkuName, DefaultStoreName,Pcd.TokenSpaceGuidCName, Pcd.TokenCName,SkuName, DefaultStoreName)\r
+ if Pcd.IsArray() and Pcd.Capacity[-1] != "-1":\r
+ pcdarraysize = Pcd.PcdArraySize()\r
+ CApp = CApp + '__STATIC_ASSERT(sizeof(%s_%s_%s_%s_Value) < %d * sizeof(%s), "Pcd %s.%s Value in Dsc exceed the array capability %s"); // From %s \n' % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName,SkuName, DefaultStoreName,pcdarraysize,Pcd.BaseDatumType,Pcd.TokenSpaceGuidCName, Pcd.TokenCName,Pcd.DatumType, valuefrom)\r
+ CApp = CApp+ ' PcdArraySize = sizeof(%s_%s_%s_%s_Value);\n ' % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName,SkuName, DefaultStoreName)\r
+ CApp = CApp + ' memcpy (Pcd, &%s_%s_%s_%s_Value,PcdArraySize);\n ' % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName,SkuName, DefaultStoreName)\r
else:\r
CApp = CApp + ' Pcd = %s; // From DSC Default Value %s\n' % (Value, Pcd.DefaultFromDSC.get(TAB_DEFAULT, {}).get(TAB_DEFAULT_STORES_DEFAULT, Pcd.DefaultValue) if Pcd.DefaultFromDSC else Pcd.DefaultValue)\r
elif IsArray:\r
- #\r
- # Use memcpy() to copy value into field\r
- #\r
- if Pcd.IsArray() and "{CODE(" in pcddefaultvalue:\r
- CApp = CApp + ' memcpy (Pcd, %s_%s_%s_%s_Value, sizeof(%s_%s_%s_%s_Value));\n' % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName,SkuName, DefaultStoreName,Pcd.TokenSpaceGuidCName, Pcd.TokenCName,SkuName, DefaultStoreName)\r
+ #\r
+ # Use memcpy() to copy value into field\r
+ #\r
+ if Pcd.IsArray():\r
+ pcdarraysize = Pcd.PcdArraySize()\r
+ if "{CODE(" in pcddefaultvalue:\r
+ if Pcd.Capacity[-1] != "-1":\r
+ CApp = CApp + '__STATIC_ASSERT(sizeof(%s_%s_%s_%s_Value) < %d * sizeof(%s), "Pcd %s.%s Value in Dsc exceed the array capability %s"); // From %s \n' % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName,SkuName, DefaultStoreName,pcdarraysize,Pcd.BaseDatumType,Pcd.TokenSpaceGuidCName, Pcd.TokenCName,Pcd.DatumType,valuefrom)\r
+ CApp = CApp + ' PcdArraySize = sizeof(%s_%s_%s_%s_Value);\n ' % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName,SkuName, DefaultStoreName)\r
+ CApp = CApp + ' memcpy (Pcd, %s_%s_%s_%s_Value, PcdArraySize);\n' % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName,SkuName, DefaultStoreName)\r
+ else:\r
+ if Pcd.Capacity[-1] != "-1":\r
+ CApp = CApp + '__STATIC_ASSERT(%d < %d * sizeof(%s), "Pcd %s.%s Value in Dsc exceed the array capability %s"); // From %s \n' % (ValueSize,pcdarraysize,Pcd.BaseDatumType,Pcd.TokenSpaceGuidCName, Pcd.TokenCName,Pcd.DatumType,valuefrom)\r
+ CApp = CApp + ' PcdArraySize = %d;\n' % ValueSize\r
+ CApp = CApp + ' Value = %s; // From DSC Default Value %s\n' % (DscBuildData.IntToCString(Value, ValueSize), Pcd.DefaultFromDSC.get(TAB_DEFAULT, {}).get(TAB_DEFAULT_STORES_DEFAULT, Pcd.DefaultValue) if Pcd.DefaultFromDSC else Pcd.DefaultValue)\r
+ CApp = CApp + ' memcpy (Pcd, Value, PcdArraySize);\n'\r
else:\r
- CApp = CApp + ' Value = %s; // From DSC Default Value %s\n' % (DscBuildData.IntToCString(Value, ValueSize), Pcd.DefaultFromDSC.get(TAB_DEFAULT, {}).get(TAB_DEFAULT_STORES_DEFAULT, Pcd.DefaultValue) if Pcd.DefaultFromDSC else Pcd.DefaultValue)\r
- CApp = CApp + ' memcpy (Pcd, Value, %d);\n' % (ValueSize)\r
+ if "{CODE(" in pcddefaultvalue:\r
+ CApp = CApp + ' PcdArraySize = %d < sizeof(%s) * %d ? %d: sizeof(%s) * %d;\n ' % (ValueSize,Pcd.BaseDatumType,pcdarraysize,ValueSize,Pcd.BaseDatumType,pcdarraysize)\r
+ CApp = CApp + ' memcpy (Pcd, &%s_%s_%s_%s_Value, PcdArraySize);\n' % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName,SkuName, DefaultStoreName)\r
+ else:\r
+ CApp = CApp + ' Value = %s; // From DSC Default Value %s\n' % (DscBuildData.IntToCString(Value, ValueSize), Pcd.DefaultFromDSC.get(TAB_DEFAULT, {}).get(TAB_DEFAULT_STORES_DEFAULT, Pcd.DefaultValue) if Pcd.DefaultFromDSC else Pcd.DefaultValue)\r
+ CApp = CApp + ' memcpy (Pcd, Value, %d);\n' % (ValueSize)\r
else:\r
if isinstance(Value, str):\r
if "{CODE(" in Value:\r
- CApp = CApp + ' memcpy (Pcd, %s_%s_%s_%s_Value, sizeof(%s_%s_%s_%s_Value));\n' % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName,SkuName, DefaultStoreName,Pcd.TokenSpaceGuidCName, Pcd.TokenCName,SkuName, DefaultStoreName)\r
+ if Pcd.IsArray() and Pcd.Capacity[-1] != "-1":\r
+ pcdarraysize = Pcd.PcdArraySize()\r
+ CApp = CApp + '__STATIC_ASSERT(sizeof(%s_%s_%s_%s_Value) < %d * sizeof(%s), "Pcd %s.%s Value in Dsc exceed the array capability %s"); // From %s \n' % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName,SkuName, DefaultStoreName,pcdarraysize,Pcd.BaseDatumType,Pcd.TokenSpaceGuidCName, Pcd.TokenCName,Pcd.DatumType,valuefrom)\r
+ CApp = CApp + ' PcdArraySize = sizeof(%s_%s_%s_%s_Value);\n '% (Pcd.TokenSpaceGuidCName, Pcd.TokenCName,SkuName, DefaultStoreName)\r
+ CApp = CApp + ' memcpy (Pcd, &%s_%s_%s_%s_Value, PcdArraySize);\n' % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName,SkuName, DefaultStoreName)\r
else:\r
CApp = CApp + ' Pcd = %s; // From DSC Default Value %s\n' % (Value, Pcd.DscRawValue.get(SkuName, {}).get(DefaultStoreName))\r
elif IsArray:\r
- #\r
- # Use memcpy() to copy value into field\r
- #\r
- if Pcd.IsArray() and "{CODE(" in pcddefaultvalue:\r
- CApp = CApp + ' memcpy (Pcd, %s_%s_%s_%s_Value, sizeof(%s_%s_%s_%s_Value));\n' % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName,SkuName, DefaultStoreName,Pcd.TokenSpaceGuidCName, Pcd.TokenCName,SkuName, DefaultStoreName)\r
+ #\r
+ # Use memcpy() to copy value into field\r
+ #\r
+ if Pcd.IsArray():\r
+ pcdarraysize = Pcd.PcdArraySize()\r
+ if "{CODE(" in pcddefaultvalue:\r
+ if Pcd.Capacity[-1] != "-1":\r
+ CApp = CApp + '__STATIC_ASSERT(sizeof(%s_%s_%s_%s_Value) < %d * sizeof(%s), "Pcd %s.%s Value in Dsc exceed the array capability %s"); // From %s \n' % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName,SkuName, DefaultStoreName,pcdarraysize,Pcd.BaseDatumType,Pcd.TokenSpaceGuidCName, Pcd.TokenCName,Pcd.DatumType,valuefrom)\r
+ CApp + ' PcdArraySize = sizeof(%s_%s_%s_%s_Value);\n ' % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName,SkuName, DefaultStoreName)\r
+ CApp = CApp + ' memcpy (Pcd, %s_%s_%s_%s_Value, PcdArraySize);\n' % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName,SkuName, DefaultStoreName)\r
+ else:\r
+ if Pcd.Capacity[-1] != "-1":\r
+ CApp = CApp + '__STATIC_ASSERT(%d < %d * sizeof(%s), "Pcd %s.%s Value in Dsc exceed the array capability %s"); // From %s \n' % (ValueSize,pcdarraysize,Pcd.BaseDatumType,Pcd.TokenSpaceGuidCName, Pcd.TokenCName,Pcd.DatumType,valuefrom)\r
+ CApp = CApp + ' PcdArraySize = %d;\n' % ValueSize\r
+ CApp = CApp + ' Value = %s; // From DSC Default Value %s\n' % (DscBuildData.IntToCString(Value, ValueSize), Pcd.DscRawValue.get(TAB_DEFAULT, {}).get(TAB_DEFAULT_STORES_DEFAULT, Pcd.DefaultValue) if Pcd.DefaultFromDSC else Pcd.DefaultValue)\r
+ CApp = CApp + ' memcpy (Pcd, Value, PcdArraySize);\n'\r
else:\r
- CApp = CApp + ' Value = %s; // From DSC Default Value %s\n' % (DscBuildData.IntToCString(Value, ValueSize), Pcd.DscRawValue.get(SkuName, {}).get(DefaultStoreName))\r
- CApp = CApp + ' memcpy (Pcd, Value, %d);\n' % (ValueSize)\r
+ if "{CODE(" in pcddefaultvalue:\r
+ CApp = CApp + ' PcdArraySize = %d < sizeof(%s) * %d ? %d: sizeof(%s) * %d;\n ' % (ValueSize,Pcd.BaseDatumType,pcdarraysize,ValueSize,Pcd.BaseDatumType,pcdarraysize)\r
+ CApp = CApp + ' memcpy (Pcd, &%s_%s_%s_%s_Value, PcdArraySize);\n' % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName,SkuName, DefaultStoreName)\r
+ else:\r
+ CApp = CApp + ' Value = %s; // From DSC Default Value %s\n' % (DscBuildData.IntToCString(Value, ValueSize), Pcd.DscRawValue.get(SkuName, {}).get(DefaultStoreName))\r
+ CApp = CApp + ' memcpy (Pcd, Value, %d);\n' % (ValueSize)\r
\r
inheritvalue = inherit_OverrideValues.get(DefaultStoreName)\r
if not inheritvalue:\r
# OFFSET_OF(FlexbleArrayField) + sizeof(FlexibleArray[0]) * (HighestIndex + 1)\r
#\r
CApp = CApp + DscBuildData.GenerateSizeStatments(Pcd,SkuName,DefaultStoreName)\r
+ if Pcd.IsArray() and Pcd.Capacity[-1] != "-1":\r
+ CApp = CApp + ' OriginalSize = OriginalSize < sizeof(%s) * %d? OriginalSize:sizeof(%s) * %d; \n' % (Pcd.BaseDatumType,Pcd.PcdArraySize(),Pcd.BaseDatumType,Pcd.PcdArraySize())\r
+ CApp = CApp + ' Size = sizeof(%s) * %d; \n' % (Pcd.BaseDatumType,Pcd.PcdArraySize())\r
\r
#\r
# Allocate and zero buffer for the PCD\r
CApp = ""\r
if not Pcd:\r
return CApp\r
- if not Pcd.IsArray():\r
- return CApp\r
Demesion = ""\r
for d in Pcd.Capacity:\r
Demesion += "[]"\r
for defaultstore in skuinfo.DefaultStoreDict:\r
pcddscrawdefaultvalue = self.GetPcdDscRawDefaultValue(Pcd, skuname, defaultstore)\r
if pcddscrawdefaultvalue:\r
- Value = skuinfo[defaultstore]\r
+ Value = skuinfo.DefaultStoreDict[defaultstore]\r
if "{CODE(" in Value:\r
realvalue = Value.strip()[6:-2] # "{CODE(").rstrip(")}"\r
CApp += "static %s %s_%s_%s_%s_Value%s = %s;\n" % (Pcd.BaseDatumType,Pcd.TokenSpaceGuidCName,Pcd.TokenCName,skuname,defaultstore,Demesion,realvalue)\r
elif len(ArchBuildOptions.keys()) > 1:\r
CommonBuildOptions = reduce(lambda x,y: x&y, ArchBuildOptions.values())\r
BuildOptions['COMMON'] |= CommonBuildOptions\r
- ValueList = list(BuildOptions['COMMON'])\r
+ ValueList = [item for item in BuildOptions['COMMON'] if item.startswith((r"/U","-U"))]\r
+ ValueList.extend([item for item in BuildOptions['COMMON'] if item.startswith((r"/D", "-D"))])\r
CC_FLAGS += " ".join(ValueList)\r
MakeApp += CC_FLAGS\r
\r
if SkuName not in AvailableSkuIdSet:\r
EdkLogger.error('build', PARAMETER_INVALID, 'Sku %s is not defined in [SkuIds] section' % SkuName,\r
File=self.MetaFile, Line=Dummy5)\r
- if "." not in TokenSpaceGuid and "[" not in PcdCName:\r
+ if "." not in TokenSpaceGuid and "[" not in PcdCName and (PcdCName, TokenSpaceGuid, SkuName, Dummy5) not in PcdList:\r
PcdList.append((PcdCName, TokenSpaceGuid, SkuName, Dummy5))\r
PcdDict[Arch, SkuName, PcdCName, TokenSpaceGuid] = Setting\r
\r
\r
if SkuName not in Pcds[PcdCName, TokenSpaceGuid].DscRawValue:\r
Pcds[PcdCName, TokenSpaceGuid].DscRawValue[SkuName] = {}\r
+ Pcds[PcdCName, TokenSpaceGuid].DscRawValueInfo[SkuName] = {}\r
Pcds[PcdCName, TokenSpaceGuid].DscRawValue[SkuName][TAB_DEFAULT_STORES_DEFAULT] = PcdValue\r
+ Pcds[PcdCName, TokenSpaceGuid].DscRawValueInfo[SkuName][TAB_DEFAULT_STORES_DEFAULT] = (self.MetaFile.File,Dummy4)\r
\r
for pcd in Pcds.values():\r
pcdDecObject = self._DecPcds[pcd.TokenCName, pcd.TokenSpaceGuidCName]\r
# PCD settings for certain ARCH and SKU\r
#\r
PcdDict = tdict(True, 5)\r
- PcdSet = set()\r
+ PcdList = []\r
RecordList = self._RawData[Type, self._Arch]\r
# Find out all possible PCD candidates for self._Arch\r
AvailableSkuIdSet = copy.copy(self.SkuIds)\r
if DefaultStore not in DefaultStoresDefine:\r
EdkLogger.error('build', PARAMETER_INVALID, 'DefaultStores %s is not defined in [DefaultStores] section' % DefaultStore,\r
File=self.MetaFile, Line=Dummy5)\r
- if "." not in TokenSpaceGuid and "[" not in PcdCName:\r
- PcdSet.add((PcdCName, TokenSpaceGuid, SkuName, DefaultStore, Dummy5))\r
+ if "." not in TokenSpaceGuid and "[" not in PcdCName and (PcdCName, TokenSpaceGuid, SkuName, DefaultStore, Dummy5) not in PcdList:\r
+ PcdList.append((PcdCName, TokenSpaceGuid, SkuName, DefaultStore, Dummy5))\r
PcdDict[Arch, SkuName, PcdCName, TokenSpaceGuid, DefaultStore] = Setting\r
\r
\r
# Remove redundant PCD candidates, per the ARCH and SKU\r
- for PcdCName, TokenSpaceGuid, SkuName, DefaultStore, Dummy4 in PcdSet:\r
+ for PcdCName, TokenSpaceGuid, SkuName, DefaultStore, Dummy4 in PcdList:\r
\r
Setting = PcdDict[self._Arch, SkuName, PcdCName, TokenSpaceGuid, DefaultStore]\r
if Setting is None:\r
Pcds[PcdCName, TokenSpaceGuid].CustomAttribute['DscPosition'] = int(Dummy4)\r
if SkuName not in Pcds[PcdCName, TokenSpaceGuid].DscRawValue:\r
Pcds[PcdCName, TokenSpaceGuid].DscRawValue[SkuName] = {}\r
+ Pcds[PcdCName, TokenSpaceGuid].DscRawValueInfo[SkuName] = {}\r
Pcds[PcdCName, TokenSpaceGuid].DscRawValue[SkuName][DefaultStore] = DefaultValue\r
+ Pcds[PcdCName, TokenSpaceGuid].DscRawValueInfo[SkuName][DefaultStore] = (self.MetaFile.File,Dummy4)\r
for pcd in Pcds.values():\r
pcdDecObject = self._DecPcds[pcd.TokenCName, pcd.TokenSpaceGuidCName]\r
pcd.DatumType = pcdDecObject.DatumType\r
if SkuName not in AvailableSkuIdSet:\r
EdkLogger.error('build', PARAMETER_INVALID, 'Sku %s is not defined in [SkuIds] section' % SkuName,\r
File=self.MetaFile, Line=Dummy5)\r
- if "." not in TokenSpaceGuid and "[" not in PcdCName:\r
+ if "." not in TokenSpaceGuid and "[" not in PcdCName and (PcdCName, TokenSpaceGuid, SkuName, Dummy5) not in PcdList:\r
PcdList.append((PcdCName, TokenSpaceGuid, SkuName, Dummy5))\r
PcdDict[Arch, SkuName, PcdCName, TokenSpaceGuid] = Setting\r
\r
\r
if SkuName not in Pcds[PcdCName, TokenSpaceGuid].DscRawValue:\r
Pcds[PcdCName, TokenSpaceGuid].DscRawValue[SkuName] = {}\r
+ Pcds[PcdCName, TokenSpaceGuid].DscRawValueInfo[SkuName] = {}\r
Pcds[PcdCName, TokenSpaceGuid].DscRawValue[SkuName][TAB_DEFAULT_STORES_DEFAULT] = InitialValue\r
+ Pcds[PcdCName, TokenSpaceGuid].DscRawValueInfo[SkuName][TAB_DEFAULT_STORES_DEFAULT] = (self.MetaFile.File,Dummy4)\r
for pcd in Pcds.values():\r
pcdDecObject = self._DecPcds[pcd.TokenCName, pcd.TokenSpaceGuidCName]\r
pcd.DatumType = pcdDecObject.DatumType\r