cargo's evil twin to work with projects in the twilight zone of WSL2


Motivation

I have written a blog post about it and even gave a simple solution via Makefile, [go check it out].

The gist of the issue is the following:

You work with both Windows and WSL2. Your repositories live on a NTFS partition. Therefore the compilation performance within WSL2 will suffer, because the files have to cross the VM/file system boundaries.

Solution

One approach is to copy the files into a location within WSL which is a Linux based filesystem (like ext4) and do the compilation from there. Optionally you need to copy the artifacts back to the origin.

wargo does that as a wrapper around cargo: - copy the project into a Linux location - run the provided cargo command - copy back the artifacts

Currently it does this in a very simple and naive way; workspaces should work out of the box, but mostly I use single package projects. Also tweaks with the target folder may or may not work properly, the defaults are usually fine for me anyway.

There are some optional features possible, but current state is pretty complete for my personal use cases.

If you believe there is a feature missing or a tweak necessary, feel free to open a pull request or an issue.

Usage

Installation

Currently not on crates.io yet, so instead install from git:

sh cargo install --git https://github.com/asaaki/wargo

Wargo.toml

Add a basic Wargo.toml to your project. The wargo wrapper does not accept any arguments on its own.

toml dest_base_dir = "~/tmp"

The file could be completely empty (yet must exist), but at least dest_base_dir is good to specify. Use either your home dir (~) or any other absolute path, which is not an NTFS file system.

See a complete and commented example [here].

Run it

```sh

instead of cargo just replace it with wargo:

wargo check wargo build wargo build --release wargo run

alternatively

```

Safety

This crate uses #![forbid(unsafe_code)] to ensure everything is implemented in 100% Safe Rust.

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.


Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.