Several GNU C extensions are also implemented.
There is still much to do and some parts of the code are a little rough, but it currently implements most of the language and is capable of building some useful software including itself, mcpp, binutils, and more.
The compiler itself is written in standard C11 and can be built with any conforming C11 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.
You will need to create a
config.h appropriate for the target system. If
missing, a default version will be created from
which should work for most glibc systems, or musl systems with
You may also want to customize your environment or
config.mk with the
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).
x86_64is supported and tested, though QBE also supports
aarch64, so it is possible that it works as well.
Please report any issues to https://todo.sr.ht/~mcf/cc-issues.
Send patches to me (address in commit log), or pull-requests on the GitHub mirror. Once I decide on a project name, a mailing list will be created, which will then become the preferred form of contribution.