Development branch: nullsafe-clang-dev
Clang only:
mkdir build && cd build
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS="clang" ../llvm
ninja clangClang + clangd (language server):
mkdir build && cd build
cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra" ../llvm
ninja clang clangd# Clone and setup Emscripten (first time only)
git clone https://github.com/emscripten-core/emsdk.git
cd emsdk
./emsdk install latest
./emsdk activate latest
source ./emsdk_env.sh
cd ..
# Build WASM
mkdir build-wasm && cd build-wasm
export PATH="/path/to/emsdk/upstream/emscripten:$PATH"
emcmake cmake -G Ninja -DCMAKE_BUILD_TYPE=Release \
-DLLVM_ENABLE_PROJECTS="clang" -DLLVM_TARGETS_TO_BUILD="WebAssembly" \
-DLLVM_ENABLE_THREADS=OFF \
-DCMAKE_EXE_LINKER_FLAGS="-sEXPORTED_RUNTIME_METHODS=callMain -sEXIT_RUNTIME=0 -sALLOW_MEMORY_GROWTH=1" \
../llvm
ninja clang
# Output: bin/clang.wasm and bin/clang.jscd build
ninja FileCheck count not split-file llvm-config
./bin/llvm-lit -v ../clang/test/Sema/strict-nullability.cPlayground: Push to nullsafe-clang-dev → deploys GitHub Pages automatically.
WASM files: git tag playground-v1.0 && git push origin playground-v1.0
Binaries: git tag v1.0.0 && git push origin v1.0.0