Construire le compilateur "Portable Object Compiler" et ses librairies sous AmigaOS4.x

Introduction

Portable Object Compiler est un compilateur Objective-C accompagné, entre autres, de sa bibliothèque d'exécution (Runtime library) couvert par la license GPL.

Il reste fidèle au papier du Docteur Brad Cox, l'inventeur de ce langage.
Comme son nom l'indique, cette implémentation se veut portable.
En effet, il suffit de disposer d'un compilateur C et de quelques outils courants pour le compiler.

Vous pouvez trouver d'avantages d'informations à son propos ici : http://users.telenet.be/stes/compiler.html

Ce billet détaille comment construire ce compilateur Objective-C.

La construction du compilateur se passe en deux étapes :

- la construction d'une version légère du compilateur Objective-C (bootstrap) qui ne requière qu'un compilateur C.

- la construction de la version complète qui nécessite un compilateur Objective-C (d'où l'utilité du compilateur de boostrap).

Pré-requis

- le SDK 53.30 installé
- un éditeur de texte
- l'utilitaire GNU Wget (disponible ici : wget-bin.lha)

Etapes

- A l'endroit de votre choix (à titre personnel, j'utilise RAM:) créez un fichier nommé "
poc_build.script" à l'aide de votre éditeur de texte favoris.

- Copiez / collez le contenu ci-dessous, puis adaptez si besoin le numéro des versions. Les numéros versions en question se trouvent dans le nom des archives pour systèmes UNIX et pour les utilisateurs experts souhaitant porter le compilateur sur une autre plâteforme.

SET bootstrap_version "3.3.13"
SET compiler_version "3.3.16"

; Cleanup
echo "Cleaning..."
delete PortableObjectCompiler all force > nil:
delete SDK:POSIX/usr/local/bin/objc
delete SDK:POSIX/usr/local/bin/objc1
delete SDK:POSIX/usr/local/bin/postlink

; Create a work directory
makedir PortableObjectCompiler
cd PortableObjectCompiler

; Download archives
wget http://users.telenet.be/stes/objc-bootstrap-$bootstrap_version.tar.gz
wget http://users.telenet.be/stes/objc-$compiler_version.tar.gz

; Unarc stuff
echo "Unarchiving..."
unarc objc-bootstrap-$bootstrap_version.tar.gz "`cd`" auto quiet
unarc objc-bootstrap-$bootstrap_version.tar "`cd`" auto quiet
unarc objc-$compiler_version.tar.gz "`cd`" auto quiet
unarc objc-$compiler_version.tar "`cd`" auto quiet

; Go into boostrap directory
cd objc-bootstrap-$bootstrap_version

; Configure Makefile
sh ./configure --prefix=/SDK/POSIX/usr/local

; Fix Makefile:install
sed s/BINDIR)\/objc1/BINDIR)/ Makefile > Makefile.1
sed s/BINDIR)\/objc/BINDIR)/ Makefile.1 > Makefile.2
sed s/BINDIR)\/postlink/BINDIR)/ Makefile.2 > Makefile

; Build boostrap compiler
gmake

; Install into SDK directory
gmake install

; Fix permissions
protect SDK:POSIX/usr/local/bin/objc +e
protect SDK:POSIX/usr/local/bin/objc1 +e
protect SDK:POSIX/usr/local/bin/postlink +e

; Get into full compiler directory
cd /objc-$compiler_version

; Configure Makefile
sh ./configure --prefix=/SDK/POSIX/usr/local

gmake
gmake install

; Cleaning the runtime libraries
gmake cleanruntime

; Build runtime libraries + refCount
gmake runtimer

; Install runtime libraries
cd src/objcrt
gmake install LIBRARY="objcrtr.a"
cd //

cd src/objpak
gmake install LIBRARY="objpakr.a"
cd //

cd src/cakit
gmake install LIBRARY="cakitr.a"
cd //

cd //
echo "Done !"       

- Ajoutez le drapeau "script" à ce fichier

protect poc_build.script +s

- Lancez le en l'appelant puis patientez

poc_build.script

Etapes finales

Pour vérifer que nous disposons bel et bien d'une version fonctionnelle du compilateur, depuis le terminal lancez : 

sh
objc --version

Voici le résultat que vous devez obtenir :








Nous allons maintenant compiler un petit example en Objective-C

Editez un fichier hello.m

/* sh sdk:local/C/objc hello.m -o hello -refcnt */

#include <stdio.h>
#include <objpak.h>

int main(int argc,char **argv)
{
    id set = [Set new];
    argv++;while (--argc) [set add:[String str:*argv++]];
    [set do:{ :each | printf("hello, %s!\n",[each str]); }];
}


Commentaires

Posts les plus consultés de ce blog

"dyld: Library not loaded, reason: image not found" ou comment embarquer une librairie à lien dynamique / framework avec iOS 8+

Mettre en place un environnement de développement pour AmigaOS 4.1FE