Skip to content

Commit

Permalink
feat: support linux-x64-musl (#838)
Browse files Browse the repository at this point in the history
* feat: support linux-x64-musl

* feat: support linux-x64-musl

* feat: support linux-x64-musl

* feat: support linux-x64-musl

* feat: support linux-x64-musl

* chore: update workflows

* chore: update workflow

* chore: update workflow

* chore: update ci.yaml
  • Loading branch information
ErKeLost authored Dec 8, 2023
1 parent 4e3de62 commit b181bb1
Show file tree
Hide file tree
Showing 18 changed files with 167 additions and 46 deletions.
4 changes: 2 additions & 2 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ git-fetch-with-cli = true
[build]

rustdocflags = ["--cfg", "docsrs"]
rustflags = ["-Zshare-generics=y"]
rustflags = ["-Zshare-generics=y"]

[target.x86_64-unknown-linux-gnu]
rustflags = ["-C", "target-feature=+sse2", "-Zshare-generics=y"]
Expand All @@ -24,7 +24,7 @@ rustflags = [
]

[target.x86_64-pc-windows-msvc]
linker = "rust-lld"
linker = "rust-lld"
rustflags = ["-C", "target-feature=+crt-static", "-Zshare-generics=y"]


Expand Down
7 changes: 7 additions & 0 deletions .changeset/warm-owls-tan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@farmfe/plugin-react': patch
'@farmfe/plugin-sass': patch
'@farmfe/core': patch
---

support linux-x64-musl
4 changes: 2 additions & 2 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ jobs:
path: /tmp/artifacts
- name: Check
run: |
for abi in linux-x64-gnu darwin-x64 win32-x64-msvc linux-arm64-musl linux-arm64-gnu darwin-arm64 win32-ia32-msvc win32-arm64-msvc
for abi in linux-x64-gnu linux-x64-musl darwin-x64 win32-x64-msvc linux-arm64-musl linux-arm64-gnu darwin-arm64 win32-ia32-msvc win32-arm64-msvc
do
test -f /tmp/artifacts/${{ github.sha }}-${abi}/farm.${abi}.node
done
Expand All @@ -127,7 +127,7 @@ jobs:
path: /tmp/artifacts
- name: Check
run: |
for abi in linux-x64-gnu darwin-x64 win32-x64-msvc linux-arm64-musl linux-arm64-gnu darwin-arm64 win32-ia32-msvc win32-arm64-msvc
for abi in linux-x64-gnu linux-x64-musl darwin-x64 win32-x64-msvc linux-arm64-musl linux-arm64-gnu darwin-arm64 win32-ia32-msvc win32-arm64-msvc
do
test -f /tmp/artifacts/${{ github.sha }}-${abi}-${{ matrix.settings.name }}/index.farm
done
2 changes: 1 addition & 1 deletion .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ jobs:
run: cp /tmp/artifacts/${{ github.sha }}-linux-x64-gnu/* ./packages/core/binding
- name: Move Artifacts
run: |
for abi in linux-x64-gnu darwin-x64 win32-x64-msvc linux-arm64-musl linux-arm64-gnu darwin-arm64 win32-ia32-msvc win32-arm64-msvc
for abi in linux-x64-gnu linux-x64-musl darwin-x64 win32-x64-msvc linux-arm64-musl linux-arm64-gnu darwin-arm64 win32-ia32-msvc win32-arm64-msvc
do
mv /tmp/artifacts/${{ github.sha }}-${abi}/* ./packages/core/npm/${abi}
mv /tmp/artifacts/${{ github.sha }}-${abi}-plugin-react/* ./rust-plugins/react/npm/${abi}
Expand Down
12 changes: 12 additions & 0 deletions .github/workflows/rust-build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,18 @@ jobs:
cd ../../rust-plugins/react && npm run build -- --target x86_64-unknown-linux-gnu && npm run copy-artifacts -- --abi linux-x64-gnu &&
apt install -y protobuf-compiler &&
cd ../sass && npm run build -- --target x86_64-unknown-linux-gnu && npm run copy-artifacts -- --abi linux-x64-gnu
- os: ubuntu-latest
docker: ghcr.io/napi-rs/napi-rs/nodejs-rust:lts-alpine
abi: linux-x64-musl
build: >-
set -e &&
unset CC_x86_64_unknown_linux_musl &&
unset CC &&
cd packages/core &&
npm run build:rs:publish -- --target x86_64-unknown-linux-musl &&
cd ../../rust-plugins/react && npm run build -- --target x86_64-unknown-linux-musl && npm run copy-artifacts -- --abi linux-x64-musl &&
apk add protobuf &&
cd ../sass && npm run build -- --target x86_64-unknown-linux-musl && npm run copy-artifacts -- --abi linux-x64-musl
- os: windows-latest
abi: win32-x64-msvc
- os: macos-latest
Expand Down
3 changes: 3 additions & 0 deletions packages/core/npm/linux-x64-musl/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# `@farmfe/core-linux-x64-musl`

This is the **x86_64-unknown-linux-musl** binary for `@farmfe/core`
21 changes: 21 additions & 0 deletions packages/core/npm/linux-x64-musl/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"name": "@farmfe/core-linux-x64-musl",
"version": "0.0.0",
"os": [
"linux"
],
"cpu": [
"x64"
],
"main": "farm.linux-x64-musl.node",
"files": [
"farm.linux-x64-musl.node"
],
"license": "MIT",
"engines": {
"node": ">= 10"
},
"libc": [
"glibc"
]
}
3 changes: 2 additions & 1 deletion packages/core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
"aarch64-apple-darwin",
"aarch64-unknown-linux-gnu",
"aarch64-unknown-linux-musl",
"x86_64-unknown-linux-musl",
"i686-pc-windows-msvc",
"aarch64-pc-windows-msvc"
]
Expand Down Expand Up @@ -104,4 +105,4 @@
"zod": "^3.21.4",
"zod-validation-error": "^1.3.0"
}
}
}
42 changes: 25 additions & 17 deletions rust-plugins/react/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,21 +36,21 @@ switch (platform) {

break;
case 'ia32':
if (existsSync(join(currentDir, './npm/win32-ia32-msvc/index.farm'))) {
binPath = join(currentDir, './npm/win32-ia32-msvc/index.farm');
} else {
binPath = require.resolve('@farmfe/plugin-react-win32-ia32-msvc');
}
break;
if (existsSync(join(currentDir, './npm/win32-ia32-msvc/index.farm'))) {
binPath = join(currentDir, './npm/win32-ia32-msvc/index.farm');
} else {
binPath = require.resolve('@farmfe/plugin-react-win32-ia32-msvc');
}

break;
case 'arm64':
if (existsSync(join(currentDir, './npm/win32-arm64-msvc/index.farm'))) {
binPath = join(currentDir, './npm/win32-arm64-msvc/index.farm');
} else {
binPath = require.resolve('@farmfe/plugin-react-win32-arm64-msvc');
}
break;
if (existsSync(join(currentDir, './npm/win32-arm64-msvc/index.farm'))) {
binPath = join(currentDir, './npm/win32-arm64-msvc/index.farm');
} else {
binPath = require.resolve('@farmfe/plugin-react-win32-arm64-msvc');
}

break;
default:
throw new Error(`Unsupported architecture on Windows: ${arch}`);
}
Expand Down Expand Up @@ -78,10 +78,18 @@ switch (platform) {
case 'linux':
switch (arch) {
case 'x64':
if (existsSync(join(currentDir, './npm/linux-x64-gnu/index.farm'))) {
binPath = join(currentDir, './npm/linux-x64-gnu/index.farm');
if (isMusl()) {
if (existsSync(join(currentDir, './npm/linux-x64-musl/index.farm'))) {
binPath = join(currentDir, './npm/linux-x64-musl/index.farm');
} else {
binPath = require.resolve('@farmfe/plugin-react-linux-x64-musl');
}
} else {
binPath = require.resolve('@farmfe/plugin-react-linux-x64-gnu');
if (existsSync(join(currentDir, './npm/linux-x64-gnu/index.farm'))) {
binPath = join(currentDir, './npm/linux-x64-gnu/index.farm');
} else {
binPath = require.resolve('@farmfe/plugin-react-linux-x64-gnu');
}
}
break;
case 'arm64':
Expand Down
3 changes: 3 additions & 0 deletions rust-plugins/react/npm/linux-x64-musl/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# `@farmfe/plugin-react-linux-x64-musl`

This is the **x86_64-unknown-linux-musl** binary for `@farmfe/plugin-react`
18 changes: 18 additions & 0 deletions rust-plugins/react/npm/linux-x64-musl/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"name": "@farmfe/plugin-react-linux-x64-musl",
"version": "0.0.0",
"os": [
"linux"
],
"cpu": [
"x64"
],
"main": "index.farm",
"files": [
"index.farm"
],
"license": "MIT",
"engines": {
"node": ">= 10"
}
}
3 changes: 2 additions & 1 deletion rust-plugins/react/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
"aarch64-apple-darwin",
"aarch64-unknown-linux-gnu",
"aarch64-unknown-linux-musl",
"x86_64-unknown-linux-musl",
"i686-pc-windows-msvc",
"aarch64-pc-windows-msvc"
]
Expand All @@ -41,4 +42,4 @@
"index.js",
"index.d.ts"
]
}
}
12 changes: 10 additions & 2 deletions rust-plugins/react/scripts/copy-artifacts.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,18 @@ import path from 'path';
let [abiFlag, abi] = process.argv.slice(-2);
if (abiFlag !== '--abi') {
// try local abi
const supportedAbis = ['darwin-arm64', 'darwin-x64', 'linux-arm64-gnu', 'linux-arm64-musl', 'linux-x64-gnu', 'win32-x64-msvc'];
const supportedAbis = [
'darwin-arm64',
'darwin-x64',
'linux-arm64-gnu',
'linux-arm64-musl',
'linux-x64-gnu',
'linux-x64-musl',
'win32-x64-msvc'
];
const localAbi = process.platform + '-' + process.arch;
console.log('localAbi', localAbi);
const found = supportedAbis.find(abi => abi.includes(localAbi));
const found = supportedAbis.find((abi) => abi.includes(localAbi));
if (found) {
abi = found;
} else {
Expand Down
43 changes: 26 additions & 17 deletions rust-plugins/sass/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,21 +36,21 @@ switch (platform) {

break;
case 'ia32':
if (existsSync(join(currentDir, './npm/win32-ia32-msvc/index.farm'))) {
binPath = join(currentDir, './npm/win32-ia32-msvc/index.farm');
} else {
binPath = require.resolve('@farmfe/plugin-sass-win32-ia32-msvc');
}
break;
if (existsSync(join(currentDir, './npm/win32-ia32-msvc/index.farm'))) {
binPath = join(currentDir, './npm/win32-ia32-msvc/index.farm');
} else {
binPath = require.resolve('@farmfe/plugin-sass-win32-ia32-msvc');
}

break;
case 'arm64':
if (existsSync(join(currentDir, './npm/win32-arm64-msvc/index.farm'))) {
binPath = join(currentDir, './npm/win32-arm64-msvc/index.farm');
} else {
binPath = require.resolve('@farmfe/plugin-sass-win32-arm64-msvc');
}
break;
if (existsSync(join(currentDir, './npm/win32-arm64-msvc/index.farm'))) {
binPath = join(currentDir, './npm/win32-arm64-msvc/index.farm');
} else {
binPath = require.resolve('@farmfe/plugin-sass-win32-arm64-msvc');
}

break;
default:
throw new Error(`Unsupported architecture on Windows: ${arch}`);
}
Expand Down Expand Up @@ -78,11 +78,20 @@ switch (platform) {
case 'linux':
switch (arch) {
case 'x64':
if (existsSync(join(currentDir, './npm/linux-x64-gnu/index.farm'))) {
binPath = join(currentDir, './npm/linux-x64-gnu/index.farm');
if (isMusl()) {
if (existsSync(join(currentDir, './npm/linux-x64-musl/index.farm'))) {
binPath = join(currentDir, './npm/linux-x64-musl/index.farm');
} else {
binPath = require.resolve('@farmfe/plugin-sass-linux-x64-musl');
}
} else {
binPath = require.resolve('@farmfe/plugin-sass-linux-x64-gnu');
if (existsSync(join(currentDir, './npm/linux-x64-gnu/index.farm'))) {
binPath = join(currentDir, './npm/linux-x64-gnu/index.farm');
} else {
binPath = require.resolve('@farmfe/plugin-sass-linux-x64-gnu');
}
}

break;

case 'arm64':
Expand Down
3 changes: 3 additions & 0 deletions rust-plugins/sass/npm/linux-x64-musl/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# `@farmfe/plugin-sass-linux-x64-musl`

This is the **x86_64-unknown-linux-musl** binary for `@farmfe/plugin-sass`
18 changes: 18 additions & 0 deletions rust-plugins/sass/npm/linux-x64-musl/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"name": "@farmfe/plugin-sass-linux-x64-musl",
"version": "0.0.0",
"os": [
"linux"
],
"cpu": [
"x64"
],
"main": "index.farm",
"files": [
"index.farm"
],
"license": "MIT",
"engines": {
"node": ">= 10"
}
}
3 changes: 2 additions & 1 deletion rust-plugins/sass/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
"aarch64-apple-darwin",
"aarch64-unknown-linux-gnu",
"aarch64-unknown-linux-musl",
"x86_64-unknown-linux-musl",
"i686-pc-windows-msvc",
"aarch64-pc-windows-msvc"
]
Expand All @@ -56,4 +57,4 @@
"index.js",
"index.d.ts"
]
}
}
12 changes: 10 additions & 2 deletions rust-plugins/sass/scripts/copy-artifacts.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,18 @@ import path from 'path';
let [abiFlag, abi] = process.argv.slice(-2);
if (abiFlag !== '--abi') {
// try local abi
const supportedAbis = ['darwin-arm64', 'darwin-x64', 'linux-arm64-gnu', 'linux-arm64-musl', 'linux-x64-gnu', 'win32-x64-msvc'];
const supportedAbis = [
'darwin-arm64',
'darwin-x64',
'linux-arm64-gnu',
'linux-arm64-musl',
'linux-x64-gnu',
'linux-x64-musl',
'win32-x64-msvc'
];
const localAbi = process.platform + '-' + process.arch;
console.log('localAbi', localAbi);
const found = supportedAbis.find(abi => abi.includes(localAbi));
const found = supportedAbis.find((abi) => abi.includes(localAbi));
if (found) {
abi = found;
} else {
Expand Down

0 comments on commit b181bb1

Please sign in to comment.