Obligement - L'Amiga au maximum

Vendredi 23 mai 2025 - 11:01  

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 : Utilisation du compilateur GCC sur AmigaOS 68k (première partie)
(Article écrit par Mathias Parnaudeau et extrait de GuruMed.net - mai 2001, mis à jour en janvier 2003)


Note : cet article en deux parties est d'abord paru dans le célèbre aMiGa=PoWeR. Il se voit enrichi de quelques corrections et ajouts... que voici.

GCC est le compilateur universel d'un langage qui l'est autant : le noble C. Présent sur un nombre incalculable de systèmes, GCC vient compléter une longue liste sur Amiga : DICE, SAS/C, StormC, vbcc (dont nous reparlerons sans doute), HiSoftC, Maxon... Il possède beaucoup d'avantages comme sa gratuité, sa rigueur à la compilation, sa plus grande compatibilité Unix au niveau des sources, etc.

Nous allons donc voir comment s'effectue une installation propre et guidée de cet environnement de développement. Vous pourrez ensuite compiler vos programmes en ligne de commande dans une fenêtre Shell ou grâce aux scripts "makefile" (nous pourrons aussi revenir dessus).

La bonne archive

Bien, commencez par laisser tomber la version 2.7.0 disponible sur Aminet, puisqu'on en est à la 2.95.2. Mais la 2.95.1 fera très bien l'affaire parce qu'elle est stabilisée et éprouvée (des bogues d'optimisation auraient fait leur apparition dans la version 2.95.2). Elle se trouve en libre téléchargement sur le site FTP de GeekGadgets (ou via Archive.org). Vous pouvez vous plonger dans la documentation officielle présente sur www.geekgadgets.org/docs/GG_7.html (Archive.org). Certains paquets (dont celui de GCC) ne sont présents que dans le répertoire "alpha". C'est donc là qu'on y récupérera tous les fichiers nécessaires, à savoir :
  • GG-misc-bin.tgz *
  • binutils-X.X-bin.tgz *
  • bison-X.X-bin.tgz
  • diffutils-X.X-bin.tgz
  • fd2inline-X.X-bin.tgz
  • fifolib-X.X-bin.tgz
  • fileutils-X.X-bin.tgz
  • findutils-X.X-bin.tgz
  • flex-X.X-bin.tgz
  • gcc-X.X-bin.tgz *
  • gcc-X.X.X.diffs.gz *
  • grep-X.X-bin.tgz
  • gzip-X.X-bin.tgz
  • ixemul-X.X-bin.tgz *
  • ixemul-X.X-env-bin.tgz *
  • ixemul-X.X-inc-bin.tgz *
  • libamiga-bin.tgz *
  • libg++-X.X-bin.tgz
  • libm-X.X-bin.tgz
  • libnix-X.X-bin.tgz *
  • make-X.X-bin.tgz *
  • patch-X.X-bin.tgz
  • pdksh-X.X-bin.tgz
  • sed-X.X-bin.tgz
  • sh-utils-X.X-bin.tgz
  • tar-X.X-bin.tgz
  • termcap-X.X-bin.tgz
  • textutils-X.X-bin.tgz
Les fichiers marqués d'un astérisque indiquent ceux qui m'ont suffi à avoir un environnement fonctionnel, mais peut-être insuffisant à l'usage. Vous pourrez cependant retrouver tous ces fichiers sur un CDROM sous le titre "ADE", ce qui peut vous épargner un long téléchargement.

Faites place !

Avant de les désarchiver, nous devons préparer le terrain. Vous vous réserverez un espace suffisamment grand sur votre disque dur où vous créerez un répertoire "gg". Vous pourriez l'appeler "gcc" mais il contiendra de nombreux outils, au-delà de GCC, faisant partie de l'environnement GeekGadgets, sur lequel nous ne nous étendrons pas.

Dans le répertoire "gg", créez-en un nouveau nommé "os-include" destiné à recevoir les fichiers d'inclusion de ressources système.

Pour exploiter ces archives au format TGZ (tar + gzip), le plus simple est de se munir de l'outil "Untgz" que vous utilisez comme suit, pour chaque paquet :

untgz -d

Sinon, les outils nécessaires sont prévus, et vous devrez juste télécharger en plus le fichier "BOOT.lha". Utilisez la commande "Tar" avec la syntaxe "tar xvzf " pour obtenir le contenu décompressé.

L'arborescence se présente ainsi :

info (dir)
m68k-amigaos (dir)
guide (dir)
os-include (dir)
Sys (dir)
man (dir)
ib (dir)
bin (dir)
include (dir)
etc (dir)
dvi (dir)
html (dir)
lib (dir)
ps (dir)

A ce niveau, l'installation est physiquement correcte, vous ne devriez avoir aucun problème. Il reste cependant à ce que GG prenne sa place dans le système, par le biais des célèbres commandes "Assign" et "Path" à ajouter à la fin de la user-startup :

