Commit 12a41db9 authored by Éloïs's avatar Éloïs

durs : add docker method to cross compile arm

parent b24a2e0c
......@@ -4,35 +4,65 @@ Date: 2018-06-09
Slug: cross-compilation-pour-arm
Authors: elois
Il y a deux Méthodes différentes pour cross-compiler Duniter-Rust pour arm :
1. Cross-compiler proprement pour armv6 via docker.
2. Cross-compiler manuellement pour armv7 (mais sans OpenSSL).
La 1ère méthode a l'inconvénient de ne pas bénéficier des optimisations de l'architecture armv7. Elle est toutefois plus propre, c'est la méthode que j'adopterai pour les livrables officiels.
La 2ème méthode à l'inconvénient de compiler Duniter-Rust sans OpenSSL, le noeud duniter qui en résulte ne pourra donc cas conatcter des endpoints qui exigent une couche TLS.
# Méthode 1 : Cross-compiler proprement pour armv6 via docker
Tout d'abord installez docker, pour cela suivez la documentation officielle :
Ensuite cloner le dépot Duniter-Rust puis placez vous a sa racine :
git clone https://git.duniter.org/nodes/rust/duniter-rs.git
cd duniter-rs
Enfin lancez l'image docker qui se chargera de compiler Duniter-Rust pour armv6 :
sudo docker run -it --rm -v $(pwd):/source dlecan/rust-crosscompiler-arm:stable
A noter que cette image docker permet de compiler n'importe quel programme rust, elle n'est pas spécifique a Duniter.
Vous pouvez retrouver les sources de cette image et le manuel expliquant les différentes options sur le dépot github : https://github.com/dlecan/rust-crosscompiler-arm
Une fois la compilation terminée, votre binaire final est le fichier `durs` qui se trouve dans `target/arm-unknown-linux-gnueabihf/release`.
C'est un "binaire tout en un" vous pouvez le copier n'importe ou sur votre raspberry pi puis vous n'avez plus qu'a l'éxécuter dans un terminal.
# Méthode 2 : cross-compiler manuellement pour armv7
Fonctionne sur ubuntu 16.04.
Vous devez avoir rust d'installé sur votre machine, si tel n'est pas le cas installez Rust en une seule ligne de commande :
curl https://sh.rustup.rs -sSf | sh
Une fois que vous avez Rust, ajoutez la toolchain arm :
rustup target add armv7-unknown-linux-gnueabihf
Installez les paquets debian suivants :
sudo apt-get install gcc-4.7-multilib-arm-linux-gnueabihf crossbuild-essential-armhf
Indiquez a cargo quel compilateur il doit utiliser lorsqu'il compilera avec la toolchain arm, pour cela créez le fichier `~/.cargo/config` et collez y le contenu suivant :
[target.armv7-unknown-linux-gnueabihf]
linker = "arm-linux-gnueabihf-gcc-4.7"
Rendez vous a la racine du dépot de Duniter-Rust puis compilez avec la toolchain arm :
cd duniter-rs
cargo build --target=armv7-unknown-linux-gnueabihf --no-default-features --release
Si votre terminal vous dit que la commande `cargo` n'existe pas, c'est que vous devez ajouter le chemin `~/.cargo/bin` à votre variable d'environnement `PATH` :
export PATH="$HOME/.cargo/bin:$PATH"
_Explication des options de la commande de compilation :_
* target : indique a cargo la toolchain avec laquelle compiler.
* target : indique a cargo la toolchain avec laquelle compiler.
* no-default-features : indique a cargo de ne pas inclure les features optionelles, cela permet nottament de ne pas inclure OpenSSL qui est très difficile à cross-compiler. (OpenSSl est loin d'être indispensable, ça seule utilitée est de permettre a WS2P Privé de contacter des endpoints WS2P en https).
* release : Permet de compiler en mode release, c'est a dire avec les optimisations de code et sans les points d'entrée nécessaire à un déboggeur. SI vous omettez cette option, cargo compilera en mode debug, c'est adire sans optimisation de code et avec les points d'entrée permetant d'utiliser un déboggeur. La compilation en mode debug est plus rapide mais le binaire final est beaucoup plus gros et duniter beaucoup plus lent, a n'utiliser que pour débugger donc.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment