From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by mx.groups.io with SMTP id smtpd.web12.4274.1572259632065190199 for ; Mon, 28 Oct 2019 03:47:12 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 134.134.136.20, 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 orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 28 Oct 2019 03:47:11 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.68,239,1569308400"; d="scan'208";a="203229610" Received: from shwdepsi1121.ccr.corp.intel.com ([10.239.158.47]) by orsmga006.jf.intel.com with ESMTP; 28 Oct 2019 03:47:10 -0700 From: "Bob Feng" To: devel@edk2.groups.io Subject: [Patch 0/1] BaseTools: Using compiler to generate source code dependency files. Date: Mon, 28 Oct 2019 18:47:01 +0800 Message-Id: <20191028104702.30620-1-bob.c.feng@intel.com> X-Mailer: git-send-email 2.20.1.windows.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=2311 To support incremental build, build tool generates the dependent header file for each of source file. This procedure is done in AutoGen phase. The build tool goes through all the source file and header file and use regular expression to find out all the dependent files for a source file. This procedure is much time-consuming. And this method can't handle the MACRO in #include, for example #include PATH(xxx.h). This patch is going to use compiler to generate dependent files. This method will be faster and more accurate. The basic idea is: 1. In AutoGen phase, build tool add "!Include deps.txt" into Makefile instead of defining COMMON_DEPS list. 2. During the Make phase, the compilers, Trim and C preprocessor generate dependent files, .d file, for each source file. 3. After Make, The build tool combines the .d files and generate a file deps.txt which list all the included files for a module. 4. Each source file will depends on the Module's includes files. The difference with orignial behavior is that if the user change the source file, build tool will only build that source file in incremental build; while if the user change a module's header file, build tool will build the whole module in incremental build. In this way, the time of AutoGen phase will be reduced much. And since we will use c preprocessor to handle #include, the MACRO will be handled well and the final dependent files will be more accurate. Feng, Bob C (1): BaseTools: Using compiler to generate source code dependency files. BaseTools/Conf/build_rule.template | 89 ++++++----- BaseTools/Conf/tools_def.template | 138 +++++++++--------- BaseTools/Source/Python/AutoGen/GenMake.py | 73 +++------ .../Source/Python/AutoGen/IncludesAutoGen.py | 99 +++++++++++++ BaseTools/Source/Python/Trim/Trim.py | 113 +++++++++++--- BaseTools/Source/Python/build/build.py | 58 ++++++-- 6 files changed, 378 insertions(+), 192 deletions(-) create mode 100644 BaseTools/Source/Python/AutoGen/IncludesAutoGen.py -- 2.20.1.windows.1