La version libre de GNAT n'offre pas de support pour la compilation croisée (cross compilation). Cependant il arrive souvent qu'il soit nécéssaire de compiler une application Ada destinée à fonctionner dans un environnement Linux, alors que le travail de conception du code de l'application est réalisé sous un environnement Windows.
Le problème
On pourrait penser qu'il est simple, depuis une machine i386 sous Windows, de compiler de l'Ada avec GNAT en ciblant une autre machine i386 sous Linux. Mais en pratique, la liaison pose problème et il ne suffit pas d'importer les librairies Linux sous Windows pour que celle-ci puisse se réaliser. Le processus de Liaison de GNAT est complexe, et même l'utilisation d'un lieur supportant l'émulation ELF ne nous fait pas parvenir à nos fins. Installer Linux en dual-boot sur une machine de travail n'est pas sans risque (rien n'est sans risque en ce domaine), et Linux ne supporte de toute manière pas correctement les partitions NTFS (il ne peut que y lire, et pas y écrire).
La solution
Les compilateurs Ada sont réputés complexes, et l'ont crois souvent à tord qu'ils sont gourmands en resources. Pourtant non. Une machine faiblement équipé avec 32M de RAM, un disque dur de 1G peut être emplement suffisante à faire fonctionner un environnement de compilation Ada avec GNAT, pour peu que l'on se contente d'un système de base qui ne gaspillera pas les précieuse resources.
L'installation
L'installation peut être effectuée même sur une veille machine
n'étant pas connectée à Internet. Sur le site de Debian (www.debia.org
) télécharger depuis
votre machine de travail habituelle, l'image ISO nomée debian-40r1-i386-CD-1.iso
(dans la distribution Etch). Ne prendre que le CD N°1, car les autres
ne seront pas utiles. Cette image est lourde de plus de 650M, mais
ne pas s'inquieter : seule une partie sera conservée pendant l'installation.
Graver sur un CD, installer sur la machine annexe. Note: quand en
fin d'installation l'installateur Debian vous demande de selectionner
les grandes de packages à installer, répondre « non » à tous,
même au package de base (il ne s'agit pas du système de base qui
est déjà installé).
Contraitement à ce qu'il en est dit ça est là sur le Web, l'installation de GCC 4.1 n'installe pas GNAT dans le même temps, et il nous faudra donc l'installer manuellement. Cette installation n'était pas proposée à la fin de l'installation précédente, alors que les fichiers nécéssaires sont pourtants présents sur le CD. Montez votre CD sur /mnt, lancer dselect depuis la ligne de commande, puis dans le menu de la source des packages à installer, choisir « Système de fichier déjà monté » (c'est écrit en anglais). Valider, choisir « Mettre à jour la liste des packages disponnibles ». Lorsque l'application demande le chemin de « Main », entrer « /mnt/pool/main ». Répondre « none » à toutes les demandes de chemin suivantes et précédentes. Valider, puis passer à la section puis à l'installation de GCC. Sortir de dselect, et s'assurer qu'il existe bien un lien nomé « gcc » dans « /usr/bin/ » (il arrive que ce lien ne soit pas mis en place). S'il n'existe pas, créer ce lien symbolique vers gcc-4-1 qui doit se trouver dans ce repertoire.
Ensuite lorsque cette étape est achevée, revenir sur le site de Debian, et télécharger les packagees *.deb suivant (dans la distribution Etch de préférence) :
- cpp-4.1_4.1.1-21_i386.deb
- cpp_4.1.1-15_i386.deb
- gnat-4.1-base_4.1.1-22_i386.deb
- gnat-4.1_4.1.1-22_i386.deb
- gnat_4.1.1-15_i386.deb
- libc6-dev_2.3.6.ds1-13etch2_i386.deb
- libgnat-4.1_4.1.1-22_i386.deb
- libgnatprj4.1_4.1.1-22_i386.deb
- libgnatvsn4.1_4.1.1-22_i386.deb
- linux-kernel-headers_2.6.18-7_i386.deb
- asis-programs_2005-5_i386.deb
- libasis2005_2005-5_i386.deb
- make_3.81-2_i386.deb
La présence du package pour CPP ne doit pas vous surprendre, car étrangement CPP n'est pas installé avec l'installation de GCC. Le package « make » n'est pas absoluement nécéssaire avec GNAT, mais il vous sera probablement nécéssaire. Les deux packages « asis-programs » et « libasis2005 » sont qualifiés d'optionels par Debian, mais ils sont absoluements nécéssaires, ne serait-ce que pour disposer de GNATElim par exemple (gnatelim repose sur l'interface ASIS).
Gravez tous ces paquets sur un CD, revenir à la machine annexe. Lancer dselect comme précédement, mais indiquer le chemin « /mnt/ » au lieu de « /mnt/pool/main ». Selectioner tous les paquets et les installer tous.
Vous pourrez, si vous le souhaitez, installer également le paquet suivant :
- libncurses5-dev_5.5-5_i386.deb
Ils vous permettra d'utiliser ou de créer des fichiers de configuration de sources, et entre autre d'utiliser votre installation pour compiler un noyau Linux par exemple (si cela vous était nécéssaire).
Commentaires
Cette installation a été testée sur un Pentium 133Mhz, avec 48M RAM, 60M de swap. L'installation demande 220M de DD (hors espace de travail). Quasiement n'importe quelle machine peut donc être récupérée pour remplir ce rôle.
Note: étant donné que les machines modernes ne disposent plus de lecteurs de disquettes, il faudra penser à une alternative aux disquettes pour transferer le produit de vos compilations depuis cette machine dédiée vers votre machine de travail habituelle (sous Windows), et pour transferer dans l'autre sens, vos sources, que vous éditerez toujours sur votre mahcine habituelle. Il est donc recommandé que la machine dédiée à la compilation dispose au moins d'un connecteur USB. Cette installation de debian reconnais les périphériques de stockage USB, en temps que « /dev/sda1/ », et les reconnais même en hot-plug (les messages du noyau vous signale la connexion d'un périphérique de stockage de masse).