
R=andybons@chromium.org BUG=524256 Review URL: https://codereview.chromium.org/1319543002 Cr-Commit-Position: refs/heads/master@{#345360}
69 lines
2.9 KiB
Markdown
69 lines
2.9 KiB
Markdown
# Windows precompiled headers
|
|
|
|
Using precompiled headers on Windows can speed builds up by around 25%.
|
|
|
|
Precompiled headers are used by default when GYP generates project files for
|
|
Visual Studio 2010.
|
|
|
|
When using Visual Studio 2008, use of precompiled headers is off by default (see
|
|
discussion below). To turn on precompiled headers in your client when using
|
|
MSVS 2008, make sure your `~\.gyp\include.gypi` file looks something like this,
|
|
then run `gclient runhooks` to update the solution files generated by GYP:
|
|
|
|
{
|
|
'variables': {
|
|
'chromium_win_pch': 1,
|
|
}
|
|
}
|
|
|
|
Since [r174228](http://src.chromium.org/viewvc/chrome?view=rev&revision=174228),
|
|
default is using precompiled header for non `Official` build.
|
|
|
|
## Discussion
|
|
|
|
MSVS 2008 has some limitations in how well it handles precompiled headers.
|
|
We've run into two issues:
|
|
|
|
1. Using precompiled headers can push our official builders over the edge of
|
|
the world, into the dangerous Kingdom of Oom (out of memory).
|
|
1. When compilation flags are changed, instead of doing the right thing and
|
|
rebuilding the precompiled headers and their dependents, MSVS prints a
|
|
warning instead, saying the precompiled header file was built with
|
|
different flags than the current file.
|
|
|
|
Because of the above, we disabled use of precompiled headers by default, and
|
|
required the `chromium_win_pch` flag discussed above to be set.
|
|
|
|
We may be able to turn use of precompiled headers back on for Debug builds by
|
|
default, by adding a workaround to MSVS's limitations to GYP, i.e. if it detects
|
|
a change in compile flags it could blow away MSVS's output directory.
|
|
|
|
## Troubleshooting
|
|
|
|
Both of these apply to Visual Studio 2008 only.
|
|
|
|
### Precompiled header is missing
|
|
|
|
**Problem**: You didn't rebuild recently, and you want to build an individual
|
|
source file (Ctrl+F7). MSVS complains that the precompiled header is missing.
|
|
|
|
**Solution**: You could do a full build of the target your source file is in. If
|
|
you'd like to avoid that, find the precompiled header generator file, located
|
|
within a filter somewhere like `../../build/precompile.cc` in your project,
|
|
individually build that file, then individually build the source file you
|
|
intended to build. The `precompile.cc` file is the generator for the precompiled
|
|
header file.
|
|
|
|
### specified for precompiled header but not for current compile
|
|
|
|
**Problem**: MSVS prints out a warning like this (that we treat as an error):
|
|
`warning C4651: '/D_FOOBAR' specified for precompiled header but not for current
|
|
compile`
|
|
|
|
**Solution**: This means compilation flags have changed from when the
|
|
precompiled header file was generated. The issue is that MSVS does not handle
|
|
this correctly. As compilation flags may affect the precompiled header file, it
|
|
should be rebuilt along with its dependents. The workaround for now is to do a
|
|
full rebuild, or (if you want to try to be minimal) a rebuild of all projects
|
|
previously built that use precompiled headers.
|