@@ -107,26 +107,22 @@ build/llvm.BUILT:
107
107
llvm-config
108
108
touch build/llvm.BUILT
109
109
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
+
110
120
build/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
130
126
touch build/wasi-libc.BUILT
131
127
132
128
build/compiler-rt.BUILT : build/llvm.BUILT
@@ -156,11 +152,15 @@ build/compiler-rt.BUILT: build/llvm.BUILT
156
152
DESTDIR=$(DESTDIR ) ninja $(NINJA_FLAGS ) -C build/compiler-rt install
157
153
# Install clang-provided headers.
158
154
cp -R $(ROOT_DIR ) /build/llvm/lib/clang $(BUILD_PREFIX ) /lib/
155
+ cp -R $(BUILD_PREFIX ) /lib/clang/$(CLANG_VERSION ) /lib/wasi $(BUILD_PREFIX ) /lib/clang/$(CLANG_VERSION ) /lib/wasip1
156
+ cp -R $(BUILD_PREFIX ) /lib/clang/$(CLANG_VERSION ) /lib/wasi $(BUILD_PREFIX ) /lib/clang/$(CLANG_VERSION ) /lib/wasip2
159
157
touch build/compiler-rt.BUILT
160
158
161
159
# Flags for libcxx and libcxxabi.
162
160
# $(1): pthreads ON or OFF
163
161
# $(2): shared libraries ON or OFF
162
+ # $(3): the name of the target being built for
163
+ # $(4): extra compiler flags to pass
164
164
LIBCXX_CMAKE_FLAGS = \
165
165
-DCMAKE_C_COMPILER_WORKS=ON \
166
166
-DCMAKE_CXX_COMPILER_WORKS=ON \
@@ -199,47 +199,34 @@ LIBCXX_CMAKE_FLAGS = \
199
199
-DLIBCXXABI_ENABLE_PIC:BOOL=$(2 ) \
200
200
-DWASI_SDK_PREFIX=$(BUILD_PREFIX ) \
201
201
-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
203
223
204
224
build/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)
243
230
# As of this writing, `clang++` will ignore the above include dirs unless this one also exists:
244
231
mkdir -p $(BUILD_PREFIX ) /share/wasi-sysroot/include/c++/v1
245
232
touch build/libcxx.BUILT
0 commit comments