1
0
mirror of https://github.com/bitwarden/browser synced 2026-02-18 18:33:50 +00:00
Files
browser/apps/desktop/desktop_native/build.js
Bernd Schoolmann fc9264dfe0 Update build.js
2024-12-23 10:33:05 +01:00

83 lines
2.3 KiB
JavaScript

const child_process = require("child_process");
const fs = require("fs");
const path = require("path");
const process = require("process");
// contains
let crossPlatform = "cross-platform" in process.argv;
let release = "release" in process.argv;
if (crossPlatform) {
release = true;
}
function buildNapiModule(target, release) {
const targetArg = target ? `--target ${target}` : "";
const releaseArg = release ? "--release" : "";
return child_process.execSync(`npm run build -- ${releaseArg} ${targetArg}`, {
stdio: "inherit",
cwd: path.join(__dirname, "napi"),
});
}
function buildProxyBin(target, release) {
const targetArg = target ? `--target ${target}` : "";
const releaseArg = release ? "--release" : "";
return child_process.execSync(`cargo build --bin desktop_proxy ${releaseArg} ${targetArg}`, {
stdio: "inherit",
cwd: path.join(__dirname, "proxy"),
});
}
if (!crossPlatform) {
console.log("Building native modules in debug mode for the native architecture");
buildNapiModule(false, release);
buildProxyBin(false, release);
return;
}
// Note that targets contains pairs of [rust target, node arch]
// We do this to move the output binaries to a location that can
// be easily accessed from electron-builder using ${os} and ${arch}
let targets = [];
switch (process.platform) {
case "win32":
targets = [
["i686-pc-windows-msvc", "ia32"],
["x86_64-pc-windows-msvc", "x64"],
["aarch64-pc-windows-msvc", "arm64"],
];
break;
case "darwin":
targets = [
["x86_64-apple-darwin", "x64"],
["aarch64-apple-darwin", "arm64"],
];
break;
default:
targets = [["x86_64-unknown-linux-musl", "x64"]];
process.env["PKG_CONFIG_ALLOW_CROSS"] = "1";
process.env["PKG_CONFIG_ALL_STATIC"] = "1";
break;
}
console.log(
"Cross building native modules for the targets: ",
targets.map(([target, _]) => target).join(", "),
);
fs.mkdirSync(path.join(__dirname, "dist"), { recursive: true });
targets.forEach(([target, nodeArch]) => {
buildNapiModule(target, release);
buildProxyBin(target, release);
const ext = process.platform === "win32" ? ".exe" : "";
fs.copyFileSync(
path.join(__dirname, "target", target, "release", `desktop_proxy${ext}`),
path.join(__dirname, "dist", `desktop_proxy.${process.platform}-${nodeArch}${ext}`),
);
});