Suivez-nous sur X

|
|
|
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
|
|
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
|
|
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
|
|
A propos d'Obligement
|
|
David Brunet
|
|
|
|
En pratique : Utiliser vbcc en tant que compilateur croisé Amiga sur Linux
(Article écrit par Andrew Hutchings et extrait de linuxjedi.co.uk - février 2021)
|
|
Pendant un temps, j'utilisais GCC comme compilateur croisé pour écrire des logiciels Amiga. C'était un
domaine familier pour moi, ayant utilisé GCC pour des applications Linux pendant de nombreuses années.
Malheureusement, j'ai rencontré un bogue très étrange qui semble lié à la sortie du compilateur. J'ai
donc décidé qu'il était temps de changer, en utilisant un compilateur conçu pour la compilation croisée Amiga.
Le bogue
J'ai développé une application graphique permettant de flasher des ROM Kickstart sur une carte dédiée.
Elle fait partie du projet Kickstart Flash
68000 Relocator. Le développement du logiciel a été un peu
compliqué, car il a fallu le rendre compatible avec le Workbench 1.3. Lors de tests, j'ai constaté que,
si l'application fonctionnait parfaitement avec les Workbench 2.0 et 3.1, elle plantait immédiatement la
machine sous 1.3 si elle était exécutée via une icône. Le chargement via le Shell fonctionnait parfaitement.
Voir la vidéo sur YouTube
J'ai passé quelques heures à essayer de comprendre ce qui se passe et j'ai discuté avec des personnes
qui travaillent sur Amiga depuis bien plus longtemps que moi. Nous avons conclu qu'il s'agissait d'un problème
dans le code de démarrage généré par le compilateur croisé. J'ai donc décidé de changer de compilateur pour
un compilateur conçu pour Amiga : vbcc.
Installation
Lors de l'installation du compilateur Amiga GCC,
vbcc est également installé automatiquement. Cela m'a
donné une base de départ pour ce qui était nécessaire. Deux autres éléments sont nécessaires :
- La cible du compilateur kick13, vers le bas de cette page.
- AmigaOS NDK 1.3 (recherchez "ndk13.lha" en ligne).
Ces éléments peuvent être extraits n'importe où. Je les ai extraits dans "/opt/amiga/vbcc"
et déplacés selon la structure de répertoire ci-dessous :
Réglage
vbcc utilise des fichiers de configuration sélectionnés à la compilation pour définir toutes les
options et chemins du compilateur. La cible kick13 en possède quelques-uns, mais ils sont conçus pour
fonctionner directement sur Amiga. Le plus important est "/opt/amiga/vbcc/config/kick13" et je l'ai modifié
pour qu'il ressemble à ceci afin de corriger les chemins :
-cc=vbccm68k -quiet -hunkdebug %s -o= %s %s -O=%ld -no-cpp-warn -I/opt/amiga/vbcc/targets/m68k-kick13/include/ -I/opt/amiga/vbcc/include/ndk13/
-ccv=vbccm68k -hunkdebug %s -o= %s %s -O=%ld -no-cpp-warn -I/opt/amiga/vbcc/targets/m68k-kick13/include/ -I/opt/amiga/vbcc/include/ndk13/
-as=vasmm68k_mot -quiet -Fhunk -kick1hunks -nowarn=62 %s -o %s
-asv=vasmm68k_mot -Fhunk -kick1hunks -nowarn=62 %s -o %s
-rm=rm %s
-rmv=rm %s
-ld=vlink -bamigahunk -x -Bstatic -Cvbcc -nostdlib -Z -mrel /opt/amiga/vbcc/targets/m68k-kick13/lib/startup.o %s %s -L/opt/amiga/vbcc/targets/m68k-kick13/lib -lvc -o %s
-l2=vlink -bamigahunk -x -Bstatic -Cvbcc -nostdlib -Z -mrel %s %s -L/opt/amiga/vbcc/targets/m68k-kick13/lib -o %s
-ldv=vlink -bamigahunk -t -x -Bstatic -Cvbcc -nostdlib -Z -mrel /opt/amiga/vbcc/targets/m68k-kick13/lib/startup.o %s %s -L/opt/amiga/vbcc/targets/m68k-kick13/lib -lvc -o %s
-l2v=vlink -bamigahunk -t -x -Bstatic -Cvbcc -nostdlib -Z -mrel %s %s -L/opt/amiga/vbcc/targets/m68k-kick13/lib/ -o %s
-ldnodb=-s
-ul=-l%s
-cf=-F%s
-ml=500
|
Enfin, vous devez indiquer à vbcc où se trouve tout cela. Le compilateur trouve automatiquement les
répertoires "configs" et "targets" à l'aide d'une variable d'environnement appelée vbcc. J'utilise
zsh comme Shell sous Linux, donc à la fin de mon fichier "~/.zshrc", j'ai ajouté ceci :
# Amiga VBCC
export VBCC=/opt/amiga/vbcc
|
Utilisation du compilateur
En haut de mon Makefile, j'ai défini ceci :
CC=vc +kick13
CFLAGS=-c99 -Ireqtools -DNDEBUG -lamiga -lauto
|
Cette ligne "CC" indique d'appeler le compilateur "vc" et d'utiliser la configuration "kick13"
définie ci-dessus. Pour "CFLAGS", mon projet étant conçu pour utiliser le standard "C99",
j'utilise le chemin d'inclusion "reqtools". Les liens "-lamiga" pointent vers la bibliothèque standard
Amiga et les liens "-lauto" vers une bibliothèque vbcc contenant les bases de la bibliothèque.
Conclusion
J'ai dû modifier quelques éléments pour les rendre compatibles avec vbcc ; heureusement, les messages
d'erreur ont révélé la plupart des erreurs. J'ai utilisé la bibliothèque "reqtoolsnb.lib"
du code de liaison SAS-C pour les bouchons "Reqtools" au lieu du code de liaison pour GCC.
Une fois la compilation réussie, je l'ai testée sur le Workbench 1.3 et je peux enfin utiliser une
icône. Pour l'instant, je vais utiliser vbcc pour la compilation croisée. Malheureusement, je n'ai
pas pris de photo, mais voici à quoi cela ressemble normalement dans un émulateur :
Soutenez le travail de l'auteur
|
|
|