With two cores at 240 MHz and about 8.5 MB of non-banked RAM if you’re using the right ESP32-S3 version, this MCU seems at least in terms of specifications to be quite the mini PC. Obviously this means that it should be capable of self-hosting its compiler, which is exactly what [Valentyn Danylchuk] did with the xcc700 C compiler project.
Targeting the Xtensa Lx7 ISA of the ESP32-S3, this is a minimal C compiler that outputs relocatable ELF binaries. These binaries can subsequently be run with for example the ESP-IDF-based elf_loader component. Obviously, this is best done on an ESP32 platform that has PSRAM, unless your binary fits within the few hundred kB that’s left after all the housekeeping and communication stacks are loaded.
The xcc700 compiler is currently very minimalistic, omitting more complex loop types as well as long and floating point types, for starters. There’s no optimization of the final code either, but considering that it’s 700 lines of code just for a PoC, there seems to be still plenty of room for improvement.

There was a C compiler that ran on the Apple II in 64K. Seems like you should have plenty of room left over in 8.5 MB.
I could not fathom this phrase “omitting more complex loop types”, because C loops are extremely simple. But, lo! the README says it supports ‘while’ but not ‘do’ or ‘for’.
I’ve many times thought of using languages mostly to write a self-hosting compiler and for no other purpose (i.e., not to compile an existing body of code). FORTH obviously. Never thought of using a “C–” approach for that. By the time I really looked at, specifically, the 1990ish C– for DOS, its limitations (iirc, no nesting) were too much to inspire me. But if it’s nested, ‘while’ really is expressive enough, i’d be willing to write a compiler in a language that lacked ‘for’.
I’d miss ‘struct’, though.
I have a bunch ESP32s that I keep meaning to use, but so far everything I want to do with a microcontroller is doable with an ESP8266. But so far I have not been interested in capturing images — just weather data and turning things on and off.
IIRC the standby features of ESP32 are better, so it beats ESP8266 for anything battery-powered.