Consider emitting machine code in an ELF executable directly instead of piping assembly to GNU assembler. It's actually not that much harder to do and then you have an "actual" end-to-end compiler.
I really like this idea. I've been wanting to learn about the structure of executables. I'd just need to see how much complexity is introduced with syscalls, it's nice to emit just 'call printf'
@@louisb0-yt On linux, it's actually easier in my opinion to directly emit syscall instructions (move syscall number + argument registers + 0F 05) than populate the symbol table for libc functions like printf. Once you are below libc, you can actually innovate (e.g. GoLang's goroutines). Please don't make yet another llvm wrapper with a standard library that wraps libc. The world has enough of those.