|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Cet article explique en pratique comment construire un compilateur croisé Linux vers AmigaOS. Quèsaco ? Lorsqu'on utilise un compilateur, le but est de transformer des fichiers sources (ici, écrits en C ou C++) en exécutables. En général, la compilation est faite sous le système d'exploitation de l'exécutable. Mais en fait, ce n'est pas une obligation : les fichiers sources sont de simples fichiers texte, l'exécutable est un simple fichier binaire. N'importe quel système d'exploitation peut réaliser cette opération, mais ne pourra pas forcément exécuter le programme ainsi créé. On appelle ça la compilation croisée. Quel est l'intérêt, me direz-vous, puisqu'il faut :
Dans la suite, la machine autre que l'Amiga s'appellera "PC", bien que cela puisse être une station IBM, Sun, Alpha, ou même un PC sous Windows. 1. Construction d'un compilateur amigaos-gcc sous Linux Le miracle de la compilation croisée que l'on veut réaliser ici est possible grâce aux efforts de la Free Software Foundation, dont un des projets est le compilateur GCC, qui a le gros avantage d'être Open Source, et d'être créé avec l'idée de portabilité. On utilise deux choses dans la suite :
Il nous faut tout d'abord choisir où nous allons travailler, et où le compilateur croisé sera accessible. Ici, nous avons choisi le chemin "/tmp/geekgadgets". Vous pouvez choisir un autre chemin. Attention, car il ne sera plus possible de déplacer les exécutables par la suite : les chemins seront codés en dur. Créer le répertoire en tapant dans un Shell :
Aller dans ce répertoire :
Créer les répertoires suivants :
Dans "gg-archives" doivent se situer les fichiers suivants :
Ils sont accessibles sur le site de GeekGadgets. Poursuivez avec les commandes suivantes :
Éditez le fichier "/tmp/geekgadgets/gg-build/binutils/etc/Makefile". A la ligne 49, supprimez "info" et "guide". La ligne devient "all:" tout court. A la ligne 51, supprimez "install-info" et "install-guide". La ligne devient "install:" tout court. Poursuivez avec les commandes suivantes :
Éditez le fichier "/tmp/geekgadgets/gg-build/gcc/gcc/Makefile". A la ligne 43, ne laissez que "c" et "c++". La ligne devient "LANGUAGES = c c++". A la ligne 348, enlevez "libgcc1-test". La ligne devient "LIBGCC1_TEST =". A la ligne 3368, la ligne devient "doc:". A la ligne 3531, supprimez "install-info". La ligne devient "$(INSTALL_CPP) install-man install-info lang.install-normal \". Les dernières commandes à entrer :
2. Le compilateur est prêt ! Éditez un fichier de test (/tmp/helloworld.c), puis compilez-le avec la commande :
Transférez ce fichier sur l'Amiga, par FTP, disquette ou autre, et exécutez-le. Si tout va bien, vous avez créé votre premier projet Amiga en compilation croisée ! Nous pouvons maintenant compiler un projet un peu plus complexe. Récupérez brik-2.0-src.tgz, toujours dans "/tmp/geekgadgets/gg-archives". Vérifiez que vous utilisez un Shell Bash. Dans le doute, tapez "sh". Puis entrez les commandes suivantes :
Voir le chapitre 3 Performances pour quelque temps de compilation. Je vous laisse méditer sur ces chiffres. :) Le compilateur est capable de prendre en charge les programmes écrits en C ANSI, ainsi qu'en C++, mais, pour le moment, il ne prend pas en compte les spécificités d'AmigaOS. Pour cela, il faut intégrer les fichiers d'en-tête d'AmigaOS, qui sont disponibles sur le CD de GeekGadgets ou encore sur le CD Amiga Developer 2.1. Créons un répertoire pour ces fichiers, et copions-les à partir du CD (ou toute autre source) :
Éventuellement, copier aussi les fichiers nécessaires à la compilation de programmes MUI. L'archive développeur de MUI se trouve dans le répertoire "dev/mui" d'Aminet. Pour tester le tout, vous pouvez télécharger Sashi89, sur Aminet, qui contient les sources. Sashi89 est un outil de communication TI/Amiga, écrit par votre serviteur. Il a été au début développé sous AmigaOS, avec GCC. Les sources sont composées d'environ une dizaine de fichiers, et le programme utilise MUI comme interface graphique. Il faut soit les décompresser sous Linux avec l'outil Lha qui s'utilise comme sous AmigaOS, soit les décompresser sous AmigaOS puis les transférer. Il faudra changer le Makefile.linux, en remplaçant les lignes CC, INCS et LINK par ce qui convient aux chemins que vous avez choisis. Si vous avez utilisé le chemin "/tmp/geekgadgets", alors il suffit de remplacer les "/tmp/fnf" par "/tmp/geekgadgets". Allez dans le répertoire "sources" de Sashi89, et tapez simplement :
Si tout va bien, le programme se compile... 3. Performances Voici les performances à titre purement indicatif de GCC sur différentes machines, sur deux programmes différents. brik n'utilise pas les spécificités d'AmigaOS, tandis que Sashi89 utilise les bibliothèques AmigaOS et MUI. brik Sur un A4000 68040 à 40 MHz : la compilation prend 20 sec. Sur un Pentium 166 : 3 sec. Sur un Pentium III à 800 MHz : 0,5 sec. Sashi89 Sur Amiga 68060 à 50 MHz : 50 sec. Sur un Pentium 100 : 15 sec. Sur un Pentium III à 800 MHz : 1,5 sec ! 4. Créer un environnement C'est bien gentil tout ça, mais ça ne reste pas très pratique ! Ce chapitre a pour but de vous permettre d'utiliser le compilateur croisé dans des conditions décentes. Il faut pouvoir tester le comportement de ses programmes régulièrement lorsqu'on développe, et l'environnement de compilation n'est pas capable, pour le moment, de réaliser cela. Tout va dépendre de ce dont vous disposez. Il y a deux solutions : 4.1 En réseau TCP/IP La solution la plus convenable est d'utiliser un partage de fichiers (les solutions telles le FTP ne se révèleront pas très pratiques). Il s'agit de partager les fichiers entre l'Amiga et le PC. Le répertoire partagé permet soit à l'Amiga de trouver l'exécutable, soit à Linux de trouver les sources. * sources sur l'Amiga : lors de la compilation, les codes sources seront transférés par le réseau vers le PC. Pour de petits projets, quelques kilo-octets seront transférés. * sources sur le PC : il faut simplement transférer l'exécutable après la compilation vers l'Amiga, soit plusieurs dizaines de kilo-octets même pour de petits projets. Vous avez aussi la possibilité de choisir sur quel environnement vous éditerez vos fichiers... Là aussi, il faudra éventuellement prévoir du transfert. Cette solution ne s'applique donc en fait qu'aux personnes disposant d'un réseau suffisamment rapide : l'Ethernet va s'imposer. Par port série, il ne faut pas compter obtenir quelque chose de confortable, même si cela reste possible. 4.2 Sans réseau En excluant d'emblée certaines solutions (disquette, recopie de l'hexa à la main...), il reste une éventuelle solution : installer l'émulateur UAE sur votre PC. Il faut ensuite générer l'exécutable dans un répertoire accessible à l'émulateur. L'avantage est que tout se fait sur un unique système d'exploitation. Il faudra utiliser un éditeur sous Linux aussi. L'inconvénient est que tout n'est pas possible par rapport à un vrai Amiga, notamment en ce qui concerne le matériel et la rapidité d'exécution. 5. Proposition d'environnement Je vous propose ici une architecture qui a plusieurs avantages :
Les fichiers se trouvent dans votre répertoire personnel sur la machine Unix, disons dans le répertoire "/home/login/sources". Il n'y a donc pas de problème pour la compilation, mais il faut par contre trouver un moyen d'accéder à l'exécutable à partir de l'Amiga. Pour cela, nous allons configurer le partage avec NFS. Sur le serveur Il faut vérifier que rpc.portmap, rpc.nfsd, rpc.mountd sont actifs. Pour cela, tapez par exemple :
Il doit y avoir au moins trois lignes, leur correspondant. Si ce n'est pas le cas, consultez l'aide de votre distribution afin d'activer le serveur NFS. Ensuite, il faut éditer le fichier "/etc/exports". Tapez "man export" pour plus d'informations. Votre fichier exports devrait ressembler à cela :
Relancez le serveur NFS :
Sur le client Il vous faut un client NFS, par exemple celui d'AmiTCP. Votre fichier AmiTCP:db/ch_nfstab devrait ressembler à cela :
Attention : votre "userid" (identifiant utilisateur) doit être le même sur l'Amiga et sur le PC ! L'identifiant n'a pas vraiment d'importance, l'identification est faite sur le userid en NFS ! Vous avez maintenant accès au système de fichiers du PC à partir de l'Amiga. Admettons que vous ayez monté la racine du PC sous le disque "PC:" de l'Amiga, comme dans notre exemple. Dans "PC:home/login/sources", vous avez accès aux sources, et vous pouvez donc les éditer avec votre éditeur Amiga préféré. Trouvons un moyen simple de compiler à partir de l'Amiga maintenant. Tapez dans un Shell :
"monpc" correspond au nom d'hôte du PC, ou son adresse IP. "rsh" est disponible dans la version démo d'AmiTCP. Attention : il faut donner les droits d'exécution à distance pour votre identifiant. Cf. le man rhosts. Ajoutez une ligne contenant "+" à votre fichier "/home/login/.rhosts". A partir de maintenant, tout appel de "make" dans ce Shell fera en fait appel au PC pour compiler ! Si la compilation est correcte, il suffit alors d'exécuter le fichier ainsi généré. 6. Conclusion J'utilise l'environnement proposé depuis quelque temps déjà, à l'aide d'un vieux Pentium à 100 MHz, et cela m'a fait gagner énormément de temps, surtout sur les projets utilisant MUI et donc les fichiers d'en-tête à rallonge... Il faut remercier la Free Software Foundation, de l'équipe de GCC, et GeekGadgets pour les possibilités qu'ils nous offrent. Si votre environnement fonctionne, je ne peux que vous encourager à écrire un courriel à l'adresse "gg-feedback@geekgadgets.org", ne serait-ce que pour leur dire que leur travail sert réellement. Remarques
|