diff mbox series

[v6,1/3] Makefile: move initial clang flag handling into scripts/Makefile.clang

Message ID 20210802183910.1802120-2-ndesaulniers@google.com (mailing list archive)
State New, archived
Headers show
Series infer --target from SRCARCH for CC=clang | expand

Commit Message

Nick Desaulniers Aug. 2, 2021, 6:39 p.m. UTC
With some of the changes we'd like to make to CROSS_COMPILE, the initial
block of clang flag handling which controls things like the target triple,
whether or not to use the integrated assembler and how to find GAS,
and erroring on unknown warnings is becoming unwieldy. Move it into its
own file under scripts/.

Reviewed-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
---
 MAINTAINERS            |  1 +
 Makefile               | 15 +--------------
 scripts/Makefile.clang | 14 ++++++++++++++
 3 files changed, 16 insertions(+), 14 deletions(-)
 create mode 100644 scripts/Makefile.clang

Comments

Fangrui Song Aug. 2, 2021, 9:06 p.m. UTC | #1
On Mon, Aug 2, 2021 at 11:39 AM Nick Desaulniers
<ndesaulniers@google.com> wrote:
>
> With some of the changes we'd like to make to CROSS_COMPILE, the initial
> block of clang flag handling which controls things like the target triple,
> whether or not to use the integrated assembler and how to find GAS,
> and erroring on unknown warnings is becoming unwieldy. Move it into its
> own file under scripts/.
>
> Reviewed-by: Nathan Chancellor <nathan@kernel.org>
> Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
> ---
>  MAINTAINERS            |  1 +
>  Makefile               | 15 +--------------
>  scripts/Makefile.clang | 14 ++++++++++++++
>  3 files changed, 16 insertions(+), 14 deletions(-)
>  create mode 100644 scripts/Makefile.clang
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 19135a9d778e..3af8d39f43ef 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -4501,6 +4501,7 @@ B:        https://github.com/ClangBuiltLinux/linux/issues
>  C:     irc://chat.freenode.net/clangbuiltlinux
>  F:     Documentation/kbuild/llvm.rst
>  F:     include/linux/compiler-clang.h
> +F:     scripts/Makefile.clang
>  F:     scripts/clang-tools/
>  K:     \b(?i:clang|llvm)\b
>
> diff --git a/Makefile b/Makefile
> index 6b555f64df06..444558e62cbc 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -586,20 +586,7 @@ endif
>  CC_VERSION_TEXT = $(subst $(pound),,$(shell $(CC) --version 2>/dev/null | head -n 1))
>
>  ifneq ($(findstring clang,$(CC_VERSION_TEXT)),)
> -ifneq ($(CROSS_COMPILE),)
> -CLANG_FLAGS    += --target=$(notdir $(CROSS_COMPILE:%-=%))
> -endif
> -ifeq ($(LLVM_IAS),1)
> -CLANG_FLAGS    += -integrated-as
> -else
> -CLANG_FLAGS    += -no-integrated-as
> -GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE)elfedit))
> -CLANG_FLAGS    += --prefix=$(GCC_TOOLCHAIN_DIR)$(notdir $(CROSS_COMPILE))
> -endif
> -CLANG_FLAGS    += -Werror=unknown-warning-option
> -KBUILD_CFLAGS  += $(CLANG_FLAGS)
> -KBUILD_AFLAGS  += $(CLANG_FLAGS)
> -export CLANG_FLAGS
> +include $(srctree)/scripts/Makefile.clang
>  endif
>
>  # Include this also for config targets because some architectures need
> diff --git a/scripts/Makefile.clang b/scripts/Makefile.clang
> new file mode 100644
> index 000000000000..297932e973d4
> --- /dev/null
> +++ b/scripts/Makefile.clang
> @@ -0,0 +1,14 @@
> +ifneq ($(CROSS_COMPILE),)
> +CLANG_FLAGS    += --target=$(notdir $(CROSS_COMPILE:%-=%))
> +endif
> +ifeq ($(LLVM_IAS),1)
> +CLANG_FLAGS    += -integrated-as

-i* options are for includes. -fintegrated-as is the canonical spelling.
Since -fintegrated-as is the default (for most llvm/lib/Target/
targets and the ones clang builds actually support),
it can even be deleted.

