The best way to generate wasm from Rust without emscripten right now is to use rustc to generate llvm bitcode files, use llvm-link to link them together into one big bitcode file, use llc to compile that to to the wasm .s format, then translate that to a wasm binary with Binaryen’s s2wasm. This is exactly the process that emscripten drives in the current wasm32-experimental-emscripten target, but doing it manually doesn’t get you any of libc, other fundamental functions, or JS glue. Although no_std code shouldn’t need libc, it will still need some of the other stuff that Emscripten provides.
I know @vadimcn is working on pulling out this critical runtime into a standalone package that would be usable without emscripten, but his work is based on the newer process that uses the LLVM backend and lld. Since this process is not yet stable and upstreaming a target that uses it would be a lot of work as long as Rust needs Fastcomp, none of this work is immediately upstreamable.
A standalone package of the necessary runtime components based on the current s2wasm process would satisfy this use case but would become obsolete as soon as lld wasm support is stabilized.
For this reason I plan to work in the meantime on getting wasm2asm working so Rust can support asm.js without depending on Fastcomp. This will make upstreaming the lld-based target and @vadimcn’s work easier.
For now I would continue using wasm32-unknown-emscripten for all your Rust to wasm needs. Emscripten should be pretty good about eliminating all unnecessary code from a no_std binary.