From 5631c7f661c79cfa94f1aeba5089340b45dc6b99 Mon Sep 17 00:00:00 2001 From: Matt McCormick Date: Tue, 7 Jan 2025 21:38:28 -0500 Subject: [PATCH] build(wasi): add pthread_atfork, pthread_attr_setscope shims For: wasm-ld: error: lto.tmp: undefined symbol: pthread_atfork wasm-ld: error: lto.tmp: undefined symbol: pthread_attr_setscope --- .../itk-wasm/ITKWebAssemblyInterface.cmake | 2 +- src/pthreadShim.c | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 src/pthreadShim.c diff --git a/src/docker/itk-wasm/ITKWebAssemblyInterface.cmake b/src/docker/itk-wasm/ITKWebAssemblyInterface.cmake index f856ddb1d..36aac0eb0 100644 --- a/src/docker/itk-wasm/ITKWebAssemblyInterface.cmake +++ b/src/docker/itk-wasm/ITKWebAssemblyInterface.cmake @@ -64,7 +64,7 @@ function(add_executable target) # WASI set_property(TARGET ${wasm_target} PROPERTY SUFFIX ".wasi.wasm") if (NOT TARGET wasi-itk-extras AND DEFINED CMAKE_CXX_COMPILE_OBJECT) - add_library(wasi-itk-extras STATIC /ITKWebAssemblyInterface/src/exceptionShim.cxx /ITKWebAssemblyInterface/src/cxaThreadAtExitShim.cxx /ITKWebAssemblyInterface/src/initialization.cxx) + add_library(wasi-itk-extras STATIC /ITKWebAssemblyInterface/src/exceptionShim.cxx /ITKWebAssemblyInterface/src/cxaThreadAtExitShim.cxx /ITKWebAssemblyInterface/src/posixShim.c /ITKWebAssemblyInterface/src/initialization.cxx) endif() get_property(_is_imported TARGET ${wasm_target} PROPERTY IMPORTED) if (NOT ${_is_imported}) diff --git a/src/pthreadShim.c b/src/pthreadShim.c new file mode 100644 index 000000000..ee2f7c2d8 --- /dev/null +++ b/src/pthreadShim.c @@ -0,0 +1,32 @@ +/*========================================================================= + * + * Copyright NumFOCUS + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0.txt + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *=========================================================================*/ +// Workaround for current lack of these functions in WASI. They are not +// implemented, and WASI does not have POSIX processes. + +#include + +int pthread_attr_setscope(pthread_attr_t *attr, int contentionscope) +{} + +int pthread_atfork( + void (*prepare)(void), // Called before fork + void (*parent)(void), // Called in parent after fork + void (*child)(void) // Called in child after fork +) +{} +