]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/AutoGen/GenMake.py
BaseTools: Enhance Basetool for incremental build
[mirror_edk2.git] / BaseTools / Source / Python / AutoGen / GenMake.py
index 59a01a7f243ac0a1644ecee0d58eb42df4c6dbb6..fe94f9a4c232bb599a59563444c3985700c78ec6 100755 (executable)
@@ -185,6 +185,12 @@ class BuildFile(object):
         self._FileType = FileType\r
         FileContent = self._TEMPLATE_.Replace(self._TemplateDict)\r
         FileName = self._FILE_NAME_[FileType]\r
+        if not os.path.exists(os.path.join(self._AutoGenObject.MakeFileDir, "deps.txt")):\r
+            with open(os.path.join(self._AutoGenObject.MakeFileDir, "deps.txt"),"w+") as fd:\r
+                fd.write("")\r
+        if not os.path.exists(os.path.join(self._AutoGenObject.MakeFileDir, "dependency")):\r
+            with open(os.path.join(self._AutoGenObject.MakeFileDir, "dependency"),"w+") as fd:\r
+                fd.write("")\r
         return SaveFileOnChange(os.path.join(self._AutoGenObject.MakeFileDir, FileName), FileContent, False)\r
 \r
     ## Return a list of directory creation command string\r
@@ -304,9 +310,6 @@ MAKE_FILE = ${makefile_path}
 ${BEGIN}${file_macro}\r
 ${END}\r
 \r
-COMMON_DEPS = ${BEGIN}${common_dependency_file} \\\r
-              ${END}\r
-\r
 #\r
 # Overridable Target Macro Definitions\r
 #\r
@@ -382,6 +385,8 @@ gen_fds:
 \t@"$(MAKE)" $(MAKE_FLAGS) -f $(BUILD_DIR)${separator}${makefile_name} fds\r
 \t@cd $(MODULE_BUILD_DIR)\r
 \r
+${INCLUDETAG}\r
+\r
 #\r
 # Individual Object Build Targets\r
 #\r
@@ -515,9 +520,6 @@ cleanlib:
                     # Remove duplicated include path, if any\r
                     if Attr == "FLAGS":\r
                         Value = RemoveDupOption(Value, IncPrefix, MyAgo.IncludePathList)\r
-                        if self._AutoGenObject.BuildRuleFamily == TAB_COMPILER_MSFT and Tool == 'CC' and '/GM' in Value:\r
-                            Value = Value.replace(' /MP', '')\r
-                            MyAgo.BuildOption[Tool][Attr] = Value\r
                         if Tool == "OPTROM" and PCI_COMPRESS_Flag:\r
                             ValueList = Value.split()\r
                             if ValueList:\r
@@ -540,7 +542,7 @@ cleanlib:
                 UnexpandMacro = []\r
                 NewStr = []\r
                 for Str in StrList:\r
-                    if '$' in Str:\r
+                    if '$' in Str or '-MMD' in Str or '-MF' in Str:\r
                         UnexpandMacro.append(Str)\r
                     else:\r
                         NewStr.append(Str)\r
@@ -590,10 +592,9 @@ cleanlib:
                                                 )\r
         FileMacroList.append(FileMacro)\r
         # Add support when compiling .nasm source files\r
-        for File in self.FileCache.keys():\r
-            if not str(File).endswith('.nasm'):\r
-                continue\r
-            IncludePathList = []\r
+        IncludePathList = []\r
+        asmsource = [item for item in MyAgo.SourceFileList if item.File.upper().endswith((".NASM",".ASM",".NASMB","S"))]\r
+        if asmsource:\r
             for P in  MyAgo.IncludePathList:\r
                 IncludePath = self._INC_FLAG_['NASM'] + self.PlaceMacro(P, self.Macros)\r
                 if IncludePath.endswith(os.sep):\r
@@ -606,7 +607,6 @@ cleanlib:
                     IncludePath = os.path.join(IncludePath, '')\r
                 IncludePathList.append(IncludePath)\r
             FileMacroList.append(self._FILE_MACRO_TEMPLATE.Replace({"macro_name": "NASM_INC", "source_file": IncludePathList}))\r
-            break\r
 \r
         # Generate macros used to represent files containing list of input files\r
         for ListFileMacro in self.ListFileMacros:\r
@@ -696,6 +696,7 @@ cleanlib:
             "file_macro"                : FileMacroList,\r
             "file_build_target"         : self.BuildTargetList,\r
             "backward_compatible_target": BcTargetList,\r
+            "INCLUDETAG"                   : self._INCLUDE_CMD_[self._FileType] + " " + os.path.join("$(MODULE_BUILD_DIR)","dependency")\r
         }\r
 \r
         return MakefileTemplateDict\r
@@ -903,16 +904,10 @@ cleanlib:
                 if Item in SourceFileList:\r
                     SourceFileList.remove(Item)\r
 \r
