Utiliser Cargo avec Buildroot (construction complète)
Cargo est le gestionnaire de paquets officiel pour Rust. Il téléchargera les dépendances d'un projet Rust et compilera le tout. L'ajout du support de Cargo dans Buildroot permettra à l'utilisateur final de compiler facilement des programmes pour un système embarqué.
Nous supposons qu'un environement basé sur Buildroot a déjà été mis en place comme cela a précédemment été décrit.
Construction de Cargo
Récupérez le code source de la dernière version (0.9.0) et décompressez le:
git clone --recursive https://github.com/rust-lang/cargo \ -b 0.9.0 \ $HOME/build/demo-rust/qemu/arm/build/host-cargo-0.9.0
Cargo dépend de OpenSSL et de CMake (et de Python, mais un interpréteur Python est supposé être déjà installé sur la machine de développement):
Il dépend aussi de la version hôte de libssh2, qui n'est malheureusement pas disponible sous Buildroot. Cependant il est simple de l'ajouter:
echo '$(eval $(host-autotools-package))' >> package/libssh2/libssh2.mk make O=$HOME/build/demo-rust/qemu/arm host-libssh2
Configurez et lancez la construction:
export PATH=$HOME/build/demo-rust/qemu/arm/host/usr/bin:$PATH export PKG_CONFIG=$HOME/build/demo-rust/qemu/arm/host/usr/bin/pkgconf export LIBRARY_PATH=$HOME/build/demo-rust/qemu/arm/host/usr/lib pushd $HOME/build/demo-rust/qemu/arm/build/host-cargo-0.9.0 ./configure --prefix=$HOME/build/demo-rust/qemu/arm/host/usr \ --localstatedir=$HOME/build/demo-rust/qemu/arm/host/var/lib \ --sysconfdir=$HOME/build/demo-rust/qemu/arm/host/etc make make install popd
Notez que Cargo se construit à partir d'une autre version de lui-même, comme on peut le voir dans le journal de construction:
Test de Cargo
Il est temps de tester Cargo. Créez un nouveau projet (ou "crate") pour le programme "Hello World":
Afin de d'effectuer une compilation croisée d'un projet, quelques paramètres doivent figurer dans le fichier de configuration de Cargo. Créez le fichier ainsi:
mkdir .cargo cat <<EOF > .cargo/config [target.arm-buildroot-linux-gnueabihf] linker = "arm-buildroot-linux-gnueabihf-gcc" EOF
Cargo est configuré pour utiliser l'éditeur de liens de la chaîne de compilation générée par Buildroot, lorsque la cible choisie est "arm-buildroot-linux-gnueabihf".
Indiquez au compilateur Rust l'endroit où trouver les spéficiations de la cible:
Maintenant, lancez la construction du projet:
Une fois la construction finie, vérifiez que le fichier exécutable généré correspond bien à une architecture ARM:
$ file -b target/arm-buildroot-linux-gnueabihf/release/hello-rust ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 4.5.0, not stripped
Enfin, copiez le fichier binaire dans le système de fichier de la cible:
cp -a target/arm-buildroot-linux-gnueabihf/release/hello-rust \ $HOME/build/demo-rust/qemu/arm/target/usr/bin
Pour plus de détails sur Cargo et la création de projets, veuillez vous référer à la documentation de Cargo.