$ git clone https://github.com/llvm/llvm-project.git
$ cd llvm-project
$ mkdir build && cd build
$ cmake -DLLVM_ENABLE_PROJECTS=clang -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles" ../llvm
$ make -j4
Took < 40 min on an old laptop.That being said: have used Ninja with Cmake. Damn fast.
Consider the Linux kernel as a contrast, which doesn't suffer from slow make because a lot of investment was made into a non-recursive make system.
The fact that makefile generators like CMake tend to generate recursive makefiles is a shame.
A libc can be useful inside of wasm for existing C or C++ code (or whatever) that is built for another platform, so that you can more easily compile to wasm as well. But it's an option, not required.
I'm not sure the primary appeal of wasm is treating it as a low level target (even if that is possible and sometimes useful).
Both of those would include input and I think audio is dealt with in a similar way.
(In Rust, we've had this new target for a while, and it's where we're putting in all of our development efforts. We still technically support the emscripten target as well.)
But be prepared to work without libc if you don't use emscripten. Writing a malloc is fun though!
It's funny how technology go in waves. This reminds me more of programming microcontrollers than writing Web stuff, and yet this is the hot new thing!
You can use llc from the release tarballs.