Thread (66 messages) 66 messages, 16 authors, 2021-07-23

Re: [PATCH 03/17] Makefile: generate `CLANG_FLAGS` even in GCC builds

From: Nick Desaulniers <hidden>
Date: 2021-07-14 18:16:37
Also in: linux-doc, linux-kbuild, lkml

On Wed, Jul 14, 2021 at 11:13 AM Nick Desaulniers
[off-list ref] wrote:
On Sun, Jul 4, 2021 at 1:28 PM [off-list ref] wrote:
quoted
From: Miguel Ojeda <ojeda@kernel.org>

To support Rust under GCC-built kernels, we need to save the flags that
would have been passed if the kernel was being compiled with Clang.

The reason is that `bindgen` -- the tool we use to generate Rust
bindings to the C side of the kernel -- relies on `libclang` to
parse C. Ideally:

  - `bindgen` would support a GCC backend (requested at [1]),

  - or the Clang driver would be perfectly compatible with GCC,
    including plugins. Unlikely, of course, but perhaps a big
    subset of configs may be possible to guarantee to be kept
    compatible nevertheless.

This is also the reason why GCC builds are very experimental and some
configurations may not work (e.g. `GCC_PLUGIN_RANDSTRUCT`). However,
we keep GCC builds working (for some example configs) in the CI
to avoid diverging/regressing further, so that we are better prepared
for the future when a solution might become available.

[1] https://github.com/rust-lang/rust-bindgen/issues/1949

Link: https://github.com/Rust-for-Linux/linux/issues/167
Co-developed-by: Alex Gaynor <redacted>
Signed-off-by: Alex Gaynor <redacted>
Co-developed-by: Geoffrey Thomas <redacted>
Signed-off-by: Geoffrey Thomas <redacted>
Co-developed-by: Finn Behrens <redacted>
Signed-off-by: Finn Behrens <redacted>
Co-developed-by: Adam Bratschi-Kaye <redacted>
Signed-off-by: Adam Bratschi-Kaye <redacted>
Co-developed-by: Wedson Almeida Filho <redacted>
Signed-off-by: Wedson Almeida Filho <redacted>
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
Patch LGTM; please keep an eye on the series:
https://lore.kernel.org/lkml/20210707224310.1403944-2-ndesaulniers@google.com/ (local)

If that lands in kbuild before this, this patch will need to be
rebased to avoid a conflict in linux-next.

So (tentatively :-P):
Reviewed-by: Nick Desaulniers <redacted>

If the patch needs to be rebased on the series linked above, please
drop my reviewed by tag and I will re-review. Perhaps putting me
explicitly on Cc: in the commit message will help notify me if there
are successive versions?
quoted
---
 Makefile | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/Makefile b/Makefile
index 0565caea036..6e823d8bd64 100644
--- a/Makefile
+++ b/Makefile
@@ -573,18 +573,23 @@ endif
 # and from include/config/auto.conf.cmd to detect the compiler upgrade.
 CC_VERSION_TEXT = $(subst $(pound),,$(shell $(CC) --version 2>/dev/null | head -n 1))

-ifneq ($(findstring clang,$(CC_VERSION_TEXT)),)
+TENTATIVE_CLANG_FLAGS := -Werror=unknown-warning-option
Also, consider whether `BINDGEN_FLAGS` would be more descriptive (and
less verbose) than `TENTATIVE_CLANG_FLAGS`.
quoted
+
 ifneq ($(CROSS_COMPILE),)
-CLANG_FLAGS    += --target=$(notdir $(CROSS_COMPILE:%-=%))
+TENTATIVE_CLANG_FLAGS  += --target=$(notdir $(CROSS_COMPILE:%-=%))
 endif
 ifeq ($(LLVM_IAS),1)
-CLANG_FLAGS    += -integrated-as
+TENTATIVE_CLANG_FLAGS  += -integrated-as
 else
-CLANG_FLAGS    += -no-integrated-as
+TENTATIVE_CLANG_FLAGS  += -no-integrated-as
 GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE)elfedit))
-CLANG_FLAGS    += --prefix=$(GCC_TOOLCHAIN_DIR)$(notdir $(CROSS_COMPILE))
+TENTATIVE_CLANG_FLAGS  += --prefix=$(GCC_TOOLCHAIN_DIR)$(notdir $(CROSS_COMPILE))
 endif
-CLANG_FLAGS    += -Werror=unknown-warning-option
+
+export TENTATIVE_CLANG_FLAGS
+
+ifneq ($(findstring clang,$(CC_VERSION_TEXT)),)
+CLANG_FLAGS    += $(TENTATIVE_CLANG_FLAGS)
 KBUILD_CFLAGS  += $(CLANG_FLAGS)
 KBUILD_AFLAGS  += $(CLANG_FLAGS)
 export CLANG_FLAGS
--
2.32.0

--
Thanks,
~Nick Desaulniers


-- 
Thanks,
~Nick Desaulniers
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help