(gespiegelt auf GitHub)
cproc
ist ein C11-Compiler, der QBE als Backend verwendet. Es wird unter der ISC-Lizenz veröffentlicht.
Einige C23-Funktionen und GNU C-Erweiterungen sind ebenfalls implementiert.
Es gibt noch viel zu tun, aber es implementiert derzeit den größten Teil der Sprache und ist in der Lage, Software zu erstellen, darunter sich selbst, mcpp, gcc 4.7, binutils und mehr.
Es wurde von mehreren anderen kleinen C-Compilern inspiriert, darunter 8cc, c, lacc und scc.
Der Compiler selbst ist im Standard-C99 geschrieben und kann mit jedem konformen C99-Compiler erstellt werden.
Der POSIX-Treiber hängt von POSIX.1-2008-Schnittstellen ab und das Makefile
erfordert ein POSIX-kompatibles make(1).
Zur Laufzeit benötigen Sie QBE, einen Assembler und einen Linker für das Zielsystem. Da der Präprozessor noch nicht implementiert ist, wird derzeit auch ein externer benötigt.
Alle von QBE unterstützten Architekturen sollten funktionieren (derzeit x86_64, aarch64 und riscv64).
Die folgenden Ziele werden vom kontinuierlichen Build getestet und sind dafür bekannt, dass sie alle Tests booten und bestehen:
x86_64-linux-musl
x86_64-linux-gnu
x86_64-freebsd
aarch64-linux-musl
aarch64-linux-gnu
riscv64-linux-gnu
Führen Sie ./configure
aus, um eine für Ihr System geeignete config.h
und config.mk
zu erstellen. Wenn Ihr System vom Konfigurationsskript nicht unterstützt wird, können Sie diese Dateien manuell erstellen. config.h
sollte mehrere String-Arrays definieren ( static char *[]
):
startfiles
: Objekte, die am Anfang des Link-Befehls an den Linker übergeben werden sollen.endfiles
: Objekte, die am Ende des Link-Befehls an den Linker übergeben werden (einschließlich libc).preprocesscmd
: Der Präprozessorbefehl und alle erforderlichen Flags für das Zielsystem.codegencmd
: Der QBE-Befehl und möglicherweise explizite Zielflags.assemblecmd
: Der Assembler-Befehl.linkcmd
: Der Linker-Befehl. Möglicherweise möchten Sie auch Ihre Umgebung oder config.mk
mit den entsprechenden CC
, CFLAGS
und LDFLAGS
anpassen.
Sobald dies erledigt ist, können Sie mit dem Bauen beginnen
make
Das Makefile
enthält mehrere andere Ziele, die zum Bootstrapping verwendet werden können. Diese Ziele erfordern die Fähigkeit, die in config.h
angegebenen Tools auszuführen.
stage2
: Erstellen Sie den Compiler mit der anfänglichen Ausgabe ( stage1
).stage3
: Erstellen Sie den Compiler mit der stage2
Ausgabe.bootstrap
: Erstellen Sie die stage2
und stage3
Compiler und stellen Sie sicher, dass sie byteweise identisch sind. volatile
-qualifizierte Typen (#7).long double
Doppeltyp (#3).Es gibt eine Mailingliste unter ~mcf/[email protected]. Sie können es gerne für allgemeine Diskussionen, Fragen, Patches oder Fehlerberichte verwenden (wenn Sie kein sr.ht-Konto haben).
Bitte melden Sie etwaige Probleme an ~mcf/[email protected].
Patches werden sehr geschätzt. Senden Sie sie an die Mailingliste (bevorzugt) oder als Pull-Requests auf dem GitHub-Spiegel.