X Tutup
Skip to content

Cross‐compiling using cross

IoIxD edited this page Dec 3, 2024 · 1 revision

Cross-compiling using cross

The @rust-embedded project provides a handy tool called cross that uses docker to cross-compile any cargo project to one of their many supported platforms. This tool makes it easy to cross-compile raylib-rs for binary distribution (in cases where you are producing a pre-compiled game for example).

Anything to Windows

Cross-compiling from other platforms to Windows is the simplest. Just build your project with this command instead of the usual cargo build:

cross build --target x86_64-pc-windows-gnu --release

It should be noted that the resulting exe will likely not run under wine due to an issue with Raylib's audio handling.

Anything to Linux

Cross-compiling from any platform to Linux, or from Linux to Linux requires a little extra work since raylib-sys has some system dependencies not provided by cross. This following example assumes you are compiling for x86_64-unknown-linux-gnu, but it can be any Linux-y triple.

Firstly, a custom build container must be defined. The following Dockerfile is the minimum setup for compiling raylib-sys:

FROM rustembedded/cross:x86_64-unknown-linux-gnu-0.2.1

RUN apt-get update -y
RUN apt-get install libasound2-dev mesa-common-dev libx11-dev libxrandr-dev libxi-dev xorg-dev libgl1-mesa-dev libglu1-mesa-dev -y

With the image defined, build it locally with:

docker build -t raylib_rs_env .

This will produce a local docker image called raylib_rs_env which cross will use instead of the default Linux image(s). To tell cross to use this image, create a Cross.toml file beside your Cargo.toml, and add the following (remembering to change things to suit your setup):

[target.x86_64-unknown-linux-gnu]
image = "raylib_rs_env"

The Linux build can now be produced with:

cross build --target x86_64-unknown-linux-gnu --release

MacOS / Darwin / IOS

cross does not support cross-compilation to any of Apple's operating systems as of now. Keep an eye on their repository in case this ever changes.

Clone this wiki locally

X Tutup