2.5 KiB
Building Dawn
System requirements
- Git
- CMake (3.10.2 or later) (if desired)
- GN (if desired)
- Ninja (or other build tool)
- Python, for fetching dependencies
- [depot_tools] in your path
-
Linux
- The
pkg-config
command:# Install pkg-config on Ubuntu sudo apt-get install pkg-config
- The
-
Mac
- Xcode 12.2+.
- The macOS 11.0 SDK. Run
xcode-select
to check whether you have it.ls `xcode-select -p`/Platforms/MacOSX.platform/Developer/SDKs
Install depot_tools
Dawn uses the Chromium build system and dependency management so you need to install depot_tools and add it to the PATH.
Get the code
# Clone the repo as "dawn"
git clone https://dawn.googlesource.com/dawn dawn && cd dawn
# Bootstrap the gclient configuration
cp scripts/standalone.gclient .gclient
# Fetch external dependencies and toolchains with gclient
gclient sync
Build Dawn
Compiling using CMake + Ninja
mkdir -p out/Debug
cd out/Debug
cmake -GNinja ../..
ninja # or autoninja
Compiling using CMake + make
mkdir -p out/Debug
cd out/Debug
cmake ../..
make # -j N for N-way parallel build
Compiling using gn + ninja
mkdir -p out/Debug
gn gen out/Debug
autoninja -C out/Debug
The most common GN build option is is_debug=true/false
; otherwise
gn args out/Debug --list
shows all the possible options.
On macOS you'll want to add the use_system_xcode=true
in most cases.
(and if you're a googler please get XCode from go/xcode).
To generate a Microsoft Visual Studio solution, add ide=vs2022
and
ninja-executable=<dawn parent directory>\dawn\third_party\ninja\ninja.exe
.
The .sln file will be created in the output directory specified.
Fuzzers on MacOS
If you are attempting fuzz, using TINT_BUILD_FUZZERS=ON
, the version of llvm
in the XCode SDK does not have the needed libfuzzer functionality included.
The build error that you will see from using the XCode SDK will look something like this:
ld: file not found:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/11.0.0/lib/darwin/libclang_rt.fuzzer_osx.a
The solution to this problem is to use a full version llvm, like what you would
get via homebrew, brew install llvm
, and use something like CC=<path to full clang> cmake ..
to setup a build using that toolchain.