Quelle est la meilleure toolchain pour ARM embarqué?

Sur le web, on trouve plusieurs toolchains ARM, qui peuvent être toutes utilisées pour programmer des cartes embarquées. Voici les principales:

  • YAGARTO (yet another arm toolchain)
  • buildroot
  • CodeSourcery (Sourcery CodeBench)
  • linaro (toolchain “officielle”)
  • GNUARM
  • WinARM

Toutes ces toolchains sont subtilement différentes:

  • CodeSourcery ne supporte pas les FPU (floating point unit) des Cortex-M4, et n’offre aucun support pour les utilisateurs de la version gratuite depuis le rachat de cette société par Mentor Graphics
  • WinARM et GNUARM sont préhistoriques, peu maintenues, etc
  • buildroot est prévue pour être utilisée dans l’environnement du même nom, et n’est pas toujours facile à obtenir séparément
  • C’est très pénible de compiler soi même une toolchain GCC complète

linaro est produite principalement pour les plate formes Android et Linux, et elle supporte les Cortex M4 (STM32, Stellaris etc). Son grand avantage est d’être supportée directement par la société ARM elle même, mais elle met 3 ou 4 fois plus de temps que les autres à compiler un programme. Pour un petit programme, cela peut sembler peu important, mais dès qu’on touche un projet plus volumineux, cela peut devenir pénible. De plus, elle inclut par défaut le support des exceptions C++, ce qui est totalement inutile sur les plate formes embarquées à mémoire réduite.

Pour regrouper le meilleur de ces mondes, Freddie Chopin, un expert en logiciel embarqué ARM très actif dans le monde open source /logiciel libre , a décidé de compiler et de distribuer sa propre toolchain, basée sur les paquets de la toolchain “officielle” linaro, mais en utilisant les options de constructions de CodeSourcery. Le résultat est doté de ces caractéristiques:

  • Plus rapide que Linaro,
  • Elle est compilée avec le compilateur le plus récent pour windows, mingw-w64 (et avec gcc sous linux)
  • Les paquets de base (le compilateur, newlib, gdb et binutils) proviennent directement des projets officiels, et utilisent les révisions les plus récentes,
  • Les autres composants (librairies requises pour la compilation de la toolchain, comme gmp, mpfr, mpc) sont les plus récentes versions stables (sauf si la documentation recommandait une version spécifique),
  • Les exceptions C++ ne sont pas activées (bien qu’une version avec les exceptions soit en préparation),
  • Toutes les librairies cibles sont fournies non strippées, donc avec toutes leurs infos de débogage (ce qui est pratique pour approfondir le débogage de ses propres programmes),
  • la librairie newlib est compilée avec l’option reent-small pour économiser de l’espace de pile.

Ces options sont très intéressantes pour l’efficacité des programmes ARM embarqués.

Cette toolchain est appellée “bleeding edge toolchain”, et elle est téléchargeable pour windows 32 et 64 bits, et pour linux 64 bits, sur le site sourceforge.

Je recommande son utilisation pour tous les projets ARM embarqués.

Des parties de cet article sont basées sur la traduction de cet article original (en anglais).