public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [PATCH v1 0/2] BaseTools: cleanup for speed
@ 2018-05-18  0:06 Jaben Carsey
  2018-05-18  0:06 ` [PATCH v1 1/2] BaseTools: refactor to remove functions Jaben Carsey
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Jaben Carsey @ 2018-05-18  0:06 UTC (permalink / raw)
  To: edk2-devel

the first patch merges 2 almost identical functions by moving optional output
to the WorkspaceCommon version and then calls it from AutoGen.

the second patch is lots of small cleanups.

Jaben Carsey (2):
  BaseTools: refactor to remove functions
  BaseTools: Cleanup unneeded code

 BaseTools/Source/Python/AutoGen/AutoGen.py             | 500 +++++++-------------
 BaseTools/Source/Python/AutoGen/GenC.py                |   2 +-
 BaseTools/Source/Python/AutoGen/GenMake.py             |   4 +-
 BaseTools/Source/Python/AutoGen/GenPcdDb.py            |  14 +-
 BaseTools/Source/Python/AutoGen/GenVar.py              |   2 +-
 BaseTools/Source/Python/AutoGen/StrGather.py           |   8 +-
 BaseTools/Source/Python/Common/Misc.py                 |   2 +-
 BaseTools/Source/Python/Common/String.py               |   2 +-
 BaseTools/Source/Python/Common/VpdInfoFile.py          |   2 +-
 BaseTools/Source/Python/GenFds/FdfParser.py            |   8 +-
 BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py | 119 +++--
 BaseTools/Source/Python/Workspace/WorkspaceCommon.py   |  52 +-
 BaseTools/Source/Python/build/BuildReport.py           |  26 +-
 BaseTools/Source/Python/build/build.py                 |   6 +-
 14 files changed, 291 insertions(+), 456 deletions(-)

-- 
2.16.2.windows.1



^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH v1 1/2] BaseTools: refactor to remove functions
  2018-05-18  0:06 [PATCH v1 0/2] BaseTools: cleanup for speed Jaben Carsey
@ 2018-05-18  0:06 ` Jaben Carsey
  2018-05-18  0:06 ` [PATCH v1 2/2] BaseTools: Cleanup unneeded code Jaben Carsey
  2018-06-12  6:43 ` [PATCH v1 0/2] BaseTools: cleanup for speed Zhu, Yonghong
  2 siblings, 0 replies; 4+ messages in thread
From: Jaben Carsey @ 2018-05-18  0:06 UTC (permalink / raw)
  To: edk2-devel; +Cc: Liming Gao, Yonghong Zhu

refactoring almost identical functions to delete and use the other.

Cc: Liming Gao <liming.gao@intel.com>
Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Jaben Carsey <jaben.carsey@intel.com>
---
 BaseTools/Source/Python/AutoGen/AutoGen.py           | 165 ++------------------
 BaseTools/Source/Python/Workspace/WorkspaceCommon.py |  52 ++++--
 2 files changed, 45 insertions(+), 172 deletions(-)

diff --git a/BaseTools/Source/Python/AutoGen/AutoGen.py b/BaseTools/Source/Python/AutoGen/AutoGen.py
index 1e6511cdb5d2..d1801bff9c83 100644
--- a/BaseTools/Source/Python/AutoGen/AutoGen.py
+++ b/BaseTools/Source/Python/AutoGen/AutoGen.py
@@ -42,6 +42,7 @@ from GenPatchPcdTable.GenPatchPcdTable import parsePcdInfoFromMapFile
 import Common.VpdInfoFile as VpdInfoFile
 from GenPcdDb import CreatePcdDatabaseCode
 from Workspace.MetaFileCommentParser import UsageList
+from Workspace.WorkspaceCommon import GetModuleLibInstances
 from Common.MultipleWorkspace import MultipleWorkspace as mws
 import InfSectionParser
 import datetime
@@ -2156,162 +2157,14 @@ class PlatformAutoGen(AutoGen):
         if str(Module) not in self.Platform.Modules:
             return []
 
-        ModuleType = Module.ModuleType
-
-        # for overridding library instances with module specific setting
-        PlatformModule = self.Platform.Modules[str(Module)]
-
-        # add forced library instances (specified under LibraryClasses sections)
-        #
-        # If a module has a MODULE_TYPE of USER_DEFINED,
-        # do not link in NULL library class instances from the global [LibraryClasses.*] sections.
-        #
-        if Module.ModuleType != SUP_MODULE_USER_DEFINED:
-            for LibraryClass in self.Platform.LibraryClasses.GetKeys():
-                if LibraryClass.startswith("NULL") and self.Platform.LibraryClasses[LibraryClass, Module.ModuleType]:
-                    Module.LibraryClasses[LibraryClass] = self.Platform.LibraryClasses[LibraryClass, Module.ModuleType]
-
-        # add forced library instances (specified in module overrides)
-        for LibraryClass in PlatformModule.LibraryClasses:
-            if LibraryClass.startswith("NULL"):
-                Module.LibraryClasses[LibraryClass] = PlatformModule.LibraryClasses[LibraryClass]
-
-        # EdkII module
-        LibraryConsumerList = [Module]
-        Constructor         = []
-        ConsumedByList      = OrderedDict()
-        LibraryInstance     = OrderedDict()
-
-        EdkLogger.verbose("")
-        EdkLogger.verbose("Library instances of module [%s] [%s]:" % (str(Module), self.Arch))
-        while len(LibraryConsumerList) > 0:
-            M = LibraryConsumerList.pop()
-            for LibraryClassName in M.LibraryClasses:
-                if LibraryClassName not in LibraryInstance:
-                    # override library instance for this module
-                    if LibraryClassName in PlatformModule.LibraryClasses:
-                        LibraryPath = PlatformModule.LibraryClasses[LibraryClassName]
-                    else:
-                        LibraryPath = self.Platform.LibraryClasses[LibraryClassName, ModuleType]
-                    if LibraryPath is None or LibraryPath == "":
-                        LibraryPath = M.LibraryClasses[LibraryClassName]
-                        if LibraryPath is None or LibraryPath == "":
-                            EdkLogger.error("build", RESOURCE_NOT_AVAILABLE,
-                                            "Instance of library class [%s] is not found" % LibraryClassName,
-                                            File=self.MetaFile,
-                                            ExtraData="in [%s] [%s]\n\tconsumed by module [%s]" % (str(M), self.Arch, str(Module)))
-
-                    LibraryModule = self.BuildDatabase[LibraryPath, self.Arch, self.BuildTarget, self.ToolChain]
-                    # for those forced library instance (NULL library), add a fake library class
-                    if LibraryClassName.startswith("NULL"):
-                        LibraryModule.LibraryClass.append(LibraryClassObject(LibraryClassName, [ModuleType]))
-                    elif LibraryModule.LibraryClass is None \
-                         or len(LibraryModule.LibraryClass) == 0 \
-                         or (ModuleType != SUP_MODULE_USER_DEFINED
-                             and ModuleType not in LibraryModule.LibraryClass[0].SupModList):
-                        # only USER_DEFINED can link against any library instance despite of its SupModList
-                        EdkLogger.error("build", OPTION_MISSING,
-                                        "Module type [%s] is not supported by library instance [%s]" \
-                                        % (ModuleType, LibraryPath), File=self.MetaFile,
-                                        ExtraData="consumed by [%s]" % str(Module))
-
-                    LibraryInstance[LibraryClassName] = LibraryModule
-                    LibraryConsumerList.append(LibraryModule)
-                    EdkLogger.verbose("\t" + str(LibraryClassName) + " : " + str(LibraryModule))
-                else:
-                    LibraryModule = LibraryInstance[LibraryClassName]
-
-                if LibraryModule is None:
-                    continue
-
-                if LibraryModule.ConstructorList != [] and LibraryModule not in Constructor:
-                    Constructor.append(LibraryModule)
-
-                if LibraryModule not in ConsumedByList:
-                    ConsumedByList[LibraryModule] = []
-                # don't add current module itself to consumer list
-                if M != Module:
-                    if M in ConsumedByList[LibraryModule]:
-                        continue
-                    ConsumedByList[LibraryModule].append(M)
-        #
-        # Initialize the sorted output list to the empty set
-        #
-        SortedLibraryList = []
-        #
-        # Q <- Set of all nodes with no incoming edges
-        #
-        LibraryList = [] #LibraryInstance.values()
-        Q = []
-        for LibraryClassName in LibraryInstance:
-            M = LibraryInstance[LibraryClassName]
-            LibraryList.append(M)
-            if ConsumedByList[M] == []:
-                Q.append(M)
-
-        #
-        # start the  DAG algorithm
-        #
-        while True:
-            EdgeRemoved = True
-            while Q == [] and EdgeRemoved:
-                EdgeRemoved = False
-                # for each node Item with a Constructor
-                for Item in LibraryList:
-                    if Item not in Constructor:
-                        continue
-                    # for each Node without a constructor with an edge e from Item to Node
-                    for Node in ConsumedByList[Item]:
-                        if Node in Constructor:
-                            continue
-                        # remove edge e from the graph if Node has no constructor
-                        ConsumedByList[Item].remove(Node)
-                        EdgeRemoved = True
-                        if ConsumedByList[Item] == []:
-                            # insert Item into Q
-                            Q.insert(0, Item)
-                            break
-                    if Q != []:
-                        break
-            # DAG is done if there's no more incoming edge for all nodes
-            if Q == []:
-                break
-
-            # remove node from Q
-            Node = Q.pop()
-            # output Node
-            SortedLibraryList.append(Node)
-
-            # for each node Item with an edge e from Node to Item do
-            for Item in LibraryList:
-                if Node not in ConsumedByList[Item]:
-                    continue
-                # remove edge e from the graph
-                ConsumedByList[Item].remove(Node)
-
-                if ConsumedByList[Item] != []:
-                    continue
-                # insert Item into Q, if Item has no other incoming edges
-                Q.insert(0, Item)
-
-        #
-        # if any remaining node Item in the graph has a constructor and an incoming edge, then the graph has a cycle
-        #
-        for Item in LibraryList:
-            if ConsumedByList[Item] != [] and Item in Constructor and len(Constructor) > 1:
-                ErrorMessage = "\tconsumed by " + "\n\tconsumed by ".join(str(L) for L in ConsumedByList[Item])
-                EdkLogger.error("build", BUILD_ERROR, 'Library [%s] with constructors has a cycle' % str(Item),
-                                ExtraData=ErrorMessage, File=self.MetaFile)
-            if Item not in SortedLibraryList:
-                SortedLibraryList.append(Item)
-
-        #
-        # Build the list of constructor and destructir names
-        # The DAG Topo sort produces the destructor order, so the list of constructors must generated in the reverse order
-        #
-        SortedLibraryList.reverse()
-        return SortedLibraryList
-
+        return GetModuleLibInstances(Module,
+                                     self.Platform,
+                                     self.BuildDatabase,
+                                     self.Arch,
+                                     self.BuildTarget,
+                                     self.ToolChain,
+                                     self.MetaFile,
+                                     EdkLogger)
 
     ## Override PCD setting (type, value, ...)
     #
