public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: "Leif Lindholm" <leif.lindholm@linaro.org>
To: "Gao, Liming" <liming.gao@intel.com>
Cc: "devel@edk2.groups.io" <devel@edk2.groups.io>,
	Laszlo Ersek <lersek@redhat.com>,
	"Kinney, Michael D" <michael.d.kinney@intel.com>,
	Ard Biesheuvel <ard.biesheuvel@linaro.org>,
	"Wang, Jian J" <jian.j.wang@intel.com>,
	"Ye, Ting" <ting.ye@intel.com>
Subject: Re: [edk2-devel] [PATCH 0/4] Arm, ArmPlatform, Crypto, Embedded: list internal headers in [Sources]
Date: Tue, 23 Jul 2019 14:25:43 +0100	[thread overview]
Message-ID: <20190723132543.GI11541@bivouac.eciton.net> (raw)
In-Reply-To: <4A89E2EF3DFEDB4C8BFDE51014F606A14E4B11C4@SHSMSX104.ccr.corp.intel.com>

On Tue, Jul 23, 2019 at 01:02:42PM +0000, Gao, Liming wrote:
> > > > I am just not pleased with the issue
> > > > bringing this to the fore is caused by the new caching feature using a
> > > > different mechanism for tracking header file dependencies than the
> > > > primary build process.
> > >
> > > Ugh... that's a lot of statements compressed into a single sentence. Can
> > > you please break it down for me? (Yes, I remember the mailing list
> > > reference you posted earlier, that discussion was too divergent for me.)
> > 
> > The inclusion of .h files in .inf is not necessary for determining
> > build-time dependencies on the Makefile level.
> 
> Right. In fact, build tool will parse source file to find their dependent header files, 
> and list those header files as the dependency in Makefile. 

If Visual Studio does not have functionality similar to the GCC
family's -M flag, then yeah, I can see why the tool needs to take care
of this itself. Although it would be good if we could find a way to
not fully maintain our own code for this.

> > Thus, the warnings come out of a different and unrelated level of the
> > build system, related to the recent build cache features. Which means
> > we're checking header file build dependencies through two different
> > mechanisms at two different points of the build.
> 
> This is related to build feature --hash. When --hash option is enabled, build will calculate 
> the hash value of source files specified in INF file. If hash value is not changed, build tool 
> will not parse source files, and not regenerate Makefile again. So, --hash option 
> is the incremental way in the build parse phase. If some header files are not 
> specified in INF file, it will cause hash value inaccurate.

Right - so we actually have two levels of dependency scanning in the
build tool itself? One for the .inf file contents, and one for the
source file contents.

> Then, Makefile may not 
> be generated to match the real source code, and cause the incremental build failure.
> So, the missing header files in INF file may bring the incremental build issue when --hash option. 
> If you don't enable --hash option, there is no problem even if the missing header files exist.

Right, but we still see the warning messages without using --hash.

Thank you very much for the summary - it clarifies the situation greatly.

Would it be feasible to update the --hash functionality to make use of
the include dependencies extracted from the source files? (Clearly, we
know when the source files change, so we would also know when we would
need to re-run the dependency search.)

If not, I think we should make the explicit listing of .h files
in .inf mandatory, triggering a build failure when not the case.

If it is, then I think we should make it explicitly banned to list .h
files in .inf. (If there is no other dependency, such as doxygen, also
making use of .inf listings of .h files.)

And this may well be a topic requiring much longer discussion. While
undecided, I would definitely prefer if we could disable the warning
when not actually building with --hash.

Best Regards,

Leif

  reply	other threads:[~2019-07-23 13:25 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-07-19 16:43 [PATCH 0/4] Arm, ArmPlatform, Crypto, Embedded: list internal headers in [Sources] Laszlo Ersek
2019-07-19 16:43 ` [PATCH 1/4] ArmPkg: list module-internal header files in INF [Sources] Laszlo Ersek
2019-07-19 16:43 ` [PATCH 2/4] ArmPlatformPkg: " Laszlo Ersek
2019-07-19 17:13   ` [edk2-devel] " Philippe Mathieu-Daudé
2019-07-19 16:43 ` [PATCH 3/4] CryptoPkg/BaseCryptLib: " Laszlo Ersek
2019-07-19 17:09   ` [edk2-devel] " Philippe Mathieu-Daudé
2019-07-22  5:48   ` Wang, Jian J
2019-07-19 16:43 ` [PATCH 4/4] EmbeddedPkg: " Laszlo Ersek
2019-07-19 17:08   ` [edk2-devel] " Philippe Mathieu-Daudé
2019-07-22 10:37 ` [PATCH 0/4] Arm, ArmPlatform, Crypto, Embedded: list internal headers in [Sources] Leif Lindholm
2019-07-22 17:32   ` Laszlo Ersek
2019-07-22 18:47     ` [edk2-devel] " Michael D Kinney
2019-07-22 22:56       ` Laszlo Ersek
2019-07-23  9:06         ` Leif Lindholm
2019-07-23 11:54           ` Laszlo Ersek
2019-07-23 12:19             ` Leif Lindholm
2019-07-23 13:02               ` Liming Gao
2019-07-23 13:25                 ` Leif Lindholm [this message]
2019-07-23 17:23                   ` Laszlo Ersek
2019-07-24 15:17                   ` Liming Gao
2019-07-24 17:00                     ` Leif Lindholm
2019-07-25 19:27                       ` Laszlo Ersek
2019-07-23 17:02               ` Laszlo Ersek
2019-07-22 22:30 ` Laszlo Ersek

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=20190723132543.GI11541@bivouac.eciton.net \
    --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