Rustup et cross-compilation

#Raspberry #Linux #Rust

Rustup est l'outil servant à gérer les différentes versions de rust installées sur son ordinateur, il permet également de facilement ajouter des cibles afin de profiter de la cross-compilation.

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Configuration

Une fois l'installation faite il est possible d'installer une target pour pouvoir cross-compiler.

# Pour un Raspberry Pi 3
rustup target add armv7-unknown-linux-gnueabihf

# Éditez $HOME/.cargo/config pour lier la cible et le compileur c
[target.armv7-unknown-linux-gnueabihf]
linker = "arm-linux-gnueabihf-gcc"

Il faudra alors veiller à avoir, sur son système, les versions de GNU Binutils, GCC ou GLIBC (par exemple) supportant votre hôte cible. Par exemple sous Fedora il faut passer via Copr pour installer cela.

Compilation

Il ne reste plus qu'à lancer la commande pour lancer le build.

cargo build --release --target=armv7-unknown-linux-gnueabihf

Supplément

OpenSSL

Sacrés soucis de compilation avec openssl, plusieurs solutions sont possibles1.

wget https://www.openssl.org/source/openssl-xxx.tar.gz
tar xzf openssl-xxx.tar.gz
export MACHINE=armv7
export ARCH=arm
export CC=arm-linux-gnueabihf-gcc
cd openssl-xxx && ./config shared && make && cd -

export OPENSSL_LIB_DIR=/tmp/openssl-xxx/
export OPENSSL_INCLUDE_DIR=/tmp/openssl-xxx/include

Sass

Avec sass-rs il faut bien veiller à ce que cmake soit installer sur votre OS pour la cross-compilation. L'erreur soulevée par rust n'était pas limpide et j'ai passé du temps à m'énerver alors que la solution était toute simple.

Cross

Pour la cross-compilation il est également possible d'utiliser cross. De ce que je comprends ça utilise docker pour simplifier les choses...


  1. Doc Rust sur OpenSSL https://docs.rs/openssl/ 

Si le billet vous a plu, n'hésitez pas laisser un commentaire ou bien passer déposer quelquechose dans ma Mystery Box.