.PHONY: all all: test.wasm # 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 toolchain/build/llvm/bin/clang++ \ --target=wasm32-unknown-unknown-wasm -g -O3 \ -fno-exceptions --sysroot=sysroot -nostartfiles \ -I/usr/local/include \ -Wl,--export=setup,--export=update,--demangle,--no-entry,--allow-undefined-file=gles2.imports \ test.cpp -o test.wasm