(reflété sur GitHub)
cproc
est un compilateur C11 utilisant QBE comme backend. Il est publié sous licence ISC.
Certaines fonctionnalités C23 et extensions GNU C sont également implémentées.
Il reste encore beaucoup à faire, mais il implémente actuellement la plupart du langage et est capable de créer des logiciels, notamment lui-même, mcpp, gcc 4.7, binutils, etc.
Il a été inspiré par plusieurs autres petits compilateurs C, notamment 8cc, c, lacc et scc.
Le compilateur lui-même est écrit en standard C99 et peut être construit avec n'importe quel compilateur C99 conforme.
Le pilote POSIX dépend des interfaces POSIX.1-2008 et le Makefile
nécessite un make(1) compatible POSIX.
Au moment de l'exécution, vous aurez besoin de QBE, d'un assembleur et d'un éditeur de liens pour le système cible. Comme le préprocesseur n'est pas encore implémenté, un préprocesseur externe est actuellement également requis.
Toutes les architectures prises en charge par QBE devraient fonctionner (actuellement x86_64, aarch64 et riscv64).
Les cibles suivantes sont testées par la construction continue et sont connues pour amorcer et réussir tous les tests :
x86_64-linux-musl
x86_64-linux-gnu
x86_64-freebsd
aarch64-linux-musl
aarch64-linux-gnu
riscv64-linux-gnu
Exécutez ./configure
pour créer un config.h
et config.mk
appropriés à votre système. Si votre système n'est pas pris en charge par le script de configuration, vous pouvez créer ces fichiers manuellement. config.h
doit définir plusieurs tableaux de chaînes ( static char *[]
):
startfiles
: Objets à transmettre à l'éditeur de liens au début de la commande link.endfiles
: Objets à passer à l'éditeur de liens à la fin de la commande link (y compris libc).preprocesscmd
: La commande du préprocesseur et tous les indicateurs nécessaires pour le système cible.codegencmd
: La commande QBE, et éventuellement des indicateurs cibles explicites.assemblecmd
: La commande assembleur.linkcmd
: La commande de l'éditeur de liens. Vous souhaiterez peut-être également personnaliser votre environnement ou config.mk
avec les CC
, CFLAGS
et LDFLAGS
appropriés .
Une fois cela fait, vous pouvez construire avec
make
Le Makefile
comprend plusieurs autres cibles qui peuvent être utilisées pour l'amorçage. Ces cibles nécessitent la possibilité d'exécuter les outils spécifiés dans config.h
.
stage2
: construisez le compilateur avec la sortie initiale ( stage1
).stage3
: Construisez le compilateur avec la sortie stage2
.bootstrap
: construisez les compilateurs stage2
et stage3
et vérifiez qu'ils sont identiques en octets. volatile
(#7).long double
(#3).Il existe une liste de diffusion à ~mcf/[email protected]. N'hésitez pas à l'utiliser pour des discussions générales, des questions, des correctifs ou des rapports de bogues (si vous n'avez pas de compte sr.ht).
Veuillez signaler tout problème à ~mcf/[email protected].
Les correctifs sont grandement appréciés. Envoyez-les à la liste de diffusion (de préférence) ou sous forme de demandes d'extraction sur le miroir GitHub.