import Common.GlobalData as GlobalData\r
from GenFds.GenFds import GenFds\r
\r
-from collections import OrderedDict\r
+from collections import OrderedDict,defaultdict\r
\r
# Version and Copyright\r
VersionNumber = "0.60" + ' ' + gBUILD_VERSION\r
# @param Other The other BuildUnit object compared to\r
#\r
def __eq__(self, Other):\r
- return Other is not None and self.BuildObject == Other.BuildObject \\r
+ return Other and self.BuildObject == Other.BuildObject \\r
+ and Other.BuildObject \\r
and self.BuildObject.Arch == Other.BuildObject.Arch\r
\r
## hash() method\r
BuildTask._Thread.acquire(True)\r
\r
# start a new build thread\r
- Bo = BuildTask._ReadyQueue.keys()[0]\r
- Bt = BuildTask._ReadyQueue.pop(Bo)\r
+ Bo,Bt = BuildTask._ReadyQueue.popitem()\r
\r
# move into running queue\r
BuildTask._RunningQueueLock.acquire()\r
# while not BuildTask._ErrorFlag.isSet() and \\r
while len(BuildTask._RunningQueue) > 0:\r
EdkLogger.verbose("Waiting for thread ending...(%d)" % len(BuildTask._RunningQueue))\r
- EdkLogger.debug(EdkLogger.DEBUG_8, "Threads [%s]" % ", ".join([Th.getName() for Th in threading.enumerate()]))\r
+ EdkLogger.debug(EdkLogger.DEBUG_8, "Threads [%s]" % ", ".join(Th.getName() for Th in threading.enumerate()))\r
# avoid tense loop\r
time.sleep(0.1)\r
except BaseException, X:\r
GlobalData.gGlobalDefines['TOOL_CHAIN_TAG'] = self.ToolChainList[0]\r
if self.ToolChainFamily:\r
GlobalData.gGlobalDefines['FAMILY'] = self.ToolChainFamily[0]\r
- if 'PREBUILD' in GlobalData.gCommandLineDefines.keys():\r
+ if 'PREBUILD' in GlobalData.gCommandLineDefines:\r
self.Prebuild = GlobalData.gCommandLineDefines.get('PREBUILD')\r
else:\r
self.Db.InitDatabase()\r
self.Prebuild += self.PassCommandOption(self.BuildTargetList, self.ArchList, self.ToolChainList, self.PlatformFile, self.Target)\r
\r
def InitPostBuild(self):\r
- if 'POSTBUILD' in GlobalData.gCommandLineDefines.keys():\r
+ if 'POSTBUILD' in GlobalData.gCommandLineDefines:\r
self.Postbuild = GlobalData.gCommandLineDefines.get('POSTBUILD')\r
else:\r
Platform = self.Db._MapPlatform(str(self.PlatformFile))\r
# First get the XIP base address for FV map file.\r
GuidPattern = re.compile("[-a-fA-F0-9]+")\r
GuidName = re.compile("\(GUID=[-a-fA-F0-9]+")\r
- for FvName in Wa.FdfProfile.FvDict.keys():\r
+ for FvName in Wa.FdfProfile.FvDict:\r
FvMapBuffer = os.path.join(Wa.FvDir, FvName + '.Fv.map')\r
if not os.path.exists(FvMapBuffer):\r
continue\r
if not ImageClass.IsValid:\r
EdkLogger.error("build", FILE_PARSE_FAILURE, ExtraData=ImageClass.ErrorInfo)\r
ImageInfo = PeImageInfo(Module.Name, Module.Guid, Module.Arch, Module.OutputDir, Module.DebugDir, ImageClass)\r
- if Module.ModuleType in ['PEI_CORE', 'PEIM', 'COMBINED_PEIM_DRIVER', 'PIC_PEIM', 'RELOCATABLE_PEIM', 'DXE_CORE']:\r
+ if Module.ModuleType in [SUP_MODULE_PEI_CORE, SUP_MODULE_PEIM, EDK_COMPONENT_TYPE_COMBINED_PEIM_DRIVER, EDK_COMPONENT_TYPE_PIC_PEIM, EDK_COMPONENT_TYPE_RELOCATABLE_PEIM, SUP_MODULE_DXE_CORE]:\r
PeiModuleList[Module.MetaFile] = ImageInfo\r
PeiSize += ImageInfo.Image.Size\r
- elif Module.ModuleType in ['BS_DRIVER', 'DXE_DRIVER', 'UEFI_DRIVER']:\r
+ elif Module.ModuleType in [EDK_COMPONENT_TYPE_BS_DRIVER, SUP_MODULE_DXE_DRIVER, SUP_MODULE_UEFI_DRIVER]:\r
BtModuleList[Module.MetaFile] = ImageInfo\r
BtSize += ImageInfo.Image.Size\r
- elif Module.ModuleType in ['DXE_RUNTIME_DRIVER', 'RT_DRIVER', 'DXE_SAL_DRIVER', 'SAL_RT_DRIVER']:\r
+ elif Module.ModuleType in [SUP_MODULE_DXE_RUNTIME_DRIVER, EDK_COMPONENT_TYPE_RT_DRIVER, SUP_MODULE_DXE_SAL_DRIVER, EDK_COMPONENT_TYPE_SAL_RT_DRIVER]:\r
RtModuleList[Module.MetaFile] = ImageInfo\r
#IPF runtime driver needs to be at 2 page alignment.\r
if IsIpfPlatform and ImageInfo.Image.Size % 0x2000 != 0:\r
ImageInfo.Image.Size = (ImageInfo.Image.Size / 0x2000 + 1) * 0x2000\r
RtSize += ImageInfo.Image.Size\r
- elif Module.ModuleType in ['SMM_CORE', 'DXE_SMM_DRIVER', 'MM_STANDALONE', 'MM_CORE_STANDALONE']:\r
+ elif Module.ModuleType in [SUP_MODULE_SMM_CORE, SUP_MODULE_DXE_SMM_DRIVER, SUP_MODULE_MM_STANDALONE, SUP_MODULE_MM_CORE_STANDALONE]:\r
SmmModuleList[Module.MetaFile] = ImageInfo\r
SmmSize += ImageInfo.Image.Size\r
- if Module.ModuleType == 'DXE_SMM_DRIVER':\r
+ if Module.ModuleType == SUP_MODULE_DXE_SMM_DRIVER:\r
PiSpecVersion = Module.Module.Specification.get('PI_SPECIFICATION_VERSION', '0x00000000')\r
# for PI specification < PI1.1, DXE_SMM_DRIVER also runs as BOOT time driver.\r
if int(PiSpecVersion, 16) < 0x0001000A:\r
if OutputImageFile != '':\r
ModuleIsPatch = False\r
for Pcd in Module.ModulePcdList:\r
- if Pcd.Type == TAB_PCDS_PATCHABLE_IN_MODULE and Pcd.TokenCName in TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_LIST:\r
+ if Pcd.Type == TAB_PCDS_PATCHABLE_IN_MODULE and Pcd.TokenCName in TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_SET:\r
ModuleIsPatch = True\r
break\r
if not ModuleIsPatch:\r
for Pcd in Module.LibraryPcdList:\r
- if Pcd.Type == TAB_PCDS_PATCHABLE_IN_MODULE and Pcd.TokenCName in TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_LIST:\r
+ if Pcd.Type == TAB_PCDS_PATCHABLE_IN_MODULE and Pcd.TokenCName in TAB_PCDS_PATCHABLE_LOAD_FIX_ADDRESS_SET:\r
ModuleIsPatch = True\r
break\r
\r
self._SaveMapFile (MapBuffer, Wa)\r
\r
def _GenFfsCmd(self):\r
- CmdListDict = {}\r
+ # convert dictionary of Cmd:(Inf,Arch) \r
+ # to a new dictionary of (Inf,Arch):Cmd,Cmd,Cmd...\r
+ CmdSetDict = defaultdict(set)\r
GenFfsDict = GenFds.GenFfsMakefile('', GlobalData.gFdfParser, self, self.ArchList, GlobalData)\r
for Cmd in GenFfsDict:\r
tmpInf, tmpArch = GenFfsDict[Cmd]\r
- if (tmpInf, tmpArch) not in CmdListDict.keys():\r
- CmdListDict[tmpInf, tmpArch] = [Cmd]\r
- else:\r
- CmdListDict[tmpInf, tmpArch].append(Cmd)\r
- return CmdListDict\r
+ CmdSetDict[tmpInf, tmpArch].add(Cmd)\r
+ return CmdSetDict\r
\r
## Build a platform in multi-thread mode\r
#\r