aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/release.yml37
-rw-r--r--build.rs23
2 files changed, 45 insertions, 15 deletions
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index ca1620ae..1138edfd 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -48,18 +48,35 @@ jobs:
with:
targets: ${{ matrix.target }}
- - name: Install musl tools (Linux x86_64)
- if: matrix.target == 'x86_64-unknown-linux-musl'
- run: sudo apt-get update && sudo apt-get install -y musl-tools
+ - name: Install Zig
+ uses: mlugg/setup-zig@v2
+ with:
+ version: 0.15.2
+
+ - name: Install Linux build tools
+ if: runner.os == 'Linux'
+ run: sudo apt-get update && sudo apt-get install -y cmake ninja-build musl-tools gcc-aarch64-linux-gnu crossbuild-essential-arm64
- - name: Install cross-compilation tools (Linux aarch64)
+ - name: Install macOS build tools
+ if: runner.os == 'macOS'
+ run: brew install cmake ninja
+
+ - name: Set Linux aarch64 linker
if: matrix.target == 'aarch64-unknown-linux-musl'
- run: |
- sudo apt-get update
- sudo apt-get install -y gcc-aarch64-linux-gnu musl-tools
- # Install aarch64 musl cross-compiler
- sudo apt-get install -y crossbuild-essential-arm64
- echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
+ run: echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
+
+ - name: Cache Rust artifacts
+ uses: Swatinem/rust-cache@v2
+ with:
+ key: release-${{ matrix.target }}
+
+ - name: Cache vendored libghostty-vt build outputs
+ uses: actions/cache@v4
+ with:
+ path: |
+ vendor/libghostty-vt/.zig-cache
+ vendor/libghostty-vt/zig-out
+ key: ${{ runner.os }}-${{ matrix.target }}-libghostty-${{ hashFiles('vendor/libghostty-vt.vendor.json', 'vendor/libghostty-vt/build.zig', 'vendor/libghostty-vt/build.zig.zon', 'vendor/libghostty-vt/VERSION', 'build.rs') }}
- name: Build
run: cargo build --release --locked --target ${{ matrix.target }}
diff --git a/build.rs b/build.rs
index f4cbd170..a421c5c5 100644
--- a/build.rs
+++ b/build.rs
@@ -2,6 +2,18 @@ use std::env;
use std::path::PathBuf;
use std::process::Command;
+fn zig_target(target: &str) -> &str {
+ match target {
+ "x86_64-unknown-linux-gnu" => "x86_64-linux-gnu",
+ "aarch64-unknown-linux-gnu" => "aarch64-linux-gnu",
+ "x86_64-unknown-linux-musl" => "x86_64-linux-musl",
+ "aarch64-unknown-linux-musl" => "aarch64-linux-musl",
+ "x86_64-apple-darwin" => "x86_64-macos",
+ "aarch64-apple-darwin" => "aarch64-macos",
+ other => panic!("unsupported target for libghostty-vt build: {other}"),
+ }
+}
+
fn main() {
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rerun-if-changed=vendor/libghostty-vt.vendor.json");
@@ -13,11 +25,14 @@ fn main() {
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 target = env::var("TARGET").expect("TARGET");
+ let zig_target = zig_target(&target);
let status = Command::new("zig")
.arg("build")
.arg("-Demit-lib-vt")
.arg(format!("-Doptimize={optimize}"))
+ .arg(format!("-Dtarget={zig_target}"))
.current_dir(&vendored_dir)
.status()
.expect("failed to execute zig build for vendored libghostty-vt");
@@ -28,12 +43,10 @@ fn main() {
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");
+ println!("cargo:rustc-link-lib=static=ghostty-vt");
if target.contains("linux") {
- println!("cargo:rustc-link-arg=-Wl,-rpath,{}", lib_dir.display());
+ println!("cargo:rustc-link-lib=dylib=stdc++");
} else if target.contains("apple-darwin") {
- println!("cargo:rustc-link-arg=-Wl,-rpath,{}", lib_dir.display());
+ println!("cargo:rustc-link-lib=dylib=c++");
}
}