|
| 1 | +# Project directories |
| 2 | +PROJ_ROOT=${CURDIR}/.. |
| 3 | +LLVM_PROJ_DIR=$(PROJ_ROOT)/third-party/llvm-project |
| 4 | + |
| 5 | +TOOLCHAIN_DIR=$(PROJ_ROOT)/toolchain |
| 6 | +TOOLCHAIN_FILE=$(TOOLCHAIN_DIR)/WasiToolchain.cmake |
| 7 | + |
| 8 | +# Install dirs |
| 9 | +FAASM_LOCAL_DIR=/usr/local/faasm |
| 10 | +PREFIX=$(FAASM_LOCAL_DIR)/toolchain |
| 11 | +FAASM_SYSROOT=/usr/local/faasm/llvm-sysroot |
| 12 | + |
| 13 | +# NOTE - upgrading LLVM itself is done by updating the submodule in this project |
| 14 | +CLANG_VERSION=10.0.1 |
| 15 | + |
| 16 | +BUILD_DIR=$(LLVM_PROJ_DIR)/build |
| 17 | +LLVM_CONFIG=$(BUILD_DIR)/llvm/bin/llvm-config |
| 18 | +AR=$(BUILD_DIR)/llvm/bin/llvm-ar |
| 19 | + |
| 20 | +WASI_LIBC_DIR=$(PROJ_ROOT)/third-party/wasi-libc |
| 21 | + |
| 22 | +# ------------------------------------------- |
| 23 | +# This is adapted from the wasi-sdk Makefile found here: |
| 24 | +# https://github.com/WebAssembly/wasi-sdk/blob/master/Makefile |
| 25 | +# ------------------------------------------- |
| 26 | + |
| 27 | +default: build |
| 28 | + |
| 29 | +.PHONY: clean-libc |
| 30 | +clean-libc: |
| 31 | + rm -rf $(BUILD_DIR)/libc.BUILT $(WASI_LIBC_DIR)/build |
| 32 | + |
| 33 | +.PHONY: clean-libs |
| 34 | +clean-libs: clean-libc |
| 35 | + rm -rf $(BUILD_DIR)/compiler-rt $(BUILD_DIR)/compiler-rt.BUILT |
| 36 | + rm -rf $(BUILD_DIR)/libcxx $(BUILD_DIR)/libcxx.BUILT |
| 37 | + rm -rf $(BUILD_DIR)/libcxxabi $(BUILD_DIR)/libcxxabi.BUILT |
| 38 | + |
| 39 | +.PHONY: clean-all |
| 40 | +clean-all: |
| 41 | + rm -rf $(BUILD_DIR) $(PREFIX) |
| 42 | + |
| 43 | +$(BUILD_DIR)/llvm.BUILT: |
| 44 | + mkdir -p $(BUILD_DIR)/llvm |
| 45 | + cd $(BUILD_DIR)/llvm; cmake -G Ninja \ |
| 46 | + -DCMAKE_C_COMPILER=/usr/bin/clang-10 \ |
| 47 | + -DCMAKE_CXX_COMPILER=/usr/bin/clang++-10 \ |
| 48 | + -DCMAKE_BUILD_TYPE=MinSizeRel \ |
| 49 | + -DCMAKE_INSTALL_PREFIX=$(PREFIX) \ |
| 50 | + -DLLVM_TARGETS_TO_BUILD=WebAssembly \ |
| 51 | + -DLLVM_DEFAULT_TARGET_TRIPLE=wasm32-wasi \ |
| 52 | + -DLLVM_EXTERNAL_CLANG_SOURCE_DIR=$(LLVM_PROJ_DIR)/clang \ |
| 53 | + -DLLVM_EXTERNAL_OPENMP_SOURCE_DIR=$(LLVM_PROJ_DIR)/openmp \ |
| 54 | + -DLLVM_EXTERNAL_LLD_SOURCE_DIR=$(LLVM_PROJ_DIR)/lld \ |
| 55 | + -DLLVM_ENABLE_PROJECTS="lld;clang;openmp" \ |
| 56 | + -DDEFAULT_SYSROOT=$(FAASM_SYSROOT) \ |
| 57 | + $(LLVM_PROJ_DIR)/llvm |
| 58 | + ninja -v -C $(BUILD_DIR)/llvm \ |
| 59 | + install-clang \ |
| 60 | + install-clang-resource-headers \ |
| 61 | + install-lld \ |
| 62 | + install-llc \ |
| 63 | + install-llvm-ar \ |
| 64 | + install-llvm-ranlib \ |
| 65 | + install-llvm-dwarfdump \ |
| 66 | + install-llvm-nm \ |
| 67 | + install-llvm-size \ |
| 68 | + install-llvm-config |
| 69 | + touch $(BUILD_DIR)/llvm.BUILT |
| 70 | + |
| 71 | +# WASI libc |
| 72 | +$(BUILD_DIR)/libc.BUILT: $(BUILD_DIR)/llvm.BUILT |
| 73 | + cd $(WASI_LIBC_DIR); $(MAKE) \ |
| 74 | + THREAD_MODEL=faasm \ |
| 75 | + WASM_CC=$(PREFIX)/bin/clang \ |
| 76 | + WASM_AR=$(PREFIX)/bin/llvm-ar \ |
| 77 | + WASM_NM=$(PREFIX)/bin/llvm-nm \ |
| 78 | + SYSROOT=$(FAASM_SYSROOT) |
| 79 | + touch $(BUILD_DIR)/libc.BUILT |
| 80 | + |
| 81 | +$(BUILD_DIR)/compiler-rt.BUILT: $(BUILD_DIR)/libc.BUILT |
| 82 | + mkdir -p $(BUILD_DIR)/compiler-rt |
| 83 | + cd $(BUILD_DIR)/compiler-rt; cmake -G Ninja \ |
| 84 | + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ |
| 85 | + -DCMAKE_TOOLCHAIN_FILE=$(TOOLCHAIN_FILE) \ |
| 86 | + -DCOMPILER_RT_BAREMETAL_BUILD=ON \ |
| 87 | + -DCOMPILER_RT_BUILD_XRAY=OFF \ |
| 88 | + -DCOMPILER_RT_INCLUDE_TESTS=OFF \ |
| 89 | + -DCOMPILER_RT_HAS_FPIC_FLAG=OFF \ |
| 90 | + -DCOMPILER_RT_DEFAULT_TARGET_ONLY=ON \ |
| 91 | + -DLLVM_CONFIG_PATH=$(LLVM_CONFIG) \ |
| 92 | + -DCMAKE_INSTALL_PREFIX=$(PREFIX)/lib/clang/$(CLANG_VERSION)/ \ |
| 93 | + -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \ |
| 94 | + -DCOMPILER_RT_OS_DIR=wasi \ |
| 95 | + $(LLVM_PROJ_DIR)/compiler-rt/lib/builtins |
| 96 | + ninja -v -C $(BUILD_DIR)/compiler-rt install |
| 97 | + cp -R $(BUILD_DIR)/llvm/lib/clang $(PREFIX)/lib/ |
| 98 | + touch $(BUILD_DIR)/compiler-rt.BUILT |
| 99 | + |
| 100 | +$(BUILD_DIR)/libcxx.BUILT: $(BUILD_DIR)/compiler-rt.BUILT |
| 101 | + mkdir -p $(BUILD_DIR)/libcxx |
| 102 | + cd $(BUILD_DIR)/libcxx; cmake -G Ninja \ |
| 103 | + -DCMAKE_TOOLCHAIN_FILE=$(TOOLCHAIN_FILE) \ |
| 104 | + -DCMAKE_BUILD_TYPE=RelWithDebugInfo \ |
| 105 | + -DCMAKE_CXX_COMPILER_WORKS=ON \ |
| 106 | + -DCMAKE_C_COMPILER_WORKS=ON \ |
| 107 | + -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \ |
| 108 | + -DCMAKE_INSTALL_PREFIX=$(FAASM_SYSROOT) \ |
| 109 | + -DLLVM_COMPILER_CHECKED=ON \ |
| 110 | + -DLLVM_CONFIG_PATH=$(LLVM_CONFIG) \ |
| 111 | + -DLIBCXX_HAVE_CXX_ATOMICS_WITHOUT_LIB=ON \ |
| 112 | + -DLIBCXX_USE_COMPILER_RT=ON \ |
| 113 | + -DLIBCXX_ENABLE_THREADS:BOOL=ON \ |
| 114 | + -DLIBCXX_HAS_PTHREAD_API:BOOL=ON \ |
| 115 | + -DLIBCXX_HAS_EXTERNAL_THREAD_API:BOOL=OFF \ |
| 116 | + -DLIBCXX_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL=OFF \ |
| 117 | + -DLIBCXX_HAS_WIN32_THREAD_API:BOOL=OFF \ |
| 118 | + -DLIBCXX_ENABLE_SHARED:BOOL=OFF \ |
| 119 | + -DLIBCXX_ENABLE_PIC:BOOL=OFF \ |
| 120 | + -DLIBCXX_ENABLE_EXPERIMENTAL_LIBRARY:BOOL=OFF \ |
| 121 | + -DLIBCXX_ENABLE_EXCEPTIONS:BOOL=OFF \ |
| 122 | + -DLIBCXX_ENABLE_FILESYSTEM:BOOL=OFF \ |
| 123 | + -DLIBCXX_CXX_ABI=libcxxabi \ |
| 124 | + -DLIBCXX_CXX_ABI_INCLUDE_PATHS=$(LLVM_PROJ_DIR)/libcxxabi/include \ |
| 125 | + -DLIBCXX_HAS_MUSL_LIBC:BOOL=ON \ |
| 126 | + -DLIBCXX_ABI_VERSION=2 \ |
| 127 | + -DLIBCXX_LIBDIR_SUFFIX=/wasm32-wasi \ |
| 128 | + --debug-trycompile \ |
| 129 | + $(LLVM_PROJ_DIR)/libcxx |
| 130 | + ninja -v -C $(BUILD_DIR)/libcxx install |
| 131 | + touch $(BUILD_DIR)/libcxx.BUILT |
| 132 | + |
| 133 | +$(BUILD_DIR)/libcxxabi.BUILT: $(BUILD_DIR)/libcxx.BUILT |
| 134 | + mkdir -p $(BUILD_DIR)/libcxxabi |
| 135 | + cd $(BUILD_DIR)/libcxxabi; cmake -G Ninja \ |
| 136 | + -DCMAKE_BUILD_TYPE=RelWithDebugInfo \ |
| 137 | + -DCMAKE_C_FLAGS="-I$(FAASM_SYSROOT)/include" \ |
| 138 | + -DCMAKE_CXX_FLAGS="-I$(FAASM_SYSROOT)/include/c++/v1" \ |
| 139 | + -DCMAKE_TOOLCHAIN_FILE=$(TOOLCHAIN_FILE) \ |
| 140 | + -DLLVM_CONFIG_PATH=$(LLVM_CONFIG) \ |
| 141 | + -DCMAKE_CXX_COMPILER_WORKS=ON \ |
| 142 | + -DCMAKE_C_COMPILER_WORKS=ON \ |
| 143 | + -DCMAKE_INSTALL_PREFIX=$(FAASM_SYSROOT) \ |
| 144 | + -DLLVM_COMPILER_CHECKED=ON \ |
| 145 | + -DLIBCXXABI_USE_COMPILER_RT=ON \ |
| 146 | + -DLIBCXXABI_ENABLE_EXCEPTIONS:BOOL=OFF \ |
| 147 | + -DLIBCXXABI_ENABLE_SHARED:BOOL=OFF \ |
| 148 | + -DLIBCXXABI_SILENT_TERMINATE:BOOL=ON \ |
| 149 | + -DLIBCXXABI_ENABLE_THREADS:BOOL=ON \ |
| 150 | + -DLIBCXXABI_HAS_PTHREAD_API:BOOL=ON \ |
| 151 | + -DLIBCXXABI_HAS_EXTERNAL_THREAD_API:BOOL=OFF \ |
| 152 | + -DLIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL=OFF \ |
| 153 | + -DLIBCXXABI_HAS_WIN32_THREAD_API:BOOL=OFF \ |
| 154 | + -DLIBCXXABI_ENABLE_PIC:BOOL=OFF \ |
| 155 | + -DLIBCXXABI_LIBCXX_PATH=$(LLVM_PROJ_DIR)/libcxx \ |
| 156 | + -DLIBCXXABI_LIBCXX_INCLUDES=$(FAASM_SYSROOT)/include/c++/v1 \ |
| 157 | + -DUNIX:BOOL=ON \ |
| 158 | + -DLIBCXXABI_LIBDIR_SUFFIX=/wasm32-wasi \ |
| 159 | + --debug-trycompile \ |
| 160 | + $(LLVM_PROJ_DIR)/libcxxabi |
| 161 | + ninja -v -C $(BUILD_DIR)/libcxxabi install |
| 162 | + touch $(BUILD_DIR)/libcxxabi.BUILT |
| 163 | + |
| 164 | +.PHONY: extras |
| 165 | +extras: $(BUILD_DIR)/libcxxabi.BUILT |
| 166 | + cp $(TOOLCHAIN_DIR)/sysroot_extras/* $(FAASM_SYSROOT)/lib/wasm32-wasi/ |
| 167 | + |
| 168 | +llvm: $(BUILD_DIR)/llvm.BUILT |
| 169 | + |
| 170 | +libc: $(BUILD_DIR)/libc.BUILT |
| 171 | + |
| 172 | +libcxx: $(BUILD_DIR)/libcxx.BUILT |
| 173 | + |
| 174 | +libcxxabi: $(BUILD_DIR)/libcxxabi.BUILT |
| 175 | + |
| 176 | +compiler-rt: $(BUILD_DIR)/compiler-rt.BUILT |
| 177 | + |
| 178 | +build: $(BUILD_DIR)/llvm.BUILT $(BUILD_DIR)/libc.BUILT $(BUILD_DIR)/compiler-rt.BUILT $(BUILD_DIR)/libcxxabi.BUILT $(BUILD_DIR)/libcxx.BUILT extras |
0 commit comments