Skip to content

Commit

Permalink
feat(cli): support wasm32-wasipxx targets (#2030)
Browse files Browse the repository at this point in the history
* chore(examples): update wasi binding template

* wasm32-wasip1
  • Loading branch information
Brooooooklyn committed Apr 10, 2024
1 parent 2e5ddb6 commit 4c7d06f
Show file tree
Hide file tree
Showing 7 changed files with 434 additions and 364 deletions.
15 changes: 15 additions & 0 deletions cli/src/api/new.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { execSync } from 'node:child_process'
import path from 'node:path'

import {
Expand Down Expand Up @@ -61,6 +62,20 @@ function processOptions(options: RawNewOptions) {
throw new Error('At least one target must be enabled')
}
}
if (
options.targets.some((target) => target === 'wasm32-wasi-preview1-threads')
) {
const out = execSync(`rustup target list`, {
encoding: 'utf8',
})
if (out.includes('wasm32-wasip1-threads')) {
options.targets.map((target) =>
target === 'wasm32-wasi-preview1-threads'
? 'wasm32-wasip1-threads'
: target,
)
}
}

return applyDefaultNewOptions(options) as NewOptions
}
Expand Down
20 changes: 15 additions & 5 deletions cli/src/api/templates/ci-template.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
import type { SupportedPackageManager } from '../../utils/config.js'

export const YAML = (packageManager: SupportedPackageManager) => `
export type WasiTargetName =
| 'wasm32-wasi-preview1-threads'
| 'wasm32-wasip1-threads'
| 'wasm32-wasip2'

export const YAML = (
packageManager: SupportedPackageManager,
wasiTargetName?: WasiTargetName,
) => `
name: CI
env:
Expand Down Expand Up @@ -94,6 +102,8 @@ jobs:
- host: ubuntu-latest
target: 'wasm32-wasi-preview1-threads'
build: ${packageManager} build --platform --target wasm32-wasi-preview1-threads
target: '${wasiTargetName}'
build: ${packageManager} build --platform --target ${wasiTargetName}
name: stable - \${{ matrix.settings.target }} - node@20
runs-on: \${{ matrix.settings.host }}
Expand Down Expand Up @@ -156,15 +166,15 @@ jobs:
- name: Upload artifact
uses: actions/upload-artifact@v4
if: matrix.settings.target != 'wasm32-wasi-preview1-threads'
if: matrix.settings.target != '${wasiTargetName}'
with:
name: bindings-\${{ matrix.settings.target }}
path: "*.node"
if-no-files-found: error
- name: Upload artifact
uses: actions/upload-artifact@v4
if: matrix.settings.target == 'wasm32-wasi-preview1-threads'
if: matrix.settings.target == '${wasiTargetName}'
with:
name: bindings-\${{ matrix.settings.target }}
path: "*.wasm"
Expand All @@ -177,7 +187,7 @@ jobs:
- uses: actions/checkout@v4
- name: Build
id: build
uses: cross-platform-actions/action@v0.21.1
uses: cross-platform-actions/action@v0.23.0
timeout-minutes: 30
env:
DEBUG: 'napi:*'
Expand Down Expand Up @@ -511,7 +521,7 @@ jobs:
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: bindings-wasm32-wasi-preview1-threads
name: bindings-${wasiTargetName}
path: .
- name: List packages
run: ls -R .
Expand Down
10 changes: 7 additions & 3 deletions cli/src/api/templates/ci.yml.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import {
parseTriple,
} from '../../utils/index.js'

import { YAML } from './ci-template.js'
import { type WasiTargetName, YAML } from './ci-template.js'

const BUILD_FREEBSD = 'build-freebsd'
const TEST_MACOS_WINDOWS = 'test-macOS-windows-binding'
Expand All @@ -22,6 +22,7 @@ const UNIVERSAL_MACOS = 'universal-macOS'
export const createGithubActionsCIYml = (
targets: string[],
packageManager: SupportedPackageManager,
wasiTargetName?: WasiTargetName,
) => {
const allTargets = new Set(
targets.flatMap((t) => {
Expand All @@ -36,7 +37,7 @@ export const createGithubActionsCIYml = (
}),
)

const fullTemplate = load(YAML(packageManager)) as any
const fullTemplate = load(YAML(packageManager, wasiTargetName)) as any

const requiredSteps = []
const enableWindowsX86 = allTargets.has('x86_64-pc-windows-msvc')
Expand All @@ -48,7 +49,10 @@ export const createGithubActionsCIYml = (
const enableLinuxArm7 = allTargets.has('armv7-unknown-linux-gnueabihf')
const enableFreeBSD = allTargets.has('x86_64-unknown-freebsd')
const enableMacOSUni = allTargets.has('universal-apple-darwin')
const enableWasi = allTargets.has('wasm32-wasi-preview1-threads')
const enableWasi =
allTargets.has('wasm32-wasi-preview1-threads') ||
allTargets.has('wasm32-wasip1-threads') ||
allTargets.has('wasm32-wasip2')
fullTemplate.jobs.build.strategy.matrix.settings =
fullTemplate.jobs.build.strategy.matrix.settings.filter(
({ target }: { target: string }) => allTargets.has(target),
Expand Down
5 changes: 4 additions & 1 deletion cli/src/utils/target.ts
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,10 @@ export interface Target {
* - `abi` = The ABI, for example `gnu`, `android`, `eabi`, etc.
*/
export function parseTriple(rawTriple: string): Target {
if (rawTriple === 'wasm32-wasi-preview1-threads') {
if (
rawTriple === 'wasm32-wasi-preview1-threads' ||
rawTriple.startsWith('wasm32-wasip')
) {
return {
triple: rawTriple,
platformArchABI: 'wasm32-wasi',
Expand Down

0 comments on commit 4c7d06f

Please sign in to comment.