Add uniforms
[wasm.git] / Makefile
1 .PHONY: all
2 all: test.wasm
3
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
13
14 ROOT_DIR=${CURDIR}
15 # now build libc
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 \
22                 wasm32
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
27
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
35
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
42
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
49
50
51 sysroot: sysroot/lib/libc.a sysroot/lib/libc++.a sysroot/lib/libc++abi.a
52
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 \
59                 test.cpp -o test.wasm
60