Initial commit
[wasm.git] / Makefile
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
10
11 ROOT_DIR=${CURDIR}
12 # now build libc
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 \
19                 wasm32
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
24
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
32
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
39
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
46
47
48 sysroot: sysroot/lib/libc.a sysroot/lib/libc++.a sysroot/lib/libc++abi.a
49
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 \
54                 test.cpp -o test.wasm