Skip to content

Commit a1bad50

Browse files
committed
Fix CI Rust build
1 parent 2e05d73 commit a1bad50

3 files changed

Lines changed: 84 additions & 152 deletions

File tree

rust/cuvs-sys/build.rs

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ struct CuvsMetadata {
2828
include_dir: PathBuf,
2929
#[cfg(feature = "generate-bindings")]
3030
bindgen_include_dirs: Vec<PathBuf>,
31+
#[cfg(feature = "generate-bindings")]
32+
bindgen_system_include_dirs: Vec<PathBuf>,
3133
lib_dir: PathBuf,
3234
}
3335

@@ -134,15 +136,24 @@ fn try_find_cuvs_package(required_version: &Version) -> Result<CuvsMetadata> {
134136
// CUDAToolkit and DLPack include directories are only needed for bindgen.
135137
#[cfg(feature = "generate-bindings")]
136138
let bindgen_include_dirs: Vec<_> = {
137-
let cudatoolkit = find_cudatoolkit_package()?;
138-
let cudatoolkit_target = find_target(&cudatoolkit, "CUDAToolkit", "CUDA::toolkit")?;
139139
let dlpack = find_dlpack_package()?;
140140
let dlpack_target = find_target(&dlpack, "dlpack", "dlpack::dlpack")?;
141-
target
141+
dlpack_target
142+
.include_directories
143+
.iter()
144+
.map(PathBuf::from)
145+
.filter(|dir| dir.is_dir())
146+
.filter(|dir| dir != &include_dir)
147+
.collect()
148+
};
149+
150+
#[cfg(feature = "generate-bindings")]
151+
let bindgen_system_include_dirs: Vec<_> = {
152+
let cudatoolkit = find_cudatoolkit_package()?;
153+
let cudatoolkit_target = find_target(&cudatoolkit, "CUDAToolkit", "CUDA::toolkit")?;
154+
cudatoolkit_target
142155
.include_directories
143156
.iter()
144-
.chain(cudatoolkit_target.include_directories.iter())
145-
.chain(dlpack_target.include_directories.iter())
146157
.map(PathBuf::from)
147158
.filter(|dir| dir.is_dir())
148159
.collect()
@@ -162,6 +173,8 @@ fn try_find_cuvs_package(required_version: &Version) -> Result<CuvsMetadata> {
162173
include_dir,
163174
#[cfg(feature = "generate-bindings")]
164175
bindgen_include_dirs,
176+
#[cfg(feature = "generate-bindings")]
177+
bindgen_system_include_dirs,
165178
lib_dir,
166179
})
167180
}
@@ -217,7 +230,11 @@ fn locate_cuvs() -> Result<CuvsMetadata> {
217230
}
218231

219232
#[cfg(feature = "generate-bindings")]
220-
fn generate_bindings(include_dirs: &[PathBuf]) {
233+
fn generate_bindings(
234+
include_dir: &Path,
235+
include_dirs: &[PathBuf],
236+
system_include_dirs: &[PathBuf],
237+
) {
221238
let out_dir = PathBuf::from(std::env::var("OUT_DIR").expect("OUT_DIR not set by Cargo"));
222239

223240
let mut builder = bindgen::Builder::default()
@@ -228,10 +245,16 @@ fn generate_bindings(include_dirs: &[PathBuf]) {
228245
.rustified_enum("(cuvs|DL|cudaError).*")
229246
.parse_callbacks(Box::new(bindgen::CargoCallbacks::new()));
230247

248+
builder = builder.clang_arg(format!("-I{}", include_dir.display()));
249+
231250
for include_dir in include_dirs {
232251
builder = builder.clang_arg(format!("-I{}", include_dir.display()));
233252
}
234253

254+
for include_dir in system_include_dirs {
255+
builder = builder.clang_arg(format!("-isystem{}", include_dir.display()));
256+
}
257+
235258
builder
236259
.generate()
237260
.expect("bindgen failed to generate cuvs bindings")
@@ -267,5 +290,9 @@ fn main() {
267290
println!("cargo::metadata=lib={}", metadata.lib_dir.display());
268291

269292
#[cfg(feature = "generate-bindings")]
270-
generate_bindings(&metadata.bindgen_include_dirs);
293+
generate_bindings(
294+
&metadata.include_dir,
295+
&metadata.bindgen_include_dirs,
296+
&metadata.bindgen_system_include_dirs,
297+
);
271298
}

0 commit comments

Comments
 (0)