feat(desktop): build macOS as a universal binary (#1603)

This commit is contained in:
Hampus authored and GitHub committed 2026-08-15 01:25:35 +02:00
1 parent 3588090f22
commit 6e4c055ebd
5 files changed
+83 -68

No files matched your search

+21 -9
View File
@@ -3,6 +3,7 @@
use crate::common::{
CommandSpec, command_succeeds, output_text, remove_file_if_exists, run_command,
};
use crate::desktop::MACOS_UNIVERSAL_ARCH;
use anyhow::{Context, Result, anyhow, bail, ensure};
use clap::Args;
use sha2::{Digest, Sha256};
@@ -358,9 +359,23 @@ fn ensure_pkg_config(requirement: &PkgConfigRequirement) -> Result<()> {
fn build_rust_node_addon(addon_root: &Path, addon: &DesktopNativeAddon) -> Result<BuiltNodeAddon> {
let platform = current_platform();
let arch = electron_arch();
let tag = platform_tag(&platform, &arch)?;
let target = rust_target_for_platform(&platform, &arch)?;
let target_root = cargo_target_root_for_build(addon_root, &platform)?;
if platform == "darwin" && arch == MACOS_UNIVERSAL_ARCH {
let arm64 = build_rust_node_addon_for_arch(addon_root, addon, &platform, "arm64")?;
build_rust_node_addon_for_arch(addon_root, addon, &platform, "x64")?;
return Ok(arm64);
}
build_rust_node_addon_for_arch(addon_root, addon, &platform, &arch)
}
fn build_rust_node_addon_for_arch(
addon_root: &Path,
addon: &DesktopNativeAddon,
platform: &str,
arch: &str,
) -> Result<BuiltNodeAddon> {
let tag = platform_tag(platform, arch)?;
let target = rust_target_for_platform(platform, arch)?;
let target_root = cargo_target_root_for_build(addon_root, platform)?;
let mut args = vec![
OsString::from("build"),
OsString::from("--release"),
@@ -396,10 +411,7 @@ fn build_rust_node_addon(addon_root: &Path, addon: &DesktopNativeAddon) -> Resul
let source = target_root
.join(&target)
.join("release")
.join(cargo_dynamic_library_file_name(
addon.crate_name,
&platform,
)?);
.join(cargo_dynamic_library_file_name(addon.crate_name, platform)?);
let out_file = addon_root.join(format!("{}.{}.node", addon.node_file_stem, tag));
ensure!(
source.exists(),
@@ -418,8 +430,8 @@ fn build_rust_node_addon(addon_root: &Path, addon: &DesktopNativeAddon) -> Resul
"expected {} to exist after copy",
out_file.display()
);
sign_macos_node_addon(&out_file, &platform)?;
assert_no_redistributable_runtime_imports(&out_file, &platform)?;
sign_macos_node_addon(&out_file, platform)?;
assert_no_redistributable_runtime_imports(&out_file, platform)?;
Ok(BuiltNodeAddon {
out_file,
source,