-        FileDependencyDict = self.GetFileDependency(\r
-                                    SourceFileList,\r
-                                    ForceIncludedFile,\r
-                                    self._AutoGenObject.IncludePathList + self._AutoGenObject.BuildOptionIncPathList\r
-                                    )\r
-\r
+        FileDependencyDict = {item:ForceIncludedFile for item in SourceFileList}\r
 \r
-        if FileDependencyDict:\r
-            for Dependency in FileDependencyDict.values():\r
-                self.DependencyHeaderFileSet.update(set(Dependency))\r
+        for Dependency in FileDependencyDict.values():\r
+            self.DependencyHeaderFileSet.update(set(Dependency))\r
 \r
         # Get a set of unique package includes from MetaFile\r
         parentMetaFileIncludes = set()\r
@@ -972,42 +967,16 @@ cleanlib:
                         ExtraData = "Local Header: " + aFile + " not found in " + self._AutoGenObject.MetaFile.Path\r
                         )\r
 \r
-        DepSet = None\r
         for File,Dependency in FileDependencyDict.items():\r
             if not Dependency:\r
-                FileDependencyDict[File] = ['$(FORCE_REBUILD)']\r
                 continue\r
 \r
             self._AutoGenObject.AutoGenDepSet |= set(Dependency)\r
 \r
-            # skip non-C files\r
-            if File.Ext not in [".c", ".C"] or File.Name == "AutoGen.c":\r
-                continue\r
-            elif DepSet is None:\r
-                DepSet = set(Dependency)\r
-            else:\r
-                DepSet &= set(Dependency)\r
-        # in case nothing in SourceFileList\r
-        if DepSet is None:\r
-            DepSet = set()\r
-        #\r
-        # Extract common files list in the dependency files\r
-        #\r
-        for File in DepSet:\r
-            self.CommonFileDependency.append(self.PlaceMacro(File.Path, self.Macros))\r
-\r
         CmdSumDict = {}\r
         CmdTargetDict = {}\r
         CmdCppDict = {}\r
         DependencyDict = FileDependencyDict.copy()\r
-        for File in FileDependencyDict:\r
-            # skip non-C files\r
-            if File.Ext not in [".c", ".C"] or File.Name == "AutoGen.c":\r
-                continue\r
-            NewDepSet = set(FileDependencyDict[File])\r
-            NewDepSet -= DepSet\r
-            FileDependencyDict[File] = ["$(COMMON_DEPS)"] + list(NewDepSet)\r
-            DependencyDict[File] = list(NewDepSet)\r
 \r
         # Convert target description object to target string in makefile\r
         if self._AutoGenObject.BuildRuleFamily == TAB_COMPILER_MSFT and TAB_C_CODE_FILE in self._AutoGenObject.Targets:\r
@@ -1080,17 +1049,13 @@ cleanlib:
                     else:\r
                         CmdCppDict[item.Target.SubDir] = ['$(MAKE_FILE)', Path]\r
                     if CppPath.Path in DependencyDict:\r
-                        if '$(FORCE_REBUILD)' in DependencyDict[CppPath.Path]:\r
-                            if '$(FORCE_REBUILD)' not in (self.CommonFileDependency + CmdCppDict[item.Target.SubDir]):\r
-                                CmdCppDict[item.Target.SubDir].append('$(FORCE_REBUILD)')\r
-                        else:\r
-                            for Temp in DependencyDict[CppPath.Path]:\r
-                                try:\r
-                                    Path = self.PlaceMacro(Temp.Path, self.Macros)\r
-                                except:\r
-                                    continue\r
-                                if Path not in (self.CommonFileDependency + CmdCppDict[item.Target.SubDir]):\r
-                                    CmdCppDict[item.Target.SubDir].append(Path)\r
+                        for Temp in DependencyDict[CppPath.Path]:\r
+                            try:\r
+                                Path = self.PlaceMacro(Temp.Path, self.Macros)\r
+                            except:\r
+                                continue\r
+                            if Path not in (self.CommonFileDependency + CmdCppDict[item.Target.SubDir]):\r
+                                CmdCppDict[item.Target.SubDir].append(Path)\r
         if T.Commands:\r
             CommandList = T.Commands[:]\r
             for Item in CommandList[:]:\r
@@ -1109,7 +1074,7 @@ cleanlib:
                     CommandList.pop(Index)\r
                     if SingleCommandList[-1].endswith("%s%s.c" % (TAB_SLASH, CmdSumDict[CmdSign[3:].rsplit(TAB_SLASH, 1)[0]])):\r
                         Cpplist = CmdCppDict[T.Target.SubDir]\r
-                        Cpplist.insert(0, '$(OBJLIST_%d): $(COMMON_DEPS)' % list(self.ObjTargetDict.keys()).index(T.Target.SubDir))\r
+                        Cpplist.insert(0, '$(OBJLIST_%d): ' % list(self.ObjTargetDict.keys()).index(T.Target.SubDir))\r
                         T.Commands[Index] = '%s\n\t%s' % (' \\\n\t'.join(Cpplist), CmdTargetDict[CmdSign])\r
                     else:\r
                         T.Commands.pop(Index)\r