Accéder au contenu principal

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

Introduction

Portable Object Compiler est un compilateur Objective-C maintenu par David Stes. Il est 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ù la nécessité du compilateur de bootstrap).

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 des 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 plateforme.

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 exemple 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+

Le problème : Au cours du développement d'une application, j'ai eu besoin d'ajouter un sous-projet produisant un "Framework" (autrement dit une dépendance installée via Carthage). Lors de l'execution sous l'émulateur, tout fonctionna très bien. Mais en lançant l'application sur un appareil physique, il apparut un message proche de celui-ci : dyld :   Library  not loaded :   @ rpath / Machin . framework / Machin Referenced from : / var / mobile / Applications / FA 6... B 6 / MachinApp . app / MachinApp Reason : image not found Que faire dans ce cas ? Dans l'onglet "cible" du projet dépendant, ajouter le framework via la liste "Embedded Binairies". Voici une capture d'écran montrant la structure du projet et la fenêtre de dialogue permettant d'ajouter la dépendance binaire. Pour référence, le lien StackOverflow :  https://stackoverflow.com/questions/24333981/ios-app-with-framework-cras

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

Je vais vous parler ici de la configuration que j'utilise pour développer. Voici la liste des les logiciels utilisés : - Editeur de texte : StormC5ED - Compilateur C/C++ : GCC 4.2 - Débogueur : DB101 - Visualiseur de sortie série : Sashimi - Kit de développement : SDK53.30 - Terminal de commande Prenons le temps de faire un tour succinct de chacun d'entre eux. StormC5ED Cet éditeur offre une expérience d'écriture de code tout à fait acceptable. Très léger, il offre une coloration syntaxique pour quelques langages : C, C++, ARexx, AmigaGuide. Il gère les onglets multiples et "le pliage de code". Ce dernier consiste en un regroupement du code d'une fonction. Une fois pliée, la fonction n'occupe plus qu'une ligne dans l'éditeur. DB101 Ce débogueur dispose d'une interface graphique conviviale. Il supporte les exécutables contenant les informations de déboggage STAB (table de symboles). Les fonctionnalités classiques telles