fuhsnn / slimcc

C11 compiler with GNU / C23 extensions for x86-64 Linux, able to build Python and PostgreSQL
MIT License
24 stars 3 forks source link
c-compiler chibicc

This is a fork of Rui Ueyama's chibicc with fixes and improvements.

Project goal

Building & Running

What can it build?

git v2.45.2 (100% test success)

git clone --depth 1 https://github.com/git/git --branch v2.45.2
cd git
make CC=~/slimcc/slimcc V=1 test -j

PostgreSQL v15.7 (All 212 tests passed.)

git clone --depth 1 https://github.com/postgres/postgres --branch REL_15_7
cd postgres
CC=~/slimcc/slimcc ./configure --disable-spinlocks --disable-atomics
make check -j

Python (July 2024 trunk) (run=477/478 failed=1 skipped=31)

git clone --depth 1 https://github.com/fuhsnn/cpython --branch typeof
cd cpython
CC=~/slimcc/slimcc ./configure
make test -j

Can it pass csmith?

1M tests were run with --no-packed-struct flag, all issues found were fixed.

How optimized are the generated binaries?

The codegen strategy is matching AST nodes to hard-coded assembly snippets and glue them with data movements.

Some optimizations can be made with this by pattern-matching to smarter alternatives, I apply them when effective and don't mess up readability.

Compare size of chibicc binary built with several compilers:

      text       data        bss      total filename
    112363      43987        616     156966 gcc_O0_build
    113867      43156        504     157527 clang_O0_build
    138747      31913        456     171116 slimcc_build
    144896      29536        440     174872 tcc_build
    263659      41163        456     305278 chibicc_build

In general, code size is on par with TinyCC but execute 30% slower. Much work to be done!

Changes over chibicc

Porting

musl linux and BSDs should be doable. Check hard-coded paths in main.c, and pre-defined macros in preprocessor.c. The biggest obstacle would be GNU inline assembly in some headers. Which is not supported yet.

There is kind of a scene of porting chibicc to different real and virtual architecture going on, look around and have fun hacking.