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

Reply via email to