@@ -130,53 +130,61 @@ def should_install(self, host_target):
130
130
return False
131
131
132
132
def build (self , host_target ):
133
- self ._build (host_target )
133
+ self ._build (host_target , enable_wasi_threads = False ,
134
+ compiler_rt_os_dir = 'wasi' , target_triple = 'wasm32-wasi' )
135
+ self ._build (host_target , enable_wasi_threads = True ,
136
+ compiler_rt_os_dir = 'wasip1' , target_triple = 'wasm32-wasip1-threads' )
137
+
138
+ def _build (self , host_target , enable_wasi_threads , compiler_rt_os_dir , target_triple ):
139
+ cmake = cmake_product .CMakeProduct (
140
+ args = self .args ,
141
+ toolchain = self .toolchain ,
142
+ source_dir = self .source_dir ,
143
+ build_dir = os .path .join (self .build_dir , target_triple ))
134
144
135
- def _build (self , host_target , enable_wasi_threads = False ,
136
- compiler_rt_os_dir = 'wasi' , target_triple = 'wasm32-wasi' ):
137
145
build_root = os .path .dirname (self .build_dir )
138
146
llvm_build_bin_dir = os .path .join (
139
147
'..' , build_root , '%s-%s' % ('llvm' , host_target ), 'bin' )
140
- llvm_tools_path = self .args .native_llvm_tools_path or llvm_build_bin_dir
141
- clang_tools_path = self .args .native_clang_tools_path or llvm_build_bin_dir
148
+ llvm_tools_path = cmake .args .native_llvm_tools_path or llvm_build_bin_dir
149
+ clang_tools_path = cmake .args .native_clang_tools_path or llvm_build_bin_dir
142
150
143
151
cmake_has_threads = 'TRUE' if enable_wasi_threads else 'FALSE'
144
152
145
- self .cmake_options .define (
153
+ cmake .cmake_options .define (
146
154
'CMAKE_SYSROOT:PATH' ,
147
155
WASILibc .sysroot_build_path (build_root , host_target , target_triple ))
148
156
enable_runtimes = ['libcxx' , 'libcxxabi' , 'compiler-rt' ]
149
- self .cmake_options .define ('LLVM_ENABLE_RUNTIMES:STRING' ,
150
- ';' .join (enable_runtimes ))
157
+ cmake .cmake_options .define ('LLVM_ENABLE_RUNTIMES:STRING' ,
158
+ ';' .join (enable_runtimes ))
151
159
152
160
libdir_suffix = '/' + target_triple
153
- self .cmake_options .define ('LIBCXX_LIBDIR_SUFFIX:STRING' , libdir_suffix )
154
- self .cmake_options .define ('LIBCXXABI_LIBDIR_SUFFIX:STRING' , libdir_suffix )
155
- self .cmake_options .define ('CMAKE_STAGING_PREFIX:PATH' , '/' )
156
-
157
- self .cmake_options .define ('COMPILER_RT_DEFAULT_TARGET_ARCH:STRING' , 'wasm32' )
158
- self .cmake_options .define ('COMPILER_RT_DEFAULT_TARGET_ONLY:BOOL' , 'TRUE' )
159
- self .cmake_options .define ('COMPILER_RT_BAREMETAL_BUILD:BOOL' , 'TRUE' )
160
- self .cmake_options .define ('COMPILER_RT_BUILD_XRAY:BOOL' , 'FALSE' )
161
- self .cmake_options .define ('COMPILER_RT_BUILD_PROFILE:BOOL' , 'TRUE' )
162
- self .cmake_options .define ('COMPILER_RT_INCLUDE_TESTS:BOOL' , 'FALSE' )
163
- self .cmake_options .define ('COMPILER_RT_HAS_FPIC_FLAG:BOOL' , 'FALSE' )
164
- self .cmake_options .define ('COMPILER_RT_EXCLUDE_ATOMIC_BUILTIN:BOOL' , 'FALSE' )
165
- self .cmake_options .define ('COMPILER_RT_OS_DIR:STRING' , compiler_rt_os_dir )
166
-
167
- self .cmake_options .define ('CMAKE_C_COMPILER_WORKS:BOOL' , 'TRUE' )
168
- self .cmake_options .define ('CMAKE_CXX_COMPILER_WORKS:BOOL' , 'TRUE' )
169
-
170
- self .cmake_options .define ('CMAKE_SYSTEM_NAME:STRING' , 'WASI' )
171
- self .cmake_options .define ('CMAKE_SYSTEM_PROCESSOR:STRING' , 'wasm32' )
172
- self .cmake_options .define ('CMAKE_AR:FILEPATH' ,
173
- os .path .join (llvm_tools_path , 'llvm-ar' ))
174
- self .cmake_options .define ('CMAKE_RANLIB:FILEPATH' ,
175
- os .path .join (llvm_tools_path , 'llvm-ranlib' ))
176
- self .cmake_options .define ('CMAKE_C_COMPILER:FILEPATH' ,
177
- os .path .join (clang_tools_path , 'clang' ))
178
- self .cmake_options .define ('CMAKE_CXX_COMPILER:STRING' ,
179
- os .path .join (clang_tools_path , 'clang++' ))
161
+ cmake .cmake_options .define ('LIBCXX_LIBDIR_SUFFIX:STRING' , libdir_suffix )
162
+ cmake .cmake_options .define ('LIBCXXABI_LIBDIR_SUFFIX:STRING' , libdir_suffix )
163
+ cmake .cmake_options .define ('CMAKE_STAGING_PREFIX:PATH' , '/' )
164
+
165
+ cmake .cmake_options .define ('COMPILER_RT_DEFAULT_TARGET_ARCH:STRING' , 'wasm32' )
166
+ cmake .cmake_options .define ('COMPILER_RT_DEFAULT_TARGET_ONLY:BOOL' , 'TRUE' )
167
+ cmake .cmake_options .define ('COMPILER_RT_BAREMETAL_BUILD:BOOL' , 'TRUE' )
168
+ cmake .cmake_options .define ('COMPILER_RT_BUILD_XRAY:BOOL' , 'FALSE' )
169
+ cmake .cmake_options .define ('COMPILER_RT_BUILD_PROFILE:BOOL' , 'TRUE' )
170
+ cmake .cmake_options .define ('COMPILER_RT_INCLUDE_TESTS:BOOL' , 'FALSE' )
171
+ cmake .cmake_options .define ('COMPILER_RT_HAS_FPIC_FLAG:BOOL' , 'FALSE' )
172
+ cmake .cmake_options .define ('COMPILER_RT_EXCLUDE_ATOMIC_BUILTIN:BOOL' , 'FALSE' )
173
+ cmake .cmake_options .define ('COMPILER_RT_OS_DIR:STRING' , compiler_rt_os_dir )
174
+
175
+ cmake .cmake_options .define ('CMAKE_C_COMPILER_WORKS:BOOL' , 'TRUE' )
176
+ cmake .cmake_options .define ('CMAKE_CXX_COMPILER_WORKS:BOOL' , 'TRUE' )
177
+
178
+ cmake .cmake_options .define ('CMAKE_SYSTEM_NAME:STRING' , 'WASI' )
179
+ cmake .cmake_options .define ('CMAKE_SYSTEM_PROCESSOR:STRING' , 'wasm32' )
180
+ cmake .cmake_options .define ('CMAKE_AR:FILEPATH' ,
181
+ os .path .join (llvm_tools_path , 'llvm-ar' ))
182
+ cmake .cmake_options .define ('CMAKE_RANLIB:FILEPATH' ,
183
+ os .path .join (llvm_tools_path , 'llvm-ranlib' ))
184
+ cmake .cmake_options .define ('CMAKE_C_COMPILER:FILEPATH' ,
185
+ os .path .join (clang_tools_path , 'clang' ))
186
+ cmake .cmake_options .define ('CMAKE_CXX_COMPILER:STRING' ,
187
+ os .path .join (clang_tools_path , 'clang++' ))
180
188
181
189
c_flags = []
182
190
# Explicitly disable exceptions even though it's usually implicitly disabled by
@@ -187,51 +195,45 @@ def _build(self, host_target, enable_wasi_threads=False,
187
195
if enable_wasi_threads :
188
196
c_flags .append ('-pthread' )
189
197
cxx_flags .append ('-pthread' )
190
- self .cmake_options .define ('CMAKE_C_FLAGS:STRING' , ' ' .join (c_flags ))
191
- self .cmake_options .define ('CMAKE_CXX_FLAGS:STRING' , ' ' .join (cxx_flags ))
192
-
193
- self .cmake_options .define ('CMAKE_C_COMPILER_TARGET:STRING' , target_triple )
194
- self .cmake_options .define ('CMAKE_CXX_COMPILER_TARGET:STRING' , target_triple )
195
-
196
- self .cmake_options .define ('CXX_SUPPORTS_CXX11:BOOL' , 'TRUE' )
197
-
198
- self .cmake_options .define ('LIBCXX_ENABLE_THREADS:BOOL' , cmake_has_threads )
199
- self .cmake_options .define ('LIBCXX_HAS_PTHREAD_API:BOOL' , cmake_has_threads )
200
- self .cmake_options .define ('LIBCXX_HAS_EXTERNAL_THREAD_API:BOOL' , 'FALSE' )
201
- self .cmake_options .define ('LIBCXX_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL' , 'FALSE' )
202
- self .cmake_options .define ('LIBCXX_HAS_WIN32_THREAD_API:BOOL' , 'FALSE' )
203
- self .cmake_options .define ('LIBCXX_ENABLE_SHARED:BOOL' , 'FALSE' )
204
- self .cmake_options .define ('LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY:BOOL' , 'FALSE' )
205
- self .cmake_options .define ('LIBCXX_ENABLE_EXCEPTIONS:BOOL' , 'FALSE' )
206
- self .cmake_options .define ('LIBCXX_ENABLE_FILESYSTEM:BOOL' , 'TRUE' )
207
- self .cmake_options .define ('LIBCXX_CXX_ABI' , 'libcxxabi' )
208
- self .cmake_options .define ('LIBCXX_HAS_MUSL_LIBC:BOOL' , 'TRUE' )
209
-
210
- self .cmake_options .define ('LIBCXX_ABI_VERSION' , '2' )
211
- self .cmake_options .define ('LIBCXXABI_ENABLE_EXCEPTIONS:BOOL' , 'FALSE' )
212
- self .cmake_options .define ('LIBCXXABI_ENABLE_SHARED:BOOL' , 'FALSE' )
213
- self .cmake_options .define ('LIBCXXABI_USE_LLVM_UNWINDER:BOOL' , 'FALSE' )
214
- self .cmake_options .define ('LIBCXXABI_SILENT_TERMINATE:BOOL' , 'TRUE' )
215
- self .cmake_options .define ('LIBCXXABI_ENABLE_THREADS:BOOL' , cmake_has_threads )
216
- self .cmake_options .define ('LIBCXXABI_HAS_PTHREAD_API:BOOL' , cmake_has_threads )
217
- self .cmake_options .define ('LIBCXXABI_HAS_EXTERNAL_THREAD_API:BOOL' , 'FALSE' )
218
- self .cmake_options .define ('LIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL' ,
219
- 'FALSE' )
220
- self .cmake_options .define ('LIBCXXABI_HAS_WIN32_THREAD_API:BOOL' , 'FALSE' )
221
- self .cmake_options .define ('LIBCXXABI_ENABLE_PIC:BOOL' , 'FALSE' )
222
- self .cmake_options .define ('UNIX:BOOL' , 'TRUE' )
223
-
224
- self .build_with_cmake ([], self .args .build_variant , [],
225
- prefer_native_toolchain = True )
226
- self .install_with_cmake (
198
+ cmake .cmake_options .define ('CMAKE_C_FLAGS:STRING' , ' ' .join (c_flags ))
199
+ cmake .cmake_options .define ('CMAKE_CXX_FLAGS:STRING' , ' ' .join (cxx_flags ))
200
+
201
+ cmake .cmake_options .define ('CMAKE_C_COMPILER_TARGET:STRING' , target_triple )
202
+ cmake .cmake_options .define ('CMAKE_CXX_COMPILER_TARGET:STRING' , target_triple )
203
+
204
+ cmake .cmake_options .define ('CXX_SUPPORTS_CXX11:BOOL' , 'TRUE' )
205
+
206
+ cmake .cmake_options .define ('LIBCXX_ENABLE_THREADS:BOOL' , cmake_has_threads )
207
+ cmake .cmake_options .define ('LIBCXX_HAS_PTHREAD_API:BOOL' , cmake_has_threads )
208
+ cmake .cmake_options .define ('LIBCXX_HAS_EXTERNAL_THREAD_API:BOOL' , 'FALSE' )
209
+ cmake .cmake_options .define ('LIBCXX_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL' , 'FALSE' )
210
+ cmake .cmake_options .define ('LIBCXX_HAS_WIN32_THREAD_API:BOOL' , 'FALSE' )
211
+ cmake .cmake_options .define ('LIBCXX_ENABLE_SHARED:BOOL' , 'FALSE' )
212
+ cmake .cmake_options .define ('LIBCXX_ENABLE_EXPERIMENTAL_LIBRARY:BOOL' , 'FALSE' )
213
+ cmake .cmake_options .define ('LIBCXX_ENABLE_EXCEPTIONS:BOOL' , 'FALSE' )
214
+ cmake .cmake_options .define ('LIBCXX_ENABLE_FILESYSTEM:BOOL' , 'TRUE' )
215
+ cmake .cmake_options .define ('LIBCXX_CXX_ABI' , 'libcxxabi' )
216
+ cmake .cmake_options .define ('LIBCXX_HAS_MUSL_LIBC:BOOL' , 'TRUE' )
217
+
218
+ cmake .cmake_options .define ('LIBCXX_ABI_VERSION' , '2' )
219
+ cmake .cmake_options .define ('LIBCXXABI_ENABLE_EXCEPTIONS:BOOL' , 'FALSE' )
220
+ cmake .cmake_options .define ('LIBCXXABI_ENABLE_SHARED:BOOL' , 'FALSE' )
221
+ cmake .cmake_options .define ('LIBCXXABI_USE_LLVM_UNWINDER:BOOL' , 'FALSE' )
222
+ cmake .cmake_options .define ('LIBCXXABI_SILENT_TERMINATE:BOOL' , 'TRUE' )
223
+ cmake .cmake_options .define ('LIBCXXABI_ENABLE_THREADS:BOOL' , cmake_has_threads )
224
+ cmake .cmake_options .define ('LIBCXXABI_HAS_PTHREAD_API:BOOL' , cmake_has_threads )
225
+ cmake .cmake_options .define ('LIBCXXABI_HAS_EXTERNAL_THREAD_API:BOOL' , 'FALSE' )
226
+ cmake .cmake_options .define ('LIBCXXABI_BUILD_EXTERNAL_THREAD_LIBRARY:BOOL' ,
227
+ 'FALSE' )
228
+ cmake .cmake_options .define ('LIBCXXABI_HAS_WIN32_THREAD_API:BOOL' , 'FALSE' )
229
+ cmake .cmake_options .define ('LIBCXXABI_ENABLE_PIC:BOOL' , 'FALSE' )
230
+ cmake .cmake_options .define ('UNIX:BOOL' , 'TRUE' )
231
+
232
+ cmake .build_with_cmake ([], cmake .args .build_variant , [],
233
+ prefer_native_toolchain = True )
234
+ cmake .install_with_cmake (
227
235
["install" ], WASILibc .sysroot_install_path (build_root , target_triple ))
228
236
229
237
@classmethod
230
238
def get_dependencies (cls ):
231
239
return [WASILibc , llvm .LLVM ]
232
-
233
-
234
- class WasmThreadsLLVMRuntimeLibs (WasmLLVMRuntimeLibs ):
235
- def build (self , host_target ):
236
- self ._build (host_target , enable_wasi_threads = True ,
237
- compiler_rt_os_dir = 'wasip1' , target_triple = 'wasm32-wasip1-threads' )
0 commit comments