Skip to content

Commit e91a49e

Browse files
committed
wasi-sdk support for full LTO.
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.
1 parent 1731513 commit e91a49e

File tree

2 files changed

+27
-8
lines changed

2 files changed

+27
-8
lines changed

Makefile

+26-7
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,12 @@ build/llvm.BUILT:
5454
build/wasi-libc.BUILT: build/llvm.BUILT
5555
$(MAKE) -C $(ROOT_DIR)/src/wasi-libc \
5656
WASM_CC=$(PREFIX)/bin/clang \
57-
SYSROOT=$(PREFIX)/share/wasi-sysroot
57+
SYSROOT=$(PREFIX)/share/wasi-sysroot \
58+
CLANG_VERSION=$(CLANG_VERSION)
5859
touch build/wasi-libc.BUILT
5960

6061
build/compiler-rt.BUILT: build/llvm.BUILT
61-
# Do the build, and install it.
62+
# Do the conventional build, and install it.
6263
mkdir -p build/compiler-rt
6364
cmake -B build/compiler-rt -G Ninja \
6465
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
@@ -70,7 +71,7 @@ build/compiler-rt.BUILT: build/llvm.BUILT
7071
-DCOMPILER_RT_ENABLE_IOS=OFF \
7172
-DCOMPILER_RT_DEFAULT_TARGET_ONLY=On \
7273
-DWASI_SDK_PREFIX=$(PREFIX) \
73-
-DCMAKE_C_FLAGS="-O1 $(DEBUG_PREFIX_MAP)" \
74+
-DCMAKE_C_FLAGS="$(DEBUG_PREFIX_MAP)" \
7475
-DLLVM_CONFIG_PATH=$(ROOT_DIR)/build/llvm/bin/llvm-config \
7576
-DCOMPILER_RT_OS_DIR=wasi \
7677
-DCMAKE_INSTALL_PREFIX=$(PREFIX)/lib/clang/$(CLANG_VERSION)/ \
@@ -81,7 +82,7 @@ build/compiler-rt.BUILT: build/llvm.BUILT
8182
cp -R $(ROOT_DIR)/build/llvm/lib/clang $(PREFIX)/lib/
8283
touch build/compiler-rt.BUILT
8384

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

106107
build/libcxx.BUILT: build/llvm.BUILT build/compiler-rt.BUILT build/wasi-libc.BUILT
107-
# Do the build.
108+
# Do the conventional build.
108109
mkdir -p build/libcxx
109110
cmake -B build/libcxx -G Ninja $(LIBCXX_CMAKE_FLAGS) \
110111
-DCMAKE_C_FLAGS="$(DEBUG_PREFIX_MAP)" \
111112
-DCMAKE_CXX_FLAGS="$(DEBUG_PREFIX_MAP)" \
112113
-DLIBCXX_LIBDIR_SUFFIX=/wasm32-wasi \
113114
$(LLVM_PROJ_DIR)/libcxx
114115
ninja $(NINJA_FLAGS) -v -C build/libcxx
116+
# Now build the same thing but with LTO enabled.
117+
mkdir -p build/libcxx.llvm-lto
118+
cmake -B build/libcxx.llvm-lto -G Ninja $(LIBCXX_CMAKE_FLAGS) \
119+
-DCMAKE_C_FLAGS="-flto $(DEBUG_PREFIX_MAP)" \
120+
-DCMAKE_CXX_FLAGS="-flto $(DEBUG_PREFIX_MAP)" \
121+
-DLIBCXX_LIBDIR_SUFFIX=/wasm32-wasi/llvm-lto/$(CLANG_VERSION) \
122+
$(LLVM_PROJ_DIR)/libcxx
123+
ninja $(NINJA_FLAGS) -v -C build/libcxx.llvm-lto
115124
# Do the install.
116125
ninja $(NINJA_FLAGS) -v -C build/libcxx install
126+
ninja $(NINJA_FLAGS) -v -C build/libcxx.llvm-lto install
117127
touch build/libcxx.BUILT
118128

119-
# Flags for libcxxabi.
129+
# Flags common to both the non-LTO and LTO builds of libcxxabi.
120130
LIBCXXABI_CMAKE_FLAGS = \
121131
-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
122132
-DCMAKE_CXX_COMPILER_WORKS=ON \
@@ -142,16 +152,25 @@ LIBCXXABI_CMAKE_FLAGS = \
142152
--debug-trycompile
143153

144154
build/libcxxabi.BUILT: build/libcxx.BUILT build/llvm.BUILT
145-
# Do the build.
155+
# Do the conventional build.
146156
mkdir -p build/libcxxabi
147157
cmake -B build/libcxxabi -G Ninja $(LIBCXXABI_CMAKE_FLAGS) \
148158
-DCMAKE_C_FLAGS="$(DEBUG_PREFIX_MAP)" \
149159
-DCMAKE_CXX_FLAGS="$(DEBUG_PREFIX_MAP)" \
150160
-DLIBCXXABI_LIBDIR_SUFFIX=/wasm32-wasi \
151161
$(LLVM_PROJ_DIR)/libcxxabi
152162
ninja $(NINJA_FLAGS) -v -C build/libcxxabi
163+
# Now build the same thing but with LTO enabled.
164+
mkdir -p build/libcxxabi.llvm-lto
165+
cmake -B build/libcxxabi.llvm-lto -G Ninja $(LIBCXXABI_CMAKE_FLAGS) \
166+
-DCMAKE_C_FLAGS="-flto $(DEBUG_PREFIX_MAP)" \
167+
-DCMAKE_CXX_FLAGS="-flto $(DEBUG_PREFIX_MAP)" \
168+
-DLIBCXXABI_LIBDIR_SUFFIX=/wasm32-wasi/llvm-lto/$(CLANG_VERSION) \
169+
$(LLVM_PROJ_DIR)/libcxxabi
170+
ninja $(NINJA_FLAGS) -v -C build/libcxxabi.llvm-lto
153171
# Do the install.
154172
ninja $(NINJA_FLAGS) -v -C build/libcxxabi install
173+
ninja $(NINJA_FLAGS) -v -C build/libcxxabi.llvm-lto install
155174
touch build/libcxxabi.BUILT
156175

157176
build/config.BUILT:

src/wasi-libc

0 commit comments

Comments
 (0)