; BEGIN GCC
Assign GG: Work:Prog/gg
; Assign LIBS: GG:Sys/Libs ADD
Path GG:bin ADD
Assign bin: GG:bin
; END GCC

A la place de "Work:Prog/", vous indiquerez bien sûr le chemin dans lequel se trouve votre répertoire "gg". J'ai enlevé l'assignation des "libs" car j'avais copié la ixemul 48 dans Libs:. L'assignation "Libs:" est également utilisée pour la bibliothèque libnix qui est utilisée lorsque l'on compile avec l'option "-noixemul" (ces termes seront détaillés dans le prochain article traitant des particularités de GCC).

Pour certains paquets, issus du CD ADE2 par exemple, il peut être nécessaire d'ajouter les assignations "ADE:" et "GCC:" qui pointent sur le même répertoire que "GG:".

Les fichiers d'inclusion ("includes")

Tout est installé du côté GG. Il reste à adapter pour pouvoir se lancer dans la programmation AmigaOS. Voici donc comment installer les indispensables fichiers d'inclusion du système.

Le CD Amiga Developer 2.1 contient tous les fichiers d'inclusion, jusqu'à la version 3.5. Vous allez copier dans "os-include" les fichiers présents dans le NDK (Native Development Kit) : ndk/ndk_3.5/include/include_h.

Ces fichiers d'inclusion spécifiques au système sont à copier dans le répertoire "gg:os-include". Vous pouvez ensuite effacer si vous le souhaitez les protos et pragmas (répertoires "proto", "pragma" et "pragmas") car GCC ne les utilise pas (ou plutôt, il utilise les siens contenus dans gg:include, tout comme les fichiers en ligne ("inline")). Vous pouvez aussi retirer les fichiers icônes (.info) qui n'apportent rien et peuvent gêner la lisibilité.

Vérification

Après redémarrage, vous pouvez aussitôt vérifier que tout se passe pour le mieux :
  • Dans une fenêtre Shell, tapez juste la commande "assign" seule qui va lister la totalité des assignations du système : vous devez y retrouver celles concernant GCC.
  • Contrôlez la version de la bibliothèque ixemul en tapant "version libs:ixemul.library". Le résultat doit faire apparaître une version 48.0 ou supérieure (la version 48.2 est présente sur ftp.geekgadgets.org/pub/geekgadgets/amiga/m68k/alpha/ixemul/cross (Archive.org).
  • Compilez un code avec appels au système : en effet, la compilation d'un simple "Hello World" pourrait ne pas mettre en évidence des failles dans l'installation.
Voici le source que je vous propose et que vous pourrez appeler "testdate.c". A partir de valeurs en dur pour signifier la date, on réserve des chaînes pour recevoir le résultat en clair grâce à la fonction système "DateToStr" :

#include <stdio.h>
#include <dos/dos.h>
#include <clib/dos_protos.h>

int main(){
  // Déclarations
  int jours = 2412;  // 8 sept. 84
  int mins = 602;    // 10h02
  int ticks = 850;   // 17 secs
  char day[15];
  char date[10];
  char str[10];

  struct DateStamp ds;
  struct DateTime dt;

  // Remplissage de la structure DateStamp
  ds.ds_Days = (ULONG)jours;
  ds.ds_Minute = (ULONG)mins;
  ds.ds_Tick = (ULONG)ticks;

  // Traitement et affichage
  dt.dat_Stamp = ds;
  dt.dat_Format = FORMAT_USA;
  dt.dat_StrDay = day;
  dt.dat_StrDate = date;
  dt.dat_StrTime = str;

  if (DateToStr(&dt)){
    printf("%s\n%s\n%s\n",dt.dat_StrDay,dt.dat_StrDate,dt.dat_StrTime);
  }else{
    printf("Echec de conversion\n");
  }

  return(0);
}

Pour la compilation : "gcc -o testdate testdate.c". En cas de soucis, essayez l'option "-v" qui permet par exemple de voir où GCC cherche ses fichiers d'inclusion.

Il peut être conseillé de compiler en RAM: pour éviter d'invalider votre partition de travail FFS si un problème survient lors de la compilation. Une telle anomalie lors de la compilation peut provenir d'une taille de pile trop faible. Forcez-la à 200000 (en fait, cela dépend de la taille du projet) avec la commande "stack 200000". GCC est un portage du monde Unix et requiert une pile élevée, telle que 200000 octets.

Dernières recommandations

N'oubliez pas que le C comporte de nombreux pièges et demande vigilance et rigueur. Avant la diffusion de vos programmes, pensez bien à toujours compiler avec l'option "-Wall". Cela demande à GCC d'afficher toutes les alertes quelles qu'elles soient. Une compilation sans aucune ligne d'erreur/alerte avec cette option doit garantir une programmation stricte (pas d'utilisation de pointeur sans initialisation...) et par conséquent sera moins sujette aux bogues (en théorie ;-)).

Nous nous retrouvons en attendant avec la suite de cet article pour connaître un peu plus ce qui caractérise GCC.


[Retour en haut] / [Retour aux articles] [Article suivant]