public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Michael D Kinney" <michael.d.kinney@intel.com>
To: "devel@edk2.groups.io" <devel@edk2.groups.io>,
	"Feng, Bob C" <bob.c.feng@intel.com>,
	"Kinney, Michael D" <michael.d.kinney@intel.com>
Subject: Re: [edk2-devel] [Patch 0/4 V4] Enhance Incremental Build
Date: Thu, 5 Dec 2019 16:48:55 +0000	[thread overview]
Message-ID: <E92EE9817A31E24EB0585FDF735412F5B9E2AA8A@ORSMSX113.amr.corp.intel.com> (raw)
In-Reply-To: <20191205081807.15092-1-bob.c.feng@intel.com>

Hi Bob,

How does a tool chain opt-in or opt-out of this feature?

As you point out, not all tool chains provide the information
needed to support this feature.  We need to make sure the 
use of this feature or not is clearly documented in the 
profile for each tool chain.

Thanks,

Mike

> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On
> Behalf Of Bob Feng
> Sent: Thursday, December 5, 2019 12:18 AM
> To: devel@edk2.groups.io
> Subject: [edk2-devel] [Patch 0/4 V4] Enhance
> Incremental Build
> 
> V4: Move .deps files to where corresponding .obj file
> locate
> V3: Change CLANG9 to CLANGPDB according to commit
> 14672c34bd
> V2: Fixed a bug in patch 4/4.
> 
> Incremental build reduces the build time by only
> building
> the module that need to update. Edk2 Build system is a
> Makefile
> based build system. The incrememtal build ability is
> provided by
> the Make program. But Edk2 build tool need to generate
> correct makefile
> to have Make program do incremental build correctly.
> 
> The current solution in build tool to support
> incremental build is that build
> tool find out the include file list for each source
> file of a module, and in module's
> makefile, build tool add the include file list as the
> source file's dependency.
> In this way Make program can decide if it need to
> rebuild a source code by checking
> its dependency. This solution has 2 shortcommings, one
> is the process of finding
> include list is slow, the other is this method can't
> handle case that
> a MACRO in #include statement so the related source
> file is always built.
> 
> This patch provides another method to support
> incremental build. That is to use
> c preprocessor and trim tool to generate dependency
> files for the source file.
> This method will save much time in AutoGen phase and
> handle MACRO in #include correctly.
> 
> For C files:
>     1. MSVS.
>         cl.exe has a build option /showIncludes to
> display include files on stdout. Build tool captures
>         that messages and generate dependency files,
> .deps files.
>     2. CLANG and GCC
>         -MMD -MF build option are used to generate
> dependency files by preprocessor. Build tool updates
> the
>        .deps files.
> 
> For ASL files:
>     1. Trim find out all the included files, which are
> asl specific include format, and generate .trim.deps
> file.
>     2. ASL PP use c preprocessor to find out all
> included files with #include format and generate a
> .deps file
>     3. build tool updates the .deps file
> 
> For ASM files (.asm, .s or .nasm):
>     1. Trim find out all the included files, which are
> asm specific include format, and generate .trim.deps
> file.
>     2. ASM PP use c preprocessor to find out all
> included files with #include format and generate a deps
> file
>     3. build tool updates the .deps file
> 
> Build tool add "include" instruction for those deps
> files in the Makefile.
> 
> This patch does not support RVCT tool chain for the BZ
> https://bugzilla.tianocore.org/show_bug.cgi?id=1750
> 
> Feng, Bob C (4):
>   BaseTools: Add build option for dependency file
> generation
>   BaseTools: Generate dependent files for ASL and ASM
> files
>   BaseTools: Update build_rule.txt to generate
> dependent files.
>   BaseTools: Enhance Basetool for incremental build
> 
>  BaseTools/Conf/build_rule.template            |  94
> ++++---
>  BaseTools/Conf/tools_def.template             | 173
> ++++++------
>  BaseTools/Source/Python/AutoGen/GenMake.py    |  83
> ++----
>  .../Source/Python/AutoGen/IncludesAutoGen.py  | 255
> ++++++++++++++++++
>  .../Source/Python/AutoGen/ModuleAutoGen.py    |  23 ++
>  BaseTools/Source/Python/Trim/Trim.py          | 115
> ++++++--
>  BaseTools/Source/Python/build/build.py        |  63
> ++++-
>  7 files changed, 588 insertions(+), 218 deletions(-)
>  create mode 100644
> BaseTools/Source/Python/AutoGen/IncludesAutoGen.py
> 
> --
> 2.20.1.windows.1
> 
> 
> 


  parent reply	other threads:[~2019-12-05 16:48 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-05  8:18 [Patch 0/4 V4] Enhance Incremental Build Bob Feng
2019-12-05  8:18 ` [Patch 1/4 V4] BaseTools: Add build option for dependency file generation Bob Feng
2019-12-05  8:18 ` [Patch 2/4 V4] BaseTools: Generate dependent files for ASL and ASM files Bob Feng
2019-12-05  8:18 ` [Patch 3/4 V4] BaseTools: Update build_rule.txt to generate dependent files Bob Feng
2019-12-05  8:18 ` [Patch 4/4 V4] BaseTools: Enhance Basetool for incremental build Bob Feng
2019-12-05 16:48 ` Michael D Kinney [this message]
2019-12-06  0:47   ` [edk2-devel] [Patch 0/4 V4] Enhance Incremental Build Bob Feng
2019-12-06  3:35     ` Michael D Kinney
2019-12-06  4:03       ` Bob Feng
  -- strict thread matches above, loose matches on Subject: below --
2019-12-03  8:52 Bob Feng
2019-12-03 14:33 ` [edk2-devel] " Liming Gao
2019-12-04  2:09   ` Bob Feng

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=E92EE9817A31E24EB0585FDF735412F5B9E2AA8A@ORSMSX113.amr.corp.intel.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox