fix bootstrap by renaming constexpr()
README.md: Remove outdated note about gmake
Don't spam mailing list with build failures
(mirrored on GitHub)
cproc is a C11 compiler using QBE as a backend. It is released
under the ISC license.
Some C23 features and GNU C extensions are also implemented.
There is still much to do, but it currently implements most of the language and is capable of building software including itself, mcpp, gcc 4.7, binutils, and more.
It was inspired by several other small C compilers including 8cc, c, lacc, and scc.
The compiler itself is written in standard C99 and can be built with any conforming C99 compiler.
The POSIX driver depends on POSIX.1-2008 interfaces, and the
requires a POSIX-compatible make(1).
At runtime, you will need QBE, an assembler, and a linker for the target system. Since the preprocessor is not yet implemented, an external one is currently required as well.
All architectures supported by QBE should work (currently x86_64 and aarch64).
The following targets are tested by the continuous build and known to bootstrap and pass all tests:
./configure to create a
config.mk appropriate for
your system. If your system is not supported by the configure script,
you can create these files manually.
config.h should define several
string arrays (
static char *):
startfiles: Objects to pass to the linker at the beginning of the link command.
endfiles: Objects to pass to the linker at the end of the link command (including libc).
preprocesscmd: The preprocessor command, and any necessary flags for the target system.
codegencmd: The QBE command, and possibly explicit target flags.
assemblecmd: The assembler command.
linkcmd: The linker command.
You may also want to customize your environment or
config.mk with the
If you don't have QBE installed, you can build it from the included submodule, then add it to your PATH so that the driver will be able to run it.
make qbe PATH=$PWD/qbe:$PATH
Once this is done, you can build with
Makefile includes several other targets that can be used for
bootstrapping. These targets require the ability to run the tools
stage2: Build the compiler with the initial (
stage3: Build the compiler with the
bootstrap: Build the
stage3compilers, and verify that they are byte-wise identical.
volatile-qualified types (#7).
_Thread_localstorage-class specifier (#5).
long doubletype (#3).
There is a mailing list at ~firstname.lastname@example.org. Feel free to use it for general discussion, questions, patches, or bug reports (if you don't have an sr.ht account).
Please report any issues to https://todo.sr.ht/~mcf/cproc.
Patches are greatly appreciated. Send them to the mailing list (preferred), or as pull-requests on the GitHub mirror.