This project aims to develop a reusable compiler backend for the i386, x86_64, ARM and AArch64 architecture based on the Tiny C compiler (TCC).
The idea is to define and implement an intermediate representation language (IR) on bytecode level which includes type and control flow information, with similar features like the C language, in a compact (binary) format easy to generate and parse. The backend reads this intermediate representation and generates object, executable or shared library object files compatible with the C ABI of the target platform.
- Analyze, reorganize, untangle, trim, modularize the code (not striving for perfection)
- Frontend/backend separation with a clear, minimal API and a decent modularization of the code
- Minimal, refactored C frontend to help understand and document the use of the backend API
- Implement a frontend for Oberon-0 that directly uses the backend API as a proof of conept of the API
- Define and implement an IR which includes type and control flow information, and a module concept based on separate symbol and object files
- Streamline and document backend API (DLL capable)
- Implement optimizer on IR level
- Implement a generator for the Oberon+ frontend compatible with the IR
- Backport new TCC features if need be
The source code of TCC 0.9.27 was downloaded from here on 2024-01-15, and then fully decomposed, reorganized and refactored over a period of two weeks. The preprocessor, immediate execution (-run), the C67 backend, and many other features not used for the purpose were removed; the code and data structures have been trimmed accordingly. Mutual dependencies have been resolved and the code modularized so that a minimal API is now available for the backend that covers all platform specifics. The code still has a high number of global variables and gotos, and further structuring will be done where necessary (reentrancy is no project goal so far). There is a (temporary) minimized and refactored C frontend using the backend API, and working executables can be demonstrably generated (with and without debug information, using the musl runtime library), so far on Linux i386.
The Oberon-0 parser is implemented (reusing the C compiler driver). Files can successfully be parsed. Code generator is pending.
Not available at this time.
Qt Creator 3.x is currently used for development. There are *.pro files which are compatible with qmake, but there is no Qt dependency otherwise.
- Copyright (c) 2001-2004 Fabrice Bellard
- Copyright (c) 2003 Daniel Glöckner
- Copyright (c) 2008 Shinichiro Hamaji
- Copyright (c) 2012 Thomas Preud'homme
- Copyright (c) 2014-2015 Edmund Grimley Evans
- and many others