Clang is a compiler with many desirable features (outlined on their website).
Chrome can be built with Clang. It is now the default compiler on Android, Mac and Linux for building Chrome, and it is currently useful for its warning and error messages on Windows.
See the open bugs.
Get clang (happens automatically during
gclient runhooks on Mac and Linux):
Only needs to be run once per checkout, and clang will be automatically updated by
Regenerate the ninja build files with Clang enabled. Again, on Linux and Mac, Clang is the default compiler.
gn args and add
is_clang = true to your args.gn file.
ninja -C out/gn chrome
We don't have bots that test this, but building with gcc4.8+ should still work on Linux. If your system gcc is new enough, run
gn args and add
is_clang = false.
The chromium style plugin is used by default when clang is used.
If you're working on the plugin, you can build it locally like so:
./tools/clang/scripts/update.py --force-local-build --without-androidto build the plugin.
ninja -C third_party/llvm-build/Release+Asserts/to build incrementally.
To test the FindBadConstructs plugin, run:
(cd tools/clang/plugins/tests && \ ./test.py ../../../../third_party/llvm-build/Release+Asserts/bin/clang \ ../../../../third_party/llvm-build/Release+Asserts/lib/libFindBadConstructs.so)
clang can be used as compiler on Windows. Clang uses Visual Studio's linker and SDK, so you still need to have Visual Studio installed.
Things should compile, and all tests should pass. You can check these bots for how things are currently looking: https://build.chromium.org/p/chromium.fyi/console?category=win%20clang
python tools\clang\scripts\update.py # run `gn args` and add `is_clang = true` to your args.gn, then... ninja -C out\gn chrome
update.py script only needs to be run once per checkout. Clang will be kept up to date by
clang_base_path in your args.gn to the llvm build directory containing
bin/clang (i.e. the directory you ran cmake). This [must] be an absolute path. You also need to disable chromium's clang plugin.
Here's an example that also disables debug info and enables the component build (both not strictly necessary, but they will speed up your build):
clang_base_path = getenv("HOME") + "/src/llvm-build" clang_use_chrome_plugins = false is_debug = false symbol_level = 1 is_component_build = true is_clang = true # Implicitly set on Mac, Linux, iOS; needed on Win and Android.
You can then run
head out/gn/toolchain.ninja and check that the first to lines set
cxx to your clang binary. If things look good, run
ninja -C out/gn to build.
If your clang revision is very different from the one currently used in chromium
tools/clang/scripts/update.pyto find chromium's clang revision
LLD is a relatively new linker from LLVM. The current focus is on Windows and Linux support, where it can link Chrome approximately twice as fast as gold and MSVC's link.exe as of this writing.
use_lld = true in args.gn.