+# build llvm and clang (for wasm only)
+toolchain/build/llvm/bin/clang:
+ mkdir -p toolchain/build/llvm
+ cmake -G "Unix Makefiles" \
+ -DLLVM_TARGETS_TO_BUILD= \
+ -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=WebAssembly \
+ -S toolchain/src/llvm -B toolchain/build/llvm
+ # install the tools we need
+ $(MAKE) -C toolchain/build/llvm clang lld llvm-ar llvm-config llvm-ranlib
+
+ROOT_DIR=${CURDIR}
+# now build libc
+sysroot/lib/libc.a: toolchain/build/llvm/bin/clang
+ mkdir -p toolchain/build/musl
+ cd toolchain/build/musl; $(ROOT_DIR)/toolchain/src/musl/configure \
+ CC=$(ROOT_DIR)/toolchain/build/llvm/bin/clang \
+ CFLAGS="--target=wasm32-unknown-unknown-wasm -O3" \
+ --prefix=$(ROOT_DIR)/sysroot \
+ wasm32
+ $(MAKE) -C toolchain/build/musl install \
+ CROSS_COMPILE=$(ROOT_DIR)/toolchain/build/llvm/bin/llvm-
+ # need to copy over musl's list of javascript function imports
+ cp toolchain/src/musl/arch/wasm32/libc.imports sysroot/lib
+
+# build the wasm32 builtins
+toolchain/build/llvm/lib/clang/8.0.0/lib/libclang_rt.builtins-wasm32.a: toolchain/build/llvm/bin/clang
+ mkdir -p toolchain/build/compiler-rt
+ cmake -G "Unix Makefiles" \
+ -DCMAKE_TOOLCHAIN_FILE=$(ROOT_DIR)/toolchain/compiler-rt.cmake \
+ -S toolchain/src/compiler-rt/lib/builtins -B toolchain/build/compiler-rt
+ $(MAKE) -C toolchain/build/compiler-rt/ install
+
+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
+ mkdir -p toolchain/build/libcxx
+ cmake -G "Unix Makefiles" \
+ -DCMAKE_TOOLCHAIN_FILE=$(ROOT_DIR)/toolchain/libcxx.cmake \
+ -S toolchain/src/libcxx/ -B toolchain/build/libcxx
+ $(MAKE) -C toolchain/build/libcxx install
+
+sysroot/lib/libc++abi.a: toolchain/build/llvm/bin/clang sysroot/lib/libc++.a
+ mkdir -p toolchain/build/libcxxabi
+ cmake -G "Unix Makefiles" \
+ -DCMAKE_TOOLCHAIN_FILE=$(ROOT_DIR)/toolchain/libcxxabi.cmake \
+ -S toolchain/src/libcxxabi -B toolchain/build/libcxxabi
+ $(MAKE) -C toolchain/build/libcxxabi install
+
+
+sysroot: sysroot/lib/libc.a sysroot/lib/libc++.a sysroot/lib/libc++abi.a
+
+test.wasm: test.cpp sysroot
+ clang++ --target=wasm32-unknown-unknown-wasm -g \
+ -fno-exceptions --sysroot=sysroot -nostartfiles \
+ -Wl,--export=foo,--demangle,--no-entry \
+ test.cpp -o test.wasm