Chromium ships a prebuiltclang binary. It's just upstream clang built at a known-good revision that we bump every two weeks or so.
This is the only supported compiler for building Chromium.
is_clang = false
will make the build use system gcc on Linux. There are no bots that test this and there is no guarantee it will work, but we accept patches for this configuration.
https://groups.google.com/a/chromium.org/group/clang/topics
Thechromium 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/build.py --without-android --without-fuchsia
to build the plugin.ninja -C third_party/llvm-build/Release+Asserts/
to build incrementally after making changes.(cd tools/clang/plugins/tests && ./test.py ../../../../third_party/llvm-build/Release+Asserts/bin/clang)
to test the plugin after making changes.The local plugin will then be used for local builds until the nextgclient sync
restores the default toolchain.
Since the plugin is rolled with clang changes, behavior changes to the plugin should be guarded by flags to make it easy to roll clang without introducing unexpected breakage. A general outline:
GN
and verify the new behavior.GN
.clang is the default compiler on Windows. It uses MSVC's SDK, so you still need to have Visual Studio with C++ support installed.
Setclang_base_path
in your args.gn to the llvm build directory containingbin/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 = falseis_debug = falsesymbol_level = 1is_component_build = true
On Windows, forclang_base_path
use something like this instead:
clang_base_path = "c:/src/llvm-build"
You can then look inout/gn/toolchain.ninja
and check that therule cc
andrule cxx
commands run your clang binary. If things look good, runninja -C out/gn
to build.
Chromium tries to be buildable with its currently pinned clang, and with clang trunk. Setllvm_force_head_revision = true
in your args.gn if the clang you‘re trying to build with is closer to clang trunk than to Chromium’s pinned clang (whichtools/clang/scripts/update.py --print-revision
prints).
Toolchain support gives an overview of clang rolls, and documents when to revert clang rolls and how to file good toolchain bugs.
Updating clang documents the mechanics of updating clang, and which files are included in the default clang package.
Clang Sheriffing contains instructions for how to debug compiler bugs, for clang sheriffs.
Clang Tool Refactoring has notes on how to build and run refactoring tools based on clang's libraries.
Updating Clang format binaries has notes on how to update clang-format.