@xspect-build/cross-build
v1.0.0
Published
Cross-compile Rust projects without Docker.
Readme
@xspect-build/cross-build
Cross-compile Rust projects without Docker.
This package extracts the cross-compilation logic from @napi-rs/cli into a standalone package that can be used by any Rust project, not just those using NAPI-RS.
Features
- Cross-compile for Linux targets using
@napi-rs/cross-toolchain - Cross-compile for Windows using
cargo-xwin - Cross-compile for other platforms using
cargo-zigbuild - Android NDK support for Android targets
- WASI support for WebAssembly targets
- OpenHarmony support for HarmonyOS targets
Installation
npm install @xspect-build/cross-build
# or
yarn add @xspect-build/cross-build
# or
pnpm add @xspect-build/cross-buildUsage
Basic Build
import { build } from '@xspect-build/cross-build'
// Cross-compile for Linux ARM64
const result = await build({
target: 'aarch64-unknown-linux-gnu',
release: true,
useNapiCross: true,
})
console.log('Build succeeded:', result.success)
console.log('Environment variables used:', result.envs)Get Cross-Compile Environment Variables
If you want to get the environment variables needed for cross-compilation without actually building, you can use getCrossCompileEnv:
import { getCrossCompileEnv } from '@xspect-build/cross-build'
const env = getCrossCompileEnv({
target: 'aarch64-unknown-linux-gnu',
useNapiCross: true,
})
console.log(env)
// {
// CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: '...',
// TARGET_CC: '...',
// TARGET_CXX: '...',
// ...
// }Parse Target Triple
import { parseTriple } from '@xspect-build/cross-build'
const target = parseTriple('aarch64-unknown-linux-gnu')
console.log(target)
// {
// triple: 'aarch64-unknown-linux-gnu',
// platform: 'linux',
// arch: 'arm64',
// abi: 'gnu',
// platformArchABI: 'linux-arm64-gnu'
// }Options
CrossBuildOptions
| Option | Type | Description |
|--------|------|-------------|
| target | string | Target triple (e.g., 'aarch64-unknown-linux-gnu') |
| cwd | string | Working directory for the build |
| manifestPath | string | Path to Cargo.toml manifest file |
| targetDir | string | Directory for build artifacts |
| release | boolean | Build in release mode |
| verbose | boolean | Show verbose output |
| profile | string | Build profile (e.g., 'release', 'dev') |
| useNapiCross | boolean | Use @napi-rs/cross-toolchain for Linux cross-compilation |
| crossCompile | boolean | Use cargo-zigbuild/cargo-xwin for cross-compilation |
| useCross | boolean | Use cross-rs instead of cargo |
| strip | boolean | Strip debug symbols |
| package | string | Package name in workspace |
| bin | string | Binary name to build |
| features | string[] | Features to enable |
| allFeatures | boolean | Enable all features |
| noDefaultFeatures | boolean | Disable default features |
| cargoArgs | string[] | Additional cargo arguments |
| env | Record<string, string> | Additional environment variables |
Supported Targets
Linux Targets (via @napi-rs/cross-toolchain)
aarch64-unknown-linux-gnuaarch64-unknown-linux-muslx86_64-unknown-linux-gnux86_64-unknown-linux-muslarmv7-unknown-linux-gnueabihfriscv64gc-unknown-linux-gnupowerpc64le-unknown-linux-gnus390x-unknown-linux-gnu- And more...
Windows Targets (via cargo-xwin)
x86_64-pc-windows-msvci686-pc-windows-msvcaarch64-pc-windows-msvc
Other Platforms (via cargo-zigbuild)
- macOS (cross-arch)
- FreeBSD
- And more...
License
MIT
