Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/asaaki/wargo
cargo's evil twin to work with projects in the twilight zone of WSL2
https://github.com/asaaki/wargo
cargo cargo-plugin cargo-subcommand rust windows windows-10 wsl2
Last synced: about 2 months ago
JSON representation
cargo's evil twin to work with projects in the twilight zone of WSL2
- Host: GitHub
- URL: https://github.com/asaaki/wargo
- Owner: asaaki
- License: apache-2.0
- Created: 2021-12-23T18:05:47.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2024-10-23T17:11:28.000Z (about 2 months ago)
- Last Synced: 2024-10-24T00:41:26.939Z (about 2 months ago)
- Topics: cargo, cargo-plugin, cargo-subcommand, rust, windows, windows-10, wsl2
- Language: Rust
- Homepage: https://crates.io/crates/wargo
- Size: 399 KB
- Stars: 15
- Watchers: 2
- Forks: 1
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Contributing: .github/CONTRIBUTING.md
- License: LICENSE-APACHE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
_cargo's evil twin to work with projects in the twilight zone of WSL2_
## Motivation
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.Slightly more elaborate background and reasoning can be found in my article on [how to speed up Rust compilation].
## 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 artifactsCurrently 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
```sh
cargo install wargo --locked
```### Wargo.toml (optional)
Add a basic `Wargo.toml` to your project if you want to configure the behaviour.
The wargo wrapper does not accept any CLI arguments on its own, so a config file is the only option for now.```toml
# Wargo.toml# this is also the default
dest_base_dir = "~/tmp"
```The file could be completely empty, but at least `dest_base_dir` is good to specify.
Use either a location in 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 also callable as a cargo subcommand `wsl`:
cargo wsl build
```## 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.[how to speed up Rust compilation]: https://markentier.tech/posts/2022/01/speedy-rust-builds-under-wsl2/
[here]: https://github.com/asaaki/wargo/blob/main/Wargo.toml