Skip to content
This repository was archived by the owner on Mar 7, 2021. It is now read-only.

Commit 985985c

Browse files
committed
Make build.rs notice when kernel-cflags-finder has failed
If we get an error out of kernel-cflags-finder, we should fail early instead of continuing the build. Also, suppress one Clang warning class (unknown -W flags, see e.g. torvalds/linux@9df3e7a7 - in a real clang build these wouldn't be present but in a clang-modules-on-gcc-kernel build it shows up) to get kernel-cflags-finder exiting cleanly on 4.20+. Also rerun the build script if kernel-cflags-finder/Makefile has changed, or if $CLANG, which it and bindgen both use, have changed.
1 parent 327bb91 commit 985985c

File tree

2 files changed

+18
-13
lines changed

2 files changed

+18
-13
lines changed

build.rs

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -83,17 +83,21 @@ fn handle_kernel_version_cfg(bindings_path: &PathBuf) {
8383
}
8484

8585
fn main() {
86-
println!("rerun-if-env-changed=KDIR");
87-
let output = String::from_utf8(
88-
Command::new("make")
89-
.arg("-C")
90-
.arg("kernel-cflags-finder")
91-
.arg("-s")
92-
.output()
93-
.unwrap()
94-
.stdout,
95-
)
96-
.unwrap();
86+
println!("cargo:rerun-if-env-changed=KDIR");
87+
println!("cargo:rerun-if-env-changed=CLANG");
88+
println!("cargo:rerun-if-changed=kernel-cflags-finder/Makefile");
89+
let output = Command::new("make")
90+
.arg("-C")
91+
.arg("kernel-cflags-finder")
92+
.arg("-s")
93+
.output()
94+
.unwrap();
95+
if !output.status.success() {
96+
eprintln!("kernel-cflags-finder did not succeed");
97+
eprintln!("stdout: {}", std::str::from_utf8(&output.stdout).unwrap());
98+
eprintln!("stderr: {}", std::str::from_utf8(&output.stderr).unwrap());
99+
std::process::exit(1);
100+
}
97101

98102
let mut builder = bindgen::Builder::default()
99103
.use_core()
@@ -102,7 +106,7 @@ fn main() {
102106
.rustfmt_bindings(true);
103107

104108
builder = builder.clang_arg("--target=x86_64-linux-kernel-module");
105-
for arg in shlex::split(&output).unwrap() {
109+
for arg in shlex::split(std::str::from_utf8(&output.stdout).unwrap()).unwrap() {
106110
builder = builder.clang_arg(arg.to_string());
107111
}
108112

@@ -136,7 +140,7 @@ fn main() {
136140
builder.target("x86_64-linux-kernel-module");
137141
builder.warnings(false);
138142
builder.file("src/helpers.c");
139-
for arg in shlex::split(&output).unwrap() {
143+
for arg in shlex::split(std::str::from_utf8(&output.stdout).unwrap()).unwrap() {
140144
builder.flag(&arg);
141145
}
142146
builder.compile("helpers");

kernel-cflags-finder/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
ifneq ($(KERNELRELEASE),)
22
obj-m += dummy.o
33
clean-files := dummy.c
4+
ccflags-y += -Wno-unknown-warning-option
45

56
# Some systems for installing kernel headers (e.g. Debian's) happen to
67
# trigger the out-of-tree build code because the kernel headers directly

0 commit comments

Comments
 (0)