mirror of
https://github.com/jmcorgan/fips.git
synced 2026-07-30 19:46:15 +00:00
Foundation for "BLE v2" universal per-peer PSM discovery, shared by every BleIo backend. - ble/psm.rs: a 16-bit little-endian service-data PSM codec + a short-lived BleAddr->PSM map (learn/lookup/resolve/clear), with unit tests. Every node advertises its OS-assigned listener PSM and every dialer reads a peer's advertised PSM before connect(), replacing the fixed DEFAULT_PSM (0x0085) assumption that only BlueZ could satisfy (Android/macOS get OS-assigned listener PSMs). - Un-gate the BLE transport module from linux-only to a new `ble_available` cfg (linux/macos/android). The pool/discovery/psm logic and the generic BleTransport<I> are platform-agnostic; only the concrete BleIo backend is platform-specific (BluerIo on linux-glibc, else the MockBleIo fallback). The macOS BluestIo and Android AndroidIo backends, and the per-backend advertise/scan/connect wiring of the PSM map, land in follow-ups.
59 lines
2.3 KiB
Rust
59 lines
2.3 KiB
Rust
use std::process::Command;
|
|
|
|
fn main() {
|
|
// Git commit hash (short)
|
|
let git_hash = Command::new("git")
|
|
.args(["rev-parse", "--short=10", "HEAD"])
|
|
.output()
|
|
.ok()
|
|
.filter(|o| o.status.success())
|
|
.map(|o| String::from_utf8_lossy(&o.stdout).trim().to_string())
|
|
.unwrap_or_default();
|
|
println!("cargo:rustc-env=FIPS_GIT_HASH={git_hash}");
|
|
|
|
// Dirty working tree
|
|
let dirty = Command::new("git")
|
|
.args(["status", "--porcelain"])
|
|
.output()
|
|
.ok()
|
|
.filter(|o| o.status.success())
|
|
.map(|o| !o.stdout.is_empty())
|
|
.unwrap_or(false);
|
|
if dirty {
|
|
println!("cargo:rustc-env=FIPS_GIT_DIRTY=-dirty");
|
|
} else {
|
|
println!("cargo:rustc-env=FIPS_GIT_DIRTY=");
|
|
}
|
|
|
|
// Build target triple
|
|
if let Ok(target) = std::env::var("TARGET") {
|
|
println!("cargo:rustc-env=FIPS_TARGET={target}");
|
|
}
|
|
|
|
// Rebuild when commits change
|
|
println!("cargo:rerun-if-changed=.git/HEAD");
|
|
println!("cargo:rerun-if-changed=.git/refs/");
|
|
|
|
// Support reproducible builds (Debian packaging)
|
|
println!("cargo:rerun-if-env-changed=SOURCE_DATE_EPOCH");
|
|
|
|
// bluer/BlueZ is glibc-linux only: musl cross-compiles (OpenWrt) can't
|
|
// satisfy libdbus-sys's pkg-config cross-compile requirement, and musl
|
|
// router targets don't run BlueZ by default anyway.
|
|
println!("cargo:rustc-check-cfg=cfg(bluer_available)");
|
|
// `ble_available` gates the platform-agnostic BLE transport module (pool,
|
|
// discovery, per-peer PSM, the generic `BleTransport`). The module compiles
|
|
// on every platform that has — or will have — a concrete `BleIo` backend;
|
|
// the backend is selected per-platform (BluerIo on linux-glibc, BluestIo on
|
|
// macOS, AndroidIo on Android, else the in-memory MockBleIo fallback).
|
|
println!("cargo:rustc-check-cfg=cfg(ble_available)");
|
|
let target_os = std::env::var("CARGO_CFG_TARGET_OS").unwrap_or_default();
|
|
let target_env = std::env::var("CARGO_CFG_TARGET_ENV").unwrap_or_default();
|
|
if target_os == "linux" && target_env != "musl" {
|
|
println!("cargo:rustc-cfg=bluer_available");
|
|
}
|
|
if matches!(target_os.as_str(), "linux" | "macos" | "android") {
|
|
println!("cargo:rustc-cfg=ble_available");
|
|
}
|
|
}
|