Skip to content

Commit b7d9b70

Browse files
authored
feat(native): declare supported platform targets (#262)
1 parent d6fac70 commit b7d9b70

2 files changed

Lines changed: 69 additions & 29 deletions

File tree

.github/workflows/reusable-native-build.yml

Lines changed: 56 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,6 @@ on:
1515
description: Expected NAPI-RS binary filename
1616
required: true
1717
type: string
18-
use_napi_cross:
19-
description: Build with the NAPI-RS cross toolchain
20-
default: false
21-
required: false
22-
type: boolean
2318

2419
permissions:
2520
contents: read
@@ -52,34 +47,67 @@ jobs:
5247
shell: bash
5348
run: rustup target add "$RUST_TARGET"
5449

55-
- name: Build native binding with NAPI-RS cross toolchain
56-
if: inputs.use_napi_cross
50+
- name: Setup Zig
51+
if: contains(inputs.target, 'musl')
52+
uses: mlugg/setup-zig@d1434d08867e3ee9daa34448df10607b98908d29 # v2.2.1
53+
with:
54+
version: 0.14.1
55+
56+
- name: Install cargo-zigbuild
57+
if: contains(inputs.target, 'musl')
58+
uses: taiki-e/install-action@6c6fd71fe4fb72c3697d269963d0e15df8adedad # v2.85.10
59+
with:
60+
tool: cargo-zigbuild@0.23.0
61+
62+
- name: Install RISC-V GNU toolchain
63+
if: inputs.target == 'riscv64gc-unknown-linux-gnu'
5764
shell: bash
58-
working-directory: packages/rstack
59-
run: >-
60-
pnpm exec napi build --platform --release
61-
--target "$RUST_TARGET"
62-
--manifest-path ../../Cargo.toml
63-
--package rstack-binding
64-
--package-json-path package.json
65-
--output-dir .
66-
--js binding.cjs
67-
--dts binding.d.cts
68-
--use-napi-cross
65+
run: |
66+
sudo apt-get update
67+
sudo apt-get install --yes gcc-riscv64-linux-gnu
6968
7069
- name: Build native binding
71-
if: ${{ !inputs.use_napi_cross }}
7270
shell: bash
7371
working-directory: packages/rstack
74-
run: >-
75-
pnpm exec napi build --platform --release
76-
--target "$RUST_TARGET"
77-
--manifest-path ../../Cargo.toml
78-
--package rstack-binding
79-
--package-json-path package.json
80-
--output-dir .
81-
--js binding.cjs
82-
--dts binding.d.cts
72+
run: |
73+
args=(
74+
build
75+
--platform
76+
--release
77+
--target "$RUST_TARGET"
78+
--manifest-path ../../Cargo.toml
79+
--package rstack-binding
80+
--output-dir .
81+
--js binding.cjs
82+
--dts binding.d.cts
83+
)
84+
85+
case "$RUST_TARGET" in
86+
x86_64-unknown-linux-gnu | aarch64-unknown-linux-gnu | \
87+
powerpc64le-unknown-linux-gnu | s390x-unknown-linux-gnu)
88+
args+=(--use-napi-cross)
89+
;;
90+
x86_64-unknown-linux-musl | aarch64-unknown-linux-musl | \
91+
riscv64gc-unknown-linux-musl)
92+
args+=(--cross-compile)
93+
;;
94+
aarch64-apple-darwin | x86_64-apple-darwin)
95+
export MACOSX_DEPLOYMENT_TARGET=11.0
96+
;;
97+
i686-pc-windows-msvc)
98+
export CARGO_PROFILE_RELEASE_CODEGEN_UNITS=32
99+
export CARGO_PROFILE_RELEASE_LTO=false
100+
;;
101+
riscv64gc-unknown-linux-gnu | x86_64-pc-windows-msvc | \
102+
aarch64-pc-windows-msvc)
103+
;;
104+
*)
105+
echo "Unsupported native target: $RUST_TARGET" >&2
106+
exit 1
107+
;;
108+
esac
109+
110+
pnpm exec napi "${args[@]}"
83111
84112
- name: Upload native binding
85113
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7

packages/rstack/package.json

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,19 @@
117117
"binaryName": "rstack",
118118
"packageName": "@rstackjs/binding",
119119
"targets": [
120-
"x86_64-unknown-linux-gnu"
120+
"x86_64-unknown-linux-gnu",
121+
"aarch64-unknown-linux-gnu",
122+
"x86_64-pc-windows-msvc",
123+
"aarch64-apple-darwin",
124+
"powerpc64le-unknown-linux-gnu",
125+
"s390x-unknown-linux-gnu",
126+
"aarch64-pc-windows-msvc",
127+
"x86_64-apple-darwin",
128+
"x86_64-unknown-linux-musl",
129+
"riscv64gc-unknown-linux-gnu",
130+
"aarch64-unknown-linux-musl",
131+
"riscv64gc-unknown-linux-musl",
132+
"i686-pc-windows-msvc"
121133
]
122134
}
123135
}

0 commit comments

Comments
 (0)