> +else
> +CLANG_FLAGS    += -no-integrated-as
> +GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE)elfedit))
> +CLANG_FLAGS    += --prefix=$(GCC_TOOLCHAIN_DIR)$(notdir $(CROSS_COMPILE))
> +endif
> +CLANG_FLAGS    += -Werror=unknown-warning-option
> +KBUILD_CFLAGS  += $(CLANG_FLAGS)
> +KBUILD_AFLAGS  += $(CLANG_FLAGS)
> +export CLANG_FLAGS
> --
> 2.32.0.554.ge1b32706d8-goog
>
Nick Desaulniers Aug. 2, 2021, 9:14 p.m. UTC | #2
On Mon, Aug 2, 2021 at 2:06 PM Fāng-ruì Sòng <maskray@google.com> wrote:
>
> On Mon, Aug 2, 2021 at 11:39 AM Nick Desaulniers
> <ndesaulniers@google.com> wrote:
> > diff --git a/scripts/Makefile.clang b/scripts/Makefile.clang
> > new file mode 100644
> > index 000000000000..297932e973d4
> > --- /dev/null
> > +++ b/scripts/Makefile.clang
> > @@ -0,0 +1,14 @@
> > +ifneq ($(CROSS_COMPILE),)
> > +CLANG_FLAGS    += --target=$(notdir $(CROSS_COMPILE:%-=%))
> > +endif
> > +ifeq ($(LLVM_IAS),1)
> > +CLANG_FLAGS    += -integrated-as
>
> -i* options are for includes. -fintegrated-as is the canonical spelling.
> Since -fintegrated-as is the default (for most llvm/lib/Target/
> targets and the ones clang builds actually support),
> it can even be deleted.

It was made explicit by Masahiro in
git.kernel.org/linus/ba64beb17493a4bfec563100c86a462a15926f24
So I don't think we need to go back to the implicit default.

It's definitely nicer to use groupings rather than these raw prefixed
flags IMO.  If you sent a patch for that I would approve of it.
Otherwise we don't really need to change this as this is how it's
worked in LLVM for as long as we've been able to build the kernel with
LLVM.
Masahiro Yamada Aug. 5, 2021, 12:55 p.m. UTC | #3
On Tue, Aug 3, 2021 at 6:06 AM 'Fāng-ruì Sòng' via Clang Built Linux
<clang-built-linux@googlegroups.com> wrote:
>
> On Mon, Aug 2, 2021 at 11:39 AM Nick Desaulniers
> <ndesaulniers@google.com> wrote:
> >
> > With some of the changes we'd like to make to CROSS_COMPILE, the initial
> > block of clang flag handling which controls things like the target triple,
> > whether or not to use the integrated assembler and how to find GAS,
> > and erroring on unknown warnings is becoming unwieldy. Move it into its
> > own file under scripts/.
> >
> > Reviewed-by: Nathan Chancellor <nathan@kernel.org>
> > Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
> > ---
> >  MAINTAINERS            |  1 +
> >  Makefile               | 15 +--------------
> >  scripts/Makefile.clang | 14 ++++++++++++++
> >  3 files changed, 16 insertions(+), 14 deletions(-)
> >  create mode 100644 scripts/Makefile.clang
> >
> > diff --git a/MAINTAINERS b/MAINTAINERS
> > index 19135a9d778e..3af8d39f43ef 100644
> > --- a/MAINTAINERS
> > +++ b/MAINTAINERS
> > @@ -4501,6 +4501,7 @@ B:        https://github.com/ClangBuiltLinux/linux/issues
> >  C:     irc://chat.freenode.net/clangbuiltlinux
> >  F:     Documentation/kbuild/llvm.rst
> >  F:     include/linux/compiler-clang.h
> > +F:     scripts/Makefile.clang
> >  F:     scripts/clang-tools/
> >  K:     \b(?i:clang|llvm)\b
> >
> > diff --git a/Makefile b/Makefile
> > index 6b555f64df06..444558e62cbc 100644
> > --- a/Makefile
> > +++ b/Makefile
> > @@ -586,20 +586,7 @@ endif
> >  CC_VERSION_TEXT = $(subst $(pound),,$(shell $(CC) --version 2>/dev/null | head -n 1))
> >
> >  ifneq ($(findstring clang,$(CC_VERSION_TEXT)),)
> > -ifneq ($(CROSS_COMPILE),)
> > -CLANG_FLAGS    += --target=$(notdir $(CROSS_COMPILE:%-=%))
> > -endif
> > -ifeq ($(LLVM_IAS),1)
> > -CLANG_FLAGS    += -integrated-as
> > -else
> > -CLANG_FLAGS    += -no-integrated-as
> > -GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE)elfedit))
> > -CLANG_FLAGS    += --prefix=$(GCC_TOOLCHAIN_DIR)$(notdir $(CROSS_COMPILE))
> > -endif
> > -CLANG_FLAGS    += -Werror=unknown-warning-option
> > -KBUILD_CFLAGS  += $(CLANG_FLAGS)
> > -KBUILD_AFLAGS  += $(CLANG_FLAGS)
> > -export CLANG_FLAGS
> > +include $(srctree)/scripts/Makefile.clang
> >  endif
> >
> >  # Include this also for config targets because some architectures need
> > diff --git a/scripts/Makefile.clang b/scripts/Makefile.clang
> > new file mode 100644
> > index 000000000000..297932e973d4
> > --- /dev/null
> > +++ b/scripts/Makefile.clang
> > @@ -0,0 +1,14 @@
> > +ifneq ($(CROSS_COMPILE),)
> > +CLANG_FLAGS    += --target=$(notdir $(CROSS_COMPILE:%-=%))
> > +endif
> > +ifeq ($(LLVM_IAS),1)
> > +CLANG_FLAGS    += -integrated-as
>
> -i* options are for includes. -fintegrated-as is the canonical spelling.


