Cross-Compilation Guide
Homeboy can orchestrate releases for any platform, but building native binaries requires access to that platform’s toolchain.
What Works Anywhere
| Task | Platform Required |
|---|---|
| Version management | Any |
| Changelog operations | Any |
| Git operations (commit, tag, push) | Any |
| Deploy to servers via SSH | Any |
| Publish Homebrew formula | Any |
| Build Linux x86_64 binaries | Linux |
What Requires Platform Access
| Task | Platform Required |
|---|---|
| Build macOS binaries | macOS or osxcross |
| Build Windows binaries | Windows or cross-toolchain |
| Build Linux ARM binaries | Linux ARM or cross |
Why?
Native binaries require platform-specific system libraries. For example, Rust crates like keyring and security-framework link against macOS frameworks (Security.framework, CoreFoundation.framework). These aren’t available on Linux without the macOS SDK.
Options for Cross-Platform Releases
Option 1: Hybrid (Recommended)
Use homeboy for orchestration, GitHub Actions for cross-platform builds:
homeboy version bump → triggers GitHub Actions → builds all platforms → uploads release
homeboy extension run homebrew → publishes formula to tapcargo-dist handles the cross-platform builds and generates the Homebrew formula with correct sha256 hashes.
Option 2: Platform-Specific Build Servers
Run homeboy on each platform:
- macOS server builds macOS binaries
- Windows server builds Windows binaries
- Linux server builds Linux binaries
Coordinate via fleet commands or post-release hooks.
Option 3: osxcross (Linux → macOS)
Install osxcross to cross-compile for macOS from Linux:
# Install dependencies
apt-get install clang cmake libssl-dev libxml2-dev
# Clone and build osxcross (requires macOS SDK)
git clone https://github.com/tpoechtrager/osxcross
cd osxcross
# Download Xcode and extract SDK (see osxcross docs)
./build.sh
# Configure Rust
rustup target add x86_64-apple-darwin aarch64-apple-darwinNote: The macOS SDK is ~1GB and Apple’s license restricts redistribution. Many open-source projects use osxcross, but be aware of the legal gray area.
Option 4: cargo-zigbuild (Partial)
Zig can cross-compile C code for macOS, but Rust crates with deep SDK dependencies (like security-framework) still fail:
# Install zig and cargo-zigbuild
cargo install cargo-zigbuild
# Works for simple crates
cargo zigbuild --release --target x86_64-apple-darwin
# Fails for crates needing Security.framework, etc.Homebrew Extension
The homebrew extension publishes formulas to your tap. It does not build binaries or generate formulas — it assumes:
- Binaries are already built and uploaded (to GitHub Releases, etc.)
- A formula file exists with correct download URLs and sha256 hashes
For full automation with cargo-dist:
- cargo-dist builds binaries and generates
homeboy.rb - Formula is uploaded as a release asset
homeboy extension run homebrewor post-release hook publishes to tap
Recommended Setup
For Rust CLI projects distributing via Homebrew:
- cargo-dist in GitHub Actions for cross-platform builds
- homeboy for release orchestration (bump, changelog, deploy)
- homebrew extension for tap publishing
This separates concerns:
- GitHub provides free macOS/Windows runners
- Homeboy handles the workflow you control
- No SDK licensing concerns
Future
If Apple ever allows SDK redistribution or Rust improves cross-compilation support, homeboy could handle everything. Until then, the hybrid approach is pragmatic.