139 lines
3.3 KiB
Markdown
139 lines
3.3 KiB
Markdown
### Cross Compile
|
|
|
|
For cross compiling on fedora linux, you need to install some extra packages:
|
|
|
|
- mingw compiler:
|
|
```
|
|
dnf install mingw64-filesystem mingw64-binutils mingw64-gcc{,-c++} mingw64-crt mingw64-headers mingw64-pkg-config mingw64-hamlib mingw64-libpng mingw64-libusbx mingw64-portaudio mingw64-fltk mingw64-libgnurx mingw64-gettext mingw64-winpthreads-static intltool
|
|
```
|
|
|
|
- rust tools:
|
|
```
|
|
rustup target add x86_64-pc-windows-gnu
|
|
```
|
|
|
|
[Cross](https://github.com/cross-rs/cross#dependencies) could be an option to.
|
|
|
|
To build, run: `cargo build --release --target=x86_64-pc-windows-gnu`
|
|
|
|
### Static Linking
|
|
|
|
Running `cargo build` ends up in a binary which depend on **libc.so**. But you can compile also the binary totally static:
|
|
|
|
- install musl compiler:
|
|
- `dnf install musl-gcc`
|
|
- add target:
|
|
- `rustup target add x86_64-unknown-linux-musl`
|
|
|
|
Compile with: `cargo build --release --target=x86_64-unknown-linux-musl`.
|
|
|
|
This release should run on any Linux distro.
|
|
|
|
### Compile from Linux for macOS
|
|
|
|
Add toolchain:
|
|
|
|
```Bash
|
|
# for arm64
|
|
rustup target add aarch64-apple-darwin
|
|
|
|
# for x86_64
|
|
rustup target add x86_64-apple-darwin
|
|
```
|
|
|
|
Add linker and ar settings to `~/.cargo/config`:
|
|
|
|
```Bash
|
|
[target.x86_64-apple-darwin]
|
|
linker = "x86_64-apple-darwin20.4-clang"
|
|
ar = "x86_64-apple-darwin20.4-ar"
|
|
|
|
[target.aarch64-apple-darwin]
|
|
linker = "aarch64-apple-darwin20.4-clang"
|
|
ar = "aarch64-apple-darwin20.4-ar"
|
|
```
|
|
|
|
Follow this guide: [rust-cross-compile-linux-to-macos](https://wapl.es/rust/2019/02/17/rust-cross-compile-linux-to-macos.html)
|
|
|
|
Or setup [osxcross](https://github.com/tpoechtrager/osxcross) correctly.
|
|
|
|
Add **osxcross/target/bin** to your **PATH** and run cargo with:
|
|
|
|
```Bash
|
|
# for arm64
|
|
CC="aarch64-apple-darwin20.4-clang -arch arm64e" cargo build --release --target=aarch64-apple-darwin
|
|
|
|
# for x86_64
|
|
CC="o64-clang" cargo build --release --target=x86_64-apple-darwin
|
|
```
|
|
|
|
### Compile for armv7 Linux
|
|
|
|
Add toolchain:
|
|
|
|
```Bash
|
|
rustup target add armv7-unknown-linux-gnueabihf
|
|
```
|
|
|
|
Add cross compiler:
|
|
|
|
```Bash
|
|
dnf copr enable lantw44/arm-linux-gnueabihf-toolchain
|
|
|
|
dnf install arm-linux-gnueabihf-{binutils,gcc,glibc}
|
|
```
|
|
|
|
Add target to `~/.cargo/config`:
|
|
|
|
```Bash
|
|
[target.armv7-unknown-linux-gnueabihf]
|
|
linker = "arm-linux-gnueabihf-gcc"
|
|
rustflags = [ "-C", "target-feature=+crt-static", "-C", "link-arg=-lgcc" ]
|
|
```
|
|
|
|
### Compile for aarch64 Linux
|
|
|
|
Add toolchain:
|
|
|
|
```Bash
|
|
rustup target add aarch64-unknown-linux-gnu
|
|
```
|
|
|
|
Add cross compiler:
|
|
|
|
```Bash
|
|
dnf copr enable lantw44/aarch64-linux-gnu-toolchain
|
|
|
|
dnf install aarch64-linux-gnu-{binutils,gcc,glibc}
|
|
```
|
|
|
|
Add target to `~/.cargo/config`:
|
|
|
|
```Bash
|
|
[target.aarch64-unknown-linux-gnu]
|
|
linker = "aarch64-linux-gnu-gcc"
|
|
rustflags = [ "-C", "target-feature=+crt-static", "-C", "link-arg=-lgcc" ]
|
|
```
|
|
|
|
### Create debian DEB and RHEL RPM packages
|
|
|
|
install:
|
|
- `cargo install cargo-deb`
|
|
- `cargo install cargo-generate-rpm`
|
|
|
|
And run with:
|
|
|
|
```Bash
|
|
# for debian based systems:
|
|
cargo deb --target=x86_64-unknown-linux-musl
|
|
|
|
# for armhf
|
|
cargo deb --target=armv7-unknown-linux-gnueabihf --variant=armhf -p ffplayout --manifest-path=ffplayout-engine/Cargo.toml
|
|
|
|
# for arm64
|
|
cargo deb --target=aarch64-unknown-linux-gnu --variant=arm64 -p ffplayout --manifest-path=ffplayout-engine/Cargo.toml
|
|
|
|
# for rhel based systems:
|
|
cargo generate-rpm --target=x86_64-unknown-linux-musl
|
|
```
|