Episode 7: October 2019
by Bruce Dawson in Seattle
Sometimes it is helpful to compile a single Chromium source file by hand, perhaps to experiment with compiler optimization options, to preprocess it to a single file to understand some subtle macro details, or to minimize a compiler bug.
A few tricks will let a Chromium developer find and execute the command that compiles a particular source file, with modifications as needed.
Start by going to your output directory and using autoninja (or ninja) to
compile the file of interest (and any dependencies) using the
This suffix tells ninja to build the output of the specified
in this case. Then, touch the file, and compile it (and only it) again with
-v (verbose) flag to ninja:
On Linux or OSX:
$ autoninja ../../base/version.cc^ $ touch ../../base/version.cc $ autoninja -v ../../base/version.cc^
In the Windows cmd shell
^ is a special character and must be escaped:
C:\> autoninja ../../base/version.cc^^ C:\> touch ../../base/version.cc C:\> autoninja -v ../../base/version.cc^^
Typical output of the
autoninja -v command looks like this (significantly
..\..\third_party\llvm-build\Release+Asserts\bin\clang-cl.exe /nologo /showIncludes -imsvc ...
This command allows you to compile the file of interest. To get the preprocessed output, use the following steps:
On Linux or OSX, remove the
-o obj/base/base/version.o block from the end,
-E. This tells the compiler to print the preprocessed file to
Redirect the output to a file, like this:
../../third_party/llvm-build/Release+Asserts/bin/clang++ -MMD ... -E >version.i
On Windows, remove the
/showIncludes option from the beginning (it prints
a line of output for each
#include) and then add
/P in order to
preprocess the file instead of compiling it. The results will be saved in the
current directory in
..\..\third_party\llvm-build\Release+Asserts\bin\clang-cl.exe /nologo -imsvc ... /P
Now you can examine the preprocessed file to see what the macros are actually doing, or make experimental compiler-switch changes and recompile to see what happens.
- Fast Chrome Builds: For more build-optimization tips (focused on Windows).
- ETW: Find out how to find Windows performance problems—in Chrome or in the build—by reading the ETW (also known as Xperf) docs.