Part of making a system programming language is programming a system!
This is why I am creating a demo project called ClashOS . This is a work-in-progress arcade-game-as-an-operating-system that runs on the Raspberry Pi 3.
The project is already causing me to make countless bug fixes and usability improvements to the compiler. So far I've been able to express everything in Zig directly - with some inline assembly - but no separate assembly files needed.
Further, because of Zig's cross compilation support I did not need to build a different GCC (or Zig) version for the target architecture. However, until LLD is released, creating an OS with Zig will require a separate binutils build. I asked on the llvm-dev mailing list about this, and looks like it will be included with LLVM 4.0.0 later this month.