Skip to content

Commit d8f4fb0

Browse files
committed
build(docker): use dockcross/web-wasi-threads as base for itkwasm/wasi
1 parent 5babcf6 commit d8f4fb0

File tree

3 files changed

+55
-10
lines changed

3 files changed

+55
-10
lines changed

src/docker/itk-wasm-base/Dockerfile

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
ARG BASE_IMAGE=docker.io/dockcross/web-wasm
22
ARG HOST_ARCH=amd64
3-
FROM $BASE_IMAGE:20241229-8cdda7e-$HOST_ARCH
3+
FROM $BASE_IMAGE:20250107-aac97df-$HOST_ARCH
44
ARG BASE_IMAGE
55

66
LABEL maintainer="Matt McCormick [email protected]"
@@ -11,12 +11,12 @@ WORKDIR /
1111
COPY itk_wasm_env_vars.sh /
1212

1313
# Note: on entry, emsdk will prepend to the path with its own node, so add to an earlier path
14-
ENV NODE_TAG v22.9.0
14+
ENV NODE_TAG=v22.9.0
1515
COPY install-node-js.sh /usr/local/bin/
1616
RUN /usr/local/bin/install-node-js.sh && rm /usr/local/bin/install-node-js.sh
17-
ENV PATH /emsdk/upstream/emscripten:${PATH}
17+
ENV PATH=/emsdk/upstream/emscripten:${PATH}
1818

19-
ENV zstd_GIT_TAG v1.5.5
19+
ENV zstd_GIT_TAG=v1.5.5
2020
RUN curl -L https://github.com/api/repos/facebook/zstd/tarball/${zstd_GIT_TAG} | tar xz --strip=1 --one-top-level=zstd && \
2121
mkdir zstd-build && \
2222
cd zstd-build && \
@@ -51,6 +51,8 @@ ARG CXXFLAGS
5151
ENV LDFLAGS=${LDFLAGS:-"-flto -s ALLOW_MEMORY_GROWTH=1 -s MAXIMUM_MEMORY=4GB"}
5252
ENV CFLAGS=${CFLAGS:-"-msimd128 -flto -Wno-warn-absolute-paths -DITK_WASM_NO_FILESYSTEM_IO"}
5353
ENV CXXFLAGS=${CXXFLAGS:-"${CFLAGS}"}
54+
# Add our flags to the toolchain file
55+
COPY ./wasi-sdk-pthread-itkwasm.cmake /opt/wasi-sdk/share/cmake/wasi-sdk-pthread.cmake
5456

5557
RUN mkdir ITK-build && \
5658
cd ITK-build && \
@@ -92,7 +94,7 @@ RUN mkdir ITK-build && \
9294
find . -name '*.o' -delete && \
9395
cd .. && chmod -R 777 ITK-build
9496

95-
ENV ITKMeshToPolyData_GIT_TAG 1e594b7437a43be348b0ccea827c66fb5aa13e1f
97+
ENV ITKMeshToPolyData_GIT_TAG=1e594b7437a43be348b0ccea827c66fb5aa13e1f
9698
RUN git clone https://github.com/InsightSoftwareConsortium/ITKMeshToPolyData.git && \
9799
cd ITKMeshToPolyData && \
98100
git checkout ${ITKMeshToPolyData_GIT_TAG} && \
@@ -124,5 +126,5 @@ LABEL org.label-schema.build-date=$BUILD_DATE \
124126
org.label-schema.vcs-ref=$VCS_REF \
125127
org.label-schema.vcs-url=$VCS_URL \
126128
org.label-schema.schema-version="1.0"
127-
ENV DEFAULT_DOCKCROSS_IMAGE ${IMAGE}:${VERSION}
129+
ENV DEFAULT_DOCKCROSS_IMAGE=${IMAGE}:${VERSION}
128130
WORKDIR /work

src/docker/itk-wasm-base/build.sh

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ for param; do
3030
done
3131
set -- "${newparams[@]}" # overwrites the original positional params
3232

33+
# Note: also need to set in wasi-sdk-pthread-itkwasm.cmake
3334
wasi_ld_flags="-flto -lwasi-emulated-process-clocks -lwasi-emulated-signal -lc-printscan-long-double"
3435
wasi_c_flags="-flto -msimd128 -D_WASI_EMULATED_PROCESS_CLOCKS -D_WASI_EMULATED_SIGNAL"
3536

