Update how wasi-sdk uses cmake

Change `CMAKE_SYSTEM_NAME` to `WASI`, use a `CMAKE_MODULE_PATH`,
remove `CACHE` usage, and fix the compiler autodetection code so that
the "compiler works" hacks are no longer needed, following the advice in
[this comment](https://gitlab.kitware.com/cmake/cmake/-/issues/19223#note_567327).

This is hopefully a step towards re-submitting WASI support to upstream cmake.
pull/161/head
Dan Gohman 5 years ago
parent 56a3dd5c98
commit a610b4ca41

@ -55,6 +55,7 @@ clean:
build/llvm.BUILT: build/llvm.BUILT:
mkdir -p build/llvm mkdir -p build/llvm
cd build/llvm && cmake -G Ninja \ cd build/llvm && cmake -G Ninja \
-DCMAKE_MODULE_PATH=$(ROOT_DIR)/cmake \
-DCMAKE_BUILD_TYPE=MinSizeRel \ -DCMAKE_BUILD_TYPE=MinSizeRel \
-DCMAKE_INSTALL_PREFIX=$(PREFIX) \ -DCMAKE_INSTALL_PREFIX=$(PREFIX) \
-DLLVM_TARGETS_TO_BUILD=WebAssembly \ -DLLVM_TARGETS_TO_BUILD=WebAssembly \
@ -92,9 +93,14 @@ build/wasi-libc.BUILT: build/llvm.BUILT
touch build/wasi-libc.BUILT touch build/wasi-libc.BUILT
build/compiler-rt.BUILT: build/llvm.BUILT build/compiler-rt.BUILT: build/llvm.BUILT
# Create an empty library so that cmake's configure checks which
# run the compiler to see if it produces working binaries succeed.
mkdir -p $(PREFIX)/lib/clang/$(CLANG_VERSION)/lib/wasi
$(AR) cr $(PREFIX)/lib/clang/$(CLANG_VERSION)/lib/wasi/libclang_rt.builtins-wasm32.a
# Do the build, and install it. # Do the build, and install it.
mkdir -p build/compiler-rt mkdir -p build/compiler-rt
cd build/compiler-rt && cmake -G Ninja \ cd build/compiler-rt && cmake -G Ninja \
-DCMAKE_MODULE_PATH=$(ROOT_DIR)/cmake \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DCMAKE_TOOLCHAIN_FILE=$(ROOT_DIR)/wasi-sdk.cmake \ -DCMAKE_TOOLCHAIN_FILE=$(ROOT_DIR)/wasi-sdk.cmake \
-DCOMPILER_RT_BAREMETAL_BUILD=On \ -DCOMPILER_RT_BAREMETAL_BUILD=On \
@ -117,6 +123,7 @@ build/compiler-rt.BUILT: build/llvm.BUILT
# Flags for libcxx. # Flags for libcxx.
LIBCXX_CMAKE_FLAGS = \ LIBCXX_CMAKE_FLAGS = \
-DCMAKE_MODULE_PATH=$(ROOT_DIR)/cmake \
-DCMAKE_TOOLCHAIN_FILE=$(ROOT_DIR)/wasi-sdk.cmake \ -DCMAKE_TOOLCHAIN_FILE=$(ROOT_DIR)/wasi-sdk.cmake \
-DCMAKE_STAGING_PREFIX=$(PREFIX)/share/wasi-sysroot \ -DCMAKE_STAGING_PREFIX=$(PREFIX)/share/wasi-sysroot \
-DLLVM_CONFIG_PATH=$(ROOT_DIR)/build/llvm/bin/llvm-config \ -DLLVM_CONFIG_PATH=$(ROOT_DIR)/build/llvm/bin/llvm-config \
@ -138,9 +145,12 @@ LIBCXX_CMAKE_FLAGS = \
-DWASI_SDK_PREFIX=$(BUILD_PREFIX) \ -DWASI_SDK_PREFIX=$(BUILD_PREFIX) \
--debug-trycompile --debug-trycompile
#-DCMAKE_STAGING_PREFIX=
build/libcxx.BUILT: build/llvm.BUILT build/compiler-rt.BUILT build/wasi-libc.BUILT build/libcxx.BUILT: build/llvm.BUILT build/compiler-rt.BUILT build/wasi-libc.BUILT
# Create an empty library so that cmake's configure checks which
# run the compiler to see if it produces working binaries succeed.
mkdir -p $(PREFIX)/lib/clang/$(CLANG_VERSION)/lib/wasi
$(AR) cr $(PREFIX)/share/wasi-sysroot/lib/wasm32-wasi/libc++.a
$(AR) cr $(PREFIX)/share/wasi-sysroot/lib/wasm32-wasi/libc++abi.a
# Do the build. # Do the build.
mkdir -p build/libcxx mkdir -p build/libcxx
cd build/libcxx && cmake -G Ninja $(LIBCXX_CMAKE_FLAGS) \ cd build/libcxx && cmake -G Ninja $(LIBCXX_CMAKE_FLAGS) \
@ -155,6 +165,7 @@ build/libcxx.BUILT: build/llvm.BUILT build/compiler-rt.BUILT build/wasi-libc.BUI
# Flags for libcxxabi. # Flags for libcxxabi.
LIBCXXABI_CMAKE_FLAGS = \ LIBCXXABI_CMAKE_FLAGS = \
-DCMAKE_MODULE_PATH=$(ROOT_DIR)/cmake \
-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \ -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
-DCMAKE_CXX_COMPILER_WORKS=ON \ -DCMAKE_CXX_COMPILER_WORKS=ON \
-DCMAKE_C_COMPILER_WORKS=ON \ -DCMAKE_C_COMPILER_WORKS=ON \
@ -180,6 +191,10 @@ LIBCXXABI_CMAKE_FLAGS = \
--debug-trycompile --debug-trycompile
build/libcxxabi.BUILT: build/libcxx.BUILT build/llvm.BUILT build/libcxxabi.BUILT: build/libcxx.BUILT build/llvm.BUILT
# Create an empty library so that cmake's configure checks which
# run the compiler to see if it produces working binaries succeed.
mkdir -p $(PREFIX)/lib/clang/$(CLANG_VERSION)/lib/wasi
$(AR) cr $(PREFIX)/share/wasi-sysroot/lib/wasm32-wasi/libc++.a
# Do the build. # Do the build.
mkdir -p build/libcxxabi mkdir -p build/libcxxabi
cd build/libcxxabi && cmake -G Ninja $(LIBCXXABI_CMAKE_FLAGS) \ cd build/libcxxabi && cmake -G Ninja $(LIBCXXABI_CMAKE_FLAGS) \

@ -3,7 +3,7 @@
# This is arbitrary, AFAIK, for now. # This is arbitrary, AFAIK, for now.
cmake_minimum_required(VERSION 3.4.0) cmake_minimum_required(VERSION 3.4.0)
set(CMAKE_SYSTEM_NAME Wasm) set(CMAKE_SYSTEM_NAME WASI)
set(CMAKE_SYSTEM_VERSION 1) set(CMAKE_SYSTEM_VERSION 1)
set(CMAKE_SYSTEM_PROCESSOR wasm32) set(CMAKE_SYSTEM_PROCESSOR wasm32)
set(triple wasm32-wasi) set(triple wasm32-wasi)
@ -16,15 +16,10 @@ endif()
set(CMAKE_C_COMPILER ${WASI_SDK_PREFIX}/bin/clang${WASI_HOST_EXE_SUFFIX}) set(CMAKE_C_COMPILER ${WASI_SDK_PREFIX}/bin/clang${WASI_HOST_EXE_SUFFIX})
set(CMAKE_CXX_COMPILER ${WASI_SDK_PREFIX}/bin/clang++${WASI_HOST_EXE_SUFFIX}) set(CMAKE_CXX_COMPILER ${WASI_SDK_PREFIX}/bin/clang++${WASI_HOST_EXE_SUFFIX})
set(CMAKE_AR ${WASI_SDK_PREFIX}/bin/llvm-ar${WASI_HOST_EXE_SUFFIX} CACHE STRING "wasi-sdk build") set(CMAKE_AR ${WASI_SDK_PREFIX}/bin/llvm-ar${WASI_HOST_EXE_SUFFIX})
set(CMAKE_RANLIB ${WASI_SDK_PREFIX}/bin/llvm-ranlib${WASI_HOST_EXE_SUFFIX} CACHE STRING "wasi-sdk build") set(CMAKE_RANLIB ${WASI_SDK_PREFIX}/bin/llvm-ranlib${WASI_HOST_EXE_SUFFIX})
set(CMAKE_C_COMPILER_TARGET ${triple} CACHE STRING "wasi-sdk build") set(CMAKE_C_COMPILER_TARGET ${triple})
set(CMAKE_CXX_COMPILER_TARGET ${triple} CACHE STRING "wasi-sdk build") set(CMAKE_CXX_COMPILER_TARGET ${triple})
set(CMAKE_C_FLAGS "-v" CACHE STRING "wasi-sdk build")
set(CMAKE_CXX_FLAGS "-v -std=c++11" CACHE STRING "wasi-sdk build")
set(CMAKE_SYSROOT ${WASI_SDK_PREFIX}/share/wasi-sysroot CACHE STRING "wasi-sdk build")
set(CMAKE_STAGING_PREFIX ${WASI_SDK_PREFIX}/share/wasi-sysroot CACHE STRING "wasi-sdk build")
# Don't look in the sysroot for executables to run during the build # Don't look in the sysroot for executables to run during the build
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
@ -32,7 +27,3 @@ set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
# Some other hacks
set(CMAKE_C_COMPILER_WORKS ON)
set(CMAKE_CXX_COMPILER_WORKS ON)

Loading…
Cancel
Save