18 releases
0.5.3 | Feb 13, 2019 |
---|---|
0.5.2 | Nov 10, 2018 |
0.5.1 | Oct 11, 2018 |
0.3.7 | Jun 24, 2018 |
0.3.1 | Mar 31, 2018 |
#541 in Graphics APIs
28 downloads per month
44KB
914 lines
Rust PTX Builder
New Release: 0.5 🎉
Say goodbye to proxy crate approach
This allows us to use single-source CUDA in binary-only crates (ones without lib.rs
).
Development breaking changes
The crate does not provide a default panic_handler
anymore.
From now on, it either up to a user, or other crates (e.g. coming soon ptx-support
crate).
Next workaround should work in common cases, although it doesn't provide any panic details in runtime:
#![feature(core_intrinsics)]
#[panic_handler]
unsafe fn breakpoint_panic_handler(_: &::core::panic::PanicInfo) -> ! {
core::intrinsics::breakpoint();
core::hint::unreachable_unchecked();
}
API Breaking Changes - less boilerplate code
build.rs
script was never so compact and clear before:
use ptx_builder::error::Result;
use ptx_builder::prelude::*;
fn main() -> Result<()> {
let builder = Builder::new(".")?;
CargoAdapter::with_env_var("KERNEL_PTX_PATH").build(builder);
}
Documentation improvements
This release comes with a significant documentation improvement! Check it out :)
Purpose
The library should facilitate CUDA development with Rust. It can be used in a cargo build script of a host crate, and take responsibility for building device crates.
Features
- Obviously, device crates building.
- Announcing device crates sources to cargo, so it can automatically rebuild after changes.
- Reporting about missing tools, for example:
[PTX] Unable to get target details
[PTX]
[PTX] caused by:
[PTX] Command not found in PATH: 'rust-ptx-linker'. You can install it with: 'cargo install ptx-linker'.
Prerequirements
The library depends on a fresh Nightly and ptx-linker. The latter can be installed from crates.io:
cargo install ptx-linker
Windows users!
Unfortunately, due to rustc-llvm-proxy#1 MSVS targets are not supported yet.
You might face similar errors:
Unable to find symbol 'LLVMContextCreate' in the LLVM shared lib
For now the only solution is to use GNU targets.
Usage
First, you need to specify a build script in host crate's Cargo.toml
and declare the library as a build-dependency:
[build-dependencies]
ptx-builder = "0.5"
Then, typical build.rs
might look like:
use ptx_builder::error::Result;
use ptx_builder::prelude::*;
fn main() -> Result<()> {
let builder = Builder::new(".")?;
CargoAdapter::with_env_var("KERNEL_PTX_PATH").build(builder);
}
Dependencies
~4–11MB
~124K SLoC