From: "Laszlo Ersek" <lersek@redhat.com>
To: Leif Lindholm <leif.lindholm@linaro.org>,
"Gao, Liming" <liming.gao@intel.com>
Cc: "devel@edk2.groups.io" <devel@edk2.groups.io>,
"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 19:23:16 +0200 [thread overview]
Message-ID: <f58d04f3-070b-1649-cc74-2b17af93ab30@redhat.com> (raw)
In-Reply-To: <20190723132543.GI11541@bivouac.eciton.net>
On 07/23/19 15:25, Leif Lindholm wrote:
> 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.
+1
> 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.
I believe I made the exact same request / suggestion, when Christian
initially posted the patches. The counter-argument was (back then
anyway) that this would break a plethora of platforms. So the idea was
to annoy people with warnings just enough to clean up those INF files,
and then turn the warnings into errors.
If I remember correctly, at least.
Given that the (partly generated) OpenSSL INF files still produce
warnings, I assume that this cleanup is likely incomplete still, in
other (out of tree) platforms as well.
> 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.)
This looks a bit too recursive for me:
- rely on hashes saved from a previous run to avoid parsing the #include
directives,
- use extracted #include dependencies to determine what files to hash.
The possibility of a stale cache concerns me. (*Incremental* dependency
extraction with gcc's -MMD concerns me the same, BTW.)
> 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.
That makes sense.
Thanks
Laszlo
next prev parent reply other threads:[~2019-07-23 17:23 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
2019-07-23 17:23 ` Laszlo Ersek [this message]
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=f58d04f3-070b-1649-cc74-2b17af93ab30@redhat.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