From f493982706d5199786268205b1b50087fa9d487f Mon Sep 17 00:00:00 2001 From: gustav-fff <286169375+gustav-fff@users.noreply.github.com> Date: Mon, 20 Jul 2026 14:35:33 -0700 Subject: [PATCH] feat(npm): add Android arm64 (Termux) support for pi-fff install Adds @ff-labs/fff-bin-android-arm64 platform package and wires the existing aarch64-linux-android CI build into the npm publishing matrix. Extends getTriple() in fff-node and fff-bun to map process.platform 'android' to linux-android, and adds android to os arrays with the new optionalDependency. Closes #692. --- .github/workflows/release.yaml | 3 +-- package-lock.json | 9 +++++++-- packages/fff-bin-android-arm64/package.json | 18 ++++++++++++++++++ packages/fff-bun/package.json | 6 ++++-- packages/fff-bun/src/platform.ts | 3 +++ packages/fff-node/package.json | 6 ++++-- packages/fff-node/src/platform.ts | 3 +++ 7 files changed, 40 insertions(+), 8 deletions(-) create mode 100644 packages/fff-bin-android-arm64/package.json diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 5a524a577..d9372418f 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -183,6 +183,7 @@ jobs: - os: ubuntu-latest target: aarch64-linux-android artifact_name: target/aarch64-linux-android/ci/libfff_c.so + npm_package: fff-bin-android-arm64 lib_filename: libfff_c.so ext: so @@ -273,7 +274,6 @@ jobs: mv "${{ matrix.artifact_name }}" "c-lib-${{ matrix.target }}.${{ matrix.ext }}" - name: Prepare npm package - if: "!contains(matrix.target, 'android')" shell: bash run: | # Copy the built binary into the platform npm package directory @@ -286,7 +286,6 @@ jobs: path: c-lib-${{ matrix.target }}.* - name: Upload npm package artifact - if: "!contains(matrix.target, 'android')" uses: actions/upload-artifact@v4 with: name: npm-${{ matrix.npm_package }} diff --git a/package-lock.json b/package-lock.json index 9b97c38f8..429b55de6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4102,7 +4102,8 @@ "os": [ "darwin", "linux", - "win32" + "win32", + "android" ], "devDependencies": { "@types/bun": "^1.3.8", @@ -4112,6 +4113,7 @@ "bun": ">=1.0.0" }, "optionalDependencies": { + "@ff-labs/fff-bin-android-arm64": "0.0.0", "@ff-labs/fff-bin-darwin-arm64": "0.0.0", "@ff-labs/fff-bin-darwin-x64": "0.0.0", "@ff-labs/fff-bin-linux-arm64-gnu": "0.0.0", @@ -4165,7 +4167,8 @@ "os": [ "darwin", "linux", - "win32" + "win32", + "android" ], "dependencies": { "ffi-rs": "^1.0.0" @@ -4178,6 +4181,7 @@ "node": ">=18.0.0" }, "optionalDependencies": { + "@ff-labs/fff-bin-android-arm64": "0.0.0", "@ff-labs/fff-bin-darwin-arm64": "0.0.0", "@ff-labs/fff-bin-darwin-x64": "0.0.0", "@ff-labs/fff-bin-linux-arm64-gnu": "0.0.0", @@ -4225,6 +4229,7 @@ "version": "0.6.0", "license": "MIT", "dependencies": { + "@ff-labs/fff-bun": "*", "@ff-labs/fff-node": "*" }, "devDependencies": { diff --git a/packages/fff-bin-android-arm64/package.json b/packages/fff-bin-android-arm64/package.json new file mode 100644 index 000000000..71f8405c5 --- /dev/null +++ b/packages/fff-bin-android-arm64/package.json @@ -0,0 +1,18 @@ +{ + "name": "@ff-labs/fff-bin-android-arm64", + "version": "0.0.0", + "description": "fff native binary for Android ARM64 (Termux)", + "os": ["android"], + "cpu": ["arm64"], + "main": "libfff_c.so", + "files": ["libfff_c.so"], + "publishConfig": { + "access": "public" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/dmtrKovalenko/fff.git", + "directory": "packages/fff-bin-android-arm64" + } +} diff --git a/packages/fff-bun/package.json b/packages/fff-bun/package.json index 15ab29ed7..97ae109e6 100644 --- a/packages/fff-bun/package.json +++ b/packages/fff-bun/package.json @@ -27,7 +27,8 @@ "os": [ "darwin", "linux", - "win32" + "win32", + "android" ], "cpu": [ "x64", @@ -65,7 +66,8 @@ "@ff-labs/fff-bin-linux-x64-musl": "0.0.0", "@ff-labs/fff-bin-linux-arm64-musl": "0.0.0", "@ff-labs/fff-bin-win32-x64": "0.0.0", - "@ff-labs/fff-bin-win32-arm64": "0.0.0" + "@ff-labs/fff-bin-win32-arm64": "0.0.0", + "@ff-labs/fff-bin-android-arm64": "0.0.0" }, "devDependencies": { "@types/bun": "^1.3.8", diff --git a/packages/fff-bun/src/platform.ts b/packages/fff-bun/src/platform.ts index a3ecc14c3..11070e206 100644 --- a/packages/fff-bun/src/platform.ts +++ b/packages/fff-bun/src/platform.ts @@ -14,6 +14,8 @@ export function getTriple(): string { let osName: string; if (platform === "darwin") { osName = "apple-darwin"; + } else if (platform === "android") { + osName = "linux-android"; } else if (platform === "linux") { osName = detectLinuxLibc(); } else if (platform === "win32") { @@ -107,6 +109,7 @@ const TRIPLE_TO_NPM_PACKAGE: Record = { "aarch64-unknown-linux-musl": "@ff-labs/fff-bin-linux-arm64-musl", "x86_64-pc-windows-msvc": "@ff-labs/fff-bin-win32-x64", "aarch64-pc-windows-msvc": "@ff-labs/fff-bin-win32-arm64", + "aarch64-linux-android": "@ff-labs/fff-bin-android-arm64", }; /** diff --git a/packages/fff-node/package.json b/packages/fff-node/package.json index 716a62bea..5e501c75b 100644 --- a/packages/fff-node/package.json +++ b/packages/fff-node/package.json @@ -26,7 +26,8 @@ "os": [ "darwin", "linux", - "win32" + "win32", + "android" ], "cpu": [ "x64", @@ -67,7 +68,8 @@ "@ff-labs/fff-bin-linux-x64-musl": "0.0.0", "@ff-labs/fff-bin-linux-arm64-musl": "0.0.0", "@ff-labs/fff-bin-win32-x64": "0.0.0", - "@ff-labs/fff-bin-win32-arm64": "0.0.0" + "@ff-labs/fff-bin-win32-arm64": "0.0.0", + "@ff-labs/fff-bin-android-arm64": "0.0.0" }, "devDependencies": { "typescript": "^5.0.0", diff --git a/packages/fff-node/src/platform.ts b/packages/fff-node/src/platform.ts index 5b9391913..e47503101 100644 --- a/packages/fff-node/src/platform.ts +++ b/packages/fff-node/src/platform.ts @@ -14,6 +14,8 @@ export function getTriple(): string { let osName: string; if (platform === "darwin") { osName = "apple-darwin"; + } else if (platform === "android") { + osName = "linux-android"; } else if (platform === "linux") { osName = detectLinuxLibc(); } else if (platform === "win32") { @@ -109,6 +111,7 @@ const TRIPLE_TO_NPM_PACKAGE: Record = { "aarch64-unknown-linux-musl": "@ff-labs/fff-bin-linux-arm64-musl", "x86_64-pc-windows-msvc": "@ff-labs/fff-bin-win32-x64", "aarch64-pc-windows-msvc": "@ff-labs/fff-bin-win32-arm64", + "aarch64-linux-android": "@ff-labs/fff-bin-android-arm64", }; /**