@@ -67,7 +68,7 @@ if $wasi; then
6768
--build-arg VCS_REF=${VCS_REF} \
6869
--build-arg VCS_URL=${VCS_URL} \
6970
--build-arg BUILD_DATE=${BUILD_DATE} \
70-
--build-arg BASE_IMAGE=docker.io/dockcross/web-wasi \
71+
--build-arg BASE_IMAGE=docker.io/dockcross/web-wasi-threads \
7172
--build-arg LDFLAGS="${wasi_ld_flags}" \
7273
--build-arg CFLAGS="${wasi_c_flags}" \
7374
$script_dir $@
@@ -80,7 +81,7 @@ if $wasi; then
8081
--build-arg VCS_REF=${VCS_REF} \
8182
--build-arg VCS_URL=${VCS_URL} \
8283
--build-arg BUILD_DATE=${BUILD_DATE} \
83-
--build-arg BASE_IMAGE=docker.io/dockcross/web-wasi \
84+
--build-arg BASE_IMAGE=docker.io/dockcross/web-wasi-threads \
8485
--build-arg LDFLAGS="${wasi_ld_flags}" \
8586
--build-arg CFLAGS="${wasi_c_flags}" \
8687
$script_dir $@
@@ -122,7 +123,7 @@ if $debug; then
122123
--build-arg VCS_REF=${VCS_REF} \
123124
--build-arg VCS_URL=${VCS_URL} \
124125
--build-arg BUILD_DATE=${BUILD_DATE} \
125-
--build-arg BASE_IMAGE=docker.io/dockcross/web-wasi \
126+
--build-arg BASE_IMAGE=docker.io/dockcross/web-wasi-threads \
126127
--build-arg LDFLAGS="${wasi_debug_ld_flags}" \
127128
--build-arg CFLAGS="${wasi_debug_c_flags}" \
128129
$script_dir $@
@@ -135,7 +136,7 @@ if $debug; then
135136
--build-arg VCS_REF=${VCS_REF} \
136137
--build-arg VCS_URL=${VCS_URL} \
137138
--build-arg BUILD_DATE=${BUILD_DATE} \
138-
--build-arg BASE_IMAGE=docker.io/dockcross/web-wasi \
139+
--build-arg BASE_IMAGE=docker.io/dockcross/web-wasi-threads \
139140
--build-arg LDFLAGS="${wasi_debug_ld_flags}" \
140141
--build-arg CFLAGS="${wasi_debug_c_flags}" \
141142
$script_dir $@
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# Cmake toolchain description file for the Makefile
2+
3+
set(CMAKE_SYSTEM_NAME WASI)
4+
set(CMAKE_SYSTEM_VERSION 1)
5+
set(CMAKE_SYSTEM_PROCESSOR wasm32)
6+
set(triple wasm32-wasi-threads)
7+
set(CMAKE_C_FLAGS "-pthread -matomics -mbulk-memory -flto -msimd128 -D_WASI_EMULATED_PROCESS_CLOCKS -D_WASI_EMULATED_SIGNAL ${CMAKE_C_FLAGS}")
8+
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_CXX_FLAGS}")
9+
# wasi-threads requires --import-memory.
10+
# wasi requires --export-memory.
11+
# (--export-memory is implicit unless --import-memory is given)
12+
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--import-memory ${CMAKE_EXE_LINKER_FLAGS}")
13+
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--export-memory ${CMAKE_EXE_LINKER_FLAGS}")
14+
# ITK-Wasm
15+
set(CMAKE_EXE_LINKER_FLAGS "-flto -lwasi-emulated-process-clocks -lwasi-emulated-signal -lc-printscan-long-double ${CMAKE_EXE_LINKER_FLAGS}")
16+
17+
if(WIN32)
18+
set(WASI_HOST_EXE_SUFFIX ".exe")
19+
else()
20+
set(WASI_HOST_EXE_SUFFIX "")
21+
endif()
22+
23+
# When building from source, WASI_SDK_PREFIX represents the generated directory
24+
if(NOT WASI_SDK_PREFIX)
25+
set(WASI_SDK_PREFIX ${CMAKE_CURRENT_LIST_DIR}/../../)
26+
endif()
27+
28+
set(CMAKE_C_COMPILER ${WASI_SDK_PREFIX}/bin/clang${WASI_HOST_EXE_SUFFIX})
29+
set(CMAKE_CXX_COMPILER ${WASI_SDK_PREFIX}/bin/clang++${WASI_HOST_EXE_SUFFIX})
30+
set(CMAKE_ASM_COMPILER ${WASI_SDK_PREFIX}/bin/clang${WASI_HOST_EXE_SUFFIX})
31+
set(CMAKE_AR ${WASI_SDK_PREFIX}/bin/llvm-ar${WASI_HOST_EXE_SUFFIX})
32+
set(CMAKE_RANLIB ${WASI_SDK_PREFIX}/bin/llvm-ranlib${WASI_HOST_EXE_SUFFIX})
33+
set(CMAKE_C_COMPILER_TARGET ${triple})
34+
set(CMAKE_CXX_COMPILER_TARGET ${triple})
35+
set(CMAKE_ASM_COMPILER_TARGET ${triple})
36+
37+
# Don't look in the sysroot for executables to run during the build
38+
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
39+
# Only look in the sysroot (not in the host paths) for the rest
40+
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
41+
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
42+
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

0 commit comments

Comments
 (0)