Hi, I've been poking at cross-compiling Rust projects for Hurd on and off for a couple of weeks, and I thought I'd upload what I have now for comments. A new snapshot of my silly Hurd distro is available at https://github.com/dm0-/gnuxc updated with the Rust reimplementation of librsvg, so there is an example user of this.
The distro commit contains a patch[1] against the current Rust release (1.22.1) which can be used to build std libraries for Hurd with your Linux-based system's existing rustc. I've also pushed the patch against master[2]. See the RPM spec file[3] for the commands to build the std libraries and a target spec JSON file. Since Rust doesn't have a default path, the environment variable RUST_TARGET_PATH must be set to the directory containing the JSON spec file. With that and the rlib files installed to /usr/lib/rustlib/i686-pc-gnu/lib, Rust projects can be built for Hurd with "cargo --target=i686-pc-gnu build". The command "rustc --codegen=ar=i686-pc-gnu-gcc-ar --codegen=linker=i686-pc-gnu-gcc --target=i686-pc-gnu" will directly compile Rust files without cargo. Note that projects will likely depend on libc, which will need to be patched with the same changes used to build std. The librsvg package[4] has an example of how to do this with vendored crates, but other projects may require you to set up a local registry and patch it there. The current implementation reuses the Linux code with some additional conditional blocks, but I think it may be better to start a new OS port for Hurd. Otherwise, it may turn into whack-a-mole, tweaking constants when new packages encounter bugs, or adding more conditions as the Linux implementation is developed. I'll continue to work on this (at an as yet undetermined pace) to hopefully make it upstreamable, but any help or feedback from the Hurd side would be appreciated to prevent me from doing something dumb. In case anyone else does want to work on this before I get to it, I'd suggest prioritizing porting the libc crate--the sooner it has a release with Hurd support, the sooner every other project depending on a specific libc version will be able to update to build out of the box. Thanks. David [1] https://github.com/dm0-/gnuxc/blob/master/patches/rust-1.22.1-hurd-port.patch [2] https://github.com/dm0-/rust/commits/hurd [3] https://github.com/dm0-/gnuxc/blob/master/specs/gnuxc-rust.spec#L39 [4] https://github.com/dm0-/gnuxc/blob/master/make.pkg.d/librsvg.mk#L8