Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
tutoriel:xcompile_arm [Le 01/12/2020, 07:01] 90.100.95.21tutoriel:xcompile_arm [Le 01/12/2020, 07:36] (Version actuelle) fbo25
Ligne 1: Ligne 1:
 +{{tag>tutoriel compilation programmation}}
 +-----
 +====== Compilation croisée (cross-compiling) pour architecture arm ======
  
 +<note important>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 :
 +<file>
 +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
 +...
 +</file>
 +
 +Contrôler que tout va bien en lançant une mise à jour :
 +<file bash>sudo apt update</file>
 +
 +Ensuite, ajouter l'architecture souhaitée. Exemple pour ajouter une architecture armhf :
 +<file bash>sudo dpkg --add-architecture armhf</file>
 +
 +Créer le fichier qui va lister les sources pour la nouvelle architecture dans /etc/sources.list.d . Exemple :
 +<file bash>sudo vi /etc/apt/sources.list.d/ubuntu-armhf.list</file>
 +
 +Y ajouter la liste des sources en précisant l'architecture. Exemple pour armhf :
 +<file>
 +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
 +</file>
 +
 +Enregistrer et quitter l'éditeur puis lancer une actualisation de dépôts :
 +<file bash>sudo apt update</file>
 +
 +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 :
 +<file bash>sudo apt install libssl-dev:armhf</file>
 +
 +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 :
 +<file bash>make CC=arm-linux-gnueabihf-gcc</file>
 +
 +Pour des sources C++ :
 +<file bash>make CXX=arm-linux-gnueabihf-g++</file>
 +
 +----- Les informations fournies après cette ligne sont obsolètes -----------------------------
 +
 +</note>
 +
 +
 +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 [[http://ftp.gnu.org/gnu/mpfr|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.
 +
 +<note tip>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.</note>
 +
 +===== Script =====
 +<file bash>
 +  #!/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
 +</file>
 +Il vous faudra éventuellement [[:tutoriel:comment_installer_un_paquet|installer deux paquets]] supplémentaires AVANT de relancer cette installation si celle-ci échoue à savoir :
 +  * s'il vous manque gmp => **[[apt>lib32gmp3-dev]]**
 +  * s'il vous manque MPC  => **[[apt>libmpc-dev]]**
 +relancez le script et tout devrait s'achever correctement.