Skip to content

Commit 449d5d5

Browse files
committed
Use MANIFEST_DIR in build scripts
This should be a no-op unless running cargo from a different location using `--manifest-path`.
1 parent c41862a commit 449d5d5

File tree

4 files changed

+56
-24
lines changed

4 files changed

+56
-24
lines changed

crates/cust_raw/build/main.rs

Lines changed: 41 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ fn main() {
3535
let outdir = path::PathBuf::from(
3636
env::var("OUT_DIR").expect("OUT_DIR environment variable should be set by cargo."),
3737
);
38+
let manifest_dir = path::PathBuf::from(
39+
env::var("CARGO_MANIFEST_DIR")
40+
.expect("CARGO_MANIFEST_DIR environment variable should be set by cargo."),
41+
);
3842

3943
let sdk = cuda_sdk::CudaSdk::new().expect("Cannot create CUDA SDK instance.");
4044
// Emit metadata for the build script.
@@ -63,11 +67,11 @@ fn main() {
6367
println!("cargo::rerun-if-env-changed={}", e);
6468
}
6569

66-
create_cuda_driver_bindings(&sdk, outdir.as_path());
67-
create_cuda_runtime_bindings(&sdk, outdir.as_path());
68-
create_cublas_bindings(&sdk, outdir.as_path());
69-
create_nptx_compiler_bindings(&sdk, outdir.as_path());
70-
create_nvvm_bindings(&sdk, outdir.as_path());
70+
create_cuda_driver_bindings(&sdk, &outdir, &manifest_dir);
71+
create_cuda_runtime_bindings(&sdk, &outdir, &manifest_dir);
72+
create_cublas_bindings(&sdk, &outdir, &manifest_dir);
73+
create_nptx_compiler_bindings(&sdk, &outdir, &manifest_dir);
74+
create_nvvm_bindings(&sdk, &outdir, &manifest_dir);
7175

7276
if cfg!(any(
7377
feature = "driver",
@@ -101,14 +105,19 @@ fn main() {
101105
}
102106
}
103107

104-
fn create_cuda_driver_bindings(sdk: &cuda_sdk::CudaSdk, outdir: &path::Path) {
108+
fn create_cuda_driver_bindings(
109+
sdk: &cuda_sdk::CudaSdk,
110+
outdir: &path::Path,
111+
manifest_dir: &path::Path,
112+
) {
105113
if !cfg!(feature = "driver") {
106114
return;
107115
}
108116
let bindgen_path = path::PathBuf::from(format!("{}/driver_sys.rs", outdir.display()));
109-
let header = "build/driver_wrapper.h";
117+
let header = manifest_dir.join("build/driver_wrapper.h");
118+
println!("cargo::rerun-if-changed={}", header.display());
110119
let bindings = bindgen::Builder::default()
111-
.header(header)
120+
.header(header.to_str().expect("header should be valid UTF-8"))
112121
.parse_callbacks(Box::new(callbacks::FunctionRenames::new(
113122
"cu",
114123
outdir,
@@ -145,14 +154,19 @@ fn create_cuda_driver_bindings(sdk: &cuda_sdk::CudaSdk, outdir: &path::Path) {
145154
.expect("Cannot write CUDA driver bindgen output to file.");
146155
}
147156

148-
fn create_cuda_runtime_bindings(sdk: &cuda_sdk::CudaSdk, outdir: &path::Path) {
157+
fn create_cuda_runtime_bindings(
158+
sdk: &cuda_sdk::CudaSdk,
159+
outdir: &path::Path,
160+
manifest_dir: &path::Path,
161+
) {
149162
if !cfg!(feature = "runtime") {
150163
return;
151164
}
152165
let bindgen_path = path::PathBuf::from(format!("{}/runtime_sys.rs", outdir.display()));
153-
let header = "build/runtime_wrapper.h";
166+
let header = manifest_dir.join("build/runtime_wrapper.h");
167+
println!("cargo::rerun-if-changed={}", header.display());
154168
let bindings = bindgen::Builder::default()
155-
.header(header)
169+
.header(header.to_str().expect("header should be valid UTF-8"))
156170
.parse_callbacks(Box::new(callbacks::FunctionRenames::new(
157171
"cuda",
158172
outdir,
@@ -187,7 +201,7 @@ fn create_cuda_runtime_bindings(sdk: &cuda_sdk::CudaSdk, outdir: &path::Path) {
187201
.expect("Cannot write CUDA runtime bindgen output to file.");
188202
}
189203

190-
fn create_cublas_bindings(sdk: &cuda_sdk::CudaSdk, outdir: &path::Path) {
204+
fn create_cublas_bindings(sdk: &cuda_sdk::CudaSdk, outdir: &path::Path, manifest_dir: &path::Path) {
191205
#[rustfmt::skip]
192206
let params = &[
193207
(cfg!(feature = "cublas"), "cublas", "^cublas.*", "^CUBLAS.*"),
@@ -199,9 +213,10 @@ fn create_cublas_bindings(sdk: &cuda_sdk::CudaSdk, outdir: &path::Path) {
199213
continue;
200214
}
201215
let bindgen_path = path::PathBuf::from(format!("{}/{pkg}_sys.rs", outdir.display()));
202-
let header = format!("build/{pkg}_wrapper.h");
216+
let header = manifest_dir.join(format!("build/{pkg}_wrapper.h"));
217+
println!("cargo::rerun-if-changed={}", header.display());
203218
let bindings = bindgen::Builder::default()
204-
.header(&header)
219+
.header(header.to_str().expect("header should be valid UTF-8"))
205220
.parse_callbacks(Box::new(callbacks::FunctionRenames::new(
206221
pkg,
207222
outdir,
@@ -235,13 +250,19 @@ fn create_cublas_bindings(sdk: &cuda_sdk::CudaSdk, outdir: &path::Path) {
235250
}
236251
}
237252

238-
fn create_nptx_compiler_bindings(sdk: &cuda_sdk::CudaSdk, outdir: &path::Path) {
253+
fn create_nptx_compiler_bindings(
254+
sdk: &cuda_sdk::CudaSdk,
255+
outdir: &path::Path,
256+
manifest_dir: &path::Path,
257+
) {
239258
if !cfg!(feature = "nvptx-compiler") {
240259
return;
241260
}
242261
let bindgen_path = path::PathBuf::from(format!("{}/nvptx_compiler_sys.rs", outdir.display()));
262+
let header = manifest_dir.join("build/nvptx_compiler_wrapper.h");
263+
println!("cargo::rerun-if-changed={}", header.display());
243264
let bindings = bindgen::Builder::default()
244-
.header("build/nvptx_compiler_wrapper.h")
265+
.header(header.to_str().expect("header should be valid UTF-8"))
245266
.parse_callbacks(Box::new(bindgen::CargoCallbacks::new()))
246267
.clang_args(
247268
sdk.cuda_include_paths()
@@ -268,13 +289,15 @@ fn create_nptx_compiler_bindings(sdk: &cuda_sdk::CudaSdk, outdir: &path::Path) {
268289
.expect("Cannot write nvptx-compiler bindgen output to file.");
269290
}
270291

271-
fn create_nvvm_bindings(sdk: &cuda_sdk::CudaSdk, outdir: &path::Path) {
292+
fn create_nvvm_bindings(sdk: &cuda_sdk::CudaSdk, outdir: &path::Path, manifest_dir: &path::Path) {
272293
if !cfg!(feature = "nvvm") {
273294
return;
274295
}
275296
let bindgen_path = path::PathBuf::from(format!("{}/nvvm_sys.rs", outdir.display()));
297+
let header = manifest_dir.join("build/nvvm_wrapper.h");
298+
println!("cargo::rerun-if-changed={}", header.display());
276299
let bindings = bindgen::Builder::default()
277-
.header("build/nvvm_wrapper.h")
300+
.header(header.to_str().expect("header should be valid UTF-8"))
278301
.parse_callbacks(Box::new(bindgen::CargoCallbacks::new()))
279302
.clang_args(
280303
sdk.nvvm_include_paths()

examples/cuda/gemm/build.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ fn main() {
88
println!("cargo::rerun-if-changed=kernels");
99

1010
let out_path = path::PathBuf::from(env::var("OUT_DIR").unwrap());
11-
CudaBuilder::new("kernels")
11+
let manifest_dir = path::PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
12+
13+
CudaBuilder::new(manifest_dir.join("kernels"))
1214
.copy_to(out_path.join("kernels.ptx"))
1315
.build()
1416
.unwrap();

examples/cuda/path_tracer/build.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,17 @@ use std::path;
44
use cuda_builder::CudaBuilder;
55

66
fn main() {
7+
println!("cargo::rerun-if-changed=build.rs");
8+
println!("cargo::rerun-if-changed=kernels");
9+
710
let out_path = path::PathBuf::from(env::var("OUT_DIR").unwrap());
8-
CudaBuilder::new("kernels")
11+
let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
12+
13+
CudaBuilder::new(manifest_dir.join("kernels"))
914
.copy_to(out_path.join("kernels.ptx"))
1015
.build()
1116
.unwrap();
12-
CudaBuilder::new("kernels")
17+
CudaBuilder::new(manifest_dir.join("kernels"))
1318
.copy_to(out_path.join("kernels_optix.ptx"))
1419
.build_args(&["--features", "optix"])
1520
.build()

examples/cuda/vecadd/build.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@ use std::path;
44
use cuda_builder::CudaBuilder;
55

66
fn main() {
7-
println!("cargo:rerun-if-changed=build.rs");
8-
println!("cargo:rerun-if-changed=kernels");
7+
println!("cargo::rerun-if-changed=build.rs");
8+
println!("cargo::rerun-if-changed=kernels");
99

1010
let out_path = path::PathBuf::from(env::var("OUT_DIR").unwrap());
11-
CudaBuilder::new("kernels")
11+
let manifest_dir = path::PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap());
12+
13+
CudaBuilder::new(manifest_dir.join("kernels"))
1214
.copy_to(out_path.join("kernels.ptx"))
1315
.build()
1416
.unwrap();

0 commit comments

Comments
 (0)