[HN Gopher] Show HN: Xcc700: Self-hosting mini C compiler for ES...
___________________________________________________________________
Show HN: Xcc700: Self-hosting mini C compiler for ESP32 (Xtensa) in
700 lines
Repo: https://github.com/valdanylchuk/xcc700 Hi Everyone! I just
wrote my first compiler! - single pass, recursive descent, direct
emission - generates REL ELF binaries, runnable using ESP-IDF
elf_loader - very basic features only, just enough for self-
hosting - treats the Xtensa CPU as a stack machine for simplicity,
no register allocation / window usage - compilable on Mac,
probably also Linux, can cross-compile for esp32 there - wrote for
fun / cyberdeck project Sample output from esp32:
xcc700.elf xcc700.c -o /d/cc.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
<< My best hope is that some fork might grow into a unique
nice language tailored to the esp32 platform. I think it is
underrated in userland hobby projects.
Author : isitcontent
Score : 70 points
Date : 2025-12-26 15:07 UTC (7 hours ago)
(HTM) web link (github.com)
(TXT) w3m dump (github.com)
| boznz wrote:
| Cool, always refreshing to see different approaches to the same
| problem, and you learn so much by doing, this is more the kind of
| tinkering I will be doing in retirement.
| MobiusHorizons wrote:
| Very cool! What was the shell you are running in the demo video?
| isitcontent wrote:
| Thanks! That is just my small custom experimental mini shell.
| This project started as a retro DOS-like cyberdeck, and first
| thing I tried to run there was DOS programs, which is why it
| looks like that. Only got to COM files, when I learned about
| elf_loader, so I now focus on that. I might extract and release
| whatever is valuable/reusable in that shell later on.
| guestbest wrote:
| Thanks for posting this here. I star'd the project. Getting a
| portable computer with a minimal flexible and previously well
| supported operating system was one of my goals for the esp32
| as well. I'll be watching for more.
| MobiusHorizons wrote:
| Yeah, very cool. I was thinking about possibly porting it to
| risc-v and using it on my fpga based core. I was trying to
| build a monitor style shell, but C like environment would be
| very cool.
| isitcontent wrote:
| Porting to different CPU/bytecodes should be doable. Just
| keep in mind that in ESP-IDF we also get the dynamic linker
| and the libc for free (and any other C functions exposed in
| the firmware). On the other platforms, that may be some
| extra work for the compiler.
| ladyanita22 wrote:
| That's super cool! I have been wondering what could be done with
| ESP32 if it weren't for the lack of RAM.
|
| As a fun of Rust, one thing that saddens me is knowing these
| things would be difficult to achieve with a Rust compiler, given
| the language seems to be vastly more complex.
|
| Unless someone created a subset of Rust without (some?) safety
| checks, I guess.
| isitcontent wrote:
| Right, Rust is more complex, and it is the complex bits that
| make it Rust. There are sure some shortcuts possible for
| starters, for example scope-based lifetimes like in early Rust
| versions, but still, to make it a worthwhile upgrade over C, it
| would take some intermediate representation, and definitely
| more than 700 lines.
|
| There is a lively movement for coding in Rust for esp32, that
| works, just not on the device I think.
| uecker wrote:
| Cool! And I do think the world needs more C compilers. There is
| so much you could do with this language, but it needs to be
| disentangled from the C++ compiler behemoths. (yes, I now that
| there are other small C compilers)
| isitcontent wrote:
| There is the TCC. Adapting that would probably be a faster path
| to a full featured C compiler on esp32 than building up my
| xcc700. This is more of an educational sandbox project.
| uecker wrote:
| I know, and there are chibicc, kefir, etc. .. and I have my
| own experimental C compiler.
| fuhsnn wrote:
| I would love to see how you handle variably-modified types,
| the way I retrofitted them onto chibicc never felt quite
| right, and I've never seen another non-gcc/clang compiler
| fully support noplate's VM type patterns.
| nunobrito wrote:
| Can this run ELF programs that are placed on the memory card?
| isitcontent wrote:
| I only wrote the compiler. But ESP-IDF elf_loader component can
| do that, yes.
| saidnooneever wrote:
| hats off. this is really easy to read and well written and easy
| to comprehend code imho because it only support basic features.
| its a really nice example to read through thanks. nice
| inspiration to see its possible to roll your own for this with a
| bit restricted featureset and goals :).
| fuhsnn wrote:
| This one[1] is similar in style and supports a bit more C
| constructs. [1]
| https://github.com/Lulzx/sectorc/blob/master/stage5/cc.c
___________________________________________________________________
(page generated 2025-12-26 23:00 UTC)