from Common.DataType import *\r
from Common.Misc import *\r
from types import *\r
-\r
+from Common.Expression import *\r
from CommonDataClass.CommonClass import SkuInfoClass\r
from Common.TargetTxtClassObject import *\r
from Common.ToolDefClassObject import *\r
return Pcds\r
\r
def RecoverCommandLinePcd(self):\r
- pcdset = []\r
- if GlobalData.BuildOptionPcd:\r
- for pcd in GlobalData.BuildOptionPcd:\r
- if pcd[2] == "":\r
- pcdset.append((pcd[0],pcd[1],pcd[3]))\r
- else:\r
- if (pcd[1],pcd[0]) not in self._Pcds:\r
- pcdvalue = pcd[3] if len(pcd) == 4 else pcd[2]\r
- pcdset.append((pcd[0],pcd[1],pcdvalue))\r
- #else:\r
- # remove the settings from command line since it has been handled.\r
- GlobalData.BuildOptionPcd = pcdset\r
- def GetFieldValueFromComm(self,ValueStr,TokenSpaceGuidCName, TokenCName, FieldName):\r
- PredictedFieldType = "VOID*"\r
- if ValueStr.startswith('L'):\r
- if not ValueStr[1]:\r
- EdkLogger.error("build", FORMAT_INVALID, 'For Void* type PCD, when specify the Value in the command line, please use the following format: "string", L"string", H"{...}"')\r
- ValueStr = ValueStr[0] + '"' + ValueStr[1:] + '"'\r
- PredictedFieldType = "VOID*"\r
- elif ValueStr.startswith('H') or ValueStr.startswith('{'):\r
- EdkLogger.error("build", FORMAT_INVALID, 'Currently we do not support assign H"{...}" format for Pcd field.', ExtraData="%s.%s.%s from command line" % (TokenSpaceGuidCName, TokenCName, FieldName))\r
- ValueStr = ValueStr[1:]\r
- PredictedFieldType = "VOID*"\r
- elif ValueStr.upper() in ['TRUE', '0X1', '0X01', '1', 'FALSE', '0X0', '0X00', '0']:\r
- PredictedFieldType = "BOOLEAN"\r
- elif ValueStr.isdigit() or ValueStr.upper().startswith('0X'):\r
- PredictedFieldType = TAB_UINT16\r
- else:\r
- if not ValueStr[0]:\r
- EdkLogger.error("build", FORMAT_INVALID, 'For Void* type PCD, when specify the Value in the command line, please use the following format: "string", L"string", H"{...}"')\r
- ValueStr = '"' + ValueStr + '"'\r
- PredictedFieldType = "VOID*"\r
- IsValid, Cause = CheckPcdDatum(PredictedFieldType, ValueStr)\r
- if not IsValid:\r
- EdkLogger.error("build", FORMAT_INVALID, Cause, ExtraData="%s.%s.%s from command line" % (TokenSpaceGuidCName, TokenCName, FieldName))\r
- if PredictedFieldType == 'BOOLEAN':\r
- ValueStr = ValueStr.upper()\r
- if ValueStr == 'TRUE' or ValueStr == '1':\r
- ValueStr = '1'\r
- elif ValueStr == 'FALSE' or ValueStr == '0':\r
- ValueStr = '0'\r
- return ValueStr\r
+ def UpdateCommandLineValue(pcd):\r
+ if pcd.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_FIXED_AT_BUILD],\r
+ self._PCD_TYPE_STRING_[MODEL_PCD_PATCHABLE_IN_MODULE]]:\r
+ pcd.PcdValueFromComm = pcd.DefaultValue\r
+ elif pcd.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII], self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX_HII]]:\r
+ pcd.PcdValueFromComm = pcd.SkuInfoList.get("DEFAULT").HiiDefaultValue\r
+ else:\r
+ pcd.PcdValueFromComm = pcd.SkuInfoList.get("DEFAULT").DefaultValue\r
+ for pcd in self._Pcds:\r
+ if isinstance(self._Pcds[pcd],StructurePcd) and (self._Pcds[pcd].PcdValueFromComm or self._Pcds[pcd].PcdFieldValueFromComm):\r
+ UpdateCommandLineValue(self._Pcds[pcd])\r
+\r
def __ParsePcdFromCommandLine(self):\r
if GlobalData.BuildOptionPcd:\r
for i, pcd in enumerate(GlobalData.BuildOptionPcd):\r
TokenSpaceGuidCNameList = []\r
FoundFlag = False\r
PcdDatumType = ''\r
- NewValue = ''\r
+ DisplayName = TokenCName\r
+ if FieldName:\r
+ DisplayName = TokenCName + '.' + FieldName\r
if not HasTokenSpace:\r
for key in self.DecPcds:\r
- if TokenCName == key[0]:\r
- if TokenSpaceGuidCName:\r
- EdkLogger.error(\r
- 'build',\r
- AUTOGEN_ERROR,\r
- "The Pcd %s is found under multiple different TokenSpaceGuid: %s and %s." % (TokenCName, TokenSpaceGuidCName, key[1])\r
- )\r
- else:\r
- TokenSpaceGuidCName = key[1]\r
- FoundFlag = True\r
+ PcdItem = self.DecPcds[key]\r
+ if TokenCName == PcdItem.TokenCName:\r
+ if not PcdItem.TokenSpaceGuidCName in TokenSpaceGuidCNameList:\r
+ if len (TokenSpaceGuidCNameList) < 1:\r
+ TokenSpaceGuidCNameList.append(PcdItem.TokenSpaceGuidCName)\r
+ TokenSpaceGuidCName = PcdItem.TokenSpaceGuidCName\r
+ PcdDatumType = PcdItem.DatumType\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." % (DisplayName, PcdItem.TokenSpaceGuidCName, TokenSpaceGuidCNameList[0])\r
+ )\r
else:\r
if (TokenCName, TokenSpaceGuidCName) in self.DecPcds:\r
FoundFlag = True\r
- if FieldName:\r
- NewValue = self.GetFieldValueFromComm(pcdvalue, TokenSpaceGuidCName, TokenCName, FieldName)\r
- GlobalData.BuildOptionPcd[i] = (TokenSpaceGuidCName, TokenCName, FieldName,NewValue,("build command options",1))\r
- else:\r
- # Replace \' to ', \\\' to \'\r
- pcdvalue = pcdvalue.replace("\\\\\\'", '\\\\\\"').replace('\\\'', '\'').replace('\\\\\\"', "\\'")\r
- for key in self.DecPcds:\r
- PcdItem = self.DecPcds[key]\r
- if HasTokenSpace:\r
- if (PcdItem.TokenCName, PcdItem.TokenSpaceGuidCName) == (TokenCName, TokenSpaceGuidCName):\r
- PcdDatumType = PcdItem.DatumType\r
- if pcdvalue.startswith('H'):\r
- try:\r
- pcdvalue = ValueExpressionEx(pcdvalue[1:], PcdDatumType, self._GuidDict)(True)\r
- except BadExpression, Value:\r
- EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %\r
- (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))\r
- if PcdDatumType not in [TAB_UINT8, TAB_UINT16, TAB_UINT32, TAB_UINT64, 'BOOLEAN']:\r
- pcdvalue = 'H' + pcdvalue\r
- elif pcdvalue.startswith("L'"):\r
- try:\r
- pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(True)\r
- except BadExpression, Value:\r
- EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %\r
- (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))\r
- if PcdDatumType not in [TAB_UINT8, TAB_UINT16, TAB_UINT32, TAB_UINT64, 'BOOLEAN']:\r
- pcdvalue = 'H' + pcdvalue\r
- elif pcdvalue.startswith("'"):\r
- try:\r
- pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(True)\r
- except BadExpression, Value:\r
- EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %\r
- (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))\r
- if PcdDatumType not in [TAB_UINT8, TAB_UINT16, TAB_UINT32, TAB_UINT64, 'BOOLEAN']:\r
- pcdvalue = 'H' + pcdvalue\r
- elif pcdvalue.startswith('L'):\r
- pcdvalue = 'L"' + pcdvalue[1:] + '"'\r
- try:\r
- pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(True)\r
- except BadExpression, Value:\r
- EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %\r
- (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))\r
- else:\r
- try:\r
- pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(True)\r
- except BadExpression, Value:\r
- try:\r
- pcdvalue = '"' + pcdvalue + '"'\r
- pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(True)\r
- except BadExpression, Value:\r
- EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %\r
- (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))\r
- NewValue = 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
- if pcdvalue.startswith('H'):\r
- try:\r
- pcdvalue = ValueExpressionEx(pcdvalue[1:], PcdDatumType, self._GuidDict)(True)\r
- except BadExpression, Value:\r
- EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %\r
- (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))\r
- if PcdDatumType not in [TAB_UINT8, TAB_UINT16, TAB_UINT32, TAB_UINT64,'BOOLEAN']:\r
- pcdvalue = 'H' + pcdvalue\r
- elif pcdvalue.startswith("L'"):\r
- try:\r
- pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(\r
- True)\r
- except BadExpression, Value:\r
- EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %\r
- (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))\r
- if PcdDatumType not in [TAB_UINT8, TAB_UINT16, TAB_UINT32, TAB_UINT64, 'BOOLEAN']:\r
- pcdvalue = 'H' + pcdvalue\r
- elif pcdvalue.startswith("'"):\r
- try:\r
- pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(\r
- True)\r
- except BadExpression, Value:\r
- EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %\r
- (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))\r
- if PcdDatumType not in [TAB_UINT8, TAB_UINT16, TAB_UINT32, TAB_UINT64, 'BOOLEAN']:\r
- pcdvalue = 'H' + pcdvalue\r
- elif pcdvalue.startswith('L'):\r
- pcdvalue = 'L"' + pcdvalue[1:] + '"'\r
- try:\r
- pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(\r
- True)\r
- except BadExpression, Value:\r
- EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %\r
- (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))\r
- else:\r
- try:\r
- pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(True)\r
- except BadExpression, Value:\r
- try:\r
- pcdvalue = '"' + pcdvalue + '"'\r
- pcdvalue = ValueExpressionEx(pcdvalue, PcdDatumType, self._GuidDict)(True)\r
- except BadExpression, Value:\r
- EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %\r
- (TokenSpaceGuidCName, TokenCName, pcdvalue, Value))\r
- NewValue = 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
- GlobalData.BuildOptionPcd[i] = (TokenSpaceGuidCName, TokenCName, FieldName,NewValue,("build command options",1))\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
+ EdkLogger.error('build', AUTOGEN_ERROR, "The Pcd %s.%s is not found in the DEC file." % (TokenSpaceGuidCName, DisplayName))\r
else:\r
- EdkLogger.error('build', AUTOGEN_ERROR, "The Pcd %s is not found in the DEC file." % (TokenCName))\r
+ EdkLogger.error('build', AUTOGEN_ERROR, "The Pcd %s is not found in the DEC file." % (DisplayName))\r
+ pcdvalue = pcdvalue.replace("\\\\\\'", '\\\\\\"').replace('\\\'', '\'').replace('\\\\\\"', "\\'")\r
+ if FieldName:\r
+ pcdvalue = self.HandleFlexiblePcd(TokenSpaceGuidCName, TokenCName, pcdvalue, PcdDatumType, self._GuidDict, FieldName)\r
+ else:\r
+ pcdvalue = self.HandleFlexiblePcd(TokenSpaceGuidCName, TokenCName, pcdvalue, PcdDatumType, self._GuidDict)\r
+ IsValid, Cause = CheckPcdDatum(PcdDatumType, pcdvalue)\r
+ if not IsValid:\r
+ EdkLogger.error("build", FORMAT_INVALID, Cause, ExtraData="%s.%s" % (TokenSpaceGuidCName, TokenCName))\r
+ GlobalData.BuildOptionPcd[i] = (TokenSpaceGuidCName, TokenCName, FieldName, pcdvalue,("build command options",1))\r
+\r
for BuildData in self._Bdb._CACHE_.values():\r
if BuildData.MetaFile.Ext == '.dec' or BuildData.MetaFile.Ext == '.dsc':\r
continue\r
for key in BuildData.Pcds:\r
PcdItem = BuildData.Pcds[key]\r
if (TokenSpaceGuidCName, TokenCName) == (PcdItem.TokenSpaceGuidCName, PcdItem.TokenCName) and FieldName =="":\r
- PcdItem.DefaultValue = NewValue\r
+ PcdItem.DefaultValue = pcdvalue\r
+\r
+ def HandleFlexiblePcd(self, TokenSpaceGuidCName, TokenCName, PcdValue, PcdDatumType, GuidDict, FieldName=''):\r
+ if FieldName:\r
+ IsArray = False\r
+ TokenCName += '.' + FieldName\r
+ if PcdValue.startswith('H'):\r
+ if FieldName and IsFieldValueAnArray(PcdValue[1:]):\r
+ PcdDatumType = 'VOID*'\r
+ IsArray = True\r
+ if FieldName and not IsArray:\r
+ return PcdValue\r
+ try:\r
+ PcdValue = ValueExpressionEx(PcdValue[1:], PcdDatumType, GuidDict)(True)\r
+ except BadExpression, Value: \r
+ EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %\r
+ (TokenSpaceGuidCName, TokenCName, PcdValue, Value))\r
+ elif PcdValue.startswith("L'") or PcdValue.startswith("'"):\r
+ if FieldName and IsFieldValueAnArray(PcdValue):\r
+ PcdDatumType = 'VOID*'\r
+ IsArray = True\r
+ if FieldName and not IsArray:\r
+ return PcdValue\r
+ try:\r
+ PcdValue = ValueExpressionEx(PcdValue, PcdDatumType, GuidDict)(True)\r
+ except BadExpression, Value:\r
+ EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %\r
+ (TokenSpaceGuidCName, TokenCName, PcdValue, Value))\r
+ elif PcdValue.startswith('L'):\r
+ PcdValue = 'L"' + PcdValue[1:] + '"'\r
+ if FieldName and IsFieldValueAnArray(PcdValue):\r
+ PcdDatumType = 'VOID*'\r
+ IsArray = True\r
+ if FieldName and not IsArray:\r
+ return PcdValue\r
+ try:\r
+ PcdValue = ValueExpressionEx(PcdValue, PcdDatumType, GuidDict)(True)\r
+ except BadExpression, Value:\r
+ EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %\r
+ (TokenSpaceGuidCName, TokenCName, PcdValue, Value))\r
+ else:\r
+ if PcdValue.upper() == 'FALSE':\r
+ PcdValue = str(0)\r
+ if PcdValue.upper() == 'TRUE':\r
+ PcdValue = str(1)\r
+ if not FieldName:\r
+ if PcdDatumType not in ['UINT8','UINT16','UINT32','UINT64','BOOLEAN']:\r
+ PcdValue = '"' + PcdValue + '"'\r
+ else:\r
+ IsArray = False\r
+ Base = 10\r
+ if PcdValue.upper().startswith('0X'):\r
+ Base = 16\r
+ try:\r
+ Num = int(PcdValue, Base)\r
+ except:\r
+ PcdValue = '"' + PcdValue + '"'\r
+ if IsFieldValueAnArray(PcdValue):\r
+ PcdDatumType = 'VOID*'\r
+ IsArray = True\r
+ if not IsArray:\r
+ return PcdValue\r
+ try:\r
+ PcdValue = ValueExpressionEx(PcdValue, PcdDatumType, GuidDict)(True)\r
+ except BadExpression, Value:\r
+ EdkLogger.error('Parser', FORMAT_INVALID, 'PCD [%s.%s] Value "%s", %s' %\r
+ (TokenSpaceGuidCName, TokenCName, PcdValue, Value))\r
+ return PcdValue\r
+\r
## Retrieve all PCD settings in platform\r
def _GetPcds(self):\r
if self._Pcds == None:\r
if isinstance(self._DecPcds.get((Pcd.TokenCName,Pcd.TokenSpaceGuidCName), None),StructurePcd):\r
self._DecPcds.get((Pcd.TokenCName,Pcd.TokenSpaceGuidCName)).PcdValueFromComm = NoFiledValues[(Pcd.TokenSpaceGuidCName,Pcd.TokenCName)][0]\r
else:\r
+ Pcd.PcdValueFromComm = NoFiledValues[(Pcd.TokenSpaceGuidCName,Pcd.TokenCName)][0]\r
Pcd.DefaultValue = NoFiledValues[(Pcd.TokenSpaceGuidCName,Pcd.TokenCName)][0]\r
for sku in Pcd.SkuInfoList:\r
SkuInfo = Pcd.SkuInfoList[sku]\r
else:\r
PcdInDec = self.DecPcds.get((Name,Guid))\r
if PcdInDec:\r
+ PcdInDec.PcdValueFromComm = NoFiledValues[(Guid,Name)][0]\r
if PcdInDec.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_FIXED_AT_BUILD],\r
self._PCD_TYPE_STRING_[MODEL_PCD_PATCHABLE_IN_MODULE]]:\r
self.Pcds[Name, Guid] = copy.deepcopy(PcdInDec)\r
\r
return str(max([pcd_size for pcd_size in [get_length(item) for item in sku_values]]))\r
\r
- def IsFieldValueAnArray (self, Value):\r
- Value = Value.strip()\r
- if Value.startswith('GUID') and Value.endswith(')'):\r
- return True\r
- if Value.startswith('L"') and Value.endswith('"') and len(list(Value[2:-1])) > 1:\r
- return True\r
- if Value[0] == '"' and Value[-1] == '"' and len(list(Value[1:-1])) > 1:\r
- return True\r
- if Value[0] == '{' and Value[-1] == '}':\r
- return True\r
- if Value.startswith("L'") and Value.endswith("'") and len(list(Value[2:-1])) > 1:\r
- return True\r
- if Value[0] == "'" and Value[-1] == "'" and len(list(Value[1:-1])) > 1:\r
- return True\r
- return False\r
-\r
def ExecuteCommand (self, Command):\r
try:\r
Process = subprocess.Popen(Command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)\r
continue\r
for FieldName in FieldList:\r
FieldName = "." + FieldName\r
- IsArray = self.IsFieldValueAnArray(FieldList[FieldName.strip(".")][0])\r
+ IsArray = IsFieldValueAnArray(FieldList[FieldName.strip(".")][0])\r
if IsArray and not (FieldList[FieldName.strip(".")][0].startswith('{GUID') and FieldList[FieldName.strip(".")][0].endswith('}')):\r
try:\r
Value = ValueExpressionEx(FieldList[FieldName.strip(".")][0], "VOID*", self._GuidDict)(True)\r
continue\r
for FieldName in FieldList:\r
FieldName = "." + FieldName\r
- IsArray = self.IsFieldValueAnArray(FieldList[FieldName.strip(".")][0])\r
+ IsArray = IsFieldValueAnArray(FieldList[FieldName.strip(".")][0])\r
if IsArray and not (FieldList[FieldName.strip(".")][0].startswith('{GUID') and FieldList[FieldName.strip(".")][0].endswith('}')):\r
try:\r
Value = ValueExpressionEx(FieldList[FieldName.strip(".")][0], "VOID*", self._GuidDict)(True)\r
CApp = CApp + "// From Command Line \n"\r
for FieldName in Pcd.PcdFieldValueFromComm:\r
FieldName = "." + FieldName\r
- IsArray = self.IsFieldValueAnArray(FieldList[FieldName.strip(".")][0])\r
- if IsArray and not (FieldList[FieldName.strip(".")][0].startswith('{GUID') and FieldList[FieldName.strip(".")][0].endswith('}')):\r
+ IsArray = IsFieldValueAnArray(Pcd.PcdFieldValueFromComm[FieldName.strip(".")][0])\r
+ if IsArray and not (Pcd.PcdFieldValueFromComm[FieldName.strip(".")][0].startswith('{GUID') and Pcd.PcdFieldValueFromComm[FieldName.strip(".")][0].endswith('}')):\r
try:\r
- Value = ValueExpressionEx(FieldList[FieldName.strip(".")][0], "VOID*", self._GuidDict)(True)\r
+ Value = ValueExpressionEx(Pcd.PcdFieldValueFromComm[FieldName.strip(".")][0], "VOID*", self._GuidDict)(True)\r
except BadExpression:\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
+ (".".join((Pcd.TokenSpaceGuidCName, Pcd.TokenCName, FieldName.strip('.'))), Pcd.PcdFieldValueFromComm[FieldName.strip(".")][1], Pcd.PcdFieldValueFromComm[FieldName.strip(".")][2]))\r
Value, ValueSize = ParseFieldValue(Value)\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
+ 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
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 %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("."), ArrayIndex + 1, Pcd.PcdFieldValueFromComm[FieldName_ori][1], Pcd.PcdFieldValueFromComm[FieldName_ori][2], Pcd.PcdFieldValueFromComm[FieldName_ori][0])\r
CApp = CApp + " *Size = (%d > *Size ? %d : *Size); // The Pcd maxsize is %d \n" % (self.GetPcdMaxSize(Pcd),self.GetPcdMaxSize(Pcd),self.GetPcdMaxSize(Pcd))\r
CApp = CApp + "}\n"\r
return CApp\r
CApp = CApp + ' UINT32 FieldSize;\n'\r
CApp = CApp + ' CHAR8 *Value;\n'\r
DefaultValueFromDec = Pcd.DefaultValueFromDec\r
- IsArray = self.IsFieldValueAnArray(Pcd.DefaultValueFromDec)\r
+ IsArray = IsFieldValueAnArray(Pcd.DefaultValueFromDec)\r
if IsArray:\r
try:\r
DefaultValueFromDec = ValueExpressionEx(Pcd.DefaultValueFromDec, "VOID*")(True)\r
except BadExpression:\r
EdkLogger.error("Build", FORMAT_INVALID, "Invalid value format for %s.%s, from DEC: %s" %\r
(Pcd.TokenSpaceGuidCName, Pcd.TokenCName, DefaultValueFromDec))\r
+ DefaultValueFromDec = StringToArray(DefaultValueFromDec)\r
Value, ValueSize = ParseFieldValue (DefaultValueFromDec)\r
if isinstance(Value, str):\r
CApp = CApp + ' Pcd = %s; // From DEC Default Value %s\n' % (Value, Pcd.DefaultValueFromDec)\r
if not FieldList:\r
continue\r
for FieldName in FieldList:\r
- IsArray = self.IsFieldValueAnArray(FieldList[FieldName][0])\r
+ IsArray = IsFieldValueAnArray(FieldList[FieldName][0])\r
if IsArray:\r
try:\r
FieldList[FieldName][0] = ValueExpressionEx(FieldList[FieldName][0], "VOID*", self._GuidDict)(True)\r
if not FieldList:\r
continue\r
if pcddefaultvalue and FieldList == pcddefaultvalue:\r
- IsArray = self.IsFieldValueAnArray(FieldList)\r
+ IsArray = IsFieldValueAnArray(FieldList)\r
if IsArray:\r
try:\r
FieldList = ValueExpressionEx(FieldList, "VOID*")(True)\r
continue\r
if (SkuName,DefaultStoreName) == ('DEFAULT','STANDARD') or (( (SkuName,'') not in Pcd.ValueChain) and ( (SkuName,DefaultStoreName) not in Pcd.ValueChain )):\r
for FieldName in FieldList:\r
- IsArray = self.IsFieldValueAnArray(FieldList[FieldName][0])\r
+ IsArray = IsFieldValueAnArray(FieldList[FieldName][0])\r
if IsArray:\r
try:\r
FieldList[FieldName][0] = ValueExpressionEx(FieldList[FieldName][0], "VOID*", self._GuidDict)(True)\r
if not FieldList:\r
continue\r
if pcddefaultvalue and FieldList == pcddefaultvalue:\r
- IsArray = self.IsFieldValueAnArray(FieldList)\r
+ IsArray = IsFieldValueAnArray(FieldList)\r
if IsArray:\r
try:\r
FieldList = ValueExpressionEx(FieldList, "VOID*")(True)\r
except BadExpression:\r
- EdkLogger.error("Build", FORMAT_INVALID, "Invalid value format for %s.%s, from DSC: %s" %\r
+ EdkLogger.error("Build", FORMAT_INVALID, "Invalid value format for %s.%s, from Command: %s" %\r
(Pcd.TokenSpaceGuidCName, Pcd.TokenCName, FieldList))\r
Value, ValueSize = ParseFieldValue (FieldList)\r
\r
CApp = CApp + ' memcpy (Pcd, Value, %d);\n' % (ValueSize)\r
continue\r
for FieldName in FieldList:\r
- IsArray = self.IsFieldValueAnArray(FieldList[FieldName][0])\r
+ IsArray = IsFieldValueAnArray(FieldList[FieldName][0])\r
if IsArray:\r
try:\r
FieldList[FieldName][0] = ValueExpressionEx(FieldList[FieldName][0], "VOID*", self._GuidDict)(True)\r