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
\r
WorkspaceDir = os.path.normcase(os.path.normpath(os.environ["WORKSPACE"]))\r
if not os.path.exists(WorkspaceDir):\r
- EdkLogger.error("build", FILE_NOT_FOUND, "WORKSPACE doesn't exist", ExtraData="%s" % WorkspaceDir)\r
+ EdkLogger.error("build", FILE_NOT_FOUND, "WORKSPACE doesn't exist", ExtraData=WorkspaceDir)\r
elif ' ' in WorkspaceDir:\r
EdkLogger.error("build", FORMAT_NOT_SUPPORTED, "No space is allowed in WORKSPACE path",\r
ExtraData=WorkspaceDir)\r
if mws.PACKAGES_PATH:\r
for Path in mws.PACKAGES_PATH:\r
if not os.path.exists(Path):\r
- EdkLogger.error("build", FILE_NOT_FOUND, "One Path in PACKAGES_PATH doesn't exist", ExtraData="%s" % Path)\r
+ EdkLogger.error("build", FILE_NOT_FOUND, "One Path in PACKAGES_PATH doesn't exist", ExtraData=Path)\r
elif ' ' in Path:\r
EdkLogger.error("build", FORMAT_NOT_SUPPORTED, "No space is allowed in PACKAGES_PATH", ExtraData=Path)\r
\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
def _RebaseModule (self, MapBuffer, BaseAddress, ModuleList, AddrIsOffset = True, ModeIsSmm = False):\r
if ModeIsSmm:\r
AddrIsOffset = False\r
- InfFileNameList = ModuleList.keys()\r
- #InfFileNameList.sort()\r
- for InfFile in InfFileNameList:\r
+ for InfFile in ModuleList:\r
sys.stdout.write (".")\r
sys.stdout.flush()\r
ModuleInfo = ModuleList[InfFile]\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
GuidString = MatchGuid.group()\r
if GuidString.upper() in ModuleList:\r
Line = Line.replace(GuidString, ModuleList[GuidString.upper()].Name)\r
- MapBuffer.write('%s' % (Line))\r
+ MapBuffer.write(Line)\r
#\r
# Add the debug image full path.\r
#\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
- PiSpecVersion = '0x00000000'\r
- if 'PI_SPECIFICATION_VERSION' in Module.Module.Specification:\r
- PiSpecVersion = Module.Module.Specification['PI_SPECIFICATION_VERSION']\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
BtModuleList[Module.MetaFile] = ImageInfo\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