@@ -107,26 +107,22 @@ build/llvm.BUILT:
107107 llvm-config
108108 touch build/llvm.BUILT
109109
110+ # Flags for running `make` in wasi-libc
111+ # $(1): the target that's being built
112+ WASI_LIBC_MAKEFLAGS = \
113+ -C $(ROOT_DIR ) /src/wasi-libc \
114+ CC=$(BUILD_PREFIX ) /bin/clang \
115+ AR=$(BUILD_PREFIX ) /bin/llvm-ar \
116+ NM=$(BUILD_PREFIX ) /bin/llvm-nm \
117+ SYSROOT=$(BUILD_PREFIX ) /share/wasi-sysroot \
118+ TARGET_TRIPLE=$(1 )
119+
110120build/wasi-libc.BUILT : build/compiler-rt.BUILT
111- $(MAKE ) -C $(ROOT_DIR ) /src/wasi-libc \
112- CC=$(BUILD_PREFIX ) /bin/clang \
113- AR=$(BUILD_PREFIX ) /bin/llvm-ar \
114- NM=$(BUILD_PREFIX ) /bin/llvm-nm \
115- SYSROOT=$(BUILD_PREFIX ) /share/wasi-sysroot \
116- WASI_SNAPSHOT=preview2 \
117- default libc_so
118- $(MAKE ) -C $(ROOT_DIR ) /src/wasi-libc \
119- CC=$(BUILD_PREFIX ) /bin/clang \
120- AR=$(BUILD_PREFIX ) /bin/llvm-ar \
121- NM=$(BUILD_PREFIX ) /bin/llvm-nm \
122- SYSROOT=$(BUILD_PREFIX ) /share/wasi-sysroot \
123- default libc_so
124- $(MAKE ) -C $(ROOT_DIR ) /src/wasi-libc \
125- CC=$(BUILD_PREFIX ) /bin/clang \
126- AR=$(BUILD_PREFIX ) /bin/llvm-ar \
127- NM=$(BUILD_PREFIX ) /bin/llvm-nm \
128- SYSROOT=$(BUILD_PREFIX ) /share/wasi-sysroot \
129- THREAD_MODEL=posix
121+ $(MAKE ) $(call WASI_LIBC_MAKEFLAGS,wasm32-wasi) default libc_so
122+ $(MAKE ) $(call WASI_LIBC_MAKEFLAGS,wasm32-wasip1) default libc_so
123+ $(MAKE ) $(call WASI_LIBC_MAKEFLAGS,wasm32-wasip2) WASI_SNAPSHOT=p2 default libc_so
124+ $(MAKE ) $(call WASI_LIBC_MAKEFLAGS,wasm32-wasi-threads) THREAD_MODEL=posix
125+ $(MAKE ) $(call WASI_LIBC_MAKEFLAGS,wasm32-wasip1-threads) THREAD_MODEL=posix
130126 touch build/wasi-libc.BUILT
131127
132128build/compiler-rt.BUILT : build/llvm.BUILT
@@ -156,11 +152,15 @@ build/compiler-rt.BUILT: build/llvm.BUILT
156152 DESTDIR=$(DESTDIR ) ninja $(NINJA_FLAGS ) -C build/compiler-rt install
157153 # Install clang-provided headers.
158154 cp -R $(ROOT_DIR ) /build/llvm/lib/clang $(BUILD_PREFIX ) /lib/
155+ cp -R $(BUILD_PREFIX ) /lib/clang/17/lib/wasi $(BUILD_PREFIX ) /lib/clang/17/lib/wasip1
156+ cp -R $(BUILD_PREFIX ) /lib/clang/17/lib/wasi $(BUILD_PREFIX ) /lib/clang/17/lib/wasip2
159157 touch build/compiler-rt.BUILT
160158
161159# Flags for libcxx and libcxxabi.
162160# $(1): pthreads ON or OFF
163161# $(2): shared libraries ON or OFF
162+ # $(3): the name of the target being built for
163+ # $(4): extra compiler flags to pass
164164LIBCXX_CMAKE_FLAGS = \
165165 -DCMAKE_C_COMPILER_WORKS=ON \
166166 -DCMAKE_CXX_COMPILER_WORKS=ON \
@@ -199,47 +199,34 @@ LIBCXX_CMAKE_FLAGS = \
199199 -DLIBCXXABI_ENABLE_PIC:BOOL=$(2 ) \
200200 -DWASI_SDK_PREFIX=$(BUILD_PREFIX ) \
201201 -DUNIX:BOOL=ON \
202- --debug-trycompile
202+ --debug-trycompile \
203+ -DCMAKE_SYSROOT=$(BUILD_PREFIX ) /share/wasi-sysroot \
204+ -DCMAKE_C_FLAGS="$(DEBUG_PREFIX_MAP ) $(EXTRA_CFLAGS ) $(4 ) --target=$(3 ) " \
205+ -DCMAKE_CXX_FLAGS="$(DEBUG_PREFIX_MAP ) $(EXTRA_CXXFLAGS ) $(4 ) --target=$(3 ) " \
206+ -DLIBCXX_LIBDIR_SUFFIX=$(ESCAPE_SLASH ) /$(3 ) \
207+ -DLIBCXXABI_LIBDIR_SUFFIX=$(ESCAPE_SLASH ) /$(3 ) \
208+ -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" \
209+ $(LLVM_PROJ_DIR ) /runtimes
210+
211+ # Rules to build libcxx, factored out here to deduplicate the below
212+ # $(1): pthreads ON or OFF
213+ # $(2): shared libraries ON or OFF
214+ # $(3): the name of the target being built for
215+ define BUILD_LIBCXX
216+ mkdir -p build/libcxx-$(3 )
217+ cd build/libcxx-$(3 ) && cmake -G Ninja $(call LIBCXX_CMAKE_FLAGS,$(1 ) ,$(2 ) ,$(3 ) ,$(4 ) )
218+ ninja $(NINJA_FLAGS ) -C build/libcxx-$(3 )
219+ DESTDIR=$(DESTDIR ) ninja $(NINJA_FLAGS ) -C build/libcxx-$(3 ) install
220+ rm -rf $(BUILD_PREFIX ) /share/wasi-sysroot/include/$(3 ) /c++
221+ mv $(BUILD_PREFIX ) /share/wasi-sysroot/include/c++ $(BUILD_PREFIX ) /share/wasi-sysroot/include/$(3 ) /
222+ endef
203223
204224build/libcxx.BUILT : build/llvm.BUILT build/wasi-libc.BUILT
205- # Do the build.
206- mkdir -p build/libcxx-preview2
207- cd build/libcxx-preview2 && cmake -G Ninja $(call LIBCXX_CMAKE_FLAGS,OFF,ON) \
208- -DCMAKE_SYSROOT=$(BUILD_PREFIX ) /share/wasi-sysroot \
209- -DCMAKE_C_FLAGS=" $( DEBUG_PREFIX_MAP) $( EXTRA_CFLAGS) --target=wasm32-wasi-preview2" \
210- -DCMAKE_CXX_FLAGS=" $( DEBUG_PREFIX_MAP) $( EXTRA_CXXFLAGS) --target=wasm32-wasi-preview2" \
211- -DLIBCXX_LIBDIR_SUFFIX=$(ESCAPE_SLASH ) /wasm32-wasi-preview2 \
212- -DLIBCXXABI_LIBDIR_SUFFIX=$(ESCAPE_SLASH ) /wasm32-wasi-preview2 \
213- -DLLVM_ENABLE_RUNTIMES=" libcxx;libcxxabi" \
214- $(LLVM_PROJ_DIR ) /runtimes
215- ninja $(NINJA_FLAGS ) -C build/libcxx-preview2
216- mkdir -p build/libcxx
217- cd build/libcxx && cmake -G Ninja $(call LIBCXX_CMAKE_FLAGS,OFF,ON) \
218- -DCMAKE_SYSROOT=$(BUILD_PREFIX ) /share/wasi-sysroot \
219- -DCMAKE_C_FLAGS=" $( DEBUG_PREFIX_MAP) $( EXTRA_CFLAGS) --target=wasm32-wasi" \
220- -DCMAKE_CXX_FLAGS=" $( DEBUG_PREFIX_MAP) $( EXTRA_CXXFLAGS) --target=wasm32-wasi" \
221- -DLIBCXX_LIBDIR_SUFFIX=$(ESCAPE_SLASH ) /wasm32-wasi \
222- -DLIBCXXABI_LIBDIR_SUFFIX=$(ESCAPE_SLASH ) /wasm32-wasi \
223- -DLLVM_ENABLE_RUNTIMES=" libcxx;libcxxabi" \
224- $(LLVM_PROJ_DIR ) /runtimes
225- ninja $(NINJA_FLAGS ) -C build/libcxx
226- mkdir -p build/libcxx-threads
227- cd build/libcxx-threads && cmake -G Ninja $(call LIBCXX_CMAKE_FLAGS,ON,OFF) \
228- -DCMAKE_SYSROOT=$(BUILD_PREFIX ) /share/wasi-sysroot \
229- -DCMAKE_C_FLAGS=" $( DEBUG_PREFIX_MAP) -pthread $( EXTRA_CFLAGS) --target=wasm32-wasi-threads" \
230- -DCMAKE_CXX_FLAGS=" $( DEBUG_PREFIX_MAP) -pthread $( EXTRA_CXXFLAGS) --target=wasm32-wasi-threads" \
231- -DLIBCXX_LIBDIR_SUFFIX=$(ESCAPE_SLASH ) /wasm32-wasi-threads \
232- -DLIBCXXABI_LIBDIR_SUFFIX=$(ESCAPE_SLASH ) /wasm32-wasi-threads \
233- -DLLVM_ENABLE_RUNTIMES=" libcxx;libcxxabi" \
234- $(LLVM_PROJ_DIR ) /runtimes
235- ninja $(NINJA_FLAGS ) -C build/libcxx-threads
236- # Do the install.
237- DESTDIR=$(DESTDIR ) ninja $(NINJA_FLAGS ) -C build/libcxx-preview2 install
238- mv $(BUILD_PREFIX ) /share/wasi-sysroot/include/c++ $(BUILD_PREFIX ) /share/wasi-sysroot/include/wasm32-wasi-preview2/
239- DESTDIR=$(DESTDIR ) ninja $(NINJA_FLAGS ) -C build/libcxx install
240- mv $(BUILD_PREFIX ) /share/wasi-sysroot/include/c++ $(BUILD_PREFIX ) /share/wasi-sysroot/include/wasm32-wasi/
241- DESTDIR=$(DESTDIR ) ninja $(NINJA_FLAGS ) -C build/libcxx-threads install
242- mv $(BUILD_PREFIX ) /share/wasi-sysroot/include/c++ $(BUILD_PREFIX ) /share/wasi-sysroot/include/wasm32-wasi-threads/
225+ $(call BUILD_LIBCXX,OFF,ON,wasm32-wasi)
226+ $(call BUILD_LIBCXX,OFF,ON,wasm32-wasip1)
227+ $(call BUILD_LIBCXX,OFF,ON,wasm32-wasip2)
228+ $(call BUILD_LIBCXX,ON,OFF,wasm32-wasi-threads,-pthread)
229+ $(call BUILD_LIBCXX,ON,OFF,wasm32-wasip1-threads,-pthread)
243230 # As of this writing, `clang++` will ignore the above include dirs unless this one also exists:
244231 mkdir -p $(BUILD_PREFIX ) /share/wasi-sysroot/include/c++/v1
245232 touch build/libcxx.BUILT
0 commit comments