Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
tutoriel:xcompile_arm [Le 13/02/2010, 22:51] 213.95.41.13 |
tutoriel: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 ====== | ====== Compilation croisée (cross-compiling) pour architecture arm ====== | ||
- | Ceci est un article détaillé de [[compilation_croisée]] pour architecture arm! L'article cité précédemment donne la plus part des indications nécessaires. Il y a juste une lacune et une erreur. | + | |
+ | <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). | 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. | 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. | ||
Ligne 7: | Ligne 61: | ||
===== Script ===== | ===== Script ===== | ||
+ | <file bash> | ||
#!/bin/bash | #!/bin/bash | ||
| | ||
Ligne 14: | Ligne 69: | ||
### BINUTILS | ### BINUTILS | ||
| | ||
- | wget http://ftp.gnu.org/gnu/binutils/binutils-2.20.tar.bz2 | + | wget http://ftp.gnu.org/gnu/binutils/binutils-2.20.1.tar.bz2 |
- | tar xvf binutils-2.20.tar.bz2 | + | tar xvf binutils-2.20.1.tar.bz2 |
- | cd binutils-2.20 | + | cd binutils-2.20.1 |
- | + | ||
- | cd gas/config | + | |
- | cat <<END >tc-arm.patch | + | |
- | --- tc-arm.c 2009-08-30 00:10:59.000000000 +0200 | + | |
- | +++ fix_tc-arm.c 2010-02-11 13:46:23.541598748 +0100 | + | |
- | @@ -2486,8 +2486,10 @@ | + | |
- | frag->tc_frag_data.first_map = symbolP; | + | |
- | } | + | |
- | if (frag->tc_frag_data.last_map != NULL) | + | |
- | + { | + | |
- | know (S_GET_VALUE (frag->tc_frag_data.last_map) < S_GET_VALUE (symbolP)); | + | |
- | frag->tc_frag_data.last_map = symbolP; | + | |
- | + } | + | |
- | } | + | |
- | + | ||
- | /* We must sometimes convert a region marked as code to data during | + | |
- | END | + | |
- | patch -p0 tc-arm.c tc-arm.patch | + | |
- | cd - | + | |
| | ||
./configure --target=arm-linux | ./configure --target=arm-linux | ||
Ligne 74: | Ligne 110: | ||
rm -f gcc-4.4.3.tar.bz2 | rm -f gcc-4.4.3.tar.bz2 | ||
rm -f mpfr-2.4.2.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. |