## @file\r
# This file is used to create a database used by build tool\r
#\r
-# Copyright (c) 2008 - 2018, Intel Corporation. All rights reserved.<BR>\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
from types import *\r
from Common.Expression import *\r
from CommonDataClass.CommonClass import SkuInfoClass\r
-from Common.TargetTxtClassObject import *\r
-from Common.ToolDefClassObject import *\r
+from Common.TargetTxtClassObject import TargetTxtClassObject\r
+from Common.ToolDefClassObject import ToolDefClassObject\r
from .MetaDataTable import *\r
from .MetaFileTable import *\r
from .MetaFileParser import *\r
\r
from .WorkspaceCommon import GetDeclaredPcd\r
from Common.Misc import AnalyzeDscPcd\r
-from Common.Misc import ProcessDuplicatedInf\r
+from Common.Misc import ProcessDuplicatedInf,RemoveCComments\r
import re\r
from Common.Parsing import IsValidWord\r
from Common.VariableAttributes import VariableAttributes\r
import Common.GlobalData as GlobalData\r
import subprocess\r
+from functools import reduce\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 Value.startswith(TAB_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
PcdValueInitName = 'PcdValueInit'\r
\r
PcdMainCHeader = '''\r
if len(FileContent) == 0:\r
continue\r
\r
- if FileContent[0] == 0xff or FileContent[0] == 0xfe:\r
- FileContent = unicode(FileContent, "utf-16")\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
\r
## Retrieve all information in [Defines] section\r
#\r
- # (Retriving all [Defines] information in one-shot is just to save time.)\r
+ # (Retrieving all [Defines] information in one-shot is just to save time.)\r
#\r
def _GetHeaderInfo(self):\r
RecordList = self._RawData[MODEL_META_DATA_HEADER, self._Arch]\r
GlobalData.gDefaultStores = sorted(self.DefaultStores.keys())\r
return self.DefaultStores\r
\r
+ def OverrideDuplicateModule(self):\r
+ RecordList = self._RawData[MODEL_META_DATA_COMPONENT, self._Arch]\r
+ Macros = self._Macros\r
+ Components = {}\r
+ for Record in RecordList:\r
+ ModuleId = Record[6]\r
+ file_guid = self._RawData[MODEL_META_DATA_HEADER, self._Arch, None, ModuleId]\r
+ file_guid_str = file_guid[0][2] if file_guid else "NULL"\r
+ ModuleFile = PathClass(NormPath(Record[0], Macros), GlobalData.gWorkspace, Arch=self._Arch)\r
+ if self._Arch != TAB_ARCH_COMMON and (file_guid_str,str(ModuleFile)) in Components:\r
+ self._RawData.DisableOverrideComponent(Components[(file_guid_str,str(ModuleFile))])\r
+ Components[(file_guid_str,str(ModuleFile))] = ModuleId\r
+ self._RawData._PostProcessed = False\r
## Retrieve [Components] section information\r
@property\r
def Modules(self):\r
if self._Modules is not None:\r
return self._Modules\r
-\r
+ self.OverrideDuplicateModule()\r
self._Modules = OrderedDict()\r
RecordList = self._RawData[MODEL_META_DATA_COMPONENT, self._Arch]\r
Macros = self._Macros\r
- Macros["EDK_SOURCE"] = GlobalData.gEcpSource\r
for Record in RecordList:\r
- DuplicatedFile = False\r
-\r
ModuleFile = PathClass(NormPath(Record[0], Macros), GlobalData.gWorkspace, Arch=self._Arch)\r
ModuleId = Record[6]\r
LineNo = Record[7]\r
if ErrorCode != 0:\r
EdkLogger.error('build', ErrorCode, File=self.MetaFile, Line=LineNo,\r
ExtraData=ErrorInfo)\r
- # Check duplication\r
- # If arch is COMMON, no duplicate module is checked since all modules in all component sections are selected\r
- if self._Arch != TAB_ARCH_COMMON and ModuleFile in self._Modules:\r
- DuplicatedFile = True\r
\r
Module = ModuleBuildClassObject()\r
Module.MetaFile = ModuleFile\r
Module.BuildOptions[ToolChainFamily, ToolChain] = OptionString + " " + Option\r
\r
RecordList = self._RawData[MODEL_META_DATA_HEADER, self._Arch, None, ModuleId]\r
- if DuplicatedFile and not RecordList:\r
- EdkLogger.error('build', FILE_DUPLICATED, File=self.MetaFile, ExtraData=str(ModuleFile), Line=LineNo)\r
if RecordList:\r
if len(RecordList) != 1:\r
EdkLogger.error('build', OPTION_UNKNOWN, 'Only FILE_GUID can be listed in <Defines> section.',\r
continue\r
self._LibraryClasses[LibraryClass, ModuleType] = LibraryInstance\r
\r
- # for Edk style library instances, which are listed in different section\r
- Macros["EDK_SOURCE"] = GlobalData.gEcpSource\r
RecordList = self._RawData[MODEL_EFI_LIBRARY_INSTANCE, self._Arch]\r
for Record in RecordList:\r
File = PathClass(NormPath(Record[0], Macros), GlobalData.gWorkspace, Arch=self._Arch)\r
return self._LibraryClasses\r
\r
def _ValidatePcd(self, PcdCName, TokenSpaceGuid, Setting, PcdType, LineNo):\r
- if self._DecPcds is None:\r
+ if not self._DecPcds:\r
\r
FdfInfList = []\r
if GlobalData.gFdfParser:\r
IsArray = False\r
TokenCName += '.' + FieldName\r
if PcdValue.startswith('H'):\r
- if FieldName and IsFieldValueAnArray(PcdValue[1:]):\r
+ if FieldName and _IsFieldValueAnArray(PcdValue[1:]):\r
PcdDatumType = TAB_VOID\r
IsArray = True\r
if FieldName and not IsArray:\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
+ if FieldName and _IsFieldValueAnArray(PcdValue):\r
PcdDatumType = TAB_VOID\r
IsArray = True\r
if FieldName and not IsArray:\r
(TokenSpaceGuidCName, TokenCName, PcdValue, Value))\r
elif PcdValue.startswith('L'):\r
PcdValue = 'L"' + PcdValue[1:] + '"'\r
- if FieldName and IsFieldValueAnArray(PcdValue):\r
+ if FieldName and _IsFieldValueAnArray(PcdValue):\r
PcdDatumType = TAB_VOID\r
IsArray = True\r
if FieldName and not IsArray:\r
Num = int(PcdValue, Base)\r
except:\r
PcdValue = '"' + PcdValue + '"'\r
- if IsFieldValueAnArray(PcdValue):\r
+ if _IsFieldValueAnArray(PcdValue):\r
PcdDatumType = TAB_VOID\r
IsArray = True\r
if not IsArray:\r
else:\r
str_pcd_obj_str.DefaultFromDSC = {skuname:{defaultstore: str_pcd_obj.SkuInfoList[skuname].DefaultStoreDict.get(defaultstore, str_pcd_obj.SkuInfoList[skuname].DefaultValue) for defaultstore in DefaultStores} for skuname in str_pcd_obj.SkuInfoList}\r
S_pcd_set[Pcd] = str_pcd_obj_str\r
- self.FilterStrcturePcd(S_pcd_set)\r
if S_pcd_set:\r
- GlobalData.gStructurePcd[self.Arch] = S_pcd_set\r
+ GlobalData.gStructurePcd[self.Arch] = S_pcd_set.copy()\r
+ self.FilterStrcturePcd(S_pcd_set)\r
for stru_pcd in S_pcd_set.values():\r
for skuid in SkuIds:\r
if skuid in stru_pcd.SkuOverrideValues:\r
stru_pcd.SkuOverrideValues[skuid] = copy.deepcopy(stru_pcd.SkuOverrideValues[nextskuid]) if not NoDefault else copy.deepcopy({defaultstorename: stru_pcd.DefaultValues for defaultstorename in DefaultStores} if DefaultStores else {}) #{TAB_DEFAULT_STORES_DEFAULT:stru_pcd.DefaultValues})\r
if not NoDefault:\r
stru_pcd.ValueChain.add((skuid, ''))\r
+ if 'DEFAULT' in stru_pcd.SkuOverrideValues and not GlobalData.gPcdSkuOverrides.get((stru_pcd.TokenCName, stru_pcd.TokenSpaceGuidCName)):\r
+ GlobalData.gPcdSkuOverrides.update(\r
+ {(stru_pcd.TokenCName, stru_pcd.TokenSpaceGuidCName): {'DEFAULT':stru_pcd.SkuOverrideValues['DEFAULT']}})\r
if stru_pcd.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII], self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX_HII]]:\r
for skuid in SkuIds:\r
nextskuid = skuid\r
\r
for str_pcd_obj in S_pcd_set.values():\r
\r
- str_pcd_obj.MaxDatumSize = self.GetStructurePcdMaxSize(str_pcd_obj)\r
+ str_pcd_obj.MaxDatumSize = DscBuildData.GetStructurePcdMaxSize(str_pcd_obj)\r
Pcds[str_pcd_obj.TokenCName, str_pcd_obj.TokenSpaceGuidCName] = str_pcd_obj\r
Pcds[str_pcd_obj.TokenCName, str_pcd_obj.TokenSpaceGuidCName].CustomAttribute['IsStru']=True\r
\r
elif TAB_DEFAULT in pcd.SkuInfoList and TAB_COMMON in pcd.SkuInfoList:\r
del pcd.SkuInfoList[TAB_COMMON]\r
\r
- map(self.FilterSkuSettings, [Pcds[pcdkey] for pcdkey in Pcds if Pcds[pcdkey].Type in DynamicPcdType])\r
+ list(map(self.FilterSkuSettings, [Pcds[pcdkey] for pcdkey in Pcds if Pcds[pcdkey].Type in DynamicPcdType]))\r
return Pcds\r
@cached_property\r
def PlatformUsedPcds(self):\r
FdfInfList = GlobalData.gFdfParser.Profile.InfList\r
FdfModuleList = [PathClass(NormPath(Inf), GlobalData.gWorkspace, Arch=self._Arch) for Inf in FdfInfList]\r
AllModulePcds = set()\r
- ModuleSet = set(self._Modules.keys() + FdfModuleList)\r
+ ModuleSet = set(list(self._Modules.keys()) + FdfModuleList)\r
for ModuleFile in ModuleSet:\r
ModuleData = self._Bdb[ModuleFile, self._Arch, self._Target, self._Toolchain]\r
AllModulePcds = AllModulePcds | ModuleData.PcdsName\r
else:\r
PcdValueDict[PcdCName, TokenSpaceGuid] = {SkuName:(PcdValue, DatumType, MaxDatumSize)}\r
\r
- for ((PcdCName, TokenSpaceGuid), PcdSetting) in PcdValueDict.iteritems():\r
+ for ((PcdCName, TokenSpaceGuid), PcdSetting) in PcdValueDict.items():\r
if self.SkuIdMgr.SystemSkuId in PcdSetting:\r
PcdValue, DatumType, MaxDatumSize = PcdSetting[self.SkuIdMgr.SystemSkuId]\r
elif TAB_DEFAULT in PcdSetting:\r
Pcds[PcdCName, TokenSpaceGuid].DscRawValue[SkuName][TAB_DEFAULT_STORES_DEFAULT] = Settings[0]\r
return Pcds\r
\r
- def GetStructurePcdMaxSize(self, str_pcd):\r
+ @staticmethod\r
+ def GetStructurePcdMaxSize(str_pcd):\r
pcd_default_value = str_pcd.DefaultValue\r
- sku_values = [skuobj.HiiDefaultValue if str_pcd.Type in [self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII], self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX_HII]] else skuobj.DefaultValue for skuobj in str_pcd.SkuInfoList.values()]\r
+ sku_values = [skuobj.HiiDefaultValue if str_pcd.Type in [DscBuildData._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII], DscBuildData._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX_HII]] else skuobj.DefaultValue for skuobj in str_pcd.SkuInfoList.values()]\r
sku_values.append(pcd_default_value)\r
\r
def get_length(value):\r
return len(Value[2:-1])\r
if Value[0] == '"' and Value[-1] == '"':\r
return len(Value) - 2\r
- if Value[0] == '{' and Value[-1] == '}':\r
+ if Value.strip().startswith("{CODE("):\r
+ tmpValue = RemoveCComments(Value)\r
+ return len(tmpValue.split(","))\r
+ if (Value[0] == '{' and Value[-1] == '}'):\r
return len(Value.split(","))\r
if Value.startswith("L'") and Value.endswith("'") and len(list(Value[2:-1])) > 1:\r
return len(list(Value[2:-1]))\r
except:\r
EdkLogger.error('Build', COMMAND_FAILURE, 'Can not execute command: %s' % Command)\r
Result = Process.communicate()\r
- return Process.returncode, Result[0], Result[1]\r
+ return Process.returncode, Result[0].decode(encoding='utf-8', errors='ignore'), Result[1].decode(encoding='utf-8', errors='ignore')\r
\r
@staticmethod\r
def IntToCString(Value, ValueSize):\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
- if (len(Pcd.Capacity) == 1 and Pcd.Capacity[0] != '0') or (len(Pcd.Capacity) >1 and reduce(lambda x,y:int(x)*int(y), Pcd.Capacity)) > 0:\r
- CApp += " *Size = (sizeof (%s) * (%s) > *Size) ? sizeof (%s) * (%s): *Size; \n" % (Pcd.BaseDatumType, "*".join(Pcd.Capacity),Pcd.BaseDatumType, "*".join(Pcd.Capacity))\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
- for skuname in Pcd.SkuInfoList:\r
- skuobj = Pcd.SkuInfoList[skuname]\r
- if skuobj.VariableName:\r
- for defaultstore in skuobj.DefaultStoreDict:\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 = (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 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
+ 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
+ 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
for index in Pcd.DefaultValues:\r
FieldList = Pcd.DefaultValues[index]\r
if not FieldList:\r
continue\r
for FieldName in FieldList:\r
FieldName = "." + FieldName\r
- IsArray = 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], TAB_VOID, self._GuidDict)(True)\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
- 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
+ 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
ArrayIndex = int(FieldName.split('[', 1)[1].split(']', 1)[0])\r
FieldName = FieldName.split(']', 1)[1]\r
FieldName = NewFieldName + FieldName\r
- while '[' in FieldName:\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
for skuname in Pcd.SkuOverrideValues:\r
continue\r
for FieldName in FieldList:\r
FieldName = "." + FieldName\r
- IsArray = 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], TAB_VOID, self._GuidDict)(True)\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
- 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
+ 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
ArrayIndex = int(FieldName.split('[', 1)[1].split(']', 1)[0])\r
FieldName = FieldName.split(']', 1)[1]\r
FieldName = NewFieldName + FieldName\r
- while '[' in FieldName:\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
if Pcd.PcdFieldValueFromFdf:\r
CApp = CApp + "// From fdf \n"\r
for FieldName in Pcd.PcdFieldValueFromFdf:\r
FieldName = "." + FieldName\r
- IsArray = IsFieldValueAnArray(Pcd.PcdFieldValueFromFdf[FieldName.strip(".")][0])\r
+ IsArray = _IsFieldValueAnArray(Pcd.PcdFieldValueFromFdf[FieldName.strip(".")][0])\r
if IsArray and not (Pcd.PcdFieldValueFromFdf[FieldName.strip(".")][0].startswith('{GUID') and Pcd.PcdFieldValueFromFdf[FieldName.strip(".")][0].endswith('}')):\r
try:\r
Value = ValueExpressionEx(Pcd.PcdFieldValueFromFdf[FieldName.strip(".")][0], TAB_VOID, self._GuidDict)(True)\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
- 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
+ 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
CApp = CApp + "// From Command Line \n"\r
for FieldName in Pcd.PcdFieldValueFromComm:\r
FieldName = "." + FieldName\r
- IsArray = IsFieldValueAnArray(Pcd.PcdFieldValueFromComm[FieldName.strip(".")][0])\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(Pcd.PcdFieldValueFromComm[FieldName.strip(".")][0], TAB_VOID, self._GuidDict)(True)\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
- 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
+ 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
ArrayIndex = int(FieldName.split('[', 1)[1].split(']', 1)[0])\r
FieldName = FieldName.split(']', 1)[1]\r
FieldName = NewFieldName + FieldName\r
- while '[' in FieldName:\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
if Pcd.GetPcdMaxSize():\r
return CApp\r
\r
@staticmethod\r
- def GenerateSizeStatments(Pcd):\r
+ def GenerateSizeStatments(Pcd,skuname,defaultstorename):\r
if Pcd.IsArray():\r
r_datatype = [Pcd.BaseDatumType]\r
+ lastoneisEmpty = False\r
for dem in Pcd.Capacity:\r
- if dem == '0':\r
+ if lastoneisEmpty:\r
+ EdkLogger.error('Build', FORMAT_INVALID, "Invalid value format for %s. " %\r
+ (".".join((Pcd.TokenSpaceGuidCName, Pcd.TokenCName))))\r
+ if dem == '0' or dem == "-1":\r
r_datatype.append("[1]")\r
+ lastoneisEmpty = True\r
else:\r
r_datatype.append("[" + dem + "]")\r
- CApp = ' Size = sizeof(%s);\n' % ("".join(r_datatype))\r
+\r
+ if Pcd.Type in [MODEL_PCD_DYNAMIC_EX_HII, MODEL_PCD_DYNAMIC_HII]:\r
+ PcdDefValue = Pcd.SkuInfoList.get(skuname).DefaultStoreDict.get(defaultstorename)\r
+ elif Pcd.Type in [MODEL_PCD_DYNAMIC_EX_DEFAULT,MODEL_PCD_DYNAMIC_VPD,MODEL_PCD_DYNAMIC_DEFAULT,MODEL_PCD_DYNAMIC_EX_VPD]:\r
+ PcdDefValue = Pcd.SkuInfoList.get(skuname).DefaultValue\r
+ else:\r
+ PcdDefValue = Pcd.DefaultValue\r
+ if lastoneisEmpty:\r
+ if "{CODE(" not in PcdDefValue:\r
+ sizebasevalue_plus = "(%s / sizeof(%s) + 1)" % ((DscBuildData.GetStructurePcdMaxSize(Pcd), Pcd.BaseDatumType))\r
+ sizebasevalue = "(%s / sizeof(%s))" % ((DscBuildData.GetStructurePcdMaxSize(Pcd), Pcd.BaseDatumType))\r
+ sizeof = "sizeof(%s)" % Pcd.BaseDatumType\r
+ CApp = ' int ArraySize = %s %% %s ? %s : %s ;\n' % ( (DscBuildData.GetStructurePcdMaxSize(Pcd), sizeof, sizebasevalue_plus, sizebasevalue))\r
+ CApp += ' Size = ArraySize * sizeof(%s); \n' % Pcd.BaseDatumType\r
+ else:\r
+ CApp = " Size = 0;\n"\r
+ else:\r
+ CApp = ' Size = sizeof(%s);\n' % ("".join(r_datatype) )\r
else:\r
CApp = ' Size = sizeof(%s);\n' % (Pcd.DatumType)\r
CApp = CApp + ' Cal_%s_%s_Size(&Size);\n' % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName)\r
if index:\r
indicator = "(Pcd"\r
if len(pcd_capacity)>2:\r
- for i in xrange(0,len(index_elements)):\r
+ for i in range(0,len(index_elements)):\r
index_ele = index_elements[i]\r
index_num = index_ele.strip("[").strip("]").strip()\r
if i == len(index_elements) -2:\r
CApp = CApp + ' UINT32 FieldSize;\n'\r
CApp = CApp + ' CHAR8 *Value;\n'\r
DefaultValueFromDec = Pcd.DefaultValueFromDec\r
- IsArray = IsFieldValueAnArray(Pcd.DefaultValueFromDec)\r
+ IsArray = _IsFieldValueAnArray(Pcd.DefaultValueFromDec)\r
if IsArray:\r
try:\r
DefaultValueFromDec = ValueExpressionEx(Pcd.DefaultValueFromDec, TAB_VOID)(True)\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
- elif IsArray:\r
+ if IsArray:\r
#\r
# Use memcpy() to copy value into field\r
#\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
FieldList = Pcd.DefaultValues[index]\r
if not FieldList:\r
continue\r
for FieldName in FieldList:\r
- IsArray = IsFieldValueAnArray(FieldList[FieldName][0])\r
+ IsArray = _IsFieldValueAnArray(FieldList[FieldName][0])\r
if IsArray:\r
try:\r
FieldList[FieldName][0] = ValueExpressionEx(FieldList[FieldName][0], TAB_VOID, self._GuidDict)(True)\r
EdkLogger.error('Build', FORMAT_INVALID, "Invalid value format for %s. From %s Line %d " % (".".join((Pcd.TokenSpaceGuidCName, Pcd.TokenCName, FieldName)), FieldList[FieldName][1], FieldList[FieldName][2]))\r
\r
indicator = self.GetIndicator(index, FieldName,Pcd)\r
- if isinstance(Value, str):\r
- CApp = CApp + ' %s = %s; // From %s Line %d Value %s\n' % (indicator, Value, FieldList[FieldName][1], FieldList[FieldName][2], FieldList[FieldName][0])\r
- elif IsArray:\r
+ if IsArray:\r
#\r
# Use memcpy() to copy value into field\r
#\r
- CApp = CApp + ' FieldSize = __FIELD_SIZE(%s, %s);\n' % (Pcd.DatumType, FieldName)\r
+ CApp = CApp + ' FieldSize = __FIELD_SIZE(%s, %s);\n' % (Pcd.BaseDatumType, FieldName)\r
CApp = CApp + ' Value = %s; // From %s Line %d Value %s\n' % (DscBuildData.IntToCString(Value, ValueSize), FieldList[FieldName][1], FieldList[FieldName][2], FieldList[FieldName][0])\r
- CApp = CApp + ' __STATIC_ASSERT((__FIELD_SIZE(%s, %s) >= %d) || (__FIELD_SIZE(%s, %s) == 0), "Input buffer exceeds the buffer array"); // From %s Line %d Value %s\n' % (Pcd.DatumType, FieldName, ValueSize, Pcd.DatumType, FieldName, FieldList[FieldName][1], FieldList[FieldName][2], FieldList[FieldName][0])\r
- CApp = CApp + ' memcpy (&Pcd->%s, Value, (FieldSize > 0 && FieldSize < %d) ? FieldSize : %d);\n' % (FieldName, ValueSize, ValueSize)\r
+ CApp = CApp + ' __STATIC_ASSERT((__FIELD_SIZE(%s, %s) >= %d) || (__FIELD_SIZE(%s, %s) == 0), "Input buffer exceeds the buffer array"); // From %s Line %d Value %s\n' % (Pcd.BaseDatumType, FieldName, ValueSize, Pcd.BaseDatumType, FieldName, FieldList[FieldName][1], FieldList[FieldName][2], FieldList[FieldName][0])\r
CApp = CApp + ' memcpy (&%s, Value, (FieldSize > 0 && FieldSize < %d) ? FieldSize : %d);\n' % (indicator, ValueSize, ValueSize)\r
-\r
+ elif isinstance(Value, str):\r
+ CApp = CApp + ' %s = %s; // From %s Line %d Value %s\n' % (indicator, Value, FieldList[FieldName][1], FieldList[FieldName][2], FieldList[FieldName][0])\r
else:\r
if '[' in FieldName and ']' in FieldName:\r
Index = int(FieldName.split('[')[1].split(']')[0])\r
CApp = ' Assign_%s_%s_Default_Value(Pcd);\n' % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName)\r
return CApp\r
\r
+ def GetPcdDscRawDefaultValue(self,Pcd, SkuName,DefaultStoreName):\r
+ if Pcd.Type in PCD_DYNAMIC_TYPE_SET or Pcd.Type in PCD_DYNAMIC_EX_TYPE_SET:\r
+ if (SkuName, DefaultStoreName) == (TAB_DEFAULT, TAB_DEFAULT_STORES_DEFAULT):\r
+ pcddefaultvalue = Pcd.DefaultFromDSC.get(TAB_DEFAULT, {}).get(TAB_DEFAULT_STORES_DEFAULT) if Pcd.DefaultFromDSC else None\r
+ else:\r
+ pcddefaultvalue = Pcd.DscRawValue.get(SkuName, {}).get(DefaultStoreName)\r
+ else:\r
+ pcddefaultvalue = Pcd.DscRawValue.get(SkuName, {}).get(TAB_DEFAULT_STORES_DEFAULT)\r
+\r
+ return pcddefaultvalue\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
\r
CApp = CApp + "// SkuName: %s, DefaultStoreName: %s \n" % (TAB_DEFAULT, TAB_DEFAULT_STORES_DEFAULT)\r
inherit_OverrideValues = Pcd.SkuOverrideValues[SkuName]\r
- if Pcd.Type in PCD_DYNAMIC_TYPE_SET or Pcd.Type in PCD_DYNAMIC_EX_TYPE_SET:\r
- if (SkuName, DefaultStoreName) == (TAB_DEFAULT, TAB_DEFAULT_STORES_DEFAULT):\r
- pcddefaultvalue = Pcd.DefaultFromDSC.get(TAB_DEFAULT, {}).get(TAB_DEFAULT_STORES_DEFAULT) if Pcd.DefaultFromDSC else None\r
- else:\r
- pcddefaultvalue = Pcd.DscRawValue.get(SkuName, {}).get(DefaultStoreName)\r
- else:\r
- pcddefaultvalue = Pcd.DscRawValue.get(SkuName, {}).get(TAB_DEFAULT_STORES_DEFAULT)\r
\r
+ pcddefaultvalue = self.GetPcdDscRawDefaultValue(Pcd, SkuName, DefaultStoreName)\r
if pcddefaultvalue:\r
FieldList = pcddefaultvalue\r
- IsArray = IsFieldValueAnArray(FieldList)\r
+ IsArray = _IsFieldValueAnArray(FieldList)\r
if IsArray:\r
if "{CODE(" not in FieldList:\r
try:\r
#\r
# Use memcpy() to copy value into field\r
#\r
- if Pcd.IsArray():\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
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
#\r
# Use memcpy() to copy value into field\r
#\r
- if Pcd.IsArray():\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
else:\r
CApp = CApp + ' Value = %s; // From DSC Default Value %s\n' % (DscBuildData.IntToCString(Value, ValueSize), Pcd.DscRawValue.get(SkuName, {}).get(DefaultStoreName))\r
if (SkuName, DefaultStoreName) == (TAB_DEFAULT, TAB_DEFAULT_STORES_DEFAULT) or (( (SkuName, '') not in Pcd.ValueChain) and ( (SkuName, DefaultStoreName) not in Pcd.ValueChain )):\r
for FieldName in FieldList:\r
indicator = self.GetIndicator(index, FieldName,Pcd)\r
- IsArray = IsFieldValueAnArray(FieldList[FieldName][0])\r
+ IsArray = _IsFieldValueAnArray(FieldList[FieldName][0])\r
if IsArray:\r
try:\r
FieldList[FieldName][0] = ValueExpressionEx(FieldList[FieldName][0], TAB_VOID, self._GuidDict)(True)\r
#\r
CApp = CApp + ' FieldSize = __FIELD_SIZE(%s, %s);\n' % (Pcd.BaseDatumType, FieldName)\r
CApp = CApp + ' Value = %s; // From %s Line %d Value %s\n' % (DscBuildData.IntToCString(Value, ValueSize), FieldList[FieldName][1], FieldList[FieldName][2], FieldList[FieldName][0])\r
- CApp = CApp + ' __STATIC_ASSERT((__FIELD_SIZE(%s, %s) >= %d) || (__FIELD_SIZE(%s, %s) == 0), "Input buffer exceeds the buffer array"); // From %s Line %d Value %s\n' % (Pcd.DatumType, FieldName, ValueSize, Pcd.DatumType, FieldName, FieldList[FieldName][1], FieldList[FieldName][2], FieldList[FieldName][0])\r
- CApp = CApp + ' memcpy (&Pcd->%s, Value, (FieldSize > 0 && FieldSize < %d) ? FieldSize : %d);\n' % (FieldName, ValueSize, ValueSize)\r
+ CApp = CApp + ' __STATIC_ASSERT((__FIELD_SIZE(%s, %s) >= %d) || (__FIELD_SIZE(%s, %s) == 0), "Input buffer exceeds the buffer array"); // From %s Line %d Value %s\n' % (Pcd.BaseDatumType, FieldName, ValueSize, Pcd.BaseDatumType, FieldName, FieldList[FieldName][1], FieldList[FieldName][2], FieldList[FieldName][0])\r
CApp = CApp + ' memcpy (&%s, Value, (FieldSize > 0 && FieldSize < %d) ? FieldSize : %d);\n' % (indicator, ValueSize, ValueSize)\r
else:\r
if '[' in FieldName and ']' in FieldName:\r
if not FieldList:\r
continue\r
if pcddefaultvalue and FieldList == pcddefaultvalue:\r
- IsArray = IsFieldValueAnArray(FieldList)\r
+ IsArray = _IsFieldValueAnArray(FieldList)\r
if IsArray:\r
try:\r
FieldList = ValueExpressionEx(FieldList, TAB_VOID)(True)\r
CApp = CApp + ' memcpy (Pcd, Value, %d);\n' % (ValueSize)\r
continue\r
for FieldName in FieldList:\r
- IsArray = IsFieldValueAnArray(FieldList[FieldName][0])\r
+ IsArray = _IsFieldValueAnArray(FieldList[FieldName][0])\r
if IsArray:\r
try:\r
FieldList[FieldName][0] = ValueExpressionEx(FieldList[FieldName][0], TAB_VOID, self._GuidDict)(True)\r
#\r
CApp = CApp + ' FieldSize = __FIELD_SIZE(%s, %s);\n' % (Pcd.BaseDatumType, FieldName)\r
CApp = CApp + ' Value = %s; // From %s Line %d Value %s\n' % (DscBuildData.IntToCString(Value, ValueSize), FieldList[FieldName][1], FieldList[FieldName][2], FieldList[FieldName][0])\r
- CApp = CApp + ' __STATIC_ASSERT((__FIELD_SIZE(%s, %s) >= %d) || (__FIELD_SIZE(%s, %s) == 0), "Input buffer exceeds the buffer array"); // From %s Line %d Value %s\n' % (Pcd.DatumType, FieldName, ValueSize, Pcd.DatumType, FieldName, FieldList[FieldName][1], FieldList[FieldName][2], FieldList[FieldName][0])\r
+ CApp = CApp + ' __STATIC_ASSERT((__FIELD_SIZE(%s, %s) >= %d) || (__FIELD_SIZE(%s, %s) == 0), "Input buffer exceeds the buffer array"); // From %s Line %d Value %s\n' % (Pcd.BaseDatumType, FieldName, ValueSize, Pcd.BaseDatumType, FieldName, FieldList[FieldName][1], FieldList[FieldName][2], FieldList[FieldName][0])\r
CApp = CApp + ' memcpy (&Pcd->%s, Value, (FieldSize > 0 && FieldSize < %d) ? FieldSize : %d);\n' % (FieldName, ValueSize, ValueSize)\r
else:\r
if '[' in FieldName and ']' in FieldName:\r
if not FieldList:\r
continue\r
if pcddefaultvalue and FieldList == pcddefaultvalue:\r
- IsArray = IsFieldValueAnArray(FieldList)\r
+ IsArray = _IsFieldValueAnArray(FieldList)\r
if IsArray:\r
try:\r
FieldList = ValueExpressionEx(FieldList, TAB_VOID)(True)\r
CApp = CApp + ' memcpy (Pcd, Value, %d);\n' % (ValueSize)\r
continue\r
for FieldName in FieldList:\r
- IsArray = IsFieldValueAnArray(FieldList[FieldName][0])\r
+ IsArray = _IsFieldValueAnArray(FieldList[FieldName][0])\r
if IsArray:\r
try:\r
FieldList[FieldName][0] = ValueExpressionEx(FieldList[FieldName][0], TAB_VOID, self._GuidDict)(True)\r
#\r
CApp = CApp + ' FieldSize = __FIELD_SIZE(%s, %s);\n' % (Pcd.BaseDatumType, FieldName)\r
CApp = CApp + ' Value = %s; // From %s Line %d Value %s\n' % (DscBuildData.IntToCString(Value, ValueSize), FieldList[FieldName][1], FieldList[FieldName][2], FieldList[FieldName][0])\r
- CApp = CApp + ' __STATIC_ASSERT((__FIELD_SIZE(%s, %s) >= %d) || (__FIELD_SIZE(%s, %s) == 0), "Input buffer exceeds the buffer array"); // From %s Line %d Value %s\n' % (Pcd.DatumType, FieldName, ValueSize, Pcd.DatumType, FieldName, FieldList[FieldName][1], FieldList[FieldName][2], FieldList[FieldName][0])\r
+ CApp = CApp + ' __STATIC_ASSERT((__FIELD_SIZE(%s, %s) >= %d) || (__FIELD_SIZE(%s, %s) == 0), "Input buffer exceeds the buffer array"); // From %s Line %d Value %s\n' % (Pcd.BaseDatumType, FieldName, ValueSize, Pcd.BaseDatumType, FieldName, FieldList[FieldName][1], FieldList[FieldName][2], FieldList[FieldName][0])\r
CApp = CApp + ' memcpy (&Pcd->%s, Value, (FieldSize > 0 && FieldSize < %d) ? FieldSize : %d);\n' % (FieldName, ValueSize, ValueSize)\r
else:\r
if '[' in FieldName and ']' in FieldName:\r
\r
PcdDefaultValue = StringToArray(Pcd.DefaultValueFromDec.strip())\r
\r
- InitByteValue += '%s.%s.%s.%s|%s|%s\n' % (SkuName, DefaultStoreName, Pcd.TokenSpaceGuidCName, Pcd.TokenCName, Pcd.BaseDatumType, PcdDefaultValue)\r
+ InitByteValue += '%s.%s.%s.%s|%s|%s\n' % (SkuName, DefaultStoreName, Pcd.TokenSpaceGuidCName, Pcd.TokenCName, Pcd.DatumType, PcdDefaultValue)\r
\r
#\r
# Get current PCD value and size\r
# in a structure. The size formula for this case is:\r
# OFFSET_OF(FlexbleArrayField) + sizeof(FlexibleArray[0]) * (HighestIndex + 1)\r
#\r
- CApp = CApp + DscBuildData.GenerateSizeStatments(Pcd)\r
+ CApp = CApp + DscBuildData.GenerateSizeStatments(Pcd,SkuName,DefaultStoreName)\r
\r
#\r
# Allocate and zero buffer for the PCD\r
return CApp\r
Demesion = ""\r
for d in Pcd.Capacity:\r
- if d == "0":\r
- Demesion += "[]"\r
- else:\r
- Demesion += "["+d+"]"\r
+ Demesion += "[]"\r
\r
Value = Pcd.DefaultValueFromDec\r
if "{CODE(" in Pcd.DefaultValueFromDec:\r
realvalue = Pcd.DefaultValueFromDec.strip()[6:-2] # "{CODE(").rstrip(")}"\r
CApp += "static %s %s_%s_INIT_Value%s = %s;\n" % (Pcd.BaseDatumType,Pcd.TokenSpaceGuidCName,Pcd.TokenCName,Demesion,realvalue)\r
\r
- for skuname in Pcd.SkuInfoList:\r
- skuinfo = Pcd.SkuInfoList[skuname]\r
- if skuinfo.VariableName:\r
- for defaultstore in skuinfo.DefaultStoreDict:\r
- Value = skuinfo[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
- else:\r
- Value = skuinfo.DefaultValue\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,TAB_DEFAULT_STORES_DEFAULT,Demesion,realvalue)\r
+ if Pcd.Type in PCD_DYNAMIC_TYPE_SET | PCD_DYNAMIC_EX_TYPE_SET:\r
+ for skuname in Pcd.SkuInfoList:\r
+ skuinfo = Pcd.SkuInfoList[skuname]\r
+ if skuinfo.VariableName:\r
+ for defaultstore in skuinfo.DefaultStoreDict:\r
+ pcddscrawdefaultvalue = self.GetPcdDscRawDefaultValue(Pcd, skuname, defaultstore)\r
+ if pcddscrawdefaultvalue:\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
+ else:\r
+ pcddscrawdefaultvalue = self.GetPcdDscRawDefaultValue(Pcd, skuname, TAB_DEFAULT_STORES_DEFAULT)\r
+ if pcddscrawdefaultvalue:\r
+ Value = skuinfo.DefaultValue\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,TAB_DEFAULT_STORES_DEFAULT,Demesion,realvalue)\r
+ else:\r
+ pcddscrawdefaultvalue = self.GetPcdDscRawDefaultValue(Pcd, TAB_DEFAULT, TAB_DEFAULT_STORES_DEFAULT)\r
+ if pcddscrawdefaultvalue:\r
+ if "{CODE(" in Pcd.DefaultValue:\r
+ realvalue = Pcd.DefaultValue.strip()[6:-2] # "{CODE(").rstrip(")}"\r
+ CApp += "static %s %s_%s_DEFAULT_STANDARD_Value%s = %s;\n" % (Pcd.BaseDatumType,Pcd.TokenSpaceGuidCName,Pcd.TokenCName,Demesion,realvalue)\r
+\r
return CApp\r
+\r
def SkuOverrideValuesEmpty(self,OverrideValues):\r
if not OverrideValues:\r
return True\r
if BuildOptions:\r
ArchBuildOptions = {arch:flags for arch,flags in BuildOptions.items() if arch != 'COMMON'}\r
if len(ArchBuildOptions.keys()) == 1:\r
- BuildOptions['COMMON'] |= (ArchBuildOptions.values()[0])\r
+ BuildOptions['COMMON'] |= (list(ArchBuildOptions.values())[0])\r
elif len(ArchBuildOptions.keys()) > 1:\r
CommonBuildOptions = reduce(lambda x,y: x&y, ArchBuildOptions.values())\r
BuildOptions['COMMON'] |= CommonBuildOptions\r
elif TAB_DEFAULT in pcd.SkuInfoList and TAB_COMMON in pcd.SkuInfoList:\r
del pcd.SkuInfoList[TAB_COMMON]\r
\r
- map(self.FilterSkuSettings, Pcds.values())\r
+ list(map(self.FilterSkuSettings, Pcds.values()))\r
\r
return Pcds\r
\r
PcdObj.SkuInfoList[skuname].SkuId = skuid\r
PcdObj.SkuInfoList[skuname].SkuIdName = skuname\r
if PcdType in [self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_HII], self._PCD_TYPE_STRING_[MODEL_PCD_DYNAMIC_EX_HII]]:\r
- PcdObj.DefaultValue = PcdObj.SkuInfoList.values()[0].HiiDefaultValue if self.SkuIdMgr.SkuUsageType == self.SkuIdMgr.SINGLE else PcdObj.SkuInfoList[TAB_DEFAULT].HiiDefaultValue\r
+ PcdObj.DefaultValue = list(PcdObj.SkuInfoList.values())[0].HiiDefaultValue if self.SkuIdMgr.SkuUsageType == self.SkuIdMgr.SINGLE else PcdObj.SkuInfoList[TAB_DEFAULT].HiiDefaultValue\r
Pcds[PcdCName, TokenSpaceGuid]= PcdObj\r
return Pcds\r
## Retrieve dynamic HII PCD settings\r
Pcds[PcdCName, TokenSpaceGuid].DscRawValue[SkuName] = {}\r
Pcds[PcdCName, TokenSpaceGuid].DscRawValue[SkuName][DefaultStore] = DefaultValue\r
for pcd in Pcds.values():\r
- SkuInfoObj = pcd.SkuInfoList.values()[0]\r
pcdDecObject = self._DecPcds[pcd.TokenCName, pcd.TokenSpaceGuidCName]\r
pcd.DatumType = pcdDecObject.DatumType\r
# Only fix the value while no value provided in DSC file.\r
sku.DefaultStoreDict[default_store]=pcdDecObject.DefaultValue\r
pcd.DefaultValue = pcdDecObject.DefaultValue\r
if TAB_DEFAULT not in pcd.SkuInfoList and TAB_COMMON not in pcd.SkuInfoList:\r
+ SkuInfoObj = list(pcd.SkuInfoList.values())[0]\r
valuefromDec = pcdDecObject.DefaultValue\r
SkuInfo = SkuInfoClass(TAB_DEFAULT, '0', SkuInfoObj.VariableName, SkuInfoObj.VariableGuid, SkuInfoObj.VariableOffset, valuefromDec, VariableAttribute=SkuInfoObj.VariableAttribute, DefaultStore={DefaultStore:valuefromDec})\r
pcd.SkuInfoList[TAB_DEFAULT] = SkuInfo\r
invalidpcd = ",".join(invalidhii)\r
EdkLogger.error('build', PCD_VARIABLE_INFO_ERROR, Message='The same HII PCD must map to the same EFI variable for all SKUs', File=self.MetaFile, ExtraData=invalidpcd)\r
\r
- map(self.FilterSkuSettings, Pcds.values())\r
+ list(map(self.FilterSkuSettings, Pcds.values()))\r
\r
return Pcds\r
\r
Pcds[PcdCName, TokenSpaceGuid].DscRawValue[SkuName] = {}\r
Pcds[PcdCName, TokenSpaceGuid].DscRawValue[SkuName][TAB_DEFAULT_STORES_DEFAULT] = InitialValue\r
for pcd in Pcds.values():\r
- SkuInfoObj = pcd.SkuInfoList.values()[0]\r
pcdDecObject = self._DecPcds[pcd.TokenCName, pcd.TokenSpaceGuidCName]\r
pcd.DatumType = pcdDecObject.DatumType\r
# Only fix the value while no value provided in DSC file.\r
if not sku.DefaultValue:\r
sku.DefaultValue = pcdDecObject.DefaultValue\r
if TAB_DEFAULT not in pcd.SkuInfoList and TAB_COMMON not in pcd.SkuInfoList:\r
+ SkuInfoObj = list(pcd.SkuInfoList.values())[0]\r
valuefromDec = pcdDecObject.DefaultValue\r
SkuInfo = SkuInfoClass(TAB_DEFAULT, '0', '', '', '', '', SkuInfoObj.VpdOffset, valuefromDec)\r
pcd.SkuInfoList[TAB_DEFAULT] = SkuInfo\r
for sku in pcd.SkuInfoList.values():\r
sku.DefaultValue = StringToArray(sku.DefaultValue) if sku.DefaultValue.startswith(('L"',"L'")) else sku.DefaultValue\r
\r
- map(self.FilterSkuSettings, Pcds.values())\r
+ list(map(self.FilterSkuSettings, Pcds.values()))\r
return Pcds\r
\r
## Add external modules\r