Integrated: 8347909: Automatic precompiled.hpp inclusion
Stefan Karlsson
stefank at openjdk.org
Tue Jan 21 10:24:46 UTC 2025
On Thu, 16 Jan 2025 11:28:55 GMT, Stefan Karlsson <stefank at openjdk.org> wrote:
> HotSpot uses precompiled headers to speed up non-incremental builds. The current mechanism requires all .cpp files to include precompiled.hpp as the first non-comment line. This requires HotSpot devs to think about precompiled headers when they create new files and when they need to update/manage the include sections.
>
> All the compilers that we use support using precompiled headers without explicitly including the associated header in the source code. I propose that we use that capability instead.
>
> The make files changes to support this are:
> 1) Remove share/precompiled/ from the list of include directories,
> 2) Compiler-specific changes to support this:
>
> *Windows cl*:
> * Add the share/precompiled/ include directory when generating the PCH file.
> * Use /FI to indicate that we should include precompiled.hpp. /Yu says that it should use a PCH for precompiled.hpp. /Fp tells the compiler that it should pick up the named precompiled header.
>
> From experiments it seems like it doesn't matter what name I pass in to /FI and /Yu, they just have to be the same and the specified file doesn't even have to exist, as long as we also pass in the /Fp flag we get the benefits of the precompiled header.
>
> *gcc*:
> * Use -include to include the precompiled.hpp file. Note that the compilation command line will not have share/precompiled in the include path and that the precompiled header will still be picked up correctly.
>
> *clang*:
> * No changes needed, the -include-pch line is all that we need.
>
> I've verified that these changes give the expected compilation time reductions both by comparing compilation times in our CI but also by running individual compilations of .cpp files on Linux, Mac, and Windows.
>
> Note that the compiler will complain if someone now tries to include precompiled.hpp explicitly.
>
> Note also that we have a section about precompiled.hpp in the HotSpot style guide. If this proposal is accepted I would like to update the style guide as a separate RFE.
>
> Tested by letting GHA build and running tier1-2 in our CI pipeline.
This pull request has now been integrated.
Changeset: c33c1cfe
Author: Stefan Karlsson <stefank at openjdk.org>
URL: https://git.openjdk.org/jdk/commit/c33c1cfe7349ac657cd7bf54861227709d3c8f1b
Stats: 3160 lines in 1757 files changed: 7 ins; 1837 del; 1316 mod
8347909: Automatic precompiled.hpp inclusion
Reviewed-by: lkorinth, erikj, dholmes, ihse
-------------
PR: https://git.openjdk.org/jdk/pull/23146
More information about the build-dev
mailing list