mirror of
https://github.com/NanmiCoder/cc-haha
synced 2026-07-23 14:33:36 +08:00
Build macOS notification bridge for the target arch
The macOS notification bridge is compiled by build.rs outside Cargo's Rust target handling. On Apple Silicon, clang defaulted macos_notifications.o to arm64 even when Cargo was building x86_64, so the x64 release job ignored the object and missed the exported notification symbols. Constraint: The ObjC bridge is linked manually through cargo:rustc-link-arg Constraint: Release workflow builds both aarch64-apple-darwin and x86_64-apple-darwin from macOS runners Rejected: Rely on clang default architecture | Apple Silicon defaults arm64 and breaks x86_64 linking Confidence: high Scope-risk: narrow Directive: Keep native ObjC bridge compilation aligned with Cargo TARGET when adding platform bridge files Tested: cargo fmt --check Tested: git diff --check Tested: cargo check --target aarch64-apple-darwin Tested: cargo build --target x86_64-apple-darwin --release Tested: file target/x86_64-apple-darwin/release/.../macos_notifications.o reports Mach-O 64-bit object x86_64 Not-tested: Full GitHub release workflow after retag before pushing
This commit is contained in:
parent
47e41d68e3
commit
97da3ae180
@ -4,15 +4,24 @@ fn main() {
|
|||||||
use std::{env, path::PathBuf, process::Command};
|
use std::{env, path::PathBuf, process::Command};
|
||||||
|
|
||||||
let out_dir = PathBuf::from(env::var("OUT_DIR").expect("OUT_DIR is set by Cargo"));
|
let out_dir = PathBuf::from(env::var("OUT_DIR").expect("OUT_DIR is set by Cargo"));
|
||||||
|
let target = env::var("TARGET").expect("TARGET is set by Cargo");
|
||||||
|
let arch = match target.as_str() {
|
||||||
|
"aarch64-apple-darwin" => "arm64",
|
||||||
|
"x86_64-apple-darwin" => "x86_64",
|
||||||
|
_ => panic!("unsupported macOS notification bridge target: {target}"),
|
||||||
|
};
|
||||||
let object_path = out_dir.join("macos_notifications.o");
|
let object_path = out_dir.join("macos_notifications.o");
|
||||||
let source_path = PathBuf::from("src/macos_notifications.m");
|
let source_path = PathBuf::from("src/macos_notifications.m");
|
||||||
|
|
||||||
println!("cargo:rerun-if-changed={}", source_path.display());
|
println!("cargo:rerun-if-changed={}", source_path.display());
|
||||||
|
println!("cargo:rerun-if-env-changed=TARGET");
|
||||||
|
|
||||||
let status = Command::new("clang")
|
let status = Command::new("clang")
|
||||||
.args([
|
.args([
|
||||||
"-fobjc-arc",
|
"-fobjc-arc",
|
||||||
"-c",
|
"-c",
|
||||||
|
"-arch",
|
||||||
|
arch,
|
||||||
source_path
|
source_path
|
||||||
.to_str()
|
.to_str()
|
||||||
.expect("notification bridge path is UTF-8"),
|
.expect("notification bridge path is UTF-8"),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user