I have been working on a decently-sized C subset compiler for the past month, called Lance repo here
I've recently got it to compile the ~3600loc single-header decoder (shown in video) from the DSV2 video codec repo here (DSV2 is not made by me)
Lance features structs/unions/enums, initializer lists, object-like and function macros, floats/doubles, pointers, if/for/while/do/? : , etc (full list in Lance repo)
Lance was built with self hosting in mind. I don't use any external libraries for the entire compiler, just C standard library.
Lance implements: custom x86_64 NASM assembly backend (SystemV ABI), an IR, a register allocator, semantic analysis, parsing, and the lexer.
Lance also includes an in-house preprocessor that preserves line number/column data for diagnostics.
There are only 2 optimizations so far: constant folding, and optimizing stack operations in the IR.
The video showcases the decoder mentioned earlier running and successfully outputting a Y4M video.