Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ type: software
authors:
- given-names: Matthew
family-names: McCormick
email: matt@mmmccormick.com
email: matt@fideus.io
affiliation: 'Kitware, Inc'
orcid: 'https://orcid.org/0000-0001-9475-3756'
keywords:
Expand Down
10 changes: 5 additions & 5 deletions examples/debugging/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,18 @@
"build": "npm run native-build && npm run emscripten-build-release && npm run emscripten-build-debug && npm run wasi-build-release && npm run wasi-build-debug",
"native-build": "cmake -Bbuild -S. -DCMAKE_BUILD_TYPE=Debug && cmake --build build/ --config Debug",
"native-debug-linux": "gdb --args ./build/DebugMe",
"emscripten-build-release": "itk-wasm -i quay.io/itkwasm/emscripten:latest --build-dir emscripten-build-release build",
"emscripten-build-release": "itk-wasm -i docker.io/itkwasm/emscripten:latest --build-dir emscripten-build-release build",
"run-node-release": "node ./runEmscriptenNode.js ./emscripten-build-release/DebugMe",
"emscripten-build-debug": "itk-wasm -i quay.io/itkwasm/emscripten:latest-debug --build-dir emscripten-build-debug build -- -DCMAKE_BUILD_TYPE=Debug",
"emscripten-build-debug": "itk-wasm -i docker.io/itkwasm/emscripten:latest-debug --build-dir emscripten-build-debug build -- -DCMAKE_BUILD_TYPE=Debug",
"run-node-debug": "node ./runEmscriptenNode.js ./emscripten-build-debug/DebugMe",
"wasi-build-release": "itk-wasm -i quay.io/itkwasm/wasi:latest --build-dir wasi-build-release build",
"wasi-build-release": "itk-wasm -i docker.io/itkwasm/wasi:latest --build-dir wasi-build-release build",
"node-inspect": "node --inspect-brk ./runEmscriptenNode.js ./emscripten-build-debug/DebugMe",
"wasi-build-debug": "itk-wasm -i quay.io/itkwasm/wasi:latest-debug --build-dir wasi-build-debug build -- -DCMAKE_BUILD_TYPE=Debug",
"wasi-build-debug": "itk-wasm -i docker.io/itkwasm/wasi:latest-debug --build-dir wasi-build-debug build -- -DCMAKE_BUILD_TYPE=Debug",
"run-wasi-debug": "itk-wasm --build-dir wasi-build-debug run DebugMe.wasi.wasm",
"start": "http-server -o"
},
"type": "module",
"author": "Matt McCormick <matt@mmmccormick.com>",
"author": "Matt McCormick <matt@fideus.io>",
"license": "Apache-2.0",
"dependencies": {
"http-server": "^14.1.0",
Expand Down
4 changes: 2 additions & 2 deletions examples/different-input-types/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@
"type": "module",
"scripts": {
"build": "pnpm run build:wasi",
"build:wasi": "itk-wasm -b wasi-build -i quay.io/itkwasm/wasi:latest build",
"build:wasi": "itk-wasm -b wasi-build -i docker.io/itkwasm/wasi:latest build",
"test": "pnpm run test:wasi",
"test:wasi": "itk-wasm -b wasi-build run different-input-types.wasi.wasm -- ./Gourds.png label.png overlay.png",
"test:wasi:help": "itk-wasm -b wasi-build run different-input-types.wasi.wasm -- --help"
},
"author": "Matt McCormick <matt@mmmccormick.com>",
"author": "Matt McCormick <matt@fideus.io>",
"license": "Apache-2.0",
"dependencies": {
"itk-wasm": "workspace:^"
Expand Down
2 changes: 1 addition & 1 deletion examples/hello-pipeline/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"test:quiet": "itk-wasm run wasi-build/hello-pipeline.wasi.wasm -- --quiet cthead1.png",
"test:help": "itk-wasm run wasi-build/hello-pipeline.wasi.wasm -- --help"
},
"author": "Matt McCormick <matt@mmmccormick.com>",
"author": "Matt McCormick <matt@fideus.io>",
"license": "Apache-2.0",
"dependencies": {
"fs-extra": "^10.0.0",
Expand Down
4 changes: 2 additions & 2 deletions examples/hello-world/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"type": "module",
"scripts": {
"build": "pnpm run build:wasi && pnpm run build:emscripten",
"build:wasi": "itk-wasm -i quay.io/itkwasm/wasi:latest build",
"build:wasi": "itk-wasm -i docker.io/itkwasm/wasi:latest build",
"build:emscripten": "itk-wasm build",
"test": "pnpm run test:wasi && pnpm run test:node && pnpm run test:browser",
"test:wasi": "pnpx itk-wasm run wasi-build/hello.wasi.wasm",
Expand All @@ -15,7 +15,7 @@
"test:browser": "playwright test",
"test:browser:debug": "playwright test --debug"
},
"author": "Matt McCormick <matt@mmmccormick.com>",
"author": "Matt McCormick <matt@fideus.io>",
"license": "Apache-2.0",
"dependencies": {
"fs-extra": "^11.1.0",
Expand Down
6 changes: 3 additions & 3 deletions examples/inputs-outputs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
"description": "An itk-wasm pipeline example for inputs/outputs",
"type": "module",
"itk-wasm": {
"emscripten-docker-image": "quay.io/itkwasm/emscripten:latest",
"wasi-docker-image": "quay.io/itkwasm/wasi:latest",
"emscripten-docker-image": "docker.io/itkwasm/emscripten:latest",
"wasi-docker-image": "docker.io/itkwasm/wasi:latest",
"typescript-package-name": "@itk-wasm/inputs-outputs-example",
"python-package-name": "itkwasm-inputs-outputs-example",
"package-description": "An example that has non-trivial inputs and outputs.",
Expand Down Expand Up @@ -38,7 +38,7 @@
"test:wasi": "itk-wasm -i itkwasm/wasi:latest -b wasi-build run inputs-outputs.wasi.wasm -- -- cthead1.png smoothed.png",
"test:wasi:help": "itk-wasm -i itkwasm/wasi:latest -b wasi-build run inputs-outputs.wasi.wasm -- -- --help"
},
"author": "Matt McCormick <matt@mmmccormick.com>",
"author": "Matt McCormick <matt@fideus.io>",
"license": "Apache-2.0",
"devDependencies": {
"@itk-wasm/image-io": "workspace:^",
Expand Down
6 changes: 3 additions & 3 deletions examples/mean-squares-versor-registration/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
"description": "Illustrate the use of the VersorRigid3DTransform for 3D image registration.",
"type": "module",
"itk-wasm": {
"emscripten-docker-image": "quay.io/itkwasm/emscripten:latest",
"wasi-docker-image": "quay.io/itkwasm/wasi:latest",
"emscripten-docker-image": "docker.io/itkwasm/emscripten:latest",
"wasi-docker-image": "docker.io/itkwasm/wasi:latest",
"typescript-package-name": "@itk-wasm/mean-squares-versor-registration-example",
"python-package-name": "itkwasm-mean-squares-versor-registration-example",
"package-description": "Example 3D versor transform registration with a mean-squares similarity metric",
Expand Down Expand Up @@ -38,7 +38,7 @@
"test:wasi:long": "itk-wasm test -- -- -V",
"test:wasi:help": "itk-wasm -i itkwasm/wasi:latest run mean-squares-versor-registration.wasi.wasm -- -- --help"
},
"author": "Matt McCormick <matt@mmmccormick.com>",
"author": "Matt McCormick <matt@fideus.io>",
"license": "Apache-2.0",
"devDependencies": {
"@itk-wasm/image-io": "workspace:^",
Expand Down
20 changes: 20 additions & 0 deletions include/itkPipeline.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,13 @@
#include "itkMacro.h"
#include "itkImage.h"
#include "itkVectorImage.h"
#include "itkConfigure.h"
#if defined(ITK_USE_PTHREADS) || defined(ITK_USE_WIN32_THREADS)
#define ITK_WASM_PIPELINE_USE_THREADS 1
#endif
#ifdef ITK_WASM_PIPELINE_USE_THREADS
#include "itkMultiThreaderBase.h"
#endif

#include "glaze/glaze.hpp"

Expand Down Expand Up @@ -164,6 +171,16 @@ class WebAssemblyInterface_EXPORT Pipeline : public CLI::App
return m_UseMemoryIO;
}

int
get_threads() const
{
#ifdef ITK_WASM_PIPELINE_USE_THREADS
return m_Threads;
#else
return 1;
#endif
}

int
get_argc() const
{
Expand Down Expand Up @@ -198,6 +215,9 @@ class WebAssemblyInterface_EXPORT Pipeline : public CLI::App
int m_argc;
char ** m_argv;
std::string m_Version;
#ifdef ITK_WASM_PIPELINE_USE_THREADS
int m_Threads;
#endif
};


Expand Down
4 changes: 2 additions & 2 deletions packages/compare-images/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
"description": "@itk-wasm/compare-stringify build configuration",
"type": "module",
"itk-wasm": {
"emscripten-docker-image": "quay.io/itkwasm/emscripten:latest",
"wasi-docker-image": "quay.io/itkwasm/wasi:latest",
"emscripten-docker-image": "docker.io/itkwasm/emscripten:latest",
"wasi-docker-image": "docker.io/itkwasm/wasi:latest",
"test-data-hash": "bafybeiafli6egtmkcgany65po64w67hpqnmgwr5utqo6ycbbz7k5l33llu",
"test-data-urls": [
"https://github.com/InsightSoftwareConsortium/ITK-Wasm/releases/download/itk-wasm-v1.0.0-b.171/compare-images-test-data.tar.gz"
Expand Down
2 changes: 1 addition & 1 deletion packages/compare-images/pixi.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[project]
authors = ["Matt McCormick <matt@mmmccormick.com>"]
authors = ["Matt McCormick <matt@fideus.io>"]
channels = ["conda-forge"]
description = "Compare images with a tolerance for regression testing."
name = "compare-images"
Expand Down
4 changes: 2 additions & 2 deletions packages/compare-meshes/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
"description": "@itk-wasm/compare-meshes build configuration.",
"type": "module",
"itk-wasm": {
"emscripten-docker-image": "quay.io/itkwasm/emscripten:latest",
"wasi-docker-image": "quay.io/itkwasm/wasi:latest",
"emscripten-docker-image": "docker.io/itkwasm/emscripten:latest",
"wasi-docker-image": "docker.io/itkwasm/wasi:latest",
"test-data-hash": "bafkreibsonywg3w3gscmookip3elsyydfsn2cbubk6dukatkmjgeguhiri",
"test-data-urls": [
"https://github.com/InsightSoftwareConsortium/ITK-Wasm/releases/download/itk-wasm-v1.0.0-b.178/compare-meshes-data.tar.gz"
Expand Down
2 changes: 1 addition & 1 deletion packages/compare-meshes/pixi.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[project]
authors = ["Matt McCormick <matt@mmmccormick.com>"]
authors = ["Matt McCormick <matt@fideus.io>"]
channels = ["conda-forge"]
description = "Compare meshes with a tolerance for regression testing."
name = "compare-meshes"
Expand Down
4 changes: 2 additions & 2 deletions packages/compress-stringify/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
"description": "@itk-wasm/compare-stringify build configuration.",
"type": "module",
"itk-wasm": {
"emscripten-docker-image": "quay.io/itkwasm/emscripten:latest",
"wasi-docker-image": "quay.io/itkwasm/wasi:latest",
"emscripten-docker-image": "docker.io/itkwasm/emscripten:latest",
"wasi-docker-image": "docker.io/itkwasm/wasi:latest",
"test-data-hash": "bafkreiha6oye3fd5cxfadnua5r2jlkaco2xuyeek454d2ihiffsx7rauqe",
"test-data-urls": [
"https://placeholder"
Expand Down
2 changes: 1 addition & 1 deletion packages/compress-stringify/pixi.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[project]
authors = ["Matt McCormick <matt@mmmccormick.com>"]
authors = ["Matt McCormick <matt@fideus.io>"]
channels = ["conda-forge"]
description = "Zstandard compression and decompression and base64 encoding and decoding in WebAssembly."
name = "compress-stringify"
Expand Down
18 changes: 9 additions & 9 deletions packages/core/typescript/itk-wasm/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,15 @@
"test:lint": "ts-standard --fix \"src/**/*.ts\" && standard --fix \"test/node/**/*.js\"",
"test:node": "ava test/node/**/*.js",
"test:testPipelines": "pnpm test:buildTestPipelines:emscripten && pnpm test:buildTestPipelines:wasi && pnpm test:runTestPipelines",
"test:buildTestPipelines:emscripten:debug": "node src/itk-wasm-cli.js -i quay.io/itkwasm/emscripten:latest-debug -b emscripten-build -s ./test/pipelines build -- -DCMAKE_BUILD_TYPE=Debug",
"test:buildTestPipelines:emscripten": "node src/itk-wasm-cli.js -i quay.io/itkwasm/emscripten:latest -b emscripten-build -s ./test/pipelines build",
"test:buildTestPipelines:emscriptenThreads:debug": "node src/itk-wasm-cli.js -i quay.io/itkwasm/emscripten:latest-threads-debug -b emscripten-threads-build -s ./test/pipelines build -- -DCMAKE_BUILD_TYPE=Debug",
"test:buildTestPipelines:emscriptenThreads": "node src/itk-wasm-cli.js -i quay.io/itkwasm/emscripten:latest-threads -b emscripten-threads-build -s ./test/pipelines build",
"test:buildTestPipelines:wasi": "node src/itk-wasm-cli.js -i quay.io/itkwasm/wasi:latest -b wasi-build -s ./test/pipelines build",
"test:buildTestPipelines:wasi:debug": "node src/itk-wasm-cli.js -i quay.io/itkwasm/wasi:latest-debug -b wasi-build -s ./test/pipelines build -- -DCMAKE_BUILD_TYPE=Debug",
"test:runTestPipelines": "node src/itk-wasm-cli.js -i quay.io/itkwasm/wasi:latest -b wasi-build -s ./test/pipelines run -r wasmtime stdout-stderr-pipeline/stdout-stderr-test.wasi.wasm",
"test:bindgenTestPipelines:typescript": "node src/itk-wasm-cli.js -i quay.io/itkwasm/emscripten:latest -b emscripten-build -s ./test/pipelines/ bindgen --package-version 1.0.0 --package-name test-pipelines --package-description \"Exercise interface types for bindgen\"",
"test:bindgenTestPipelines:python": "node src/itk-wasm-cli.js -i quay.io/itkwasm/wasi:latest -b wasi-build -s ./test/pipelines/ bindgen --interface python --package-version 1.0.0 --package-name test-pipelines --package-description \"Exercise interface types for bindgen\"",
"test:buildTestPipelines:emscripten:debug": "node src/itk-wasm-cli.js -i docker.io/itkwasm/emscripten:latest-debug -b emscripten-build -s ./test/pipelines build -- -DCMAKE_BUILD_TYPE=Debug",
"test:buildTestPipelines:emscripten": "node src/itk-wasm-cli.js -i docker.io/itkwasm/emscripten:latest -b emscripten-build -s ./test/pipelines build",
"test:buildTestPipelines:emscriptenThreads:debug": "node src/itk-wasm-cli.js -i docker.io/itkwasm/emscripten:latest-threads-debug -b emscripten-threads-build -s ./test/pipelines build -- -DCMAKE_BUILD_TYPE=Debug",
"test:buildTestPipelines:emscriptenThreads": "node src/itk-wasm-cli.js -i docker.io/itkwasm/emscripten:latest-threads -b emscripten-threads-build -s ./test/pipelines build",
"test:buildTestPipelines:wasi": "node src/itk-wasm-cli.js -i docker.io/itkwasm/wasi:latest -b wasi-build -s ./test/pipelines build",
"test:buildTestPipelines:wasi:debug": "node src/itk-wasm-cli.js -i docker.io/itkwasm/wasi:latest-debug -b wasi-build -s ./test/pipelines build -- -DCMAKE_BUILD_TYPE=Debug",
"test:runTestPipelines": "node src/itk-wasm-cli.js -i docker.io/itkwasm/wasi:latest -b wasi-build -s ./test/pipelines run -r wasmtime stdout-stderr-pipeline/stdout-stderr-test.wasi.wasm",
"test:bindgenTestPipelines:typescript": "node src/itk-wasm-cli.js -i docker.io/itkwasm/emscripten:latest -b emscripten-build -s ./test/pipelines/ bindgen --package-version 1.0.0 --package-name test-pipelines --package-description \"Exercise interface types for bindgen\"",
"test:bindgenTestPipelines:python": "node src/itk-wasm-cli.js -i docker.io/itkwasm/wasi:latest -b wasi-build -s ./test/pipelines/ bindgen --interface python --package-version 1.0.0 --package-name test-pipelines --package-description \"Exercise interface types for bindgen\"",
"test:browser": "playwright test",
"test:browser:ui": "playwright test --ui",
"test:browser:debug": "playwright test --debug",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
const defaultImageTag = '20250813-cd217d20'
const defaultImageTag = '20250902-fb36664b'
export default defaultImageTag
92 changes: 46 additions & 46 deletions packages/core/typescript/itk-wasm/src/cli/find-oci-exe.js
Original file line number Diff line number Diff line change
@@ -1,46 +1,46 @@
import fs from 'fs'
import path from 'path'
import os from 'os'
import chalk from 'chalk'
import die from './die.js'
function findOciExe() {
// Check for OCI_EXE environmental variable
const ociExe = process.env.OCI_EXE
if (ociExe && fs.existsSync(ociExe)) {
return ociExe
}
// Get the PATH environment variable
const PATH = process.env.PATH.split(path.delimiter)
// Check for podman executable
const podmanExe = os.platform() === 'win32' ? 'podman.exe' : 'podman'
for (let p of PATH) {
if (fs.existsSync(path.join(p, podmanExe))) {
return podmanExe
}
}
// Check for docker executable
const dockerExe = os.platform() === 'win32' ? 'docker.exe' : 'docker'
for (let p of PATH) {
if (fs.existsSync(path.join(p, dockerExe))) {
return dockerExe
}
}
// If none of the above exist, die
die(`${chalk.magenta(`Could not find podman or docker executable in the
PATH or OCI_EXE environmental variables.`)}
${chalk.blue(`Please find installation instructions at:
https://podman.io/docs/installation`)}
`)
}
export default findOciExe
import fs from 'fs'
import path from 'path'
import os from 'os'

import chalk from 'chalk'

import die from './die.js'

function findOciExe() {
// Check for OCI_EXE environmental variable
const ociExe = process.env.OCI_EXE
if (ociExe) {
return ociExe
}

// Get the PATH environment variable
const PATH = process.env.PATH.split(path.delimiter)

// Check for podman executable
const podmanExe = os.platform() === 'win32' ? 'podman.exe' : 'podman'
for (let p of PATH) {
if (fs.existsSync(path.join(p, podmanExe))) {
return podmanExe
}
}

// Check for docker executable
const dockerExe = os.platform() === 'win32' ? 'docker.exe' : 'docker'
for (let p of PATH) {
if (fs.existsSync(path.join(p, dockerExe))) {
return dockerExe
}
}

// If none of the above exist, die
die(`${chalk.magenta(`Could not find podman or docker executable in the
PATH or OCI_EXE environmental variables.`)}

${chalk.blue(`Please find installation instructions at:

https://podman.io/docs/installation`)}

`)
}

export default findOciExe
12 changes: 6 additions & 6 deletions packages/core/typescript/itk-wasm/src/cli/pnpm-script.js
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ async function pnpmScript(name, extraArgs, options) {
options,
packageJson,
undefined
) ?? `quay.io/itkwasm/emscripten:${defaultImageTag}`
) ?? `docker.io/itkwasm/emscripten:${defaultImageTag}`
pnpmCommand = pnpmCommand.concat(['-i', emscriptenDockerImage])
}
break
Expand All @@ -109,7 +109,7 @@ async function pnpmScript(name, extraArgs, options) {
options,
packageJson,
undefined
) ?? `quay.io/itkwasm/emscripten:${defaultImageTag}`
) ?? `docker.io/itkwasm/emscripten:${defaultImageTag}`
// Currently, we expect the debug docker image to be tagged with -debug
pnpmCommand = pnpmCommand.concat([
'-i',
Expand All @@ -126,7 +126,7 @@ async function pnpmScript(name, extraArgs, options) {
pnpmCommand = pnpmCommand.concat(['itk-wasm', 'build'])
const wasiDockerImage =
configValue('wasi-docker-image', options, packageJson, undefined) ??
`quay.io/itkwasm/wasi:${defaultImageTag}`
`docker.io/itkwasm/wasi:${defaultImageTag}`
pnpmCommand = pnpmCommand.concat(['-i', wasiDockerImage])
}
break
Expand All @@ -135,7 +135,7 @@ async function pnpmScript(name, extraArgs, options) {
pnpmCommand = pnpmCommand.concat(['itk-wasm', 'build'])
const wasiDockerImage =
configValue('wasi-docker-image', options, packageJson, undefined) ??
`quay.io/itkwasm/wasi:${defaultImageTag}`
`docker.io/itkwasm/wasi:${defaultImageTag}`
// Currently, we expect the debug docker image to be tagged with -debug
pnpmCommand = pnpmCommand.concat(['-i', `${wasiDockerImage}-debug`])
pnpmCommand = pnpmCommand.concat([
Expand Down Expand Up @@ -203,7 +203,7 @@ async function pnpmScript(name, extraArgs, options) {
options,
packageJson,
undefined
) ?? `quay.io/itkwasm/emscripten:${defaultImageTag}`
) ?? `docker.io/itkwasm/emscripten:${defaultImageTag}`
const packageDescription = configValue(
'package-description',
options,
Expand Down Expand Up @@ -262,7 +262,7 @@ async function pnpmScript(name, extraArgs, options) {
)
const wasiDockerImage =
configValue('wasi-docker-image', options, packageJson, undefined) ??
`quay.io/itkwasm/wasi:${defaultImageTag}`
`docker.io/itkwasm/wasi:${defaultImageTag}`
pnpmCommand = pnpmCommand.concat([
'itk-wasm',
'-b',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@ function processCommonOptions(program, wasiDefault = false) {

const ociExePath = findOciExe()

let dockerImage = `quay.io/itkwasm/emscripten:${defaultImageTag}`
let dockerImage = `docker.io/itkwasm/emscripten:${defaultImageTag}`
if (options.image) {
dockerImage = options.image
if (dockerImage === 'itkwasm/wasi') {
dockerImage = `quay.io/itkwasm/wasi:${defaultImageTag}`
dockerImage = `docker.io/itkwasm/wasi:${defaultImageTag}`
}
}

Expand Down
Loading
Loading