rust: enable bindgen's `--enable-function-attribute-detection` flag
authorMiguel Ojeda <ojeda@kernel.org>
Wed, 14 Aug 2024 16:37:22 +0000 (18:37 +0200)
committerMiguel Ojeda <ojeda@kernel.org>
Tue, 20 Aug 2024 22:37:02 +0000 (00:37 +0200)
`bindgen` is able to detect certain function attributes and annotate
functions correspondingly in its output for the Rust side, when the
`--enable-function-attribute-detection` is passed.

In particular, it is currently able to use `__must_check` in C
(`#[must_use]` in Rust), which give us a bunch of annotations that are
nice to have to prevent possible issues in Rust abstractions, e.g.:

     extern "C" {
    +    #[must_use]
         pub fn kobject_add(
             kobj: *mut kobject,
             parent: *mut kobject,
             fmt: *const core::ffi::c_char,
             ...
         ) -> core::ffi::c_int;
     }

Apparently, there are edge cases where this can make generation very slow,
which is why it is behind a flag [1], but it does not seem to affect us
in any major way at the moment.

Thus enable it.

Link: https://github.com/rust-lang/rust-bindgen/issues/1465
Link: https://lore.kernel.org/rust-for-linux/CANiq72=u5Nrz_NW3U3_VqywJkD8pECA07q2pFDd1wjtXOWdkAQ@mail.gmail.com/
Reviewed-by: Alice Ryhl <aliceryhl@google.com>
Tested-by: Alice Ryhl <aliceryhl@google.com>
Reviewed-by: Gary Guo <gary@garyguo.net>
Acked-by: Danilo Krummrich <dakr@kernel.org>
Link: https://lore.kernel.org/r/20240814163722.1550064-1-ojeda@kernel.org
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
rust/Makefile

index 7ea5905f544ce09d64477287ddbdf33ff951131e..c24c3689e7b4c06e51a1e38fb8a4d2c81b8c9aa2 100644 (file)
@@ -270,7 +270,7 @@ quiet_cmd_bindgen = BINDGEN $@
       cmd_bindgen = \
        $(BINDGEN) $< $(bindgen_target_flags) \
                --use-core --with-derive-default --ctypes-prefix core::ffi --no-layout-tests \
-               --no-debug '.*' \
+               --no-debug '.*' --enable-function-attribute-detection \
                -o $@ -- $(bindgen_c_flags_final) -DMODULE \
                $(bindgen_target_cflags) $(bindgen_target_extra)