[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)