def _InitWorker(self, WorkspaceDir, ActivePlatform, Target, Toolchain, ArchList, MetaFileDb,\r
BuildConfig, ToolDefinition, FlashDefinitionFile='', Fds=None, Fvs=None, Caps=None, SkuId='', UniFlag=None,\r
Progress=None, BuildModule=None):\r
- if Fds is None:\r
- Fds = []\r
- if Fvs is None:\r
- Fvs = []\r
- if Caps is None:\r
- Caps = []\r
self.BuildDatabase = MetaFileDb\r
self.MetaFile = ActivePlatform\r
self.WorkspaceDir = WorkspaceDir\r
self.TargetTxt = BuildConfig\r
self.ToolDef = ToolDefinition\r
self.FdfFile = FlashDefinitionFile\r
- self.FdTargetList = Fds\r
- self.FvTargetList = Fvs\r
- self.CapTargetList = Caps\r
+ self.FdTargetList = Fds if Fds else []\r
+ self.FvTargetList = Fvs if Fvs else []\r
+ self.CapTargetList = Caps if Caps else []\r
self.AutoGenObjectList = []\r
self._BuildDir = None\r
self._FvDir = None\r
# but the path (self.MetaFile.Path) is the real path\r
for key in self.FdfProfile.InfDict:\r
if key == 'ArchTBD':\r
- Platform_cache = {}\r
MetaFile_cache = {}\r
for Arch in self.ArchList:\r
- Platform_cache[Arch] = self.BuildDatabase[self.MetaFile, Arch, Target, Toolchain]\r
+ Current_Platform_cache = self.BuildDatabase[self.MetaFile, Arch, Target, Toolchain]\r
MetaFile_cache[Arch] = set()\r
- for Pkey in Platform_cache[Arch].Modules:\r
- MetaFile_cache[Arch].add(Platform_cache[Arch].Modules[Pkey].MetaFile)\r
+ for Pkey in Current_Platform_cache.Modules:\r
+ MetaFile_cache[Arch].add(Current_Platform_cache.Modules[Pkey].MetaFile)\r
for Inf in self.FdfProfile.InfDict[key]:\r
ModuleFile = PathClass(NormPath(Inf), GlobalData.gWorkspace, Arch)\r
for Arch in self.ArchList:\r
# apply SKU and inject PCDs from Flash Definition file\r
for Arch in self.ArchList:\r
Platform = self.BuildDatabase[self.MetaFile, Arch, Target, Toolchain]\r
-\r
+ PlatformPcds = Platform.Pcds\r
+ self._GuidDict = Platform._GuidDict\r
SourcePcdDict = {'DynamicEx':set(), 'PatchableInModule':set(),'Dynamic':set(),'FixedAtBuild':set()}\r
BinaryPcdDict = {'DynamicEx':set(), 'PatchableInModule':set()}\r
SourcePcdDict_Keys = SourcePcdDict.keys()\r
if DscPcd.Type != "FixedAtBuild":\r
continue\r
if key in ShareFixedAtBuildPcdsSameValue and ShareFixedAtBuildPcdsSameValue[key]: \r
- LibAuto.ConstPcd[key] = Pcd.DefaultValue\r
+ LibAuto.ConstPcd[key] = FixedAtBuildPcds[key]\r
\r
def CollectVariables(self, DynamicPcdSet):\r
\r
self._NonDynaPcdList_.remove (self._NonDynaPcdList_[Index])\r
PcdFromModule.Pending = False\r
self._NonDynaPcdList_.append (PcdFromModule)\r
- # Parse the DynamicEx PCD from the AsBuild INF module list of FDF.\r
- DscModuleList = []\r
- for ModuleInf in self.Platform.Modules.keys():\r
- DscModuleList.append (os.path.normpath(ModuleInf.Path))\r
+ DscModuleSet = {os.path.normpath(ModuleInf.Path) for ModuleInf in self.Platform.Modules}\r
# add the PCD from modules that listed in FDF but not in DSC to Database \r
for InfName in FdfModuleList:\r
- if InfName not in DscModuleList:\r
+ if InfName not in DscModuleSet:\r
InfClass = PathClass(InfName)\r
M = self.BuildDatabase[InfClass, self.Arch, self.BuildTarget, self.ToolChain]\r
# If a module INF in FDF but not in current arch's DSC module list, it must be module (either binary or source) \r
\r
if FromPcd.MaxDatumSize:\r
ToPcd.MaxDatumSize = FromPcd.MaxDatumSize\r
+ ToPcd.MaxSizeUserSet = FromPcd.MaxDatumSize\r
if FromPcd.DefaultValue:\r
ToPcd.DefaultValue = FromPcd.DefaultValue\r
if FromPcd.TokenValue:\r
for Name, Guid in Pcds:\r
Pcd = Pcds[Name, Guid]\r
if Pcd.DatumType == "VOID*" and Pcd.MaxDatumSize in ['', None]:\r
+ Pcd.MaxSizeUserSet = None\r
Value = Pcd.DefaultValue\r
if Value in [None, '']:\r
Pcd.MaxDatumSize = '1'\r
\r
self.Workspace = Workspace\r
self.WorkspaceDir = Workspace.WorkspaceDir\r
-\r
+ self._GuidDict = Workspace._GuidDict\r
self.MetaFile = ModuleFile\r
self.PlatformInfo = PlatformAutoGen(Workspace, PlatformFile, Target, Toolchain, Arch)\r
\r
Padding = Padding * 2\r
ArraySize = ArraySize / 2\r
if ArraySize < (len(PcdValue) + 1):\r
- EdkLogger.error("build", AUTOGEN_ERROR,\r
+ if Pcd.MaxSizeUserSet:\r
+ EdkLogger.error("build", AUTOGEN_ERROR,\r
"The maximum size of VOID* type PCD '%s.%s' is less than its actual size occupied." % (Pcd.TokenSpaceGuidCName, TokenCName)\r
)\r
+ else:\r
+ ArraySize = len(PcdValue) + 1\r
if ArraySize > len(PcdValue) + 1:\r
NewValue = NewValue + Padding * (ArraySize - len(PcdValue) - 1)\r
PcdValue = NewValue + Padding.strip().rstrip(',') + '}'\r
PcdValue = PcdValue.rstrip('}') + ', 0x00' * (ArraySize - len(PcdValue.split(',')))\r
PcdValue += '}'\r
else:\r
- EdkLogger.error("build", AUTOGEN_ERROR,\r
+ if Pcd.MaxSizeUserSet:\r
+ EdkLogger.error("build", AUTOGEN_ERROR,\r
"The maximum size of VOID* type PCD '%s.%s' is less than its actual size occupied." % (Pcd.TokenSpaceGuidCName, TokenCName)\r
)\r
+ else:\r
+ ArraySize = len(PcdValue) + 1\r
PcdItem = '%s.%s|%s|0x%X' % \\r
(Pcd.TokenSpaceGuidCName, TokenCName, PcdValue, PatchPcd[1])\r
PcdComments = ''\r