This is a fork of Rui Ueyama's chibicc with fixes and improvements, including:
- C99 features: VLA parameters, VLA de-allocation, K&R old-style funtions.
- C11 features:
_Static_assert()
, over-aligned locals,_Generic
with qualifiers. - C23 features:
constexpr
,#embed
,auto
type-inferrence, etc. - GNU features:
cleanup
- Basic optimizations.
If you're just looking for "chibicc-with-only-fixes-to-build-stuff" checkout widcc.
- Compile correct code correctly.
- Code readability.
- Build real world projects, test with their suites.
- Implement GNU extensions and C23 features if doable.
- Match GCC / Clang's behavior when possible.
- Should just work on recent glibc-based (2.28+) x86-64 Linux. Also see porting
- Test script needs
bash
; depending on the distro,file
and/orglibc-static
packages may be required.
git clone --depth 1 https://github.com/fuhsnn/slimcc
cd slimcc
make test-stage2 -j
Run it in base directory like CC=~/slimcc/slimcc
.
I regularly keep up with latest versions of Curl, Git, Python, PostgreSQL, Sqlite, Vim etc.
Check out widcc's list for detailed build scripts.
1M tests were run with --no-packed-struct
flag, all issues found were fixed.
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
131947 31913 456 164316 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!
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.
The widcc
branch is a less noisy codebase than slimcc
that should be more appealing for developers to hack on.