crosstool-NG

Fiche logiciel à valider
  • Création ou MAJ importante : 18/04/13
  • Correction mineure : 23/08/13
Mots-clés
Pour aller plus loin
  • Fiches logiciel PLUME connexes : Cygwin
Fiche en recherche de relecteurs
Cette fiche est en recherche de relecteurs. Si vous êtes intéressé(e)s, contactez-nous !

crosstool-NG : compilation croisée sur un PC/Mac de développement

Ce logiciel est en cours d'évaluation par la communauté PLUME. Si vous utilisez ce logiciel en production dans notre communauté, merci de déposer un commentaire.
  • Site web
  • Système : UNIX-like
  • Téléchargement
  • Version évaluée : 1.18.0
  • Langue(s) de l'interface :
  • Licence : GPL, LGPL
    • Le fichier de licence (nommé COPYING) est fourni avec le paquetage du projet.
    • La documentation de crosstool-NG est en Creative Commons v2.5.
    • Les patchs fournis avec crosstool-NG sont sous la même licence que le projet auquel ils s'appliquent. Par exemple, la licence du noyau Linux s'applique aux patchs sur le noyau fournis avec crosstool-NG.
    • Le reste des fichiers qui composent crosstool-NG sont sous licence GPLv2.
Description
Fonctionnalités générales

