Configurer une machine dédiée à la compilation Ada GNAT ciblant Linux

Une station de compilation à peu de frais

Présentation…

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écessaire 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 ressources. Pourtant non. Une machine faiblement équipé avec 32 M de RAM, un disque dur de 1G peut être amplement 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 ressources.

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échargez 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 650 M, mais ne vous en inquiétez pas : seule une partie sera conservée au final après l’installation. Graver sur un CD, installer sur la machine annexe. Note : quand en fin d’installation l’installateur Debian vous demande de sélectionner 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é ).

Contrairement à 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écessaires sont pourtant 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 disponibles ». 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 nommé « 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 répertoire.

Ensuite lorsque cette étape est achevée, revenir sur le site de Debian, et télécharger les packagees « *.deb » suivant ( dans la distribution Debian Etch de préférence ou la plus récente si vous préférez ) :

  • « 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 absolument nécessaire avec GNAT, mais il vous sera probablement nécessaire. Les deux packages « asis-programs » et « libasis2005 » sont qualifiés d’optionnels par Debian, mais ils sont absolument nécessaires, 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édemment, mais indiquer le chemin « /mnt » au lieu de « /mnt/pool/main ». Sélectionner 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écessaire.

Commentaires

Cette installation a été testée sur un Intel Pentium 133 MHz, avec 48 M RAM, 60 M de mémoire virtuelle swap ). L’installation demande 220 M de DD ( hors espace de travail ). Quasiment 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 transférer le produit de vos compilations depuis cette machine dédiée vers votre machine de travail habituelle ( sous Windows ), et pour transférer dans l’autre sens, vos sources, que vous éditerez toujours sur votre machine 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 connexion à chaudhot-plug ) ( les messages du noyau vous signale la connexion d’un périphérique de stockage de masse ).