[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAK7LNAQ6jy7FfNZqJ89UyvO4BbbbcFUne-aG3cmw58ucZWoHTg@mail.gmail.com>
Date: Mon, 26 May 2025 18:05:09 +0900
From: Masahiro Yamada <masahiroy@...nel.org>
To: xur@...gle.com
Cc: Nathan Chancellor <nathan@...nel.org>, Eric Naim <dnaim@...hyos.org>,
Nicolas Schier <nicolas.schier@...ux.dev>,
Nick Desaulniers <nick.desaulniers+lkml@...il.com>, Bill Wendling <morbo@...gle.com>,
Justin Stitt <justinstitt@...gle.com>, Miguel Ojeda <ojeda@...nel.org>,
Thomas Gleixner <tglx@...utronix.de>, Alice Ryhl <aliceryhl@...gle.com>,
Sami Tolvanen <samitolvanen@...gle.com>, "Mike Rapoport (Microsoft)" <rppt@...nel.org>,
Rafael Aquini <aquini@...hat.com>, Michael Ellerman <mpe@...erman.id.au>,
Stafford Horne <shorne@...il.com>, Christophe Leroy <christophe.leroy@...roup.eu>,
Teresa Johnson <tejohnson@...gle.com>, linux-kernel@...r.kernel.org,
linux-kbuild@...r.kernel.org, llvm@...ts.linux.dev
Subject: Re: [PATCH v3] kbuild: distributed build support for Clang ThinLTO
On Thu, May 22, 2025 at 6:35 AM <xur@...gle.com> wrote:
> +ifdef CONFIG_LTO_CLANG_THIN_DIST
> +# Generate .o_thinlto_native (obj) from .o (bitcode) file
> +# ---------------------------------------------------------------------------
> +quiet_cmd_cc_o_bc = CC $(quiet_modtag) $@
> +
> +cmd_cc_o_bc = $(if $(filter bitcode, $(shell file -b $<)),$(CC) \
> + $(filter-out -Wp% $(LINUXINCLUDE) %.h.gch %.h -D% \
> + -flto=thin, $(c_flags)) \
I think this filter-out is fragile.
I think it is better to use $(_c_flags), like this:
$(filter-out -flto=thin, $(_c_flags))
> diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
> index 2fe73cda0bddb..9cfd23590334d 100644
> --- a/scripts/Makefile.lib
> +++ b/scripts/Makefile.lib
> @@ -34,8 +34,13 @@ else
> obj-m := $(filter-out %/, $(obj-m))
> endif
>
> +builtin_suffix := $(if $(filter %.a_thinlto_native, $(MAKECMDGOALS)),.a_thinlto_native,.a)
> +ifeq ($(thinlto_final_pass),1)
> + builtin_suffix :=.a_thinlto_native
> +endif
> +
> ifdef need-builtin
> -obj-y := $(patsubst %/, %/built-in.a, $(obj-y))
> +obj-y := $(patsubst %/, %/built-in$(builtin_suffix), $(obj-y))
> else
> obj-y := $(filter-out %/, $(obj-y))
> endif
> diff --git a/scripts/Makefile.vmlinux_o b/scripts/Makefile.vmlinux_o
> index b024ffb3e2018..f9abc45a68b36 100644
> --- a/scripts/Makefile.vmlinux_o
> +++ b/scripts/Makefile.vmlinux_o
> @@ -9,6 +9,14 @@ include $(srctree)/scripts/Kbuild.include
> # for objtool
> include $(srctree)/scripts/Makefile.lib
>
> +ifeq ($(thinlto_final_pass),1)
> +vmlinux_a := vmlinux.a_thinlto_native
> +vmlinux_libs := $(patsubst %.a,%.a_thinlto_native,$(KBUILD_VMLINUX_LIBS))
> +else
> +vmlinux_a := vmlinux.a
> +vmlinux_libs := $(KBUILD_VMLINUX_LIBS)
> +endif
> +
> # Generate a linker script to ensure correct ordering of initcalls for Clang LTO
> # ---------------------------------------------------------------------------
>
> @@ -18,7 +26,7 @@ quiet_cmd_gen_initcalls_lds = GEN $@
> $(PERL) $(real-prereqs) > $@
>
> .tmp_initcalls.lds: $(srctree)/scripts/generate_initcall_order.pl \
> - vmlinux.a $(KBUILD_VMLINUX_LIBS) FORCE
> + $(vmlinux_a) $(vmlinux_libs) FORCE
> $(call if_changed,gen_initcalls_lds)
>
> targets := .tmp_initcalls.lds
> @@ -59,8 +67,8 @@ quiet_cmd_ld_vmlinux.o = LD $@
> $(LD) ${KBUILD_LDFLAGS} -r -o $@ \
> $(vmlinux-o-ld-args-y) \
> $(addprefix -T , $(initcalls-lds)) \
> - --whole-archive vmlinux.a --no-whole-archive \
> - --start-group $(KBUILD_VMLINUX_LIBS) --end-group \
> + --whole-archive $(vmlinux_a) --no-whole-archive \
> + --start-group $(vmlinux_libs) --end-group \
> $(cmd_objtool)
>
> define rule_ld_vmlinux.o
> @@ -68,7 +76,7 @@ define rule_ld_vmlinux.o
> $(call cmd,gen_objtooldep)
> endef
>
> -vmlinux.o: $(initcalls-lds) vmlinux.a $(KBUILD_VMLINUX_LIBS) FORCE
> +vmlinux.o: $(initcalls-lds) $(vmlinux_a) $(vmlinux_libs) FORCE
> $(call if_changed_rule,ld_vmlinux.o)
>
> targets += vmlinux.o
> diff --git a/scripts/Makefile.vmlinux_thinlink b/scripts/Makefile.vmlinux_thinlink
> new file mode 100644
> index 0000000000000..13e4026c7d45b
> --- /dev/null
> +++ b/scripts/Makefile.vmlinux_thinlink
> @@ -0,0 +1,53 @@
> +# SPDX-License-Identifier: GPL-2.0-only
> +
> +PHONY := __default
> +__default: vmlinux.thinlink
> +
> +include include/config/auto.conf
> +include $(srctree)/scripts/Kbuild.include
> +
> +
> +# Generate a linker script to ensure correct ordering of initcalls for Clang LTO
> +# ---------------------------------------------------------------------------
> +
> +quiet_cmd_gen_initcalls_lds = GEN $@
> + cmd_gen_initcalls_lds = \
> + $(PYTHON3) $(srctree)/scripts/jobserver-exec \
> + $(PERL) $(real-prereqs) > $@
This is a copy-paste from scripts/Makefile.vmlinux_o.
Is this linker script critical when generating the index file?
--
Best Regards
Masahiro Yamada
Powered by blists - more mailing lists