, ,

Compilation croisée (cross-compiling) pour architecture arm

Les informations fournies après cet encadré sont obsolètes. Sur Groovy (et sans doute sur des versions antérieures), pour compiler pour une architecture arm, il suffit d'installer les paquets gcc-arm-linux-gnueabihf (architecture armhf) et/ou gcc-arm-linux-gnueabi (armel). Si vous avez besoin de librairies ou d'en-têtes supplémentaires, un certain nombre d'entre eux sont sûrement déjà disponibles dans votre configuration actuelle et peuvent être installés directement (exemple libc6 pour armhf est disponible dans les paquets : libc6-armhf-cross et libc6-dev-armhf-cross).

Cependant, si vous avez besoin d'une librairie non disponible de base, il faut modifier sa configuration apt et activer le "Multiarch". Procédure :

Editer le fichier /etc/apt/sources.list ainsi que tous les fichiers dans /etc/apt/sources.list.d pour préciser la ou les architecture(s) actuelle(s) entre crochets. Il est inutile de le faire pour les "deb-src" (le code source n'a pas d'architecture). Exemple :

deb [arch=amd64,i386] http://xxxxxx groovy restricted main
deb [arch=amd64,i386] http://xxxxxx groovy-updates restricted main
deb-src http://xxxxxx groovy-updates universe multiverse restricted main
...

Contrôler que tout va bien en lançant une mise à jour :

sudo apt update

Ensuite, ajouter l'architecture souhaitée. Exemple pour ajouter une architecture armhf :

sudo dpkg --add-architecture armhf

Créer le fichier qui va lister les sources pour la nouvelle architecture dans /etc/sources.list.d . Exemple :

sudo vi /etc/apt/sources.list.d/ubuntu-armhf.list

Y ajouter la liste des sources en précisant l'architecture. Exemple pour armhf :

deb [arch=armhf] http://ports.ubuntu.com/ groovy main universe restricted
deb [arch=armhf] http://ports.ubuntu.com/ groovy-updates main universe restricted
deb [arch=armhf] http://ports.ubuntu.com/ groovy-backports main restricted
deb [arch=armhf] http://ports.ubuntu.com/ groovy-security main restricted
deb [arch=armhf] http://ports.ubuntu.com/ groovy-security universe
deb [arch=armhf] http://ports.ubuntu.com/ groovy-security multiverse

Enregistrer et quitter l'éditeur puis lancer une actualisation de dépôts :

sudo apt update

Vous pouvez désormais installer les paquets spécifiques à l'architecture en la précisant après le nom du paquet, séparé par un ":". Exemple pour installer le paquet libssl-dev pour l'architecture armhf :

sudo apt install libssl-dev:armhf

Source : https://wiki.debian.org/fr/Multiarch/HOWTO

Afin de construire des sources en C et Makefile pour une architecture armhf, en général, au lieu de "make" tout court, il suffit d'utiliser :

make CC=arm-linux-gnueabihf-gcc

Pour des sources C++ :

make CXX=arm-linux-gnueabihf-g++

—– Les informations fournies après cette ligne sont obsolètes —————————–

Ceci est un article détaillé de compilation_croisée pour architecture arm! L'article cité précédemment donne la plupart des indications nécessaires. Il y a juste une lacune et une erreur. La lacune est qu'il faut installer les sources pour MPFR et le bug est qu'il manque deux accolades dans un fichier source de gcc (4.4.1). Pour vous faciliter la tâche et vous permettre de boire un café de plus aujourd'hui, je vous présente un petit script qui télécharge, compile et installe le tout tout seul.

Le script utilise des sudo pour les make install. Afin de vous demander le mot de passe tout au début pour que vous puissiez aller boire un café tranquillement, un sudo echo est placé en tête.

Script

  #!/bin/bash
 
  # Ask for the sudo password at the beginning so that you can go drinking coffee
  sudo echo "This script needs to be run as root."
 
  ### BINUTILS
 
  wget http://ftp.gnu.org/gnu/binutils/binutils-2.20.1.tar.bz2
  tar xvf binutils-2.20.1.tar.bz2
  cd binutils-2.20.1
 
  ./configure --target=arm-linux
  make all
  sudo make install
 
  cd ..
 
  ### MPFR
  wget http://ftp.gnu.org/gnu/mpfr/mpfr-2.4.2.tar.bz2
  tar xvf mpfr-2.4.2.tar.bz2
  cd mpfr-2.4.2
 
  ./configure --target=arm-linux
  make all
  sudo make install
 
  cd ..
 
  ### GCC 4.4
  wget http://ftp.gnu.org/gnu/gcc/gcc-4.4.3/gcc-4.4.3.tar.bz2
  tar xvf gcc-4.4.3.tar.bz2 
  cd gcc-4.4.3
 
  ./configure --enable-languages=c,c++ --disable-threads --disable-shared --disable-checking --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --target=arm-linux
 
  make all-gcc
  sudo make install-gcc
 
  cd ..
 
  ### Clean
 
  rm -rf binutils-2.20
  rm -rf gcc-4.4.3
  rm -rf mpfr-2.4.2
  rm -f binutils-2.20.tar.bz2
  rm -f gcc-4.4.3.tar.bz2
  rm -f mpfr-2.4.2.tar.bz2

Il vous faudra éventuellement installer deux paquets supplémentaires AVANT de relancer cette installation si celle-ci échoue à savoir :

relancez le script et tout devrait s'achever correctement.