9 changed files with 343 additions and 152 deletions
@ -0,0 +1,22 @@
@@ -0,0 +1,22 @@
|
||||
/* eslint-disable @typescript-eslint/no-var-requires */ |
||||
const child_process = require("child_process"); |
||||
const process = require("process"); |
||||
|
||||
let targets = []; |
||||
switch (process.platform) { |
||||
case "win32": |
||||
targets = ["i686-pc-windows-msvc", "x86_64-pc-windows-msvc", "aarch64-pc-windows-msvc"]; |
||||
break; |
||||
|
||||
case "darwin": |
||||
targets = ["x86_64-apple-darwin", "aarch64-apple-darwin"]; |
||||
break; |
||||
|
||||
default: |
||||
targets = ['x86_64-unknown-linux-gnu']; |
||||
break; |
||||
} |
||||
|
||||
targets.forEach(target => { |
||||
child_process.execSync(`npm run build -- --target ${target}`, {stdio: 'inherit'}); |
||||
}); |
||||
@ -0,0 +1,114 @@
@@ -0,0 +1,114 @@
|
||||
/* eslint-disable @typescript-eslint/no-var-requires */ |
||||
const { readFileSync } = require('fs') |
||||
|
||||
const { platform, arch } = process |
||||
|
||||
let nativeBinding = null |
||||
let isMusl = false |
||||
let loadError = null |
||||
|
||||
switch (platform) { |
||||
case 'win32': |
||||
switch (arch) { |
||||
case 'x64': |
||||
try { |
||||
nativeBinding = require('./dist/desktop_native.win32-x64-msvc') |
||||
} catch (e) { |
||||
loadError = e |
||||
} |
||||
break |
||||
case 'ia32': |
||||
try { |
||||
nativeBinding = require('./dist/desktop_native.win32-ia32-msvc') |
||||
} catch (e) { |
||||
loadError = e |
||||
} |
||||
break |
||||
case 'arm64': |
||||
try { |
||||
nativeBinding = require('./dist/desktop_native.win32-arm64-msvc') |
||||
} catch (e) { |
||||
loadError = e |
||||
} |
||||
break |
||||
default: |
||||
throw new Error(`Unsupported architecture on Windows: ${arch}`) |
||||
} |
||||
break |
||||
case 'darwin': |
||||
switch (arch) { |
||||
case 'x64': |
||||
try { |
||||
nativeBinding = require('./dist/desktop_native.darwin-x64') |
||||
} catch (e) { |
||||
loadError = e |
||||
} |
||||
break |
||||
case 'arm64': |
||||
try { |
||||
nativeBinding = require('./dist/desktop_native.darwin-arm64') |
||||
} catch (e) { |
||||
loadError = e |
||||
} |
||||
break |
||||
default: |
||||
throw new Error(`Unsupported architecture on macOS: ${arch}`) |
||||
} |
||||
break |
||||
case 'linux': |
||||
switch (arch) { |
||||
case 'x64': |
||||
isMusl = readFileSync('/usr/bin/ldd', 'utf8').includes('musl') |
||||
if (isMusl) { |
||||
try { |
||||
nativeBinding = require('./dist/desktop_native.linux-x64-musl') |
||||
} catch (e) { |
||||
loadError = e |
||||
} |
||||
} else { |
||||
try { |
||||
nativeBinding = require('./dist/desktop_native.linux-x64-gnu') |
||||
} catch (e) { |
||||
loadError = e |
||||
} |
||||
} |
||||
break |
||||
case 'arm64': |
||||
isMusl = readFileSync('/usr/bin/ldd', 'utf8').includes('musl') |
||||
if (isMusl) { |
||||
try { |
||||
nativeBinding = require('./dist/desktop_native.linux-arm64-musl') |
||||
} catch (e) { |
||||
loadError = e |
||||
} |
||||
} else { |
||||
try { |
||||
nativeBinding = require('./dist/desktop_native.linux-arm64-gnu') |
||||
} catch (e) { |
||||
loadError = e |
||||
} |
||||
} |
||||
break |
||||
case 'arm': |
||||
try { |
||||
nativeBinding = require('./dist/desktop_native.linux-arm-gnueabihf') |
||||
} catch (e) { |
||||
loadError = e |
||||
} |
||||
break |
||||
default: |
||||
throw new Error(`Unsupported architecture on Linux: ${arch}`) |
||||
} |
||||
break |
||||
default: |
||||
throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`) |
||||
} |
||||
|
||||
if (!nativeBinding) { |
||||
if (loadError) { |
||||
throw loadError |
||||
} |
||||
throw new Error(`Failed to load native binding`) |
||||
} |
||||
|
||||
module.exports.nativeBinding |
||||
@ -1,19 +1,32 @@
@@ -1,19 +1,32 @@
|
||||
{ |
||||
"name": "desktop_native", |
||||
"name": "@bitwarden/desktop_native", |
||||
"version": "0.1.0", |
||||
"description": "", |
||||
"main": "index.node", |
||||
"scripts": { |
||||
"build": "napi build --release --js true", |
||||
"build-debug": "npm run build --", |
||||
"build-release": "npm run build -- --release", |
||||
"install": "npm run build-release", |
||||
"build": "napi build dist --platform --release --js true", |
||||
"build:debug": "napi build dist --platform --js true", |
||||
"build:cross-platform": "node build.js", |
||||
"test": "cargo test" |
||||
}, |
||||
"author": "", |
||||
"license": "GPL-3.0", |
||||
"devDependencies": { |
||||
"@napi-rs/cli": "^2.4.4", |
||||
"cargo-cp-artifact": "^0.1" |
||||
"@napi-rs/cli": "^2.6.2" |
||||
}, |
||||
"napi": { |
||||
"name": "desktop_native", |
||||
"triples": { |
||||
"defaults": true, |
||||
"additional": [ |
||||
"x86_64-unknown-linux-musl", |
||||
"aarch64-unknown-linux-gnu", |
||||
"i686-pc-windows-msvc", |
||||
"armv7-unknown-linux-gnueabihf", |
||||
"aarch64-apple-darwin", |
||||
"aarch64-unknown-linux-musl", |
||||
"aarch64-pc-windows-msvc" |
||||
] |
||||
} |
||||
} |
||||
} |
||||
|
||||
Loading…
Reference in new issue