Skip to content

Commit

Permalink
wasi-sdk support for full LTO.
Browse files Browse the repository at this point in the history
Add support for building libcxx and libcxxabi in LTO mode, along aside
the regular non-LTO builds.

Pass CLANG_VERSION to the wasi-libc build so that it can build itself in
LTO and non-LTO modes.

And drop the explicit -O1 from the compiler-rt build, and just go with
the default optimization settings.
  • Loading branch information
sunfishcode committed Mar 18, 2020
1 parent 1731513 commit e91a49e
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 8 deletions.
33 changes: 26 additions & 7 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,12 @@ build/llvm.BUILT:
build/wasi-libc.BUILT: build/llvm.BUILT
$(MAKE) -C $(ROOT_DIR)/src/wasi-libc \
WASM_CC=$(PREFIX)/bin/clang \
SYSROOT=$(PREFIX)/share/wasi-sysroot
SYSROOT=$(PREFIX)/share/wasi-sysroot \
CLANG_VERSION=$(CLANG_VERSION)
touch build/wasi-libc.BUILT

build/compiler-rt.BUILT: build/llvm.BUILT
# Do the build, and install it.
# Do the conventional build, and install it.
mkdir -p build/compiler-rt
cmake -B build/compiler-rt -G Ninja \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
Expand All @@ -70,7 +71,7 @@ build/compiler-rt.BUILT: build/llvm.BUILT
-DCOMPILER_RT_ENABLE_IOS=OFF \
-DCOMPILER_RT_DEFAULT_TARGET_ONLY=On \
-DWASI_SDK_PREFIX=$(PREFIX) \
-DCMAKE_C_FLAGS="-O1 $(DEBUG_PREFIX_MAP)" \
-DCMAKE_C_FLAGS="$(DEBUG_PREFIX_MAP)" \
-DLLVM_CONFIG_PATH=$(ROOT_DIR)/build/llvm/bin/llvm-config \
-DCOMPILER_RT_OS_DIR=wasi \
-DCMAKE_INSTALL_PREFIX=$(PREFIX)/lib/clang/$(CLANG_VERSION)/ \
Expand All @@ -81,7 +82,7 @@ build/compiler-rt.BUILT: build/llvm.BUILT
cp -R $(ROOT_DIR)/build/llvm/lib/clang $(PREFIX)/lib/
touch build/compiler-rt.BUILT

# Flags for libcxx.
# Flags common to both the non-LTO and LTO builds of libcxx.
LIBCXX_CMAKE_FLAGS = \
-DCMAKE_TOOLCHAIN_FILE=$(ROOT_DIR)/wasi-sdk.cmake \
-DLLVM_CONFIG_PATH=$(ROOT_DIR)/build/llvm/bin/llvm-config \
Expand All @@ -104,19 +105,28 @@ LIBCXX_CMAKE_FLAGS = \
--debug-trycompile

build/libcxx.BUILT: build/llvm.BUILT build/compiler-rt.BUILT build/wasi-libc.BUILT
# Do the build.
# Do the conventional build.
mkdir -p build/libcxx
cmake -B build/libcxx -G Ninja $(LIBCXX_CMAKE_FLAGS) \
-DCMAKE_C_FLAGS="$(DEBUG_PREFIX_MAP)" \
-DCMAKE_CXX_FLAGS="$(DEBUG_PREFIX_MAP)" \
-DLIBCXX_LIBDIR_SUFFIX=/wasm32-wasi \
$(LLVM_PROJ_DIR)/libcxx
ninja $(NINJA_FLAGS) -v -C build/libcxx
# Now build the same thing but with LTO enabled.
mkdir -p build/libcxx.llvm-lto
cmake -B build/libcxx.llvm-lto -G Ninja $(LIBCXX_CMAKE_FLAGS) \
-DCMAKE_C_FLAGS="-flto $(DEBUG_PREFIX_MAP)" \
-DCMAKE_CXX_FLAGS="-flto $(DEBUG_PREFIX_MAP)" \
-DLIBCXX_LIBDIR_SUFFIX=/wasm32-wasi/llvm-lto/$(CLANG_VERSION) \
$(LLVM_PROJ_DIR)/libcxx
ninja $(NINJA_FLAGS) -v -C build/libcxx.llvm-lto
# Do the install.
ninja $(NINJA_FLAGS) -v -C build/libcxx install
ninja $(NINJA_FLAGS) -v -C build/libcxx.llvm-lto install
touch build/libcxx.BUILT

# Flags for libcxxabi.
# Flags common to both the non-LTO and LTO builds of libcxxabi.
LIBCXXABI_CMAKE_FLAGS = \
-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
-DCMAKE_CXX_COMPILER_WORKS=ON \
Expand All @@ -142,16 +152,25 @@ LIBCXXABI_CMAKE_FLAGS = \
--debug-trycompile

build/libcxxabi.BUILT: build/libcxx.BUILT build/llvm.BUILT
# Do the build.
# Do the conventional build.
mkdir -p build/libcxxabi
cmake -B build/libcxxabi -G Ninja $(LIBCXXABI_CMAKE_FLAGS) \
-DCMAKE_C_FLAGS="$(DEBUG_PREFIX_MAP)" \
-DCMAKE_CXX_FLAGS="$(DEBUG_PREFIX_MAP)" \
-DLIBCXXABI_LIBDIR_SUFFIX=/wasm32-wasi \
$(LLVM_PROJ_DIR)/libcxxabi
ninja $(NINJA_FLAGS) -v -C build/libcxxabi
# Now build the same thing but with LTO enabled.
mkdir -p build/libcxxabi.llvm-lto
cmake -B build/libcxxabi.llvm-lto -G Ninja $(LIBCXXABI_CMAKE_FLAGS) \
-DCMAKE_C_FLAGS="-flto $(DEBUG_PREFIX_MAP)" \
-DCMAKE_CXX_FLAGS="-flto $(DEBUG_PREFIX_MAP)" \
-DLIBCXXABI_LIBDIR_SUFFIX=/wasm32-wasi/llvm-lto/$(CLANG_VERSION) \
$(LLVM_PROJ_DIR)/libcxxabi
ninja $(NINJA_FLAGS) -v -C build/libcxxabi.llvm-lto
# Do the install.
ninja $(NINJA_FLAGS) -v -C build/libcxxabi install
ninja $(NINJA_FLAGS) -v -C build/libcxxabi.llvm-lto install
touch build/libcxxabi.BUILT

build/config.BUILT:
Expand Down
2 changes: 1 addition & 1 deletion src/wasi-libc

0 comments on commit e91a49e

Please sign in to comment.