Obligement - L'Amiga au maximum

Vendredi 23 mai 2025 - 15:25  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

Actualité (récente)
Actualité (archive)
Comparatifs
Dossiers
Entrevues
Matériel (tests)
Matériel (bidouilles)
Points de vue
En pratique
Programmation
Reportages
Quizz
Tests de jeux
Tests de logiciels
Tests de compilations
Trucs et astuces
Articles divers

Articles in English


Réseaux sociaux

Suivez-nous sur X




Liste des jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z,
ALL


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


Contact

David Brunet

Courriel

 


En pratique : Construction d'un environnement de compilation croisée Linux vers AmigaOS
(Article écrit par Olivier Croquette et extrait de GuruMed.net - mai 2002)


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 :
  • Transférer les sources sous le système d'exploitation de compilation.
  • Lancer la compilation croisée.
  • Transférer l'exécutable vers le système d'exploitation d'exécution.
Soit un nombre non négligeable d'opérations, comparé au simple fait d'appuyer sur un bouton ou une touche dans StormC ? D'abord, ces opérations peuvent être nettement simplifiées (voir chapitre 5. Proposition d'environnement). Ensuite, l'intérêt est évident quand on a un PC plus ou moins récent. Voir le chapitre 3 Performances pour en être convaincu.

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 :
  • Un compilateur fonctionnel sous Linux. C'est un compilateur natif Linux vers Linux. Il est normalement installé avec chacune des distributions.
  • Les sources de GCC (version AmigaOS), et d'autres petites choses que GeekGadgets nous a préparé et mis à disposition sur son site.
Tout ceci va nous permettre de créer notre compilateur croisé. Pour compiler le compilateur, il va nous falloir de l'espace disque et de la patience. 210 Mo et quelques dizaines de minutes devrait suffire (en fonction de la machine...).

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 :

mkdir /tmp/geekgadgets

Aller dans ce répertoire :

cd /tmp/geekgadgets

Créer les répertoires suivants :

mkdir gg
mkdir gg-build
mkdir gg-src
mkdir gg-archives
mkdir gg/m68k-amigaos

Dans "gg-archives" doivent se situer les fichiers suivants :

-rw-r--r-- 1 taz taz 5378634 May 15 17:51 binutils-2.9.1-src.tgz
-rw-r--r-- 1 taz taz 11537008 May 15 18:05 egcs-1.1.2-src.tgz
-rw-r--r-- 1 taz taz 63932 May 15 17:43 fd2inline-1.11-bin.tgz
-rw-r--r-- 1 taz taz 1808450 May 15 17:43 ixemul-48.0-bin.tgz
-rw-r--r-- 1 taz taz 751371 May 15 17:44 ixemul-48.0-env-bin.tgz
-rw-r--r-- 1 taz taz 218010 May 15 17:43 ixemul-48.0-inc-bin.tgz
-rw-r--r-- 1 taz taz 127977 May 15 17:44 libamiga-bin.tgz
-rw-r--r-- 1 taz taz 274112 May 15 17:44 libnix-1.2-bin.tgz 

Ils sont accessibles sur le site de GeekGadgets.

Poursuivez avec les commandes suivantes :

cd gg/m68k-amigaos
tar -xzf /tmp/geekgadgets/gg-archives/fd2inline-1.11-bin.tgz
tar -xzf /tmp/geekgadgets/gg-archives/libamiga-bin.tgz
tar -xzf /tmp/geekgadgets/gg-archives/libnix-1.2-bin.tgz 
tar -xzf /tmp/geekgadgets/gg-archives/ixemul-48.0-env-bin.tgz
tar -xzf /tmp/geekgadgets/gg-archives/ixemul-48.0-inc-bin.tgz
cd /tmp/geekgadgets/gg-src
tar -xzf /tmp/geekgadgets/gg-archives/binutils-2.9.1-src.tgz
cd cd /tmp/geekgadgets/gg-build
mkdir binutils
cd binutils
/tmp/geekgadgets/gg-src/fsf/binutils/configure -v --prefix=/tmp/geekgadgets/gg --target=m68k-amigaos --cache-file=config.cache

É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 :

make
make install
cd /tmp/geekgadgets/gg-src
tar -xzf /tmp/geekgadgets/gg-archives/egcs-1.1.2-src.tgz
cd /tmp/geekgadgets/gg-build
mkdir gcc
cd gcc
/tmp/geekgadgets/gg-src/egcs/configure -v --prefix=/tmp/geekgadgets/gg --target=m68k-amigaos
ln -s /tmp/geekgadgets/gg-build/binutils/binutils/ /tmp/geekgadgets/gg-build/gcc/binutils

É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 :

make
make install

2. Le compilateur est prêt !

Éditez un fichier de test (/tmp/helloworld.c), puis compilez-le avec la commande :

/tmp/geekgadgets/gg/bin/m68k-amigaos-gcc /tmp/helloworld.c -o /tmp/helloworld

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 :

cd /tmp/geekgadgets/gg-src
tar -xzf /tmp/geekgadgets/gg-archives/brik-2.0-src.tgz
cd /tmp/geekgadgets/gg-build
mkdir brik
cd brik
CC=/tmp/geekgadgets/gg/bin/m68k-amigaos-gcc /tmp/geekgadgets/gg-src/contrib/brik/configure -v
make

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) :

mkdir /tmp/geekgadgets/gg/sys-include
cp -a /mnt/cdrom/amigaos/ready-to-run/os-include/* /tmp/geekgadgets/gg/sys-include

É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 :

make -f Makefile.linux

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 :
  • Simple à mettre en oeuvre.
  • Simple à l'utilisation.
  • Rapide.
  • vous n'utilisez qu'AmigaOS, et le PC n'est qu'une boîte à compiler transparente !
Elle nécessite un réseau TCP/IP fonctionnel, un client NFS sur Amiga (la version démo d'AmiTCP en propose un), et un serveur NFS sur le PC. La réalisation d'un réseau TCP/IP nécessiterait un article à part entière, et je ne peux donc pas développer cela ici.

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 :

ps aux | grep rpc

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 :

/ amiga(rw)

Relancez le serveur NFS :

killall -HUP rpc.nfsd rpc.mountd

Sur le client

Il vous faut un client NFS, par exemple celui d'AmiTCP. Votre fichier AmiTCP:db/ch_nfstab devrait ressembler à cela :

monpc:/ PC: USER login

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 :

alias make rsh monpc "cd /home/login/sources ; make -f Makefile.linux"

"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
  • J'utilise ici EGCS, mais il est possible de compiler GCC 2.95.
  • Les fichiers d'aide ne sont pas créés ici, il est possible de les créer, mais il faut vérifier d'abord que vous avez les outils pour le faire.
  • Ce document est basé sur la documentation que l'on peut trouver sur le site de GeekGadgets.


[Retour en haut] / [Retour aux articles]