@@ -130,53 +130,61 @@ def should_install(self, host_target):
130130 return False
131131
132132 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 ))
134144
135- def _build (self , host_target , enable_wasi_threads = False ,
136- compiler_rt_os_dir = 'wasi' , target_triple = 'wasm32-wasi' ):
137145 build_root = os .path .dirname (self .build_dir )
138146 llvm_build_bin_dir = os .path .join (
139147 '..' , 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
142150
143151 cmake_has_threads = 'TRUE' if enable_wasi_threads else 'FALSE'
144152
145- self .cmake_options .define (
153+ cmake .cmake_options .define (
146154 'CMAKE_SYSROOT:PATH' ,
147155 WASILibc .sysroot_build_path (build_root , host_target , target_triple ))
148156 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 ))
151159
152160 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++' ))
180188
181189 c_flags = []
182190 # Explicitly disable exceptions even though it's usually implicitly disabled by
@@ -187,51 +195,45 @@ def _build(self, host_target, enable_wasi_threads=False,
187195 if enable_wasi_threads :
188196 c_flags .append ('-pthread' )
189197 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 (
227235 ["install" ], WASILibc .sysroot_install_path (build_root , target_triple ))
228236
229237 @classmethod
230238 def get_dependencies (cls ):
231239 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