Rust applications under Wine
While writing my last post I had the need to compile and run some code under Windows.
Being a Linux fanbox, this situation wasn’t optimal. Enter Wine.
Wine is a fantastic system. With an initial release 24 years ago, it’s grown to encompass incredible things like a full implementation of DirectX 9, providing very compelling gaming performance for Windows-only games on Linux.
It also behaves like Windows when you run Rust-based applications on it.
This post is a quick tip for how you can setup a flexible environment for compiling and testing small Rust applications on Linux. That behave like they would on Windows.
Installation
Install Wine, with whatever your preferred method is.
Under Fedora, you would use DNF:
$> sudo dnf install wine
Download the installer for Rust from https://www.rust-lang.org/en-US/other-installers.html
Like version 1.21 (Stable at the time):
$> wget https://static.rust-lang.org/dist/rust-1.21.0-i686-pc-windows-gnu.msi
Note: Make sure that you download the installer for i686 using a GNU toolchain.
Now, run the installer with wine:
$> wine msiexec /i rust-1.21.0-i686-pc-windows-gnu.msi
After the installer is done, you can create the following helper scripts in
/usr/local/bin/rust-wine
:
#!/usr/bin/env bash
set -e
base=$1
shift
[[ -z $base ]] && echo "Usage: $0 <command> [args]" && exit 100
exec wine $HOME/.wine/drive_c/Program\ Files\ \(x86\)/Rust\ stable\ GNU\ 1.21/bin/${base}.exe "$@"
You might want to modify the path to the Rust installation to suit your needs.
Let’s create a simple Hello World and take it for a spin:
$> cat > test.rs <<ENDL
fn main() {
println!("dir: {:?}", ::std::env::current_dir().unwrap());
}
ENDL
$> rust-wine rustc test.rs
$> wine test.exe
Hello World
Enjoy!