first successful ipad build
Signed-off-by: Sienna Meridian Satterwhite <sienna@r3t.io>
This commit is contained in:
85
crates/libmarathon/build.rs
Normal file
85
crates/libmarathon/build.rs
Normal file
@@ -0,0 +1,85 @@
|
||||
use std::env;
|
||||
use std::path::PathBuf;
|
||||
use std::process::Command;
|
||||
|
||||
fn main() {
|
||||
// Only compile Swift code when building for iOS
|
||||
let target_os = env::var("CARGO_CFG_TARGET_OS").unwrap_or_default();
|
||||
|
||||
if target_os != "ios" {
|
||||
println!("cargo:warning=Not building for iOS, skipping Swift compilation");
|
||||
return;
|
||||
}
|
||||
|
||||
println!("cargo:warning=Building Swift bridge for iOS");
|
||||
|
||||
let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
|
||||
let out_dir = PathBuf::from(env::var("OUT_DIR").unwrap());
|
||||
|
||||
let swift_src = manifest_dir.join("src/platform/ios/PencilCapture.swift");
|
||||
let header = manifest_dir.join("src/platform/ios/PencilBridge.h");
|
||||
let object_file = out_dir.join("PencilCapture.o");
|
||||
|
||||
// Get the iOS SDK path
|
||||
let sdk_output = Command::new("xcrun")
|
||||
.args(&["--sdk", "iphoneos", "--show-sdk-path"])
|
||||
.output()
|
||||
.expect("Failed to get iOS SDK path");
|
||||
|
||||
let sdk_path = String::from_utf8_lossy(&sdk_output.stdout).trim().to_string();
|
||||
|
||||
println!("cargo:warning=Using iOS SDK: {}", sdk_path);
|
||||
|
||||
// Compile Swift to object file
|
||||
let status = Command::new("swiftc")
|
||||
.args(&[
|
||||
"-sdk", &sdk_path,
|
||||
"-target", "arm64-apple-ios14.0", // Minimum iOS 14
|
||||
"-import-objc-header", header.to_str().unwrap(),
|
||||
"-parse-as-library",
|
||||
"-c", swift_src.to_str().unwrap(),
|
||||
"-o", object_file.to_str().unwrap(),
|
||||
])
|
||||
.status()
|
||||
.expect("Failed to compile Swift");
|
||||
|
||||
if !status.success() {
|
||||
panic!("Swift compilation failed");
|
||||
}
|
||||
|
||||
println!("cargo:warning=Swift compilation succeeded");
|
||||
|
||||
// Create static library from object file
|
||||
let lib_file = out_dir.join("libPencilCapture.a");
|
||||
let ar_status = Command::new("ar")
|
||||
.args(&[
|
||||
"rcs",
|
||||
lib_file.to_str().unwrap(),
|
||||
object_file.to_str().unwrap(),
|
||||
])
|
||||
.status()
|
||||
.expect("Failed to create static library");
|
||||
|
||||
if !ar_status.success() {
|
||||
panic!("Failed to create static library");
|
||||
}
|
||||
|
||||
println!("cargo:warning=Created static library: {}", lib_file.display());
|
||||
|
||||
// Tell Cargo to link the static library
|
||||
println!("cargo:rustc-link-search=native={}", out_dir.display());
|
||||
println!("cargo:rustc-link-lib=static=PencilCapture");
|
||||
|
||||
// Link Swift standard library
|
||||
println!("cargo:rustc-link-lib=dylib=swiftCore");
|
||||
println!("cargo:rustc-link-lib=dylib=swiftFoundation");
|
||||
println!("cargo:rustc-link-lib=dylib=swiftUIKit");
|
||||
|
||||
// Link iOS frameworks
|
||||
println!("cargo:rustc-link-lib=framework=UIKit");
|
||||
println!("cargo:rustc-link-lib=framework=Foundation");
|
||||
|
||||
// Rerun if Swift files change
|
||||
println!("cargo:rerun-if-changed={}", swift_src.display());
|
||||
println!("cargo:rerun-if-changed={}", header.display());
|
||||
}
|
||||
Reference in New Issue
Block a user