RFR: 8347909: Automatic precompiled.hpp inclusion

Stefan Karlsson stefank at openjdk.org
Thu Jan 16 11:35:44 UTC 2025


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.

-------------

Commit messages:
 - Remove precompiled.hpp include from source files

Changes: https://git.openjdk.org/jdk/pull/23146/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=23146&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8347909
  Stats: 1852 lines in 1757 files changed: 6 ins; 1837 del; 9 mod
  Patch: https://git.openjdk.org/jdk/pull/23146.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/23146/head:pull/23146

PR: https://git.openjdk.org/jdk/pull/23146


More information about the build-dev mailing list