Le projet crosstool-NG permet de mettre en place facilement une chaîne de compilation croisée sur un PC de développement (PC hôte). Une chaîne de compilation croisée permet de compiler du code source développé en C, C++, Fortran et/ou Java, à partir d’une machine hôte (majoritairement x86 ou x86_64) à destination d’une machine cible d’architecture différente (typiquement une carte électronique embarquée d'architecture Alpha, ARM, MIPS, PowerPC, Sparc...). La majeure partie des projets sur l'embarqué utilise ce procédé car la machine hôte est beaucoup plus puissante que la machine cible. Le temps de compilation et de développement s’en trouve considérablement réduit.

Autres fonctionnalités
  • Au delà du compilateur croisé obtenu par défaut (compilateur C: GCC), la chaîne de compilation croisée obtenue offre tous les outils nécessaires au développeur : addr2line, ar, objcopy, readelf, etc...

  • Avant de lancer la conception de la chaîne proprement dite, toutes les options comme par exemple l'obtention du langage C++, Fortran ou Java dans la chaîne, sont paramétrables par un menu intuitif du même type que celui du noyau Linux (menu de type ncurses).

Interopérabilité

crosstool-NG entre dans le cadre de la conception d'un système embarqué. Il est très répandu dans la conception de systèmes d'exploitation GNU/Linux embarqués. Quand bien même la carte embarquée (cible) est de même architecture que le PC de développement (hôte), il convient d'installer une chaîne de compilation croisée car celle-ci est le garant de la pérennité des bibliothèques utilisées pour la compilation et souvent un levier d'accélération notable. En effet, elle permet de mettre à "l'abri" les bibliothèques et exécutables des mises à jours du système d'exploitation du PC hôte.
Il est possible de vérifier que l'exécutable obtenu est bien pour l'architecture cible en utilisant la commande Unix :
file <nom_d_exécutable>.
Par exemple, après cross-compilation pour architecture ARM du code source binaire du nom helloworld, la commande file helloworld nous renvoie :

helloworld: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped

Entre deux binaires compilés à partir de sources identiques, avec des options identiques, l'un sur le système cible et l'autre par crosstool-NG, il n'y a aucune différence de fonctionnement.

Contexte d'utilisation dans mon laboratoire/service

Le Laboratoire de Physique de la Matière Condensée utilise une carte électronique embarquée pour piloter à distance un oscilloscope numérique sur une expérience scientifique de type RMN (Résonance Magnétique Nucléaire). Le chargeur de démarrage, le noyau Linux et l'ensemble du système de fichiers de la carte électronique ont été complètement ré-installés et personnalisés pour l'expérience scientifique. Le module Linux GPIB a été cross-compilé avec succès grâce à crosstool-NG. Le module GPIB fonctionne parfaitement sur la carte électronique embarquée.

Limitations, difficultés, fonctionnalités importantes non couvertes
  • Fonctionne nativement sur plate-formes GNU/Linux (peut fonctionner sous Mac et Windows avec Cygwin),
  • Toutes les architectures cibles ne sont pas couvertes,
  • Connexion réseau indispensable afin de télécharger les différents composants (pensez à paramétrer le proxy dans les variables d'environnement de votre PC) lors du lancement de la conception de la chaîne de compilation croisée,
  • PC hôte assez récent pour limiter le temps de conception de la chaîne (il faut compter 40 à 60 minutes avec une machine bien équipée !).
Environnement du logiciel
Distributions dans lesquelles ce logiciel est intégré

La plupart des revendeurs de cartes électroniques embarquées fournissent un CD/DVD contenant une chaîne de compilation croisée prête à l'emploi. Il suffit alors de lancer le script shell (ou python) pour l'installer dans son PC hôte.

Plates-formes

Voir rubrique Divers ci-dessous pour une description succincte du processus d'installation typique.

Logiciels connexes
Autres logiciels aux fonctionnalités équivalentes

Au-delà de l'obtention d'une chaîne de compilation croisée, les solutions équivalentes suivantes permettent de créer une distribution Linux embarquée :

  • Buildroot (sous licence GPLv2) : conçoit une distribution clé en main basée sur la bibliothèque uClibc (6 fois plus légère et donc plus adaptée pour l'embarqué que la bibliothèque traditionnelle Glibc utilisée par GNU/Linux).
  • OpenWRT (sous licence GPLv2) : projet essentiellement orienté pour les routeurs à base de puce Broadcom, la distribution est basée sur Buildroot (la chaîne de compilation est conçue avec la bibliothèque uClibc).
  • PTXdist (sous licence GPLv2) : conçoit également une distribution clé en main, le projet fournit en téléchargement quelques chaînes de compilation prêtes à l'emploi.
  • LTIB (sous licence GPLv2) : projet soutenu par l'entreprise américaine Freescale spécialisée dans la conception de cartes électroniques embarquées, la chaîne de compilation croisée peut être sous bibliothèque uClibc ou bibliothèque Glibc.
  • OpenEmbedded (sous licence GPLv2) : c'est le mastodonte ! Ce projet peut concevoir un système embarqué pourvu d'un environnement graphique allégé (avec la bibliothèque Qt 4) jusqu'à une distribution GNU/Linux embarquée minimaliste faisant moins d'1 Mo. La chaîne de compilation est quant à elle basée sur la bibliothèque Glibc.
  • Sourcery CodeBench Lite Edition (sous licence GPLv2) : anciennement Code Sourcery, depuis le rachat de Code Sourcery par l'entreprise Mentor Graphics. Sur le site Internet de ce dernier, il est proposé de télécharger des chaînes de compilation croisée toutes faites pour les architectures ARM, ColdFire, Intel, MIPS, PowerPC et SuperH. Avant de télécharger la chaîne voulue, il faut s'enregistrer sur la même page web que donne le lien du projet. L'installation est ensuite aisée car elle consiste à lancer un script d'installation. Sourcery CodeBench Lite Edition est accessible gratuitement jusqu'à maintenant. Mais nous n'avons aucune garantie de pérennité quant à sa gratuité contrairement aux autres projets cités précédemment.
Environnement de développement
Type de structure associée au développement

Le créateur du projet était un américain nommé Dan Kegel. Le nom du projet initial était crosstool. Le projet est abandonné par son auteur depuis décembre 2006. La dernière version (0.43) de crosstool est toujours téléchargeable à l'adresse http://kegel.com/crosstool/. Le projet est ensuite repris par un français nommé Yann Morin. Avril 2007, la première version du nouveau projet crosstool voit le jour. Le projet est d'ailleurs renommé crosstool-NG (l'acronyme ng pour Next Generation). Depuis, Mr Morin est très actif (une nouvelle version majeure tous les 3 à 4 mois) et rassemble de plus en plus de contributeurs français et étrangers autour de crosstool-NG.

Eléments de pérennité

crosstool-NG est très utilisé comme base de construction d'une distribution GNU/Linux embarquée clé en main.

Références d'utilisateurs institutionnels

L'entreprise bien connue ELDK base la conception de leurs chaînes de compilation croisée librement téléchargeables sous crosstool et crosstool-NG (http://ftp.denx.de/pub/eldk/).

Environnement utilisateur
Liste de diffusion ou de discussion, support et forums

Il n'y a pas à proprement parler de forum de discussion ni de support. Néanmoins, l'auteur du projet est joignable par e-mail, par Internet Relay Chat, IRC (il donne même ses horaires probables de présence).

Documentation utilisateur

L'ensemble de la documentation est accessible dans le tarball compressé de la version de crosstool-NG que l'on télécharge depuis le site officiel du projet. Elle est rassemblée dans le répertoire "docs". Elle est claire et en anglais.

Divers (astuces, actualités, sécurité)

La chaîne de compilation croisée s'obtient en plusieurs étapes :

  1. Il convient au préalable d'obtenir le binaire "ct-ng" par compilation classique (./configure, make, make install) des sources à partir du répertoire crosstool-ng-x.xx.x (où x désigne le numéro de version de crosstool-NG). Ce binaire va permettre de paramétrer le type de chaîne que vous désirez concevoir et installer. En effet, il est impossible techniquement de créer une chaîne de compilation croisée pour toutes les architectures existantes (il est possible d'en installer plusieurs pour chaque architecture : ARM ou MIPS ou SH4 etc...).
  2. L'étape suivante est de paramétrer notre future chaîne de compilation grâce au binaire "ct-ng" (quelle architecture ?, quels outils de débogage ? etc...) en lançant la commande "ct-ng menuconfig" (menu type ncurses).
  3. Une fois le paramétrage fait, nous lançons la conception de la chaîne de compilation par la commande "ct-ng build".
  4. Une fois compilée et installée, la chaîne de compilation croisée se résume à un ensemble de binaires comme, par exemple, pour l'architecture ARM :
    arm-unknown-linux-gnueabi-gcc
    arm-unknown-linux-gnueabi-g++
    arm-unknown-linux-gnueabi-gfortran
    etc...

Remarques :
La commande "ct-ng --help" : donne l'ensemble des options du binaire,
La commande "ct-ng list-samples" : donne l'ensemble des configurations prédéfinies pour toutes les architectures supportées,
La commande "ct-ng <nom de l'architecture cible>" (exemple: arm-unknown-linux-gnueabi) : prédéfinie automatiquement la configuration désirée. Un simple "ct-ng build" et vous voilà avec une chaîne de compilation croisée capable de compiler du code source (C, C++,etc...) pour ARM.

Contributions

Pour contribuer au projet, l'auteur propose de prendre contact par courriel.

Commentaires

Proposition d'ajout

Fiche intéressante, j'y retrouve ce que je connais de cet outil.

On pourrait ajouter dans logiciels connexes :
* LLVM Dans certains cas on peut l'utiliser pour faire du développement croisé.
* NETBSD : C'est un OS, mais il contient tous les outils nécessaires pour construire un cross compilateur capable de construire un OS et les outils utilisateurs. http://www.netbsd.org/docs/guide/en/chap-build.html