Chromium Chronicle image

The Chromium Chronicle #7: Preprocessing Source

Published on

Episode 7: by Bruce Dawson in Seattle, WA (October, 2019)
Previous episodes

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 ^ suffix. This suffix tells ninja to build the output of the specified file—version.o in this case. Then, touch the file, and compile it (and only it) again with the -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 trimmed):

..\..\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, and add -E. This tells the compiler to print the preprocessed file to stdout.

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 version.i:

..\..\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.

Additional Resources

  • 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.

Published on Improve article

Back

Deprecations and removals in Chrome 79

Next

New in Chrome 78

This site uses cookies to deliver and enhance the quality of its services and to analyze traffic. If you agree, cookies are also used to serve advertising and to personalize the content and advertisements that you see. Learn more about our use of cookies.