If -fintegrated-as is preferred to -integrated-as,
please send a patch.
(on top of this series)


Thanks.






> Since -fintegrated-as is the default (for most llvm/lib/Target/
> targets and the ones clang builds actually support),
> it can even be deleted.
>
> > +else
> > +CLANG_FLAGS    += -no-integrated-as
> > +GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE)elfedit))
> > +CLANG_FLAGS    += --prefix=$(GCC_TOOLCHAIN_DIR)$(notdir $(CROSS_COMPILE))
> > +endif
> > +CLANG_FLAGS    += -Werror=unknown-warning-option
> > +KBUILD_CFLAGS  += $(CLANG_FLAGS)
> > +KBUILD_AFLAGS  += $(CLANG_FLAGS)
> > +export CLANG_FLAGS
> > --
> > 2.32.0.554.ge1b32706d8-goog
> >
>
> --
> You received this message because you are subscribed to the Google Groups "Clang Built Linux" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to clang-built-linux+unsubscribe@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/msgid/clang-built-linux/CAFP8O3Jc%3DiwzAQojgBZZzdT8iVBY9TO6GLTq%2B0vkXoo6L5JJ-A%40mail.gmail.com.
diff mbox series

Patch

diff --git a/MAINTAINERS b/MAINTAINERS
index 19135a9d778e..3af8d39f43ef 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4501,6 +4501,7 @@  B:	https://github.com/ClangBuiltLinux/linux/issues
 C:	irc://chat.freenode.net/clangbuiltlinux
 F:	Documentation/kbuild/llvm.rst
 F:	include/linux/compiler-clang.h
+F:	scripts/Makefile.clang
 F:	scripts/clang-tools/
 K:	\b(?i:clang|llvm)\b
 
diff --git a/Makefile b/Makefile
index 6b555f64df06..444558e62cbc 100644
--- a/Makefile
+++ b/Makefile
@@ -586,20 +586,7 @@  endif
 CC_VERSION_TEXT = $(subst $(pound),,$(shell $(CC) --version 2>/dev/null | head -n 1))
 
 ifneq ($(findstring clang,$(CC_VERSION_TEXT)),)
-ifneq ($(CROSS_COMPILE),)
-CLANG_FLAGS	+= --target=$(notdir $(CROSS_COMPILE:%-=%))
-endif
-ifeq ($(LLVM_IAS),1)
-CLANG_FLAGS	+= -integrated-as
-else
-CLANG_FLAGS	+= -no-integrated-as
-GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE)elfedit))
-CLANG_FLAGS	+= --prefix=$(GCC_TOOLCHAIN_DIR)$(notdir $(CROSS_COMPILE))
-endif
-CLANG_FLAGS	+= -Werror=unknown-warning-option
-KBUILD_CFLAGS	+= $(CLANG_FLAGS)
-KBUILD_AFLAGS	+= $(CLANG_FLAGS)
-export CLANG_FLAGS
+include $(srctree)/scripts/Makefile.clang
 endif
 
 # Include this also for config targets because some architectures need
diff --git a/scripts/Makefile.clang b/scripts/Makefile.clang
new file mode 100644
index 000000000000..297932e973d4
--- /dev/null
+++ b/scripts/Makefile.clang
@@ -0,0 +1,14 @@ 
+ifneq ($(CROSS_COMPILE),)
+CLANG_FLAGS	+= --target=$(notdir $(CROSS_COMPILE:%-=%))
+endif
+ifeq ($(LLVM_IAS),1)
+CLANG_FLAGS	+= -integrated-as
+else
+CLANG_FLAGS	+= -no-integrated-as
+GCC_TOOLCHAIN_DIR := $(dir $(shell which $(CROSS_COMPILE)elfedit))
+CLANG_FLAGS	+= --prefix=$(GCC_TOOLCHAIN_DIR)$(notdir $(CROSS_COMPILE))
+endif
+CLANG_FLAGS	+= -Werror=unknown-warning-option
+KBUILD_CFLAGS	+= $(CLANG_FLAGS)
+KBUILD_AFLAGS	+= $(CLANG_FLAGS)
+export CLANG_FLAGS