diff options
Diffstat (limited to 'build.rs')
| -rw-r--r-- | build.rs | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/build.rs b/build.rs new file mode 100644 index 00000000..faab7f06 --- /dev/null +++ b/build.rs @@ -0,0 +1,43 @@ +use std::env; +use std::path::PathBuf; +use std::process::Command; + +fn main() { + println!("cargo:rerun-if-changed=build.rs"); + println!("cargo:rerun-if-changed=vendor/libghostty-vt.vendor.json"); + println!("cargo:rerun-if-changed=vendor/libghostty-vt/build.zig"); + println!("cargo:rerun-if-changed=vendor/libghostty-vt/build.zig.zon"); + println!("cargo:rerun-if-changed=vendor/libghostty-vt/VERSION"); + println!("cargo:rerun-if-env-changed=LIBGHOSTTY_VT_OPTIMIZE"); + + if env::var_os("CARGO_FEATURE_GHOSTTY_VT").is_none() { + return; + } + + let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR")); + let vendored_dir = manifest_dir.join("vendor/libghostty-vt"); + let optimize = env::var("LIBGHOSTTY_VT_OPTIMIZE").unwrap_or_else(|_| "ReleaseFast".into()); + + let status = Command::new("zig") + .arg("build") + .arg("-Demit-lib-vt") + .arg(format!("-Doptimize={optimize}")) + .current_dir(&vendored_dir) + .status() + .expect("failed to execute zig build for vendored libghostty-vt"); + assert!( + status.success(), + "zig build for vendored libghostty-vt failed: {status}" + ); + + let lib_dir = vendored_dir.join("zig-out/lib"); + println!("cargo:rustc-link-search=native={}", lib_dir.display()); + println!("cargo:rustc-link-lib=dylib=ghostty-vt"); + + let target = env::var("TARGET").expect("TARGET"); + if target.contains("linux") { + println!("cargo:rustc-link-arg=-Wl,-rpath,{}", lib_dir.display()); + } else if target.contains("apple-darwin") { + println!("cargo:rustc-link-arg=-Wl,-rpath,{}", lib_dir.display()); + } +} |
