Merge pull request #901 from napi-rs/android-armv7

Android armv7
This commit is contained in:
LongYinan 2021-12-02 13:46:39 +08:00 committed by GitHub
commit 201eca63d3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 107 additions and 44 deletions

72
.github/workflows/android-armv7.yml vendored Normal file
View file

@ -0,0 +1,72 @@
name: Android-armv7
on:
push:
branches:
- main
pull_request:
env:
DEBUG: 'napi:*'
jobs:
build-android-armv7:
name: Build - Android - armv7
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup node
uses: actions/setup-node@v1
with:
node-version: 16
cache: 'yarn'
check-latest: true
- name: List NDK Home
run: ls -R "${ANDROID_NDK_HOME}"
- name: Install
uses: actions-rs/toolchain@v1
with:
toolchain: stable
profile: minimal
override: true
target: 'armv7-linux-androideabi'
- name: Generate Cargo.lock
uses: actions-rs/cargo@v1
with:
command: generate-lockfile
- name: Cache cargo registry
uses: actions/cache@v2
with:
path: ~/.cargo/registry
key: stable-linux-android-armv7-node@16-cargo-registry-trimmed-${{ hashFiles('**/Cargo.lock') }}
- name: Cache cargo index
uses: actions/cache@v2
with:
path: ~/.cargo/git
key: stable-linux-android-node@16-cargo-index-trimmed-${{ hashFiles('**/Cargo.lock') }}
- name: Cache NPM dependencies
uses: actions/cache@v2
with:
path: node_modules
key: npm-cache-linux-android-node@16-${{ hashFiles('yarn.lock') }}
- name: Install dependencies
run: yarn install --ignore-scripts --frozen-lockfile --registry https://registry.npmjs.org --network-timeout 300000
- name: 'Build TypeScript'
run: yarn build
- name: Cross build
run: |
export CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi24-clang"
yarn build:test:android:armv7
du -sh examples/napi/index.node
${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-strip examples/napi/index.node
du -sh examples/napi/index.node

View file

@ -1,4 +1,4 @@
name: macOS-Android
name: Android-aarch64
on:
push:
@ -12,12 +12,12 @@ env:
jobs:
build-android-aarch64:
name: Build - Android - aarch64
runs-on: macos-latest
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup node
uses: actions/setup-node@v1
uses: actions/setup-node@v2
with:
node-version: 16
cache: 'yarn'
@ -43,19 +43,19 @@ jobs:
uses: actions/cache@v2
with:
path: ~/.cargo/registry
key: stable-macos-android-node@16-cargo-registry-trimmed-${{ hashFiles('**/Cargo.lock') }}
key: stable-linux-android-node@16-cargo-registry-trimmed-${{ hashFiles('**/Cargo.lock') }}
- name: Cache cargo index
uses: actions/cache@v2
with:
path: ~/.cargo/git
key: stable-macos-android-node@16-cargo-index-trimmed-${{ hashFiles('**/Cargo.lock') }}
key: stable-linux-android-node@16-cargo-index-trimmed-${{ hashFiles('**/Cargo.lock') }}
- name: Cache NPM dependencies
uses: actions/cache@v2
with:
path: node_modules
key: npm-cache-macos-android-node@16-${{ hashFiles('yarn.lock') }}
key: npm-cache-linux-android-node@16-${{ hashFiles('yarn.lock') }}
- name: Install dependencies
run: yarn install --frozen-lockfile --registry https://registry.npmjs.org --network-timeout 300000
@ -65,5 +65,5 @@ jobs:
- name: Cross build native tests
run: |
export CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android24-clang"
export CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang"
yarn build:test:android

View file

@ -68,6 +68,7 @@ _Main branch is now under napi@next developing. Checkout [v1 docs](https://napi.
| Linux aarch64 musl | ✓ | ✓ | ✓ | ✓ |
| Linux arm gnueabihf | ✓ | ✓ | ✓ | ✓ |
| Linux aarch64 android | ✓ | ✓ | ✓ | ✓ |
| Linux armv7 android | ✓ | ✓ | ✓ | ✓ |
| FreeBSD x64 | ✓ | ✓ | ✓ | ✓ |
This library depends on Node-API and requires `Node@10.0.0` or later.

View file

@ -87,9 +87,21 @@ jobs:
target: 'aarch64-linux-android'
build: |
export CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER="\${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang"
export CC="\${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang"
export CXX="\${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang++"
export PATH="\${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin:\${PATH}"
yarn build --target aarch64-linux-android
\${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android-strip *.node
- host: ubuntu-latest
architecture: 'x64'
target: 'armv7-linux-androideabi'
build: |
export CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER="\${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi24-clang"
export CC="\${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi24-clang"
export CXX="\${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi24-clang++"
export PATH="\${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin:\${PATH}"
yarn build --target armv7-linux-androideabi
\${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/arm-linux-androideabi-strip *.node
- host: ubuntu-latest
architecture: 'x64'
target: 'aarch64-unknown-linux-musl'
@ -172,6 +184,7 @@ jobs:
with:
name: bindings-\${{ matrix.settings.target }}
path: \${{ env.APP_NAME }}.*.node
if-no-files-found: error
build-freebsd:
runs-on: macos-10.15
@ -221,6 +234,7 @@ jobs:
with:
name: bindings-freebsd
path: \${{ env.APP_NAME }}.*.node
if-no-files-found: error
test-macOS-windows-binding:
name: Test bindings on \${{ matrix.settings.target }} - node@\${{ matrix.node }}

View file

@ -42,6 +42,7 @@ const SupportedPlatforms: string[] = [
'x86_64-unknown-linux-musl',
'x86_64-unknown-freebsd',
'i686-pc-windows-msvc',
'armv7-linux-androideabi',
]
export class NewProjectCommand extends Command {

View file

@ -70,7 +70,10 @@ export const DefaultPlatforms: PlatformDetail[] = [
* - `sys` = The system name, for example `linux`, `windows`, `darwin`, etc. none is typically used for bare-metal without an OS.
* - `abi` = The ABI, for example `gnu`, `android`, `eabi`, etc.
*/
export function parseTriple(triple: string): PlatformDetail {
export function parseTriple(rawTriple: string): PlatformDetail {
const triple = rawTriple.endsWith('eabi')
? `${rawTriple.slice(0, -4)}-eabi`
: rawTriple
const triples = triple.split('-')
let cpu: string
let sys: string
@ -91,7 +94,7 @@ export function parseTriple(triple: string): PlatformDetail {
platformArchABI: abi
? `${platformName}-${arch}-${abi}`
: `${platformName}-${arch}`,
raw: triple,
raw: rawTriple,
}
}

View file

@ -3,11 +3,7 @@
"version": "0.0.0",
"description": "A minimal library for building compiled Node add-ons in Rust.",
"private": "true",
"workspaces": [
"cli",
"triples",
"memory-testing"
],
"workspaces": ["cli", "triples", "memory-testing"],
"repository": {
"type": "git",
"url": "git@github.com:Brooooooklyn/napi-rs.git"
@ -21,6 +17,7 @@
"build:test": "yarn --cwd ./examples/napi-compat-mode build && yarn --cwd ./examples/napi build",
"build:test:aarch64": "yarn --cwd ./examples/napi-compat-mode build-aarch64 && yarn --cwd ./examples/napi build-aarch64",
"build:test:android": "yarn --cwd ./examples/napi-compat-mode build --target aarch64-linux-android && yarn --cwd ./examples/napi build --target aarch64-linux-android",
"build:test:android:armv7": "yarn --cwd ./examples/napi-compat-mode build --target armv7-linux-androideabi && yarn --cwd ./examples/napi build --target armv7-linux-androideabi",
"build:test:armv7": "yarn --cwd ./examples/napi-compat-mode build-armv7 && yarn --cwd ./examples/napi build-armv7",
"bundle": "rollup -c rollup.config.js",
"format": "run-p format:md format:json format:yaml format:source format:rs",
@ -48,18 +45,10 @@
"arrowParens": "always"
},
"lint-staged": {
"*.js": [
"prettier --write"
],
"*.@(yml|yaml)": [
"prettier --parser yaml --write"
],
"*.json": [
"prettier --parser json --write"
],
"*.md": [
"prettier --parser markdown --write"
]
"*.js": ["prettier --write"],
"*.@(yml|yaml)": ["prettier --parser yaml --write"],
"*.json": ["prettier --parser json --write"],
"*.md": ["prettier --parser markdown --write"]
},
"husky": {
"hooks": {

File diff suppressed because one or more lines are too long

View file

@ -7,7 +7,6 @@ aarch64-unknown-linux-gnu
aarch64-unknown-linux-musl
aarch64-unknown-none
aarch64-unknown-none-softfloat
arm-linux-androideabi
arm-unknown-linux-gnueabi
arm-unknown-linux-gnueabihf
arm-unknown-linux-musleabi
@ -24,10 +23,6 @@ armv7-unknown-linux-musleabihf
armv7a-none-eabi
armv7r-none-eabi
armv7r-none-eabihf
asmjs-unknown-emscripten
i586-pc-windows-msvc
i586-unknown-linux-gnu
i586-unknown-linux-musl
i686-linux-android
i686-pc-windows-gnu
i686-pc-windows-msvc
@ -55,18 +50,6 @@ riscv64imac-unknown-none-elf
s390x-unknown-linux-gnu
sparc64-unknown-linux-gnu
sparcv9-sun-solaris
thumbv6m-none-eabi
thumbv7em-none-eabi
thumbv7em-none-eabihf
thumbv7m-none-eabi
thumbv7neon-linux-androideabi
thumbv7neon-unknown-linux-gnueabihf
thumbv8m.base-none-eabi
thumbv8m.main-none-eabi
thumbv8m.main-none-eabihf
wasm32-unknown-emscripten
wasm32-unknown-unknown
wasm32-wasi
x86_64-apple-darwin
x86_64-apple-ios
x86_64-fortanix-unknown-sgx