Générer son compilateur
Lorsque l'on souhaite exporter un programme vers une
architecture ou un système différent, il faut utiliser un compilateur
spécialement créer pour la cible. Le générer de bout en bout peut
s'avérer extrêmement fastidieux et présente un risque d'erreurs
important. Pour cette raison, je vais présenter des outils permettant
de choisir le système cible et de générer le compilateur.
Nous allons voir deux outils, le premier permettant de générer un compilateur pour la même machine mais vers un système d'exploitation différent, le second permettant quant à lui de générer le système d'exploitation complet vers une cible précise.
Pour la même machine, vers windows
Comme décrit dans la partie sur les différences de librairies, faire fonctionner un programme d'un système d'exploitation à un autre ne se résume pas à une option du compilateur.
Pour faire fonctionner sous Linux un programme compilé sous Windows, il suffit la plupart du temps d'utiliser Wine.
A l'inverse, pour faire fonctionner un programme compilé sous Linux
dans Windows, il y a deux possibilités. On peut soit installé un
environnement Linux
complet pour Windows, tel que Cygwin, soit compiler le
programme spécifiquement pour Windows. Le compilateur croisé
permettra de remplacer les appels au noyau Linux par des appels à la
librairie C de Windows.
Cette deuxième solution peut être réalisé grâce à MinGW. Cet environnement propose un utilitaire permettant de choisir diverses options de compilations, pour enfin obtenir un compilateur correspondant au système cible. Il reste alors à compiler le programme à exporter grâce à ce compilateur.
Pour une machine différente, sous Linux
Dans cette seconde partie, nous décrirons un outil permettant de compiler Linux vers un système cible. Il est possible de le faire pour la plupart des architectures de processeurs existantes. La compilation du système complet est plus complexe que compiler un programme vers une cible, ce que GCC peut faire dans la plupart des cas, car en plus de devoir compiler les différents programmes, il faut également construire le RFS, l'arborescence du système de fichiers.
Buildroot est un utilitaire graphique permettant de configurer en profondeur le système d'exploitation. Il est adapté aux systèmes embarqués car il permet de choisir exactement les programmes à intégrer au système. Il permet également d'appliquer des patchs au noyau, permettant ainsi d'y intégrer des modules directement, ou encore de mapper des périphériques spécifiques au matériel de la cible.