1 # build llvm and clang (for wasm only)
2 toolchain/build/llvm/bin/clang:
3 mkdir -p toolchain/build/llvm
4 cmake -G "Unix Makefiles" \
5 -DLLVM_TARGETS_TO_BUILD= \
6 -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly \
7 -S toolchain/src/llvm -B toolchain/build/llvm
8 # install the tools we need
9 $(MAKE) -C toolchain/build/llvm clang lld llvm-ar llvm-config llvm-ranlib
13 sysroot/lib/libc.a: toolchain/build/llvm/bin/clang
14 mkdir -p toolchain/build/musl
15 cd toolchain/build/musl; $(ROOT_DIR)/toolchain/src/musl/configure \
16 CC=$(ROOT_DIR)/toolchain/build/llvm/bin/clang \
17 CFLAGS="--target=wasm32-unknown-unknown-wasm -O3" \
18 --prefix=$(ROOT_DIR)/sysroot \
20 $(MAKE) -C toolchain/build/musl install \
21 CROSS_COMPILE=$(ROOT_DIR)/toolchain/build/llvm/bin/llvm-
22 # need to copy over musl's list of javascript function imports
23 cp toolchain/src/musl/arch/wasm32/libc.imports sysroot/lib
25 # build the wasm32 builtins
26 toolchain/build/llvm/lib/clang/8.0.0/lib/libclang_rt.builtins-wasm32.a: toolchain/build/llvm/bin/clang
27 mkdir -p toolchain/build/compiler-rt
28 cmake -G "Unix Makefiles" \
29 -DCMAKE_TOOLCHAIN_FILE=$(ROOT_DIR)/toolchain/compiler-rt.cmake \
30 -S toolchain/src/compiler-rt/lib/builtins -B toolchain/build/compiler-rt
31 $(MAKE) -C toolchain/build/compiler-rt/ install
33 sysroot/lib/libc++.a: toolchain/build/llvm/bin/clang toolchain/build/llvm/lib/clang/8.0.0/lib/libclang_rt.builtins-wasm32.a sysroot/lib/libc.a
34 mkdir -p toolchain/build/libcxx
35 cmake -G "Unix Makefiles" \
36 -DCMAKE_TOOLCHAIN_FILE=$(ROOT_DIR)/toolchain/libcxx.cmake \
37 -S toolchain/src/libcxx/ -B toolchain/build/libcxx
38 $(MAKE) -C toolchain/build/libcxx install
40 sysroot/lib/libc++abi.a: toolchain/build/llvm/bin/clang sysroot/lib/libc++.a
41 mkdir -p toolchain/build/libcxxabi
42 cmake -G "Unix Makefiles" \
43 -DCMAKE_TOOLCHAIN_FILE=$(ROOT_DIR)/toolchain/libcxxabi.cmake \
44 -S toolchain/src/libcxxabi -B toolchain/build/libcxxabi
45 $(MAKE) -C toolchain/build/libcxxabi install
48 sysroot: sysroot/lib/libc.a sysroot/lib/libc++.a sysroot/lib/libc++abi.a
50 test.wasm: test.cpp sysroot
51 clang++ --target=wasm32-unknown-unknown-wasm -g \
52 -fno-exceptions --sysroot=sysroot -nostartfiles \
53 -Wl,--export=foo,--demangle,--no-entry \