xcc700: Self-hosting mini C compiler for esp32 / Xtensa Why look into this project? A compiler you can fully grasp and tweak, on a modern platform where small is still cool. Basic features, not too entrenched, easy to morph into your language of choice. Reusable ELF writer, and a basic Xtensa bytecodes emitter. Possibly useful for hotfixes, CI, quick test/debug turnaround on esp32. Sample output ./xcc700 xcc700.c -o xcc700.elf [ xcc700 ] BUILD COMPLETED > OK > IN : 700 Lines / 7977 Tokens > SYM : 69 Funcs / 91 Globals > REL : 152 Literals / 1027 Patches > MEM : 1041 B .rodata / 17120 B .bss > OUT : 27735 B .text / 33300 B ELF [ 40 ms ] >> 17500 Lines/sec << Note: that timing is from esp32-s3. Timings on Mac/POSIX will be reported 1000x slower than they are, as on esp32 ticks are millisecond, and on POSIX microsecond, but there is no adjustment here. Video Demo xcc700_demo10s.mov . How to run xcc700? Several options: A. Compile with gcc xcc700.c and run it on your computer as a cross-compiler. It is fairly portable, tested on Mac x86_64 and arm64. B. Compile for esp32 using xtensa-gcc or xcc700 from the option A (yes it can compile and cross-compile itself). Or grab the gcc-compiled version here: xcc700.elf (16kB). Run with ESP-IDF elf_loader. C. Adapt the source code and call it as a function in your firmware. What is included? C features: minimum required to write something like this compiler. While loop, if/then/else, limited support for int/char/pointers/arrays, function calls and definitions, basic arithmetic and bitwise operators. Single source .c file as input, single REL ELF file as output. The output files can be run directly by the ESP-IDF elf_loader component, which links them on load via relocation table to anything you have exposed in your firmware: newlib libc, LVGL, your custom functions, anything you like. Just declare the functions you use. What is missing? The rest of the C: for/do, include/define, long/float/double, struct/union/typedef, switch/cas...
First seen: 2025-12-26 16:52
Last seen: 2025-12-27 13:54