59 releases

0.18.4 Jan 13, 2025
0.18.3 Dec 24, 2024
0.17.6 Dec 17, 2024
0.17.4 Nov 30, 2024
0.7.1 Mar 11, 2022

#70 in Cargo plugins

Download history 13684/week @ 2024-12-22 13340/week @ 2024-12-29 20484/week @ 2025-01-05 20277/week @ 2025-01-12 20734/week @ 2025-01-19 26153/week @ 2025-01-26 28660/week @ 2025-02-02 28351/week @ 2025-02-09 27848/week @ 2025-02-16 28273/week @ 2025-02-23 27583/week @ 2025-03-02 29618/week @ 2025-03-09 27449/week @ 2025-03-16 25724/week @ 2025-03-23 27719/week @ 2025-03-30 28887/week @ 2025-04-06

113,690 downloads per month
Used in maturin

MIT license

62KB
1.5K SLoC

cargo-xwin

formerly cargo-xwinbuild

CI Crates.io docs.rs PyPI Docker Image

🚀 Help me to become a full-time open-source developer by sponsoring me on GitHub

Cross compile Cargo project to Windows msvc target with ease using xwin or windows-msvc-sysroot.

By using this software you are consented to accept the license at https://go.microsoft.com/fwlink/?LinkId=2086102

Prerequisite

  1. Install clang (On macOS run brew install llvm and you're good to go).
  2. For assembly dependencies, install llvm-tools component via rustup component add llvm-tools or install llvm.

A full LLVM installation is recommended to avoid possible issues.

Installation

cargo install --locked cargo-xwin

You can also install it using pip:

pip install cargo-xwin

We also provide a Docker image which has wine pre-installed in addition to cargo-xwin and Rust, for example to build for x86_64 Windows:

docker run --rm -it -v $(pwd):/io -w /io messense/cargo-xwin \
  cargo xwin build --release --target x86_64-pc-windows-msvc

Usage

  1. Install Rust Windows msvc target via rustup, for example, rustup target add x86_64-pc-windows-msvc
  2. Run cargo xwin build, for example, cargo xwin build --target x86_64-pc-windows-msvc

Run tests with wine

With wine installed, you can run tests with the cargo xwin test command, for example, cargo xwin test --target x86_64-pc-windows-msvc

Customization

The Microsoft CRT and Windows SDK can be customized using the following environment variables or CLI options.

Environment Variable CLI option Description
XWIN_CROSS_COMPILER --cross-compiler The cross compiler to use, defaults to clang-cl, possible values: clang-cl, clang
XWIN_ARCH --xwin-arch The architectures to include, defaults to x86_64,aarch64, possible values: x86, x86_64, aarch, aarch64
XWIN_VARIANT --xwin-variant The variants to include, defaults to desktop, possible values: desktop, onecore, spectre
XWIN_VERSION --xwin-version The version to retrieve, defaults to 16, can either be a major version of 15 or 16, or a <major>.<minor> version
XWIN_CACHE_DIR --xwin-cache-dir xwin cache directory to put CRT and SDK files
XWIN_INCLUDE_DEBUG_LIBS --xwin-include-debug-libs Whether or not to include debug libs in installation (default false).
XWIN_INCLUDE_DEBUG_SYMBOLS --xwin-include-debug-symbols Whether or not to include debug symbols (PDBs) in installation (default false).

CMake Support

Some Rust crates use the cmake crate to build C/C++ dependencies, cargo-xwin will generate a CMake toolchain file automatically to make cross compilation work out of the box.

ninja is required to enable CMake support.

License

This work is released under the MIT license. A copy of the license is provided in the LICENSE file.

Dependencies

~28–44MB
~800K SLoC