diff --git a/BaseTools/Source/Python/Workspace/WorkspaceCommon.py b/BaseTools/Source/Python/Workspace/WorkspaceCommon.py
index 573100081815..a28fbdf03021 100644
--- a/BaseTools/Source/Python/Workspace/WorkspaceCommon.py
+++ b/BaseTools/Source/Python/Workspace/WorkspaceCommon.py
@@ -83,16 +83,13 @@ def GetDeclaredPcd(Platform, BuildDatabase, Arch, Target, Toolchain,additionalPk
 #
 def GetLiabraryInstances(Module, Platform, BuildDatabase, Arch, Target, Toolchain):
     if Module.AutoGenVersion >= 0x00010005:
-        return _GetModuleLibraryInstances(Module, Platform, BuildDatabase, Arch, Target, Toolchain)
+        return GetModuleLibInstances(Module, Platform, BuildDatabase, Arch, Target, Toolchain)
     else:
         return _ResolveLibraryReference(Module, Platform)
 
-def _GetModuleLibraryInstances(Module, Platform, BuildDatabase, Arch, Target, Toolchain):
+def GetModuleLibInstances(Module, Platform, BuildDatabase, Arch, Target, Toolchain, FileName = '', EdkLogger = None):
     ModuleType = Module.ModuleType
 
-    # for overriding library instances with module specific setting
-    PlatformModule = Platform.Modules[str(Module)]
-
     # add forced library instances (specified under LibraryClasses sections)
     #
     # If a module has a MODULE_TYPE of USER_DEFINED,
@@ -104,9 +101,9 @@ def _GetModuleLibraryInstances(Module, Platform, BuildDatabase, Arch, Target, To
                 Module.LibraryClasses[LibraryClass] = Platform.LibraryClasses[LibraryClass, Module.ModuleType]
 
     # add forced library instances (specified in module overrides)
-    for LibraryClass in PlatformModule.LibraryClasses:
+    for LibraryClass in Platform.Modules[str(Module)].LibraryClasses:
         if LibraryClass.startswith("NULL"):
-            Module.LibraryClasses[LibraryClass] = PlatformModule.LibraryClasses[LibraryClass]
+            Module.LibraryClasses[LibraryClass] = Platform.Modules[str(Module)].LibraryClasses[LibraryClass]
 
     # EdkII module
     LibraryConsumerList = [Module]
@@ -114,19 +111,29 @@ def _GetModuleLibraryInstances(Module, Platform, BuildDatabase, Arch, Target, To
     ConsumedByList = OrderedListDict()
     LibraryInstance = OrderedDict()
 
+    if FileName:
+        EdkLogger.verbose("")
+        EdkLogger.verbose("Library instances of module [%s] [%s]:" % (str(Module), Arch))
+
     while len(LibraryConsumerList) > 0:
         M = LibraryConsumerList.pop()
         for LibraryClassName in M.LibraryClasses:
             if LibraryClassName not in LibraryInstance:
                 # override library instance for this module
-                if LibraryClassName in PlatformModule.LibraryClasses:
-                    LibraryPath = PlatformModule.LibraryClasses[LibraryClassName]
+                if LibraryClassName in Platform.Modules[str(Module)].LibraryClasses:
+                    LibraryPath = Platform.Modules[str(Module)].LibraryClasses[LibraryClassName]
                 else:
                     LibraryPath = Platform.LibraryClasses[LibraryClassName, ModuleType]
                 if LibraryPath is None or LibraryPath == "":
                     LibraryPath = M.LibraryClasses[LibraryClassName]
                     if LibraryPath is None or LibraryPath == "":
-                        return []
+                        if FileName:
+                            EdkLogger.error("build", RESOURCE_NOT_AVAILABLE,
+                                            "Instance of library class [%s] is not found" % LibraryClassName,
+                                            File=FileName,
+                                            ExtraData="in [%s] [%s]\n\tconsumed by module [%s]" % (str(M), Arch, str(Module)))
+                        else:
+                            return []
 
                 LibraryModule = BuildDatabase[LibraryPath, Arch, Target, Toolchain]
                 # for those forced library instance (NULL library), add a fake library class
@@ -137,10 +144,18 @@ def _GetModuleLibraryInstances(Module, Platform, BuildDatabase, Arch, Target, To
                      or (ModuleType != SUP_MODULE_USER_DEFINED
                          and ModuleType not in LibraryModule.LibraryClass[0].SupModList):
                     # only USER_DEFINED can link against any library instance despite of its SupModList
-                    return []
+                    if FileName:
+                        EdkLogger.error("build", OPTION_MISSING,
+                                        "Module type [%s] is not supported by library instance [%s]" \
+                                        % (ModuleType, LibraryPath), File=FileName,
+                                        ExtraData="consumed by [%s]" % str(Module))
+                    else:
+                        return []
 
                 LibraryInstance[LibraryClassName] = LibraryModule
                 LibraryConsumerList.append(LibraryModule)
+                if FileName:
+                    EdkLogger.verbose("\t" + str(LibraryClassName) + " : " + str(LibraryModule))
             else:
                 LibraryModule = LibraryInstance[LibraryClassName]
 
@@ -167,7 +182,7 @@ def _GetModuleLibraryInstances(Module, Platform, BuildDatabase, Arch, Target, To
     for LibraryClassName in LibraryInstance:
         M = LibraryInstance[LibraryClassName]
         LibraryList.append(M)
-        if len(ConsumedByList[M]) == 0:
+        if not ConsumedByList[M]:
             Q.append(M)
 
     #
@@ -188,7 +203,7 @@ def _GetModuleLibraryInstances(Module, Platform, BuildDatabase, Arch, Target, To
                     # remove edge e from the graph if Node has no constructor
                     ConsumedByList[Item].remove(Node)
                     EdgeRemoved = True
-                    if len(ConsumedByList[Item]) == 0:
+                    if not ConsumedByList[Item]:
                         # insert Item into Q
                         Q.insert(0, Item)
                         break
@@ -210,7 +225,7 @@ def _GetModuleLibraryInstances(Module, Platform, BuildDatabase, Arch, Target, To
             # remove edge e from the graph
             ConsumedByList[Item].remove(Node)
 
-            if len(ConsumedByList[Item]) != 0:
+            if ConsumedByList[Item]:
                 continue
             # insert Item into Q, if Item has no other incoming edges
             Q.insert(0, Item)
@@ -219,8 +234,13 @@ def _GetModuleLibraryInstances(Module, Platform, BuildDatabase, Arch, Target, To
     # if any remaining node Item in the graph has a constructor and an incoming edge, then the graph has a cycle
     #
     for Item in LibraryList:
-        if len(ConsumedByList[Item]) != 0 and Item in Constructor and len(Constructor) > 1:
-            return []
+        if ConsumedByList[Item] and Item in Constructor and len(Constructor) > 1:
+            if FileName:
+                ErrorMessage = "\tconsumed by " + "\n\tconsumed by ".join(str(L) for L in ConsumedByList[Item])
+                EdkLogger.error("build", BUILD_ERROR, 'Library [%s] with constructors has a cycle' % str(Item),
+                                ExtraData=ErrorMessage, File=FileName)
+            else:
+                return []
         if Item not in SortedLibraryList:
             SortedLibraryList.append(Item)
 
-- 
2.16.2.windows.1



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v1 2/2] BaseTools: Cleanup unneeded code
  2018-05-18  0:06 [PATCH v1 0/2] BaseTools: cleanup for speed Jaben Carsey
  2018-05-18  0:06 ` [PATCH v1 1/2] BaseTools: refactor to remove functions Jaben Carsey
@ 2018-05-18  0:06 ` Jaben Carsey
  2018-06-12  6:43 ` [PATCH v1 0/2] BaseTools: cleanup for speed Zhu, Yonghong
  2 siblings, 0 replies; 4+ messages in thread
From: Jaben Carsey @ 2018-05-18  0:06 UTC (permalink / raw)
  To: edk2-devel; +Cc: Liming Gao, Yonghong Zhu

Cc: Liming Gao <liming.gao@intel.com>
Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Jaben Carsey <jaben.carsey@intel.com>
---
 BaseTools/Source/Python/AutoGen/AutoGen.py             | 335 +++++++++-----------
 BaseTools/Source/Python/AutoGen/GenC.py                |   2 +-
 BaseTools/Source/Python/AutoGen/GenMake.py             |   4 +-
 BaseTools/Source/Python/AutoGen/GenPcdDb.py            |  14 +-
 BaseTools/Source/Python/AutoGen/GenVar.py              |   2 +-
 BaseTools/Source/Python/AutoGen/StrGather.py           |   8 +-
 BaseTools/Source/Python/Common/Misc.py                 |   2 +-
 BaseTools/Source/Python/Common/String.py               |   2 +-
 BaseTools/Source/Python/Common/VpdInfoFile.py          |   2 +-
 BaseTools/Source/Python/GenFds/FdfParser.py            |   8 +-
 BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py | 119 ++++---
 BaseTools/Source/Python/build/BuildReport.py           |  26 +-
 BaseTools/Source/Python/build/build.py                 |   6 +-
 13 files changed, 246 insertions(+), 284 deletions(-)

diff --git a/BaseTools/Source/Python/AutoGen/AutoGen.py b/BaseTools/Source/Python/AutoGen/AutoGen.py
index d1801bff9c83..a0f57903a40e 100644
--- a/BaseTools/Source/Python/AutoGen/AutoGen.py
+++ b/BaseTools/Source/Python/AutoGen/AutoGen.py
@@ -50,6 +50,7 @@ import hashlib
 from GenVar import VariableMgr,var_info
 from collections import OrderedDict
 from collections import defaultdict
+from Workspace.WorkspaceCommon import OrderedListDict
 
 ## Regular expression for splitting Dependency Expression string into tokens
 gDepexTokenPattern = re.compile("(\(|\)|\w+| \S+\.inf)")
@@ -463,7 +464,7 @@ class WorkspaceAutoGen(AutoGen):
                             'build',
                             FORMAT_INVALID,
                             "Building modules from source INFs, following PCD use %s and %s access method. It must be corrected to use only one access method." % (i, j),
-                            ExtraData="%s" % '\n\t'.join(str(P[1]+'.'+P[0]) for P in Intersections)
+                            ExtraData='\n\t'.join(str(P[1]+'.'+P[0]) for P in Intersections)
                             )
 
             #
@@ -705,10 +706,9 @@ class WorkspaceAutoGen(AutoGen):
         #
         if self.FdfFile:
             AllWorkSpaceMetaFiles.add (self.FdfFile.Path)
-            if self.FdfFile:
-                FdfFiles = GlobalData.gFdfParser.GetAllIncludedFile()
-                for f in FdfFiles:
-                    AllWorkSpaceMetaFiles.add (f.FileName)
+            for f in GlobalData.gFdfParser.GetAllIncludedFile():
+                AllWorkSpaceMetaFiles.add (f.FileName)
+
         #
         # add dsc
         #
@@ -729,19 +729,16 @@ class WorkspaceAutoGen(AutoGen):
         AllWorkSpaceMetaFiles.add(os.path.join(self.BuildDir, 'PcdTokenNumber'))
 
         for Arch in self.ArchList:
-            Platform = self.BuildDatabase[self.MetaFile, Arch, Target, Toolchain]
-            PGen = PlatformAutoGen(self, self.MetaFile, Target, Toolchain, Arch)
-
             #
             # add dec
             #
-            for Package in PGen.PackageList:
+            for Package in PlatformAutoGen(self, self.MetaFile, Target, Toolchain, Arch).PackageList:
                 AllWorkSpaceMetaFiles.add(Package.MetaFile.Path)
 
             #
             # add included dsc
             #
-            for filePath in Platform._RawData.IncludedFiles:
+            for filePath in self.BuildDatabase[self.MetaFile, Arch, Target, Toolchain]._RawData.IncludedFiles:
                 AllWorkSpaceMetaFiles.add(filePath.Path)
 
         return AllWorkSpaceMetaFiles
@@ -872,12 +869,11 @@ class WorkspaceAutoGen(AutoGen):
 
 
     def _CheckPcdDefineAndType(self):
-        PcdTypeList = [
-            TAB_PCDS_FIXED_AT_BUILD, TAB_PCDS_PATCHABLE_IN_MODULE, TAB_PCDS_FEATURE_FLAG,
-            TAB_PCDS_DYNAMIC, #TAB_PCDS_DYNAMIC_HII, TAB_PCDS_DYNAMIC_VPD,
-            TAB_PCDS_DYNAMIC_EX, # TAB_PCDS_DYNAMIC_EX_HII, TAB_PCDS_DYNAMIC_EX_VPD
-        ]
-
+        PcdTypeSet = {TAB_PCDS_FIXED_AT_BUILD,
+            TAB_PCDS_PATCHABLE_IN_MODULE,
+            TAB_PCDS_FEATURE_FLAG,
+            TAB_PCDS_DYNAMIC,
+            TAB_PCDS_DYNAMIC_EX}
         # This dict store PCDs which are not used by any modules with specified arches
         UnusedPcd = OrderedDict()
         for Pa in self.AutoGenObjectList:
@@ -899,7 +895,7 @@ class WorkspaceAutoGen(AutoGen):
                     # Key of DEC's Pcds dictionary is PcdCName, TokenSpaceGuid, PcdType
                     if (Pcd[0], Pcd[1], PcdType) in Package.Pcds:
                         break
-                    for Type in PcdTypeList:
+                    for Type in PcdTypeSet:
                         if (Pcd[0], Pcd[1], Type) in Package.Pcds:
                             EdkLogger.error(
                                 'build',
@@ -1057,9 +1053,10 @@ class WorkspaceAutoGen(AutoGen):
     #                                       modules will be created as well
     #
     def CreateMakeFile(self, CreateDepsMakeFile=False):
-        if CreateDepsMakeFile:
-            for Pa in self.AutoGenObjectList:
-                Pa.CreateMakeFile(CreateDepsMakeFile)
+        if not CreateDepsMakeFile:
+            return
+        for Pa in self.AutoGenObjectList:
+            Pa.CreateMakeFile(True)
 
     ## Create autogen code for platform and modules
     #
@@ -1073,7 +1070,7 @@ class WorkspaceAutoGen(AutoGen):
         if not CreateDepsCodeFile:
             return
         for Pa in self.AutoGenObjectList:
-            Pa.CreateCodeFile(CreateDepsCodeFile)
+            Pa.CreateCodeFile(True)
 
     ## Create AsBuilt INF file the platform
     #
@@ -1378,11 +1375,7 @@ class PlatformAutoGen(AutoGen):
                             del self.Platform.Pcds[key]
                             self.Platform.Pcds[newkey] = Value
                             break
-                        else:
-                            pass
                     break
-                else:
-                    pass
 
         # for gathering error information
         NoDatumTypePcdList = set()
@@ -1567,8 +1560,7 @@ class PlatformAutoGen(AutoGen):
                         PcdNvStoreDfBuffer.SkuInfoList[skuname].DefaultValue = vardump
                         PcdNvStoreDfBuffer.MaxDatumSize = str(len(vardump.split(",")))
 
-            PlatformPcds = self._PlatformPcds.keys()
-            PlatformPcds.sort()
+            PlatformPcds = sorted(self._PlatformPcds.keys())
             #
             # Add VPD type PCD into VpdFile and determine whether the VPD PCD need to be fixed up.
             #
@@ -1874,7 +1866,7 @@ class PlatformAutoGen(AutoGen):
                         if Flags.startswith('='):
                             self._BuildCommand = [self._BuildCommand[0]] + [Flags[1:]]
                         else:
-                            self._BuildCommand += [Flags]
+                            self._BuildCommand.append(Flags)
         return self._BuildCommand
 
     ## Get tool chain definition
@@ -2069,32 +2061,28 @@ class PlatformAutoGen(AutoGen):
             # TokeNumber 11 ~ 20
             #
             for Pcd in self.DynamicPcdList:
-                if Pcd.Phase == "PEI":
-                    if Pcd.Type in PCD_DYNAMIC_TYPE_SET:
-                        EdkLogger.debug(EdkLogger.DEBUG_5, "%s %s (%s) -> %d" % (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Pcd.Phase, TokenNumber))
-                        self._PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceGuidCName] = TokenNumber
-                        TokenNumber += 1
+                if Pcd.Phase == "PEI" and Pcd.Type in PCD_DYNAMIC_TYPE_SET:
+                    EdkLogger.debug(EdkLogger.DEBUG_5, "%s %s (%s) -> %d" % (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Pcd.Phase, TokenNumber))
+                    self._PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceGuidCName] = TokenNumber
+                    TokenNumber += 1
 
             for Pcd in self.DynamicPcdList:
-                if Pcd.Phase == "PEI":
-                    if Pcd.Type in PCD_DYNAMIC_EX_TYPE_SET:
-                        EdkLogger.debug(EdkLogger.DEBUG_5, "%s %s (%s) -> %d" % (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Pcd.Phase, TokenNumber))
-                        self._PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceGuidCName] = TokenNumber
-                        TokenNumber += 1
+                if Pcd.Phase == "PEI" and Pcd.Type in PCD_DYNAMIC_EX_TYPE_SET:
+                    EdkLogger.debug(EdkLogger.DEBUG_5, "%s %s (%s) -> %d" % (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Pcd.Phase, TokenNumber))
+                    self._PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceGuidCName] = TokenNumber
+                    TokenNumber += 1
 
             for Pcd in self.DynamicPcdList:
-                if Pcd.Phase == "DXE":
-                    if Pcd.Type in PCD_DYNAMIC_TYPE_SET:
-                        EdkLogger.debug(EdkLogger.DEBUG_5, "%s %s (%s) -> %d" % (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Pcd.Phase, TokenNumber))
-                        self._PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceGuidCName] = TokenNumber
-                        TokenNumber += 1
+                if Pcd.Phase == "DXE" and Pcd.Type in PCD_DYNAMIC_TYPE_SET:
+                    EdkLogger.debug(EdkLogger.DEBUG_5, "%s %s (%s) -> %d" % (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Pcd.Phase, TokenNumber))
+                    self._PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceGuidCName] = TokenNumber
+                    TokenNumber += 1
 
             for Pcd in self.DynamicPcdList:
-                if Pcd.Phase == "DXE":
-                    if Pcd.Type in PCD_DYNAMIC_EX_TYPE_SET:
-                        EdkLogger.debug(EdkLogger.DEBUG_5, "%s %s (%s) -> %d" % (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Pcd.Phase, TokenNumber))
-                        self._PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceGuidCName] = TokenNumber
-                        TokenNumber += 1
+                if Pcd.Phase == "DXE" and Pcd.Type in PCD_DYNAMIC_EX_TYPE_SET:
+                    EdkLogger.debug(EdkLogger.DEBUG_5, "%s %s (%s) -> %d" % (Pcd.TokenCName, Pcd.TokenSpaceGuidCName, Pcd.Phase, TokenNumber))
+                    self._PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceGuidCName] = TokenNumber
+                    TokenNumber += 1
 
             for Pcd in self.NonDynamicPcdList:
                 self._PcdTokenNumber[Pcd.TokenCName, Pcd.TokenSpaceGuidCName] = TokenNumber
@@ -2185,8 +2173,8 @@ class PlatformAutoGen(AutoGen):
         if FromPcd is not None:
             if ToPcd.Pending and FromPcd.Type:
                 ToPcd.Type = FromPcd.Type
-            elif (ToPcd.Type) and (FromPcd.Type)\
-                and (ToPcd.Type != FromPcd.Type) and (ToPcd.Type in FromPcd.Type):
+            elif ToPcd.Type and FromPcd.Type\
+                and ToPcd.Type != FromPcd.Type and ToPcd.Type in FromPcd.Type:
                 if ToPcd.Type.strip() == TAB_PCDS_DYNAMIC_EX:
                     ToPcd.Type = FromPcd.Type
             elif ToPcd.Type and FromPcd.Type \
@@ -2397,13 +2385,14 @@ class PlatformAutoGen(AutoGen):
             if (Key[0] == self.BuildRuleFamily and
                 (ModuleStyle is None or len(Key) < 3 or (len(Key) > 2 and Key[2] == ModuleStyle))):
                 Target, ToolChain, Arch, CommandType, Attr = Key[1].split('_')
-                if Target == self.BuildTarget or Target == "*":
-                    if ToolChain == self.ToolChain or ToolChain == "*":
-                        if Arch == self.Arch or Arch == "*":
-                            if Options[Key].startswith("="):
-                                if OverrideList.get(Key[1]) is not None:
-                                    OverrideList.pop(Key[1])
-                                OverrideList[Key[1]] = Options[Key]
+                if (Target == self.BuildTarget or Target == "*") and\
+                    (ToolChain == self.ToolChain or ToolChain == "*") and\
+                    (Arch == self.Arch or Arch == "*") and\
+                    Options[Key].startswith("="):
+
+                    if OverrideList.get(Key[1]) is not None:
+                        OverrideList.pop(Key[1])
+                    OverrideList[Key[1]] = Options[Key]
         
         #
         # Use the highest priority value. 
@@ -2419,17 +2408,18 @@ class PlatformAutoGen(AutoGen):
                     # Compare two Key, if one is included by another, choose the higher priority one
                     #                    
                     Target2, ToolChain2, Arch2, CommandType2, Attr2 = NextKey.split("_")
-                    if Target1 == Target2 or Target1 == "*" or Target2 == "*":
-                        if ToolChain1 == ToolChain2 or ToolChain1 == "*" or ToolChain2 == "*":
-                            if Arch1 == Arch2 or Arch1 == "*" or Arch2 == "*":
-                                if CommandType1 == CommandType2 or CommandType1 == "*" or CommandType2 == "*":
-                                    if Attr1 == Attr2 or Attr1 == "*" or Attr2 == "*":
-                                        if self.CalculatePriorityValue(NowKey) > self.CalculatePriorityValue(NextKey):
-                                            if Options.get((self.BuildRuleFamily, NextKey)) is not None:
-                                                Options.pop((self.BuildRuleFamily, NextKey))
-                                        else:
-                                            if Options.get((self.BuildRuleFamily, NowKey)) is not None:
-                                                Options.pop((self.BuildRuleFamily, NowKey))
+                    if (Target1 == Target2 or Target1 == "*" or Target2 == "*") and\
+                        (ToolChain1 == ToolChain2 or ToolChain1 == "*" or ToolChain2 == "*") and\
+                        (Arch1 == Arch2 or Arch1 == "*" or Arch2 == "*") and\
+                        (CommandType1 == CommandType2 or CommandType1 == "*" or CommandType2 == "*") and\
+                        (Attr1 == Attr2 or Attr1 == "*" or Attr2 == "*"):
+
+                        if self.CalculatePriorityValue(NowKey) > self.CalculatePriorityValue(NextKey):
+                            if Options.get((self.BuildRuleFamily, NextKey)) is not None:
+                                Options.pop((self.BuildRuleFamily, NextKey))
+                        else:
+                            if Options.get((self.BuildRuleFamily, NowKey)) is not None:
+                                Options.pop((self.BuildRuleFamily, NowKey))
                                                            
         for Key in Options:
             if ModuleStyle is not None and len (Key) > 2:
@@ -2591,6 +2581,14 @@ class PlatformAutoGen(AutoGen):
     LibraryAutoGenList  = property(_GetLibraryAutoGenList)
     GenFdsCommand       = property(_GenFdsCommand)
 
+#
+# extend lists contained in a dictionary with lists stored in another dictionary
+# if CopyToDict is not derived from DefaultDict(list) then this may raise exception
+#
+def ExtendCopyDictionaryLists(CopyToDict, CopyFromDict):
+    for Key in CopyFromDict:
+        CopyToDict[Key].extend(CopyFromDict[Key])
+
 ## ModuleAutoGen class
 #
 # This class encapsules the AutoGen behaviors for the build tools. In addition to
@@ -2681,7 +2679,6 @@ class ModuleAutoGen(AutoGen):
         self._MakeFileDir     = None
 
         self._IncludePathList = None
-        self._IncludePathLength = 0
         self._AutoGenFileList = None
         self._UnicodeFileList = None
         self._VfrFileList = None
@@ -2696,16 +2693,16 @@ class ModuleAutoGen(AutoGen):
         self._DerivedPackageList      = None
         self._ModulePcdList           = None
         self._LibraryPcdList          = None
-        self._PcdComments = OrderedDict()
+        self._PcdComments = OrderedListDict()
         self._GuidList                = None
         self._GuidsUsedByPcd = None
-        self._GuidComments = OrderedDict()
+        self._GuidComments = OrderedListDict()
         self._ProtocolList            = None
-        self._ProtocolComments = OrderedDict()
+        self._ProtocolComments = OrderedListDict()
         self._PpiList                 = None
-        self._PpiComments = OrderedDict()
-        self._DepexList               = None
-        self._DepexExpressionList     = None
+        self._PpiComments = OrderedListDict()
+        self._DepexDict               = None
+        self._DepexExpressionDict     = None
         self._BuildOption             = None
         self._BuildOptionIncPathList  = None
         self._BuildTargets            = None
@@ -2727,7 +2724,6 @@ class ModuleAutoGen(AutoGen):
         #  
         self._FixedAtBuildPcds         = []
         self.ConstPcd                  = {}
-        return True
 
     def __repr__(self):
         return "%s [%s]" % (self.MetaFile, self.Arch)
@@ -2855,10 +2851,7 @@ class ModuleAutoGen(AutoGen):
     ## Check if the module is library or not
     def _IsLibrary(self):
         if self._LibraryFlag is None:
-            if self.Module.LibraryClass is not None and self.Module.LibraryClass != []:
-                self._LibraryFlag = True
-            else:
-                self._LibraryFlag = False
+            self._LibraryFlag = True if self.Module.LibraryClass else False
         return self._LibraryFlag
 
     ## Check if the module is binary module or not
@@ -3010,15 +3003,15 @@ class ModuleAutoGen(AutoGen):
     #   @retval     list    The token list of the dependency expression after parsed
     #
     def _GetDepexTokenList(self):
-        if self._DepexList is None:
-            self._DepexList = {}
+        if self._DepexDict is None:
+            self._DepexDict = {}
             if self.DxsFile or self.IsLibrary or TAB_DEPENDENCY_EXPRESSION_FILE in self.FileTypes:
-                return self._DepexList
+                return self._DepexDict
 
-            self._DepexList[self.ModuleType] = []
+            self._DepexDict[self.ModuleType] = []
 
-            for ModuleType in self._DepexList:
-                DepexList = self._DepexList[ModuleType]
+            for ModuleType in self._DepexDict:
+                DepexList = self._DepexDict[ModuleType]
                 #
                 # Append depex from dependent libraries, if not "BEFORE", "AFTER" expresion
                 #
@@ -3039,43 +3032,43 @@ class ModuleAutoGen(AutoGen):
                         break
                 if len(DepexList) > 0:
                     EdkLogger.verbose('')
-        return self._DepexList
+        return self._DepexDict
 
     ## Merge dependency expression
     #
     #   @retval     list    The token list of the dependency expression after parsed
     #
     def _GetDepexExpressionTokenList(self):
-        if self._DepexExpressionList is None:
-            self._DepexExpressionList = {}
+        if self._DepexExpressionDict is None:
+            self._DepexExpressionDict = {}
             if self.DxsFile or self.IsLibrary or TAB_DEPENDENCY_EXPRESSION_FILE in self.FileTypes:
-                return self._DepexExpressionList
+                return self._DepexExpressionDict
 
-            self._DepexExpressionList[self.ModuleType] = ''
+            self._DepexExpressionDict[self.ModuleType] = ''
 
-            for ModuleType in self._DepexExpressionList:
-                DepexExpressionList = self._DepexExpressionList[ModuleType]
+            for ModuleType in self._DepexExpressionDict:
+                DepexExpressionString = self._DepexExpressionDict[ModuleType]
                 #
                 # Append depex from dependent libraries, if not "BEFORE", "AFTER" expresion
                 #
                 for M in [self.Module] + self.DependentLibraryList:
                     Inherited = False
                     for D in M.DepexExpression[self.Arch, ModuleType]:
-                        if DepexExpressionList != '':
-                            DepexExpressionList += ' AND '
-                        DepexExpressionList += '('
-                        DepexExpressionList += D
-                        DepexExpressionList = DepexExpressionList.rstrip('END').strip()
-                        DepexExpressionList += ')'
+                        if DepexExpressionString != '':
+                            DepexExpressionString += ' AND '
+                        DepexExpressionString += '('
+                        DepexExpressionString += D
+                        DepexExpressionString = DepexExpressionString.rstrip('END').strip()
+                        DepexExpressionString += ')'
                         Inherited = True
                     if Inherited:
-                        EdkLogger.verbose("DEPEX[%s] (+%s) = %s" % (self.Name, M.BaseName, DepexExpressionList))
-                    if 'BEFORE' in DepexExpressionList or 'AFTER' in DepexExpressionList:
+                        EdkLogger.verbose("DEPEX[%s] (+%s) = %s" % (self.Name, M.BaseName, DepexExpressionString))
+                    if 'BEFORE' in DepexExpressionString or 'AFTER' in DepexExpressionString:
                         break
-                if len(DepexExpressionList) > 0:
+                if len(DepexExpressionString) > 0:
                     EdkLogger.verbose('')
-                self._DepexExpressionList[ModuleType] = DepexExpressionList
-        return self._DepexExpressionList
+                self._DepexExpressionDict[ModuleType] = DepexExpressionString
+        return self._DepexExpressionDict
 
     # Get the tiano core user extension, it is contain dependent library.
     # @retval: a list contain tiano core userextension.
@@ -3143,9 +3136,8 @@ class ModuleAutoGen(AutoGen):
             
             BuildOptionIncPathList = []
             for Tool in ('CC', 'PP', 'VFRPP', 'ASLPP', 'ASLCC', 'APP', 'ASM'):
-                Attr = 'FLAGS'
                 try:
-                    FlagOption = self.BuildOption[Tool][Attr]
+                    FlagOption = self.BuildOption[Tool]['FLAGS']
                 except KeyError:
                     FlagOption = ''
                 
@@ -3158,13 +3150,13 @@ class ModuleAutoGen(AutoGen):
                     IncPathList = []
                     for Path in BuildOptIncludeRegEx.findall(FlagOption):
                         PathList = GetSplitList(Path, TAB_COMMA_SPLIT)
-                        IncPathList += [NormPath(PathEntry, self.Macros) for PathEntry in PathList]
+                        IncPathList.extend(NormPath(PathEntry, self.Macros) for PathEntry in PathList)
 
                 #
                 # EDK II modules must not reference header files outside of the packages they depend on or 
                 # within the module's directory tree. Report error if violation.
                 #
-                if self.AutoGenVersion >= 0x00010005 and len(IncPathList) > 0:
+                if self.AutoGenVersion >= 0x00010005:
                     for Path in IncPathList:
                         if (Path not in self.IncludePathList) and (CommonPath([Path, self.MetaFile.Dir]) != self.MetaFile.Dir):
                             ErrMsg = "The include directory for the EDK II module in this line is invalid %s specified in %s FLAGS '%s'" % (Path, Tool, FlagOption)
@@ -3318,7 +3310,7 @@ class ModuleAutoGen(AutoGen):
         if not os.path.exists(SubDirectory):
             CreateDirectory(SubDirectory)
         LastTarget = None
-        RuleChain = []
+        RuleChain = set()
         SourceList = [File]
         Index = 0
         #
@@ -3375,7 +3367,7 @@ class ModuleAutoGen(AutoGen):
             if FileType in RuleChain:
                 break
 
-            RuleChain.append(FileType)
+            RuleChain.add(FileType)
             SourceList.extend(Target.Outputs)
             LastTarget = Target
             FileType = TAB_UNKNOWN_FILE
@@ -3484,12 +3476,6 @@ class ModuleAutoGen(AutoGen):
                     self._DependentLibraryList = self.PlatformInfo.ApplyLibraryInstance(self.Module)
         return self._DependentLibraryList
 
-    @staticmethod
-    def UpdateComments(Recver, Src):
-        for Key in Src:
-            if Key not in Recver:
-                Recver[Key] = []
-            Recver[Key].extend(Src[Key])
     ## Get the list of PCDs from current module
     #
     #   @retval     list                    The list of PCD
@@ -3498,7 +3484,7 @@ class ModuleAutoGen(AutoGen):
         if self._ModulePcdList is None:
             # apply PCD settings from platform
             self._ModulePcdList = self.PlatformInfo.ApplyPcdSetting(self.Module, self.Module.Pcds)
-            self.UpdateComments(self._PcdComments, self.Module.PcdComments)
+            ExtendCopyDictionaryLists(self._PcdComments, self.Module.PcdComments)
         return self._ModulePcdList
 
     ## Get the list of PCDs from dependent libraries
@@ -3511,7 +3497,7 @@ class ModuleAutoGen(AutoGen):
             if not self.IsLibrary:
                 # get PCDs from dependent libraries
                 for Library in self.DependentLibraryList:
-                    self.UpdateComments(self._PcdComments, Library.PcdComments)
+                    ExtendCopyDictionaryLists(self._PcdComments, Library.PcdComments)
                     for Key in Library.Pcds:
                         # skip duplicated PCDs
                         if Key in self.Module.Pcds or Key in Pcds:
@@ -3533,8 +3519,8 @@ class ModuleAutoGen(AutoGen):
             self._GuidList.update(self.Module.Guids)
             for Library in self.DependentLibraryList:
                 self._GuidList.update(Library.Guids)
-                self.UpdateComments(self._GuidComments, Library.GuidComments)
-            self.UpdateComments(self._GuidComments, self.Module.GuidComments)
+                ExtendCopyDictionaryLists(self._GuidComments, Library.GuidComments)
+            ExtendCopyDictionaryLists(self._GuidComments, self.Module.GuidComments)
         return self._GuidList
 
     def GetGuidsUsedByPcd(self):
@@ -3554,8 +3540,8 @@ class ModuleAutoGen(AutoGen):
             self._ProtocolList.update(self.Module.Protocols)
             for Library in self.DependentLibraryList:
                 self._ProtocolList.update(Library.Protocols)
-                self.UpdateComments(self._ProtocolComments, Library.ProtocolComments)
-            self.UpdateComments(self._ProtocolComments, self.Module.ProtocolComments)
+                ExtendCopyDictionaryLists(self._ProtocolComments, Library.ProtocolComments)
+            ExtendCopyDictionaryLists(self._ProtocolComments, self.Module.ProtocolComments)
         return self._ProtocolList
 
     ## Get the PPI value mapping
@@ -3568,8 +3554,8 @@ class ModuleAutoGen(AutoGen):
             self._PpiList.update(self.Module.Ppis)
             for Library in self.DependentLibraryList:
                 self._PpiList.update(Library.Ppis)
-                self.UpdateComments(self._PpiComments, Library.PpiComments)
-            self.UpdateComments(self._PpiComments, self.Module.PpiComments)
+                ExtendCopyDictionaryLists(self._PpiComments, Library.PpiComments)
+            ExtendCopyDictionaryLists(self._PpiComments, self.Module.PpiComments)
         return self._PpiList
 
     ## Get the list of include search path
@@ -3607,11 +3593,7 @@ class ModuleAutoGen(AutoGen):
         return self._IncludePathList
 
     def _GetIncludePathLength(self):
-        self._IncludePathLength = 0
-        if self._IncludePathList:
-            for inc in self._IncludePathList:
-                self._IncludePathLength += len(' ' + inc)
-        return self._IncludePathLength
+        return sum(len(inc)+1 for inc in self._IncludePathList)
 
     ## Get HII EX PCDs which maybe used by VFR
     #
@@ -3665,12 +3647,11 @@ class ModuleAutoGen(AutoGen):
         for Pcd in self.PlatformInfo.Platform.Pcds.values():
             if Pcd.Type != TAB_PCDS_DYNAMIC_EX_HII:
                 continue
-            for SkuName in Pcd.SkuInfoList:
-                SkuInfo = Pcd.SkuInfoList[SkuName]
-                Name = ConvertStringToByteArray(SkuInfo.VariableName)
+            for SkuInfo in Pcd.SkuInfoList.values():
                 Value = GuidValue(SkuInfo.VariableGuid, self.PlatformInfo.PackageList, self.MetaFile.Path)
                 if not Value:
                     continue
+                Name = ConvertStringToByteArray(SkuInfo.VariableName)
                 Guid = GuidStructureStringToGuidString(Value)
                 if (Name, Guid) in NameGuids and Pcd not in HiiExPcds:
                     HiiExPcds.append(Pcd)
@@ -3686,13 +3667,13 @@ class ModuleAutoGen(AutoGen):
                 # search the .map file to find the offset of vfr binary in the PE32+/TE file. 
                 #
                 VfrUniBaseName[SourceFile.BaseName] = (SourceFile.BaseName + "Bin")
-            if SourceFile.Type.upper() == ".UNI" :
+            elif SourceFile.Type.upper() == ".UNI" :
                 #
                 # search the .map file to find the offset of Uni strings binary in the PE32+/TE file. 
                 #
                 VfrUniBaseName["UniOffsetName"] = (self.Name + "Strings")
 
-        if len(VfrUniBaseName) == 0:
+        if not VfrUniBaseName:
             return None
         MapFileName = os.path.join(self.OutputDir, self.Name + ".map")
         EfiFileName = os.path.join(self.OutputDir, self.Name + ".efi")
@@ -3751,10 +3732,9 @@ class ModuleAutoGen(AutoGen):
     #
     def CreateAsBuiltInf(self, IsOnlyCopy = False):
         self.OutputFile = set()
-        if IsOnlyCopy:
-            if GlobalData.gBinCacheDest:
-                self.CopyModuleToCache()
-                return
+        if IsOnlyCopy and GlobalData.gBinCacheDest:
+            self.CopyModuleToCache()
+            return
 
         if self.IsAsBuiltInfCreated:
             return
@@ -3786,11 +3766,11 @@ class ModuleAutoGen(AutoGen):
         PcdTokenSpaceList = []
         for Pcd in self.ModulePcdList + self.LibraryPcdList:
             if Pcd.Type == TAB_PCDS_PATCHABLE_IN_MODULE:
-                PatchablePcds += [Pcd]
+                PatchablePcds.append(Pcd)
                 PcdCheckList.append((Pcd.TokenCName, Pcd.TokenSpaceGuidCName, TAB_PCDS_PATCHABLE_IN_MODULE))
             elif Pcd.Type in PCD_DYNAMIC_EX_TYPE_SET:
                 if Pcd not in Pcds:
-                    Pcds += [Pcd]
+                    Pcds.append(Pcd)
                     PcdCheckList.append((Pcd.TokenCName, Pcd.TokenSpaceGuidCName, TAB_PCDS_DYNAMIC_EX))
                     PcdCheckList.append((Pcd.TokenCName, Pcd.TokenSpaceGuidCName, TAB_PCDS_DYNAMIC))
                     PcdTokenSpaceList.append(Pcd.TokenSpaceGuidCName)
@@ -3810,10 +3790,11 @@ class ModuleAutoGen(AutoGen):
             for Index in range(len(BeChecked)):
                 for Item in CheckList[Index]:
                     if Item in BeChecked[Index]:
-                        Packages += [Package]
+                        Packages.append(Package)
                         Found = True
                         break
-                if Found: break
+                if Found:
+                    break
 
         VfrPcds = self._GetPcdsMaybeUsedByVfr()
         for Pkg in self.PlatformInfo.PackageList:
@@ -3822,17 +3803,11 @@ class ModuleAutoGen(AutoGen):
             for VfrPcd in VfrPcds:
                 if ((VfrPcd.TokenCName, VfrPcd.TokenSpaceGuidCName, TAB_PCDS_DYNAMIC_EX) in Pkg.Pcds or
                     (VfrPcd.TokenCName, VfrPcd.TokenSpaceGuidCName, TAB_PCDS_DYNAMIC) in Pkg.Pcds):
-                    Packages += [Pkg]
+                    Packages.append(Pkg)
                     break
 
-        ModuleType = self.ModuleType
-        if ModuleType == SUP_MODULE_UEFI_DRIVER and self.DepexGenerated:
-            ModuleType = SUP_MODULE_DXE_DRIVER
-
-        DriverType = ''
-        if self.PcdIsDriver != '':
-            DriverType = self.PcdIsDriver
-
+        ModuleType = SUP_MODULE_DXE_DRIVER if self.ModuleType == SUP_MODULE_UEFI_DRIVER and self.DepexGenerated else self.ModuleType
+        DriverType = self.PcdIsDriver if self.PcdIsDriver else ''
         Guid = self.Guid
         MDefs = self.Module.Defines
 
@@ -3858,7 +3833,7 @@ class ModuleAutoGen(AutoGen):
           'module_uefi_hii_resource_section'  : [MDefs['UEFI_HII_RESOURCE_SECTION']] if 'UEFI_HII_RESOURCE_SECTION' in MDefs else [],
           'module_uni_file'                   : [MDefs['MODULE_UNI_FILE']] if 'MODULE_UNI_FILE' in MDefs else [],
           'module_arch'                       : self.Arch,
-          'package_item'                      : ['%s' % (Package.MetaFile.File.replace('\\', '/')) for Package in Packages],
+          'package_item'                      : [Package.MetaFile.File.replace('\\', '/') for Package in Packages],
           'binary_item'                       : [],
           'patchablepcd_item'                 : [],
           'pcd_item'                          : [],
@@ -3880,12 +3855,12 @@ class ModuleAutoGen(AutoGen):
             AsBuiltInfDict['module_inf_version'] = gInfSpecVersion
 
         if DriverType:
-            AsBuiltInfDict['pcd_is_driver_string'] += [DriverType]
+            AsBuiltInfDict['pcd_is_driver_string'].append(DriverType)
 
         if 'UEFI_SPECIFICATION_VERSION' in self.Specification:
-            AsBuiltInfDict['module_uefi_specification_version'] += [self.Specification['UEFI_SPECIFICATION_VERSION']]
+            AsBuiltInfDict['module_uefi_specification_version'].append(self.Specification['UEFI_SPECIFICATION_VERSION'])
         if 'PI_SPECIFICATION_VERSION' in self.Specification:
-            AsBuiltInfDict['module_pi_specification_version'] += [self.Specification['PI_SPECIFICATION_VERSION']]
+            AsBuiltInfDict['module_pi_specification_version'].append(self.Specification['PI_SPECIFICATION_VERSION'])
 
         OutputDir = self.OutputDir.replace('\\', '/').strip('/')
         DebugDir = self.DebugDir.replace('\\', '/').strip('/')
@@ -3895,31 +3870,31 @@ class ModuleAutoGen(AutoGen):
             if os.path.isabs(File):
                 File = File.replace('\\', '/').strip('/').replace(OutputDir, '').strip('/')
             if Item.Target.Ext.lower() == '.aml':
-                AsBuiltInfDict['binary_item'] += ['ASL|' + File]
+                AsBuiltInfDict['binary_item'].append('ASL|' + File)
             elif Item.Target.Ext.lower() == '.acpi':
-                AsBuiltInfDict['binary_item'] += ['ACPI|' + File]
+                AsBuiltInfDict['binary_item'].append('ACPI|' + File)
             elif Item.Target.Ext.lower() == '.efi':
-                AsBuiltInfDict['binary_item'] += ['PE32|' + self.Name + '.efi']
+                AsBuiltInfDict['binary_item'].append('PE32|' + self.Name + '.efi')
             else:
-                AsBuiltInfDict['binary_item'] += ['BIN|' + File]
+                AsBuiltInfDict['binary_item'].append('BIN|' + File)
         if self.DepexGenerated:
             self.OutputFile.add(self.Name + '.depex')
             if self.ModuleType in [SUP_MODULE_PEIM]:
-                AsBuiltInfDict['binary_item'] += ['PEI_DEPEX|' + self.Name + '.depex']
-            if self.ModuleType in [SUP_MODULE_DXE_DRIVER, SUP_MODULE_DXE_RUNTIME_DRIVER, SUP_MODULE_DXE_SAL_DRIVER, SUP_MODULE_UEFI_DRIVER]:
-                AsBuiltInfDict['binary_item'] += ['DXE_DEPEX|' + self.Name + '.depex']
-            if self.ModuleType in [SUP_MODULE_DXE_SMM_DRIVER]:
-                AsBuiltInfDict['binary_item'] += ['SMM_DEPEX|' + self.Name + '.depex']
+                AsBuiltInfDict['binary_item'].append('PEI_DEPEX|' + self.Name + '.depex')
+            elif self.ModuleType in [SUP_MODULE_DXE_DRIVER, SUP_MODULE_DXE_RUNTIME_DRIVER, SUP_MODULE_DXE_SAL_DRIVER, SUP_MODULE_UEFI_DRIVER]:
+                AsBuiltInfDict['binary_item'].append('DXE_DEPEX|' + self.Name + '.depex')
+            elif self.ModuleType in [SUP_MODULE_DXE_SMM_DRIVER]:
+                AsBuiltInfDict['binary_item'].append('SMM_DEPEX|' + self.Name + '.depex')
 
         Bin = self._GenOffsetBin()
         if Bin:
-            AsBuiltInfDict['binary_item'] += ['BIN|%s' % Bin]
+            AsBuiltInfDict['binary_item'].append('BIN|%s' % Bin)
             self.OutputFile.add(Bin)
 
         for Root, Dirs, Files in os.walk(OutputDir):
             for File in Files:
                 if File.lower().endswith('.pdb'):
-                    AsBuiltInfDict['binary_item'] += ['DISPOSABLE|' + File]
+                    AsBuiltInfDict['binary_item'].append('DISPOSABLE|' + File)
                     self.OutputFile.add(File)
         HeaderComments = self.Module.HeaderComments
         StartPos = 0
@@ -3938,12 +3913,8 @@ class ModuleAutoGen(AutoGen):
         ]
         for Item in GenList:
             for CName in Item[0]:
-                Comments = ''
-                if CName in Item[1]:
-                    Comments = '\n  '.join(Item[1][CName])
-                Entry = CName
-                if Comments:
-                    Entry = Comments + '\n  ' + CName
+                Comments = '\n  '.join(Item[1][CName]) if CName in Item[1] else ''
+                Entry = Comments + '\n  ' + CName if Comments else CName
                 AsBuiltInfDict[Item[2]].append(Entry)
         PatchList = parsePcdInfoFromMapFile(
                             os.path.join(self.OutputDir, self.Name + '.map'),
@@ -4034,7 +4005,6 @@ class ModuleAutoGen(AutoGen):
 
         HiiPcds = set()
         for Pcd in Pcds + VfrPcds:
-            PcdComments = ''
             PcdCommentList = []
             HiiInfo = ''
             SkuId = ''
@@ -4075,14 +4045,14 @@ class ModuleAutoGen(AutoGen):
             PcdEntry = Pcd.TokenSpaceGuidCName + '.' + TokenCName
             if PcdComments:
                 PcdEntry = PcdComments + '\n  ' + PcdEntry
-            AsBuiltInfDict['pcd_item'] += [PcdEntry]
+            AsBuiltInfDict['pcd_item'].append(PcdEntry)
         for Item in self.BuildOption:
             if 'FLAGS' in self.BuildOption[Item]:
-                AsBuiltInfDict['flags_item'] += ['%s:%s_%s_%s_%s_FLAGS = %s' % (self.ToolChainFamily, self.BuildTarget, self.ToolChain, self.Arch, Item, self.BuildOption[Item]['FLAGS'].strip())]
+                AsBuiltInfDict['flags_item'].append('%s:%s_%s_%s_%s_FLAGS = %s' % (self.ToolChainFamily, self.BuildTarget, self.ToolChain, self.Arch, Item, self.BuildOption[Item]['FLAGS'].strip()))
 
         # Generated LibraryClasses section in comments.
         for Library in self.LibraryAutoGenList:
-            AsBuiltInfDict['libraryclasses_item'] += [Library.MetaFile.File.replace('\\', '/')]
+            AsBuiltInfDict['libraryclasses_item'].append(Library.MetaFile.File.replace('\\', '/'))
         
         # Generated UserExtensions TianoCore section.
         # All tianocore user extensions are copied.
@@ -4095,10 +4065,8 @@ class ModuleAutoGen(AutoGen):
         AsBuiltInfDict['userextension_tianocore_item'] = UserExtStr
 
         # Generated depex expression section in comments.
-        AsBuiltInfDict['depexsection_item'] = ''
         DepexExpresion = self._GetDepexExpresionString()
-        if DepexExpresion:
-            AsBuiltInfDict['depexsection_item'] = DepexExpresion
+        AsBuiltInfDict['depexsection_item'] = DepexExpresion if DepexExpresion else ''
         
         AsBuiltInf = TemplateString()
         AsBuiltInf.Append(gAsBuiltInfHeaderString.Replace(AsBuiltInfDict))
@@ -4317,8 +4285,7 @@ class ModuleAutoGen(AutoGen):
         if self.Name not in GlobalData.gModuleHash[self.Arch]:
             GlobalData.gModuleHash[self.Arch][self.Name] = m.hexdigest()
         if GlobalData.gBinCacheSource:
-            CacheValid = self.AttemptModuleCacheCopy()
-            if CacheValid:
+            if self.AttemptModuleCacheCopy():
                 return False
         return SaveFileOnChange(ModuleHashFile, m.hexdigest(), True)
 
@@ -4357,9 +4324,7 @@ class ModuleAutoGen(AutoGen):
         return self._TimeStampPath
     def CreateTimeStamp(self, Makefile):
 
-        FileSet = set()
-
-        FileSet.add (self.MetaFile.Path)
+        FileSet = {self.MetaFile.Path}
 
         for SourceFile in self.Module.Sources:
             FileSet.add (SourceFile.Path)
@@ -4423,7 +4388,7 @@ class ModuleAutoGen(AutoGen):
     PpiList                 = property(_GetPpiList)
     DepexList               = property(_GetDepexTokenList)
     DxsFile                 = property(_GetDxsFile)
-    DepexExpressionList     = property(_GetDepexExpressionTokenList)
+    DepexExpressionDict     = property(_GetDepexExpressionTokenList)
     BuildOption             = property(_GetModuleBuildOption)
     BuildOptionIncPathList  = property(_GetBuildOptionIncPathList)
     BuildCommand            = property(_GetBuildCommand)
diff --git a/BaseTools/Source/Python/AutoGen/GenC.py b/BaseTools/Source/Python/AutoGen/GenC.py
index 40a343ca1057..af8bfe7bba59 100644
--- a/BaseTools/Source/Python/AutoGen/GenC.py
+++ b/BaseTools/Source/Python/AutoGen/GenC.py
@@ -1655,7 +1655,7 @@ def CreatePcdCode(Info, AutoGenC, AutoGenH):
     TokenSpaceList = []
     for Pcd in Info.ModulePcdList:
         if Pcd.Type in PCD_DYNAMIC_EX_TYPE_SET and Pcd.TokenSpaceGuidCName not in TokenSpaceList:
-            TokenSpaceList += [Pcd.TokenSpaceGuidCName]
+            TokenSpaceList.append(Pcd.TokenSpaceGuidCName)
             
     SkuMgr = Info.Workspace.Platform.SkuIdMgr
     AutoGenH.Append("\n// Definition of SkuId Array\n")
diff --git a/BaseTools/Source/Python/AutoGen/GenMake.py b/BaseTools/Source/Python/AutoGen/GenMake.py
index a37350742240..e0e2ab57dd29 100644
--- a/BaseTools/Source/Python/AutoGen/GenMake.py
+++ b/BaseTools/Source/Python/AutoGen/GenMake.py
@@ -698,7 +698,7 @@ cleanlib:
                     Src = self.ReplaceMacro(Src)
                     Dst = self.ReplaceMacro(Dst)
                     if Dst not in self.ResultFileList:
-                        self.ResultFileList.append('%s' % Dst)
+                        self.ResultFileList.append(Dst)
                     if '%s :' %(Dst) not in self.BuildTargetList:
                         self.BuildTargetList.append("%s :" %(Dst))
                         self.BuildTargetList.append('\t' + self._CP_TEMPLATE_[self._FileType] %{'Src': Src, 'Dst': Dst})
@@ -716,7 +716,7 @@ cleanlib:
             if DepsFileString == '':
                 continue
             OutputFile = self.ReplaceMacro(OutputFile)
-            self.ResultFileList.append('%s' % OutputFile)
+            self.ResultFileList.append(OutputFile)
             DepsFileString = self.ReplaceMacro(DepsFileString)
             self.BuildTargetList.append('%s : %s' % (OutputFile, DepsFileString))
             CmdString = ' '.join(FfsCmdList).strip()
diff --git a/BaseTools/Source/Python/AutoGen/GenPcdDb.py b/BaseTools/Source/Python/AutoGen/GenPcdDb.py
index d2d42fe9d08e..759f9df8d9c0 100644
--- a/BaseTools/Source/Python/AutoGen/GenPcdDb.py
+++ b/BaseTools/Source/Python/AutoGen/GenPcdDb.py
@@ -1115,7 +1115,7 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, DynamicPcdList, Phase):
         TokenSpaceGuid = GuidStructureStringToGuidValueName(TokenSpaceGuidStructure)
         if Pcd.Type in PCD_DYNAMIC_EX_TYPE_SET:
             if TokenSpaceGuid not in GuidList:
-                GuidList += [TokenSpaceGuid]
+                GuidList.append(TokenSpaceGuid)
                 Dict['GUID_STRUCTURE'].append(TokenSpaceGuidStructure)
             NumberOfExTokens += 1
 
@@ -1140,7 +1140,7 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, DynamicPcdList, Phase):
             Pcd.TokenTypeList = ['PCD_DATUM_TYPE_' + Pcd.DatumType]
 
         if len(Pcd.SkuInfoList) > 1:
-#             Pcd.TokenTypeList += ['PCD_TYPE_SKU_ENABLED']
+
             NumberOfSkuEnabledPcd += 1
         
         SkuIdIndex = 1  
@@ -1178,7 +1178,7 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, DynamicPcdList, Phase):
                         else:
                             EdkLogger.error("build", PCD_VALIDATION_INFO_ERROR,
                                                 "The PCD '%s.%s' Validation information defined in DEC file has incorrect format." % (Pcd.TokenSpaceGuidCName, Pcd.TokenCName))
-                Pcd.TokenTypeList += ['PCD_TYPE_HII']
+                Pcd.TokenTypeList.append('PCD_TYPE_HII')
                 Pcd.InitString = 'INIT'
                 # Store all variable names of one HII PCD under different SKU to stringTable
                 # and calculate the VariableHeadStringIndex
@@ -1209,7 +1209,7 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, DynamicPcdList, Phase):
                 # store VariableGuid to GuidTable and get the VariableHeadGuidIndex
 
                 if VariableGuid not in GuidList:
-                    GuidList += [VariableGuid]
+                    GuidList.append(VariableGuid)
                     Dict['GUID_STRUCTURE'].append(VariableGuidStructure)
                 VariableHeadGuidIndex = GuidList.index(VariableGuid)
 
@@ -1261,7 +1261,7 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, DynamicPcdList, Phase):
                 VariableDbValueList.append([VariableHeadGuidIndex, VariableHeadStringIndex, Sku.VariableOffset, VariableOffset, VariableRefTable, Sku.VariableAttribute])
 
             elif Sku.VpdOffset != '':
-                Pcd.TokenTypeList += ['PCD_TYPE_VPD']
+                Pcd.TokenTypeList.append('PCD_TYPE_VPD')
                 Pcd.InitString = 'INIT'
                 VpdHeadOffsetList.append(str(Sku.VpdOffset) + 'U')
                 VpdDbOffsetList.append(Sku.VpdOffset)
@@ -1273,7 +1273,7 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, DynamicPcdList, Phase):
                 continue
           
             if Pcd.DatumType == TAB_VOID:
-                Pcd.TokenTypeList += ['PCD_TYPE_STRING']
+                Pcd.TokenTypeList.append('PCD_TYPE_STRING')
                 Pcd.InitString = 'INIT'
                 if Sku.HiiDefaultValue != '' and Sku.DefaultValue == '':
                     Sku.DefaultValue = Sku.HiiDefaultValue
@@ -1322,7 +1322,7 @@ def CreatePcdDatabasePhaseSpecificAutoGen (Platform, DynamicPcdList, Phase):
                     StringTableSize += (StringTabLen)
             else:
                 if "PCD_TYPE_HII" not in Pcd.TokenTypeList:
-                    Pcd.TokenTypeList += ['PCD_TYPE_DATA']
+                    Pcd.TokenTypeList.append('PCD_TYPE_DATA')
                     if Sku.DefaultValue == 'TRUE':
                         Pcd.InitString = 'INIT'
                     else:
diff --git a/BaseTools/Source/Python/AutoGen/GenVar.py b/BaseTools/Source/Python/AutoGen/GenVar.py
index 2eab278d6876..3675be8de994 100644
--- a/BaseTools/Source/Python/AutoGen/GenVar.py
+++ b/BaseTools/Source/Python/AutoGen/GenVar.py
@@ -75,7 +75,7 @@ class VariableMgr(object):
                     data = value_list[0]
                     value_list = []
                     for data_byte in pack(data_flag,int(data,16) if data.upper().startswith('0X') else int(data)):
-                        value_list += [hex(unpack("B",data_byte)[0])]
+                        value_list.append(hex(unpack("B",data_byte)[0]))
                 newvalue[int(item.var_offset,16) if item.var_offset.upper().startswith("0X") else int(item.var_offset)] = value_list
             try:
                 newvaluestr = "{" + ",".join(VariableMgr.assemble_variable(newvalue)) +"}"
diff --git a/BaseTools/Source/Python/AutoGen/StrGather.py b/BaseTools/Source/Python/AutoGen/StrGather.py
index 73af1214eb0a..ce8866f480d5 100644
--- a/BaseTools/Source/Python/AutoGen/StrGather.py
+++ b/BaseTools/Source/Python/AutoGen/StrGather.py
@@ -258,7 +258,7 @@ def GetFilteredLanguage(UniLanguageList, LanguageFilterList):
         # first check for exact match
         if Language in UniLanguageList:
             if Language not in UniLanguageListFiltered:
-                UniLanguageListFiltered += [Language]
+                UniLanguageListFiltered.append(Language)
         # find the first one with the same/equivalent primary tag
         else:
             if Language.find('-') != -1:
@@ -280,7 +280,7 @@ def GetFilteredLanguage(UniLanguageList, LanguageFilterList):
 
                 if PrimaryTag == UniLanguagePrimaryTag:
                     if UniLanguage not in UniLanguageListFiltered:
-                        UniLanguageListFiltered += [UniLanguage]
+                        UniLanguageListFiltered.append(UniLanguage)
                     break
             else:
                 # Here is rule 3 for "get best language"
@@ -292,10 +292,10 @@ def GetFilteredLanguage(UniLanguageList, LanguageFilterList):
                     for UniLanguage in UniLanguageList:
                         if UniLanguage.startswith('en-') or UniLanguage.startswith('eng-'):
                             if UniLanguage not in UniLanguageListFiltered:
-                                UniLanguageListFiltered += [UniLanguage]
+                                UniLanguageListFiltered.append(UniLanguage)
                             break
                     else:
-                        UniLanguageListFiltered += [DefaultTag]
+                        UniLanguageListFiltered.append(DefaultTag)
     return  UniLanguageListFiltered
 
 
diff --git a/BaseTools/Source/Python/Common/Misc.py b/BaseTools/Source/Python/Common/Misc.py
index 90350f863826..24706ebe500f 100644
--- a/BaseTools/Source/Python/Common/Misc.py
+++ b/BaseTools/Source/Python/Common/Misc.py
@@ -1328,7 +1328,7 @@ def ParseFieldValue (Value):
         try:
             Value = "'" + uuid.UUID(Value).get_bytes_le() + "'"
         except ValueError, Message:
-            raise BadExpression('%s' % Message)
+            raise BadExpression(Message)
         Value, Size = ParseFieldValue(Value)
         return Value, 16
     if Value.startswith('L"') and Value.endswith('"'):
diff --git a/BaseTools/Source/Python/Common/String.py b/BaseTools/Source/Python/Common/String.py
index 34361ecdd58c..2292a263b985 100644
--- a/BaseTools/Source/Python/Common/String.py
+++ b/BaseTools/Source/Python/Common/String.py
@@ -447,7 +447,7 @@ def GetMultipleValuesOfKeyFromLines(Lines, Key, KeyValues, CommentCharacter):
     for Line in LineList:
         Line = CleanString(Line, CommentCharacter)
         if Line != '' and Line[0] != CommentCharacter:
-            KeyValues += [Line]
+            KeyValues.append(Line)
 
     return True
 
diff --git a/BaseTools/Source/Python/Common/VpdInfoFile.py b/BaseTools/Source/Python/Common/VpdInfoFile.py
index 32895deb5d0c..2b447772eafe 100644
--- a/BaseTools/Source/Python/Common/VpdInfoFile.py
+++ b/BaseTools/Source/Python/Common/VpdInfoFile.py
@@ -246,7 +246,7 @@ def CallExtenalBPDGTool(ToolPath, VpdFileName):
                                         stderr= subprocess.PIPE,
                                         shell=True)
     except Exception, X:
-        EdkLogger.error("BPDG", BuildToolError.COMMAND_FAILURE, ExtraData="%s" % (str(X)))
+        EdkLogger.error("BPDG", BuildToolError.COMMAND_FAILURE, ExtraData=str(X))
     (out, error) = PopenObject.communicate()
     print out
     while PopenObject.returncode is None :
diff --git a/BaseTools/Source/Python/GenFds/FdfParser.py b/BaseTools/Source/Python/GenFds/FdfParser.py
index 8a9296c49d1d..3dec57fe163a 100644
--- a/BaseTools/Source/Python/GenFds/FdfParser.py
+++ b/BaseTools/Source/Python/GenFds/FdfParser.py
@@ -2329,7 +2329,7 @@ class FdfParser:
         if not self.__GetNextHexNumber() and not self.__GetNextDecimalNumber():
             raise Warning("expected Hex FV extension entry type value At Line ", self.FileName, self.CurrentLineNumber)
 
-        FvObj.FvExtEntryTypeValue += [self.__Token]
+        FvObj.FvExtEntryTypeValue.append(self.__Token)
 
         if not self.__IsToken( "{"):
             raise Warning("expected '{'", self.FileName, self.CurrentLineNumber)
@@ -2337,7 +2337,7 @@ class FdfParser:
         if not self.__IsKeyword ("FILE") and not self.__IsKeyword ("DATA"):
             raise Warning("expected 'FILE' or 'DATA'", self.FileName, self.CurrentLineNumber)
 
-        FvObj.FvExtEntryType += [self.__Token]
+        FvObj.FvExtEntryType.append(self.__Token)
 
         if self.__Token == 'DATA':
 
@@ -2371,7 +2371,7 @@ class FdfParser:
                 raise Warning("expected '}'", self.FileName, self.CurrentLineNumber)
 
             DataString = DataString.rstrip(",")
-            FvObj.FvExtEntryData += [DataString]
+            FvObj.FvExtEntryData.append(DataString)
 
         if self.__Token == 'FILE':
         
@@ -2381,7 +2381,7 @@ class FdfParser:
             if not self.__GetNextToken():
                 raise Warning("expected FV Extension Entry file path At Line ", self.FileName, self.CurrentLineNumber)
                 
-            FvObj.FvExtEntryData += [self.__Token]
+            FvObj.FvExtEntryData.append(self.__Token)
 
             if not self.__IsToken( "}"):
                 raise Warning("expected '}'", self.FileName, self.CurrentLineNumber)
diff --git a/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py b/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py
index 6cf82526efd2..c2e82de891d3 100644
--- a/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py
+++ b/BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py
@@ -439,36 +439,33 @@ class GenFdsGlobalVariable:
 
     @staticmethod
     def GenerateSection(Output, Input, Type=None, CompressionType=None, Guid=None,
-                        GuidHdrLen=None, GuidAttr=[], Ui=None, Ver=None, InputAlign=None, BuildNumber=None, DummyFile=None, IsMakefile=False):
+                        GuidHdrLen=None, GuidAttr=[], Ui=None, Ver=None, InputAlign=[], BuildNumber=None, DummyFile=None, IsMakefile=False):
         Cmd = ["GenSec"]
         if Type:
-            Cmd += ["-s", Type]
+            Cmd += ("-s", Type)
         if CompressionType:
-            Cmd += ["-c", CompressionType]
+            Cmd += ("-c", CompressionType)
         if Guid is not None:
-            Cmd += ["-g", Guid]
+            Cmd += ("-g", Guid)
         if DummyFile is not None:
-            Cmd += ["--dummy", DummyFile]
+            Cmd += ("--dummy", DummyFile)
         if GuidHdrLen:
-            Cmd += ["-l", GuidHdrLen]
-        if len(GuidAttr) != 0:
-            #Add each guided attribute
-            for Attr in GuidAttr:
-                Cmd += ["-r", Attr]
-        if InputAlign is not None:
-            #Section Align is only for dummy section without section type
-            for SecAlign in InputAlign:
-                Cmd += ["--sectionalign", SecAlign]
+            Cmd += ("-l", GuidHdrLen)
+        #Add each guided attribute
+        for Attr in GuidAttr:
+            Cmd += ("-r", Attr)
+        #Section Align is only for dummy section without section type
+        for SecAlign in InputAlign:
+            Cmd += ("--sectionalign", SecAlign)
 
         CommandFile = Output + '.txt'
         if Ui:
-            #Cmd += ["-n", '"' + Ui + '"']
             if IsMakefile:
                 if Ui == "$(MODULE_NAME)":
-                    Cmd += ['-n', Ui]
+                    Cmd += ('-n', Ui)
                 else:
-                    Cmd += ["-n", '"' + Ui + '"']
-                Cmd += ["-o", Output]
+                    Cmd += ("-n", '"' + Ui + '"')
+                Cmd += ("-o", Output)
                 if ' '.join(Cmd).strip() not in GenFdsGlobalVariable.SecCmdList:
                     GenFdsGlobalVariable.SecCmdList.append(' '.join(Cmd).strip())
             else:
@@ -481,10 +478,10 @@ class GenFdsGlobalVariable:
                 SaveFileOnChange(Output, SectionData.tostring())
 
         elif Ver:
-            Cmd += ["-n", Ver]
+            Cmd += ("-n", Ver)
             if BuildNumber:
-                Cmd += ["-j", BuildNumber]
-            Cmd += ["-o", Output]
+                Cmd += ("-j", BuildNumber)
+            Cmd += ("-o", Output)
 
             SaveFileOnChange(CommandFile, ' '.join(Cmd), False)
             if IsMakefile:
@@ -495,7 +492,7 @@ class GenFdsGlobalVariable:
                     return
                 GenFdsGlobalVariable.CallExternalTool(Cmd, "Failed to generate section")
         else:
-            Cmd += ["-o", Output]
+            Cmd += ("-o", Output)
             Cmd += Input
 
             SaveFileOnChange(CommandFile, ' '.join(Cmd), False)
@@ -526,9 +523,9 @@ class GenFdsGlobalVariable:
         Cmd = ["GenFfs", "-t", Type, "-g", Guid]
         mFfsValidAlign = ["0", "8", "16", "128", "512", "1K", "4K", "32K", "64K", "128K", "256K", "512K", "1M", "2M", "4M", "8M", "16M"]
         if Fixed == True:
-            Cmd += ["-x"]
+            Cmd.append("-x")
         if CheckSum:
-            Cmd += ["-s"]
+            Cmd.append("-s")
         if Align:
             if Align not in mFfsValidAlign:
                 Align = GenFdsGlobalVariable.GetAlignment (Align)
@@ -536,9 +533,9 @@ class GenFdsGlobalVariable:
                     if ((Align > GenFdsGlobalVariable.GetAlignment(mFfsValidAlign[index])) and (Align <= GenFdsGlobalVariable.GetAlignment(mFfsValidAlign[index + 1]))):
                         break
                 Align = mFfsValidAlign[index + 1]
-            Cmd += ["-a", Align]
+            Cmd += ("-a", Align)
 
-        Cmd += ["-o", Output]
+        Cmd += ("-o", Output)
         for I in range(0, len(Input)):
             Cmd += ("-i", Input[I])
             if SectionAlign and SectionAlign[I]:
@@ -567,26 +564,26 @@ class GenFdsGlobalVariable:
 
         Cmd = ["GenFv"]
         if BaseAddress:
-            Cmd += ["-r", BaseAddress]
+            Cmd += ("-r", BaseAddress)
 
         if ForceRebase == False:
-            Cmd += ["-F", "FALSE"]
+            Cmd += ("-F", "FALSE")
         elif ForceRebase == True:
-            Cmd += ["-F", "TRUE"]
+            Cmd += ("-F", "TRUE")
 
         if Capsule:
-            Cmd += ["-c"]
+            Cmd.append("-c")
         if Dump:
-            Cmd += ["-p"]
+            Cmd.append("-p")
         if AddressFile:
-            Cmd += ["-a", AddressFile]
+            Cmd += ("-a", AddressFile)
         if MapFile:
-            Cmd += ["-m", MapFile]
+            Cmd += ("-m", MapFile)
         if FileSystemGuid:
-            Cmd += ["-g", FileSystemGuid]
-        Cmd += ["-o", Output]
+            Cmd += ("-g", FileSystemGuid)
+        Cmd += ("-o", Output)
         for I in Input:
-            Cmd += ["-i", I]
+            Cmd += ("-i", I)
 
         GenFdsGlobalVariable.CallExternalTool(Cmd, "Failed to generate FV")
 
@@ -600,10 +597,10 @@ class GenFdsGlobalVariable:
         if BaseAddress and FvSize \
             and len(BaseAddress) == len(FvSize):
             for I in range(0, len(BaseAddress)):
-                Cmd += ["-r", BaseAddress[I], "-s", FvSize[I]]
-        Cmd += ["-o", Output]
+                Cmd += ("-r", BaseAddress[I], "-s", FvSize[I])
+        Cmd += ("-o", Output)
         for F in Input:
-            Cmd += ["-f", F]
+            Cmd += ("-f", F)
 
         GenFdsGlobalVariable.CallExternalTool(Cmd, "Failed to generate VTF")
 
@@ -617,26 +614,26 @@ class GenFdsGlobalVariable:
 
         Cmd = ["GenFw"]
         if Type.lower() == "te":
-            Cmd += ["-t"]
+            Cmd.append("-t")
         if SubType:
-            Cmd += ["-e", SubType]
+            Cmd += ("-e", SubType)
         if TimeStamp:
-            Cmd += ["-s", TimeStamp]
+            Cmd += ("-s", TimeStamp)
         if Align:
-            Cmd += ["-a", Align]
+            Cmd += ("-a", Align)
         if Padding:
-            Cmd += ["-p", Padding]
+            Cmd += ("-p", Padding)
         if Zero:
-            Cmd += ["-z"]
+            Cmd.append("-z")
         if Strip:
-            Cmd += ["-l"]
+            Cmd.append("-l")
         if Replace:
-            Cmd += ["-r"]
+            Cmd.append("-r")
         if Join:
-            Cmd += ["-j"]
+            Cmd.append("-j")
         if Convert:
-            Cmd += ["-m"]
-        Cmd += ["-o", Output]
+            Cmd.append("-m")
+        Cmd += ("-o", Output)
         Cmd += Input
         if IsMakefile:
             if " ".join(Cmd).strip() not in GenFdsGlobalVariable.SecCmdList:
@@ -652,18 +649,18 @@ class GenFdsGlobalVariable:
         if len(EfiInput) > 0:
             
             if Compress:
-                Cmd += ["-ec"]
+                Cmd.append("-ec")
             else:
-                Cmd += ["-e"]
+                Cmd.append("-e")
                 
             for EfiFile in EfiInput:
-                Cmd += [EfiFile]
+                Cmd.append(EfiFile)
                 InputList.append (EfiFile)
         
         if len(BinaryInput) > 0:
-            Cmd += ["-b"]
+            Cmd.append("-b")
             for BinFile in BinaryInput:
-                Cmd += [BinFile]
+                Cmd.append(BinFile)
                 InputList.append (BinFile)
 
         # Check List
@@ -672,15 +669,15 @@ class GenFdsGlobalVariable:
         GenFdsGlobalVariable.DebugLogger(EdkLogger.DEBUG_5, "%s needs update because of newer %s" % (Output, InputList))
                         
         if ClassCode is not None:
-            Cmd += ["-l", ClassCode]
+            Cmd += ("-l", ClassCode)
         if Revision is not None:
-            Cmd += ["-r", Revision]
+            Cmd += ("-r", Revision)
         if DeviceId is not None:
-            Cmd += ["-i", DeviceId]
+            Cmd += ("-i", DeviceId)
         if VendorId is not None:
-            Cmd += ["-f", VendorId]
+            Cmd += ("-f", VendorId)
 
-        Cmd += ["-o", Output]
+        Cmd += ("-o", Output)
         if IsMakefile:
             if " ".join(Cmd).strip() not in GenFdsGlobalVariable.SecCmdList:
                 GenFdsGlobalVariable.SecCmdList.append(" ".join(Cmd).strip())
@@ -695,7 +692,7 @@ class GenFdsGlobalVariable:
 
         Cmd = [ToolPath, ]
         Cmd += Options.split(' ')
-        Cmd += ["-o", Output]
+        Cmd += ("-o", Output)
         Cmd += Input
         if IsMakefile:
             if " ".join(Cmd).strip() not in GenFdsGlobalVariable.SecCmdList:
diff --git a/BaseTools/Source/Python/build/BuildReport.py b/BaseTools/Source/Python/build/BuildReport.py
index cf45ef173498..4bcdea726cd3 100644
--- a/BaseTools/Source/Python/build/BuildReport.py
+++ b/BaseTools/Source/Python/build/BuildReport.py
@@ -420,7 +420,7 @@ class DepexReport(object):
                     self.Source = "DXS"
                     break
         else:
-            self.Depex = M.DepexExpressionList.get(M.ModuleType, "")
+            self.Depex = M.DepexExpressionDict.get(M.ModuleType, "")
             self.ModuleDepex = " ".join(M.Module.DepexExpression[M.Arch, M.ModuleType])
             if not self.ModuleDepex:
                 self.ModuleDepex = "(None)"
@@ -461,12 +461,12 @@ class DepexReport(object):
         FileWrite(File, "Dependency Expression (DEPEX) from %s" % self.Source)
 
         if self.Source == "INF":
-            FileWrite(File, "%s" % self.Depex, True)
+            FileWrite(File, self.Depex, True)
             FileWrite(File, gSubSectionSep)
             FileWrite(File, "From Module INF:  %s" % self.ModuleDepex, True)
             FileWrite(File, "From Library INF: %s" % self.LibraryDepex, True)
         else:
-            FileWrite(File, "%s" % self.Depex)
+            FileWrite(File, self.Depex)
         FileWrite(File, gSubSectionEnd)
 
 ##
@@ -1108,7 +1108,7 @@ class PcdReport(object):
                                 if IsByteArray:
                                     FileWrite(File, ' *M %-*s = %s' % (self.MaxLen + 19, ModulePath, '{'))
                                     for Array in ArrayList:
-                                        FileWrite(File, '%s' % (Array))
+                                        FileWrite(File, Array)
                                 else:
                                     FileWrite(File, ' *M %-*s = %s' % (self.MaxLen + 19, ModulePath, ModuleDefault.strip()))
 
@@ -1134,7 +1134,7 @@ class PcdReport(object):
             if IsByteArray:
                 FileWrite(File, '    %*s = %s' % (self.MaxLen + 19, 'DSC DEFAULT', "{"))
                 for Array in ArrayList:
-                    FileWrite(File, '%s' % (Array))
+                    FileWrite(File, Array)
             else:
                 FileWrite(File, '    %*s = %s' % (self.MaxLen + 19, 'DSC DEFAULT', Value))
         if not InfMatch and InfDefaultValue is not None:
@@ -1143,7 +1143,7 @@ class PcdReport(object):
             if IsByteArray:
                 FileWrite(File, '    %*s = %s' % (self.MaxLen + 19, 'INF DEFAULT', "{"))
                 for Array in ArrayList:
-                    FileWrite(File, '%s' % (Array))
+                    FileWrite(File, Array)
             else:
                 FileWrite(File, '    %*s = %s' % (self.MaxLen + 19, 'INF DEFAULT', Value))
 
@@ -1153,7 +1153,7 @@ class PcdReport(object):
             if IsByteArray:
                 FileWrite(File, '    %*s = %s' % (self.MaxLen + 19, 'DEC DEFAULT', "{"))
                 for Array in ArrayList:
-                    FileWrite(File, '%s' % (Array))
+                    FileWrite(File, Array)
             else:
                 FileWrite(File, '    %*s = %s' % (self.MaxLen + 19, 'DEC DEFAULT', Value))
             if IsStructure:
@@ -1168,7 +1168,7 @@ class PcdReport(object):
             if IsByteArray:
                 FileWrite(File, ' %-*s   : %6s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '{'))
                 for Array in ArrayList:
-                    FileWrite(File, '%s' % (Array))
+                    FileWrite(File, Array)
             else:
                 FileWrite(File, ' %-*s   : %6s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', Value))
             if IsStructure:
@@ -1204,7 +1204,7 @@ class PcdReport(object):
                                     else:
                                         FileWrite(File, ' %-*s   : %6s %10s %10s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', '(' + DefaultStore + ')', '{'))
                                     for Array in ArrayList:
-                                        FileWrite(File, '%s' % (Array))
+                                        FileWrite(File, Array)
                                 else:
                                     if self.DefaultStoreSingle and self.SkuSingle:
                                         FileWrite(File, ' %-*s   : %6s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', Value))
@@ -1225,7 +1225,7 @@ class PcdReport(object):
                                     else:
                                         FileWrite(File, ' %-*s   : %6s %10s %10s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', '(' + DefaultStore + ')', '{'))
                                     for Array in ArrayList:
-                                        FileWrite(File, '%s' % (Array))
+                                        FileWrite(File, Array)
                                 else:
                                     if self.DefaultStoreSingle and self.SkuSingle:
                                         FileWrite(File, ' %-*s   : %6s %10s = %s' % (self.MaxLen, ' ', TypeName, '(' + Pcd.DatumType + ')',  Value))
@@ -1252,7 +1252,7 @@ class PcdReport(object):
                             else:
                                 FileWrite(File, ' %-*s   : %6s %10s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', "{"))
                             for Array in ArrayList:
-                                FileWrite(File, '%s' % (Array))
+                                FileWrite(File, Array)
                         else:
                             if self.SkuSingle:
                                 FileWrite(File, ' %-*s   : %6s %10s = %s' % (self.MaxLen, Flag + ' ' + PcdTokenCName, TypeName, '(' + Pcd.DatumType + ')', Value))
@@ -1265,7 +1265,7 @@ class PcdReport(object):
                             else:
                                 FileWrite(File, ' %-*s   : %6s %10s %10s = %s' % (self.MaxLen, ' ' , TypeName, '(' + Pcd.DatumType + ')', '(' + SkuIdName + ')', "{"))
                             for Array in ArrayList:
-                                FileWrite(File, '%s' % (Array))
+                                FileWrite(File, Array)
                         else:
                             if self.SkuSingle:
                                 FileWrite(File, ' %-*s   : %6s %10s = %s' % (self.MaxLen, ' ' , TypeName, '(' + Pcd.DatumType + ')', Value))
@@ -1932,7 +1932,7 @@ class FdReport(object):
                     ValueList[-1] = ' {'
                     FileWrite(File, '|'.join(ValueList))
                     for Array in ArrayList:
-                        FileWrite(File, '%s' % (Array))
+                        FileWrite(File, Array)
                 else:
                     FileWrite(File, item)
             FileWrite(File, gSubSectionEnd)
diff --git a/BaseTools/Source/Python/build/build.py b/BaseTools/Source/Python/build/build.py
index 1ef2dc5bfe70..c16e810fed71 100644
--- a/BaseTools/Source/Python/build/build.py
+++ b/BaseTools/Source/Python/build/build.py
@@ -105,7 +105,7 @@ def CheckEnvVariable():
 
     WorkspaceDir = os.path.normcase(os.path.normpath(os.environ["WORKSPACE"]))
     if not os.path.exists(WorkspaceDir):
-        EdkLogger.error("build", FILE_NOT_FOUND, "WORKSPACE doesn't exist", ExtraData="%s" % WorkspaceDir)
+        EdkLogger.error("build", FILE_NOT_FOUND, "WORKSPACE doesn't exist", ExtraData=WorkspaceDir)
     elif ' ' in WorkspaceDir:
         EdkLogger.error("build", FORMAT_NOT_SUPPORTED, "No space is allowed in WORKSPACE path",
                         ExtraData=WorkspaceDir)
@@ -117,7 +117,7 @@ def CheckEnvVariable():
     if mws.PACKAGES_PATH:
         for Path in mws.PACKAGES_PATH:
             if not os.path.exists(Path):
-                EdkLogger.error("build", FILE_NOT_FOUND, "One Path in PACKAGES_PATH doesn't exist", ExtraData="%s" % Path)
+                EdkLogger.error("build", FILE_NOT_FOUND, "One Path in PACKAGES_PATH doesn't exist", ExtraData=Path)
             elif ' ' in Path:
                 EdkLogger.error("build", FORMAT_NOT_SUPPORTED, "No space is allowed in PACKAGES_PATH", ExtraData=Path)
 
@@ -1543,7 +1543,7 @@ class Build():
                         GuidString = MatchGuid.group()
                         if GuidString.upper() in ModuleList:
                             Line = Line.replace(GuidString, ModuleList[GuidString.upper()].Name)
-                    MapBuffer.write('%s' % (Line))
+                    MapBuffer.write(Line)
                     #
                     # Add the debug image full path.
                     #
-- 
2.16.2.windows.1



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v1 0/2] BaseTools: cleanup for speed
  2018-05-18  0:06 [PATCH v1 0/2] BaseTools: cleanup for speed Jaben Carsey
  2018-05-18  0:06 ` [PATCH v1 1/2] BaseTools: refactor to remove functions Jaben Carsey
  2018-05-18  0:06 ` [PATCH v1 2/2] BaseTools: Cleanup unneeded code Jaben Carsey
@ 2018-06-12  6:43 ` Zhu, Yonghong
  2 siblings, 0 replies; 4+ messages in thread
From: Zhu, Yonghong @ 2018-06-12  6:43 UTC (permalink / raw)
  To: Carsey, Jaben, edk2-devel@lists.01.org

Reviewed-by: Yonghong Zhu <yonghong.zhu@intel.com> 

Best Regards,
Zhu Yonghong

-----Original Message-----
From: edk2-devel [mailto:edk2-devel-bounces@lists.01.org] On Behalf Of Jaben Carsey
Sent: Friday, May 18, 2018 8:07 AM
To: edk2-devel@lists.01.org
Subject: [edk2] [PATCH v1 0/2] BaseTools: cleanup for speed

the first patch merges 2 almost identical functions by moving optional output to the WorkspaceCommon version and then calls it from AutoGen.

the second patch is lots of small cleanups.

Jaben Carsey (2):
  BaseTools: refactor to remove functions
  BaseTools: Cleanup unneeded code

 BaseTools/Source/Python/AutoGen/AutoGen.py             | 500 +++++++-------------
 BaseTools/Source/Python/AutoGen/GenC.py                |   2 +-
 BaseTools/Source/Python/AutoGen/GenMake.py             |   4 +-
 BaseTools/Source/Python/AutoGen/GenPcdDb.py            |  14 +-
 BaseTools/Source/Python/AutoGen/GenVar.py              |   2 +-
 BaseTools/Source/Python/AutoGen/StrGather.py           |   8 +-
 BaseTools/Source/Python/Common/Misc.py                 |   2 +-
 BaseTools/Source/Python/Common/String.py               |   2 +-
 BaseTools/Source/Python/Common/VpdInfoFile.py          |   2 +-
 BaseTools/Source/Python/GenFds/FdfParser.py            |   8 +-
 BaseTools/Source/Python/GenFds/GenFdsGlobalVariable.py | 119 +++--
 BaseTools/Source/Python/Workspace/WorkspaceCommon.py   |  52 +-
 BaseTools/Source/Python/build/BuildReport.py           |  26 +-
 BaseTools/Source/Python/build/build.py                 |   6 +-
 14 files changed, 291 insertions(+), 456 deletions(-)

--
2.16.2.windows.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2018-06-12  6:43 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-05-18  0:06 [PATCH v1 0/2] BaseTools: cleanup for speed Jaben Carsey
2018-05-18  0:06 ` [PATCH v1 1/2] BaseTools: refactor to remove functions Jaben Carsey
2018-05-18  0:06 ` [PATCH v1 2/2] BaseTools: Cleanup unneeded code Jaben Carsey
2018-06-12  6:43 ` [PATCH v1 0/2] BaseTools: cleanup for speed Zhu, Yonghong

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox