1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
//! # CudaForge
//!
//! Advanced CUDA kernel builder for Rust with incremental builds, auto-detection,
//! and external dependency support.
//!
//! ## Features
//!
//! - **Compute Capability Detection**: Auto-detect from nvidia-smi or environment,
//! with per-file overrides for mixed architectures
//! - **Incremental Builds**: Only recompile modified kernels using content hashing
//! - **CUDA Toolkit Auto-Detection**: Automatically find nvcc and include paths
//! - **External Dependencies**: Built-in CUTLASS support, or fetch any git repo
//! - **Parallel Compilation**: Configurable thread percentage for parallel builds
//! - **Flexible Source Selection**: Directory, glob, files, or exclude patterns
//!
//! ## Quick Start
//!
//! ```no_run
//! use cudaforge::KernelBuilder;
//!
//! fn main() {
//! let out_dir = std::env::var("OUT_DIR").expect("OUT_DIR must be set");
//!
//! KernelBuilder::new()
//! .source_dir("src/kernels")
//! .exclude(&["*_test.cu"])
//! .arg("-O3")
//! .arg("-std=c++17")
//! .thread_percentage(0.5)
//! .build_lib(format!("{}/libkernels.a", out_dir))
//! .expect("CUDA compilation failed");
//!
//! println!("cargo:rustc-link-search={}", out_dir);
//! println!("cargo:rustc-link-lib=kernels");
//! }
//! ```
//!
//! ## Per-Kernel Compute Capability
//!
//! ```no_run
//! use cudaforge::KernelBuilder;
//!
//! # fn main() -> cudaforge::Result<()> {
//! KernelBuilder::new()
//! .source_glob("src/**/*.cu")
//! .with_compute_override("sm90_*.cu", 90) // Hopper kernels
//! .with_compute_override("sm80_*.cu", 80) // Ampere kernels
//! .build_lib("libkernels.a")?;
//! # Ok(())
//! # }
//! ```
//!
//! ## With CUTLASS
//!
//! ```no_run
//! use cudaforge::KernelBuilder;
//!
//! # fn main() -> cudaforge::Result<()> {
//! KernelBuilder::new()
//! .source_dir("src/kernels")
//! .with_cutlass(Some("7127592069c2fe01b041e174ba4345ef9b279671"))
//! .arg("-DUSE_CUTLASS")
//! .build_lib("libkernels.a")?;
//! # Ok(())
//! # }
//! ```
//!
//! ## PTX Generation
//!
//! ```no_run
//! use cudaforge::KernelBuilder;
//!
//! # fn main() -> cudaforge::Result<()> {
//! let output = KernelBuilder::new()
//! .source_glob("src/**/*.cu")
//! .build_ptx()?;
//!
//! output.write("src/kernels.rs")?;
//! # Ok(())
//! # }
//! ```
// Re-export main types
pub use ;
pub use ;
pub use ;
pub use ;
pub use BuildCache;
pub use ParallelConfig;
pub use ;
pub use CudaToolkit;
/// Convenience alias for the main builder type
pub type Builder = KernelBuilder;
/// Convenience alias for PTX output
pub type Bindings = PtxOutput;