(espelhado no GitHub)
cproc
é um compilador C11 que usa QBE como backend. É lançado sob a licença ISC.
Alguns recursos C23 e extensões GNU C também são implementados.
Ainda há muito a fazer, mas atualmente implementa a maior parte da linguagem e é capaz de construir software, incluindo ele mesmo, mcpp, gcc 4.7, binutils e muito mais.
Foi inspirado em vários outros pequenos compiladores C, incluindo 8cc, c, lacc e scc.
O compilador em si é escrito no padrão C99 e pode ser construído com qualquer compilador C99 compatível.
O driver POSIX depende das interfaces POSIX.1-2008, e o Makefile
requer um make(1) compatível com POSIX.
Em tempo de execução, você precisará de QBE, um montador e um vinculador para o sistema de destino. Como o pré-processador ainda não está implementado, também é necessário um externo.
Todas as arquiteturas suportadas pelo QBE devem funcionar (atualmente x86_64, aarch64 e riscv64).
Os seguintes destinos são testados pela construção contínua e conhecidos por inicializar e passar em todos os testes:
x86_64-linux-musl
x86_64-linux-gnu
x86_64-freebsd
aarch64-linux-musl
aarch64-linux-gnu
riscv64-linux-gnu
Execute ./configure
para criar um config.h
e config.mk
apropriado para o seu sistema. Se o seu sistema não for suportado pelo script de configuração, você poderá criar esses arquivos manualmente. config.h
deve definir vários arrays de strings ( static char *[]
):
startfiles
: objetos a serem passados ao vinculador no início do comando de link.endfiles
: objetos a serem passados ao vinculador no final do comando link (incluindo libc).preprocesscmd
: O comando do pré-processador e quaisquer sinalizadores necessários para o sistema de destino.codegencmd
: O comando QBE e possivelmente sinalizadores de destino explícitos.assemblecmd
: O comando assembler.linkcmd
: O comando do vinculador. Você também pode personalizar seu ambiente ou config.mk
com CC
, CFLAGS
e LDFLAGS
apropriados .
Feito isso, você pode construir com
make
O Makefile
inclui vários outros alvos que podem ser usados para inicialização. Esses destinos exigem a capacidade de executar as ferramentas especificadas em config.h
.
stage2
: Construa o compilador com a saída inicial ( stage1
).stage3
: Construa o compilador com a saída stage2
.bootstrap
: Construa os compiladores stage2
e stage3
e verifique se eles são idênticos em bytes. volatile
(nº 7).long double
(#3).Há uma lista de discussão em ~mcf/[email protected]. Sinta-se à vontade para usá-lo para discussões gerais, perguntas, correções ou relatórios de bugs (se você não tiver uma conta sr.ht).
Por favor, relate quaisquer problemas para ~mcf/[email protected].
Patches são muito apreciados. Envie-os para a lista de discussão (preferencial) ou como solicitações pull no espelho do GitHub.