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