use std::{path::Path, process::Command};
pub const LIBRARIES: &str = include_str!("../native-libraries.txt");
pub fn libraries(build: &Path) -> impl Iterator<Item = &'static str> + '_ {
LIBRARIES
.lines()
.filter(|&name| name != "jaccl" || build.join("jaccl/libjaccl.a").is_file())
}
pub fn find_clang_rt_path() -> Option<String> {
let output = Command::new("xcrun")
.args(["--show-sdk-platform-path"])
.output()
.ok()?;
if !output.status.success() {
return None;
}
let output = Command::new("xcode-select")
.args(["--print-path"])
.output()
.ok()?;
if !output.status.success() {
return None;
}
let developer_dir = String::from_utf8_lossy(&output.stdout).trim().to_string();
let toolchain_base = format!(
"{}/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang",
developer_dir
);
let clang_dir = std::fs::read_dir(&toolchain_base).ok()?;
for entry in clang_dir.flatten() {
let darwin_path = entry.path().join("lib/darwin");
let clang_rt_lib = darwin_path.join("libclang_rt.osx.a");
if clang_rt_lib.exists() {
return Some(darwin_path.to_string_lossy().to_string());
}
}
None
}