From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by mx.groups.io with SMTP id smtpd.web09.3195.1579231691627583485 for ; Thu, 16 Jan 2020 19:28:11 -0800 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 134.134.136.31, mailfrom: bob.c.feng@intel.com) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 16 Jan 2020 19:28:10 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.70,328,1574150400"; d="scan'208";a="226994710" Received: from unknown (HELO shwdePSI1121.ccr.corp.intel.com) ([10.239.158.47]) by orsmga006.jf.intel.com with ESMTP; 16 Jan 2020 19:28:10 -0800 From: "Bob Feng" To: devel@edk2.groups.io Cc: Liming Gao Subject: [Patch 1/1] BaseTools: Fixed a incremental build bug Date: Fri, 17 Jan 2020 11:28:07 +0800 Message-Id: <20200117032808.3464-1-bob.c.feng@intel.com> X-Mailer: git-send-email 2.20.1.windows.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit REF:https://bugzilla.tianocore.org/show_bug.cgi?id=2451 If removing a header file from source code and file system, the incremental build will fail. This patch is to fix this issue. Cc: Liming Gao Signed-off-by: Bob Feng --- BaseTools/Source/Python/AutoGen/GenMake.py | 9 +++++++-- BaseTools/Source/Python/AutoGen/IncludesAutoGen.py | 5 ++++- BaseTools/Source/Python/build/build.py | 3 ++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/BaseTools/Source/Python/AutoGen/GenMake.py b/BaseTools/Source/Python/AutoGen/GenMake.py index fe94f9a4c232..ba199c1aa73d 100755 --- a/BaseTools/Source/Python/AutoGen/GenMake.py +++ b/BaseTools/Source/Python/AutoGen/GenMake.py @@ -1,9 +1,9 @@ ## @file # Create makefile for MS nmake and GNU make # -# Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.
+# Copyright (c) 2007 - 2020, Intel Corporation. All rights reserved.
# SPDX-License-Identifier: BSD-2-Clause-Patent # ## Import Modules # @@ -189,10 +189,13 @@ class BuildFile(object): with open(os.path.join(self._AutoGenObject.MakeFileDir, "deps.txt"),"w+") as fd: fd.write("") if not os.path.exists(os.path.join(self._AutoGenObject.MakeFileDir, "dependency")): with open(os.path.join(self._AutoGenObject.MakeFileDir, "dependency"),"w+") as fd: fd.write("") + if not os.path.exists(os.path.join(self._AutoGenObject.MakeFileDir, "deps_target")): + with open(os.path.join(self._AutoGenObject.MakeFileDir, "deps_target"),"w+") as fd: + fd.write("") return SaveFileOnChange(os.path.join(self._AutoGenObject.MakeFileDir, FileName), FileContent, False) ## Return a list of directory creation command string # # @param DirList The list of directory to be created @@ -694,11 +697,13 @@ cleanlib: "dependent_library_build_directory" : self.LibraryBuildDirectoryList, "library_build_command" : LibraryMakeCommandList, "file_macro" : FileMacroList, "file_build_target" : self.BuildTargetList, "backward_compatible_target": BcTargetList, - "INCLUDETAG" : self._INCLUDE_CMD_[self._FileType] + " " + os.path.join("$(MODULE_BUILD_DIR)","dependency") + "INCLUDETAG" : "\n".join([self._INCLUDE_CMD_[self._FileType] + " " + os.path.join("$(MODULE_BUILD_DIR)","dependency"), + self._INCLUDE_CMD_[self._FileType] + " " + os.path.join("$(MODULE_BUILD_DIR)","deps_target") + ]) } return MakefileTemplateDict def ParserGenerateFfsCmd(self): diff --git a/BaseTools/Source/Python/AutoGen/IncludesAutoGen.py b/BaseTools/Source/Python/AutoGen/IncludesAutoGen.py index bb6e883d84ca..1ca1798907ef 100644 --- a/BaseTools/Source/Python/AutoGen/IncludesAutoGen.py +++ b/BaseTools/Source/Python/AutoGen/IncludesAutoGen.py @@ -1,9 +1,9 @@ ## @file # Build cache intermediate result and state # -# Copyright (c) 2019, Intel Corporation. All rights reserved.
+# Copyright (c) 2019 - 2020, Intel Corporation. All rights reserved.
# SPDX-License-Identifier: BSD-2-Clause-Patent # from Common.caching import cached_property import Common.EdkLogger as EdkLogger import Common.LongFilePathOs as os @@ -63,10 +63,13 @@ class IncludesAutoGen(): deps_include_str = _INCLUDE_DEPS_TEMPLATE.Replace(deps_file) except Exception as e: print(e) SaveFileOnChange(os.path.join(self.makefile_folder,"dependency"),deps_include_str,False) + def CreateDepsTarget(self): + SaveFileOnChange(os.path.join(self.makefile_folder,"deps_target"),"\n".join([item +":" for item in self.DepsCollection]),False) + @cached_property def deps_files(self): """ Get all .deps file under module build folder. """ deps_files = [] for root, _, files in os.walk(self.d_folder, topdown=False): diff --git a/BaseTools/Source/Python/build/build.py b/BaseTools/Source/Python/build/build.py index 34acdccbdbd0..1e47e382cba9 100755 --- a/BaseTools/Source/Python/build/build.py +++ b/BaseTools/Source/Python/build/build.py @@ -1,10 +1,10 @@ ## @file # build a platform or a module # # Copyright (c) 2014, Hewlett-Packard Development Company, L.P.
-# Copyright (c) 2007 - 2019, Intel Corporation. All rights reserved.
+# Copyright (c) 2007 - 2020, Intel Corporation. All rights reserved.
# Copyright (c) 2018, Hewlett Packard Enterprise Development, L.P.
# # SPDX-License-Identifier: BSD-2-Clause-Patent # @@ -278,10 +278,11 @@ def LaunchCommand(Command, WorkingDir,ModuleAuto = None): else: iau.UpdateDepsFileforNonMsvc() iau.UpdateDepsFileforTrim() iau.CreateModuleDeps() iau.CreateDepsInclude() + iau.CreateDepsTarget() return "%dms" % (int(round((time.time() - BeginTime) * 1000))) ## The smallest unit that can be built in multi-thread build mode # # This is the base class of build unit. The "Obj" parameter must provide -- 2.20.1.windows.1