(reflejado en GitHub)
cproc
es un compilador C11 que utiliza QBE como backend. Se publica bajo la licencia ISC.
También se implementan algunas características de C23 y extensiones de GNU C.
Todavía queda mucho por hacer, pero actualmente implementa la mayor parte del lenguaje y es capaz de crear software, incluido él mismo, mcpp, gcc 4.7, binutils y más.
Se inspiró en varios otros compiladores pequeños de C, incluidos 8cc, c, lacc y scc.
El compilador en sí está escrito en el estándar C99 y puede construirse con cualquier compilador C99 compatible.
El controlador POSIX depende de las interfaces POSIX.1-2008 y el Makefile
requiere un make(1) compatible con POSIX.
En tiempo de ejecución, necesitará QBE, un ensamblador y un vinculador para el sistema de destino. Dado que el preprocesador aún no está implementado, actualmente también se necesita uno externo.
Todas las arquitecturas admitidas por QBE deberían funcionar (actualmente x86_64, aarch64 y riscv64).
Los siguientes objetivos se prueban mediante la compilación continua y se sabe que arrancan y pasan todas las pruebas:
x86_64-linux-musl
x86_64-linux-gnu
x86_64-freebsd
aarch64-linux-musl
aarch64-linux-gnu
riscv64-linux-gnu
Ejecute ./configure
para crear un config.h
y config.mk
apropiados para su sistema. Si su sistema no es compatible con el script de configuración, puede crear estos archivos manualmente. config.h
debería definir varias matrices de cadenas ( static char *[]
):
startfiles
: Objetos para pasar al vinculador al comienzo del comando de vínculo.endfiles
: objetos para pasar al vinculador al final del comando de vínculo (incluido libc).preprocesscmd
: el comando del preprocesador y cualquier indicador necesario para el sistema de destino.codegencmd
: el comando QBE y posiblemente indicadores de destino explícitos.assemblecmd
: el comando ensamblador.linkcmd
: el comando del vinculador. También es posible que desee personalizar su entorno o config.mk
con los CC
, CFLAGS
y LDFLAGS
apropiados.
Una vez hecho esto, puedes construir con
make
El Makefile
incluye varios otros objetivos que se pueden utilizar para el arranque. Estos objetivos requieren la capacidad de ejecutar las herramientas especificadas en config.h
.
stage2
: construye el compilador con la salida inicial ( stage1
).stage3
: construye el compilador con la salida stage2
.bootstrap
: compila los compiladores stage2
y stage3
y verifica que sean idénticos en bytes. volatile
(#7).long double
(#3).Hay una lista de correo en ~mcf/[email protected]. No dudes en utilizarlo para debates generales, preguntas, parches o informes de errores (si no tienes una cuenta sr.ht).
Informe cualquier problema a ~mcf/[email protected].
Los parches se agradecen mucho. Envíelos a la lista de correo (preferido) o como solicitudes de extracción en el espejo de GitHub.