4 # build llvm and clang (for wasm only)
5 toolchain/build/llvm/bin/clang:
6 mkdir -p toolchain/build/llvm
7 cmake -G "Unix Makefiles" \
8 -DLLVM_TARGETS_TO_BUILD= \
9 -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly \
10 -S toolchain/src/llvm -B toolchain/build/llvm
11 # install the tools we need
12 $(MAKE) -C toolchain/build/llvm clang lld llvm-ar llvm-config llvm-ranlib
16 sysroot/lib/libc.a: toolchain/build/llvm/bin/clang
17 mkdir -p toolchain/build/musl
18 cd toolchain/build/musl; $(ROOT_DIR)/toolchain/src/musl/configure \
19 CC=$(ROOT_DIR)/toolchain/build/llvm/bin/clang \
20 CFLAGS="--target=wasm32-unknown-unknown-wasm -O3" \
21 --prefix=$(ROOT_DIR)/sysroot \
23 $(MAKE) -C toolchain/build/musl install \
24 CROSS_COMPILE=$(ROOT_DIR)/toolchain/build/llvm/bin/llvm-
25 # need to copy over musl's list of javascript function imports
26 cp toolchain/src/musl/arch/wasm32/libc.imports sysroot/lib
28 # build the wasm32 builtins
29 toolchain/build/llvm/lib/clang/8.0.0/lib/libclang_rt.builtins-wasm32.a: toolchain/build/llvm/bin/clang
30 mkdir -p toolchain/build/compiler-rt
31 cmake -G "Unix Makefiles" \
32 -DCMAKE_TOOLCHAIN_FILE=$(ROOT_DIR)/toolchain/compiler-rt.cmake \
33 -S toolchain/src/compiler-rt/lib/builtins -B toolchain/build/compiler-rt
34 $(MAKE) -C toolchain/build/compiler-rt/ install
36 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
37 mkdir -p toolchain/build/libcxx
38 cmake -G "Unix Makefiles" \
39 -DCMAKE_TOOLCHAIN_FILE=$(ROOT_DIR)/toolchain/libcxx.cmake \
40 -S toolchain/src/libcxx/ -B toolchain/build/libcxx
41 $(MAKE) -C toolchain/build/libcxx install
43 sysroot/lib/libc++abi.a: toolchain/build/llvm/bin/clang sysroot/lib/libc++.a
44 mkdir -p toolchain/build/libcxxabi
45 cmake -G "Unix Makefiles" \
46 -DCMAKE_TOOLCHAIN_FILE=$(ROOT_DIR)/toolchain/libcxxabi.cmake \
47 -S toolchain/src/libcxxabi -B toolchain/build/libcxxabi
48 $(MAKE) -C toolchain/build/libcxxabi install
51 sysroot: sysroot/lib/libc.a sysroot/lib/libc++.a sysroot/lib/libc++abi.a
53 test.wasm: test.cpp sysroot
54 toolchain/build/llvm/bin/clang++ \
55 --target=wasm32-unknown-unknown-wasm -g -O3 \
56 -fno-exceptions --sysroot=sysroot -nostartfiles \
57 -I/usr/local/include \
58 -Wl,--export=setup,--export=update,--demangle,--no-entry,--allow-undefined-file=gles2.imports \