Installation du compilateur C VBCC 0.8
Un article de GuruMed.
Par StAn Mise à jour par Corto
VBCC est un compilateur C dont les principaux points forts sont le respect de la norme ANSI (avec également quelques ajouts de la norme ISO/C99), la possibilité de cross compiler très facilement sous et pour AmigaOS 68k, PowerUP, WarpOS, et MorphOS, et une installation très facile. Il dispose également d'un optimiseur qui permet (si on en croit la doc) plein de merveilles telles que l'optimisation inter-modules et d'autres trucs merveilleux. Depuis Noël 2006, il est même possible de générer du code pour la cible "openfirmware", si vous souhaiter écrire des applications "stand-alone" (ou un OS complet !) sur Pegasos ou Efika.
VBCC est un compilateur C portable développé par le Dr Volker Bathelmann (voir son site http://www.compilers.de/). La partie édition de liens et génération de code est gérée par Frank Wille (http://sun.hasenbraten.de/~frank/).
Sommaire |
Les fichiers nécessaires
Les archives sont disponibles sur Aminet mais il est conseillé d'utiliser le site officiel (http://sun.hasenbraten.de/vbcc/), maintenu par Frank Wille et où l'on trouve les dernières mises à jour.
Si vous tentez d'installer une archive vbcc.lha, vous avez dû hiberner pendant plusieurs années. Désormais les archives de VBCC sont préfixées par "vbcc_bin_" pour le compilateur et "vbcc_target_" pour les cibles (récupérez au moins celle qui correspond à votre système).
VBCC est livré avec un installeur depuis la version 0.8g. Notons que VBCC est intégré au SDK d'OS4, il y a juste besoin de le choisir lors de l'installation du SDK.
Pour l'AmigaOS 3.x, si vous n'avez pas les includes système, achetez le CD Amiga Developer (version 2.1 si vous voulez utiliser des caractéristiques de l'OS 3.5 et/ou obtenir StormC 3 68k au passage) ou téléchargez le NDK3.9 sur http://www.amiga.com/3.9/download/NDK3.9.lha. Vous trouverez les includes dans le répertoire "ADCD_2.1:NDK/NDK_3.5/Include/Include_h" du CD, ou dans le répertoire "NDK_3.9/Include/include_h/" du NDK 3.9.
Sur MorphOS enfin, le support de VBCC n'est pas complet, il est nécessaire de patcher les includes (déconseillé) comme expliqué dans la doc de MorphOS : c'est une modification spécifique pour GCC dont on peut se passer. Sinon, il faut compiler avec l'option -amiga-align ou utiliser les pragmas amiga-align et default-align (cf mon autre article sur la compilation PPC).
Préparation de l'environnement
VBCC a besoin de plus de 4ko de pile, donc éditez le fichier S:Shell-Startup et rajoutez-y la ligne "stack 100000".
Si vous avez déjà une version de vbcc qui contient à la base de son répertoire un script "init_vbcc", réinstallez la dernière version, la vôtre est complètement obsolète.
Avec l'installeur fourni, il n'y a aucune raison que cette étape échoue. Il modifie la user-startup et crée un répertoire vbcc contenant : - bin/ : le compilateur vc et autres exécutables (vlink, ar, ...) - config/ : un fichier de config par cible et "vc.config", le fichier de référence - doc/ : vbcc.pdf et autres documents sur les différents outils livrés - targets/ : chaque cible a son sous-répertoire contenant lui-même includes et libs - vbcc_version : fichier texte indiquant la version du compilateur
Le fichier "S:User-Startup" est modifié de cette façon :
;BEGIN vbcc assign >NIL: vbcc: Work:SDK/vbcc assign >NIL: C: vbcc:bin ADD setenv VBCC vbcc: ;END vbcc ;BEGIN vbcc-ppc-amigaos assign >NIL: vincludeos4: vbcc:targets/ppc-amigaos/include assign >NIL: vincludeos4: SDK:Include/Include_h add assign >NIL: vincludeos4: SDK:Local/common/include add assign >NIL: vlibos4: vbcc:targets/ppc-amigaos/lib ;END vbcc-ppc-amigaos
Le deuxième bloc représente la configuration telle qu'elle l'est pour chaque cible, avec les includes communes et les fichiers spécifiques à la cible (includes et libs).
Mise en route
Nous sommes maintenant prêts à tester le compilateur. Imaginons que vous ne connaissiez rien au C. Tapez le programme source suivant (si vous connaissez déjà le C, je vous autorise à taper autre chose :P):
/*
** Hello World
** © 2001 Braindead coders society
*/
#include <stdio.h>
#include <dos/dos.h>
int main( void )
{
puts( "Salut monde." );
return RETURN_OK;
}
Je crois que vous pouvez imaginer ce que fait ce programme... Mais voici tout de même quelques explications:
- les commentaires commencent par "/*" et se terminent par "*/".
- "#include" permet d'inclure des fichiers sources (en langage C eux aussi) comme s'ils avaient été tapés directement dans le source. Nous incluons ici "stdio.h" ("standard input output") qui est nécessaire à l'utilisation de la fonction "puts()", ainsi que "dos/dos.h" parce qu'on a besoin de "RETURN_OK" qui est défini dedans.
- un programme C est divisé en fonctions. Ce programme n'en comporte qu'une: "main()". C'est le point d'entrée de tout programme C, la première fonction qui est appelée. En sortie, elle retourne un "int", c'est-à-dire un nombre entier, signé, sur 32 bits.
- "puts()" ("put string") correspond au "PRINT" du Basic... Et sert donc tout simplement à afficher une chaine de caractères dans le shell.
- "RETURN_OK" est une constante qui vaut 0, et correspond à la valeur de retour d'un programme qui s'est exécuté sans erreur. Notre programme retourne donc que tout s'est bien passé lorsqu'il se termine. On aurait pu utiliser directement la valeur 0, ce qui éviterait ici l'inclusion de "dos/dos.h" et accélèrerait la compilation...
Sauvez ce source sous le nom "hello.c". Il ne reste plus qu'à le compiler en tapant cette ligne dans le shell:
vc -o hello hello.c
L'option "-o" permet de choisir le nom du programme exécutable généré. Vous pourriez aussi bien taper "vc hello.c" tout court, mais le résulat serait un exécutable nommé "a.out", ce qui est plutôt idiot si vous voulez mon avis.
Il ne reste plus qu'à lancer ce merveilleux programme, digne représentant d'une technologie qui n'arrête pas de nous étonner jours après jours, et à vous émerveiller devant tant de beauté.
Cross-compilation
Un dernier détail sur la configuration de VBCC : le choix de l'environnement de compilation, et de destination. VBCC permet depuis la version 0.8 de choisir ça très facilement. Cela consiste en fait à choisir un fichier de config différent selon ce que l'on veut faire. Par exemple, pour compiler sous WarpOS, pour 68k:
vc +m68k_warpos -o hello hello.c
Le "+m68k_warpos" dit à VBCC d'utiliser le fichier de config "VBCC:config/m68k_warpos". Ce fichier contient toutes les options nécessaires à ce que VBCC s'exécute sur le PPC, et génère un exécutable 68k.
Autres possibilités : "+m68k_m68k" si vous n'avez pas de carte PPC, "+morphos_warpos" pour compiler un programme MorphOS en utilisant WarpOS, "+ppc_m68k" pour générer un programme PowerUp en utilisant le 68k (même sans carte PPC)... etc.
Le fichier de config par défaut est "VBCC:config/vc.config", et il correspond à une compilation sur et pour 68k. Mais si vous possédez une carte PPC, vous voudrez probablement toujours compiler en utilisant le PPC. Au lieu de toujours taper "vc +m68k_warpos", il vous suffit donc de copier "VBCC:config/m68k_warpos" à la place de "VBCC:config/vc.config", et le tour est joué.
Les conseils de la fin
Je conseille très fortement l'achat d'un livre sur le language C. Évitez les livres accés sur un compilateur ou une plateforme particulière. Personnellement, je recommande "Le langage C, Norme ANSI, 2nde édition" de Kernighan et Richie (ISBN 2 10 005116 4, 195 FRF). Il s'agit de la référence du langage C (même si des nouveautés sont apparues depuis, notamment dans la norme ISO/C99, tout ce qui est dedans reste valable et suffisant pour programmer), et les deux premiers tiers du bouquin sont dédiés à une initiation au langage. Bien que programmant en C depuis plusieurs années, j'ai beaucoup appris -et compris- en le lisant. Pour compiler les exemples, il vous suffira de remplacer la commande "cc" par "vc"; tout le reste devrait être utilisable tel quel.
Et si vous voulez vous pencher sur la programmation de l'AmigaOS, vos amis se nomment RKM, AutoDocs et Includes (sur le CD Developer). Ils contiennent énormément d'infos sur la programmation de l'AmigaOS. Voir également le répertoire dev/src d'Aminet, entre autres, ainsi que le CManual qui bien que vieux pourrait être utile (je ne l'ai pas utilisé personnellement mais le rédac'chef m'a obligé sous la torture à le mentionner).
Voilà qui clôt ce passionnant article. Vous avez maintenant tout le temps pour lire le contenu du répertoire "doc" (très instructif même si on ne comprend pas tout), et profiter des forums de http://utilitybase.com pour poser des questions.
