Skip to content

Extension to PyMSBuild for integrating extension modules written in Rust

License

Notifications You must be signed in to change notification settings

zooba/pymsbuild-rust

Repository files navigation

pymsbuild-rust

This is a pymsbuild extension for compiling native modules written in Rust.

Quick Start

In your _msbuild.py, import RustPydFile and Cargo from pymsbuild_rust (using import * is okay).

While Cargo is used to run the build, all files need to be specified from your _msbuild.py file to be collected when building an sdist, and to handle incremental builds correctly.

from pymsbuild import *
from pymsbuild_rust import *

METADATA = {...}

PACKAGE = Package(
    'package',
    PyFile("__init__.py"),
    RustPydFile(
        "native",
        Cargo("Cargo.toml"),
        SourceFile("src/lib.rs"),
        source="native"
    ),
)

The Cargo element refers to your Cargo.toml, which should specify that a cdylib is to be built. The name of the lib should match the name provided to RustPydFile, which will also be the resulting extension module's name.

[lib]
name = "native"
crate-type = ["cdylib"]

Other than this, the module may build in any way it likes. Most likely, you will use PyO3, and so should follow their documentation for instructions on setting up the rest of your project (ignoring the parts that refer to other build backends such as Maturin).

Other files listed in the RustPydFile will be included in your sdist, and will be used to determine whether the module needs to be recompiled.

Theoretically, multiple Cargo elements will trigger multiple builds. However, as they will all be directed into the same directory, this may not do what you hope. Advanced users may find some value regardless.

About

Extension to PyMSBuild for integrating extension modules written in Rust

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages