* [PATCH 1/2] kbuild: hide tools/ build targets from external module builds @ 2021-05-12 6:52 Masahiro Yamada 2021-05-12 6:52 ` [PATCH 2/2] kbuild: remove libelf checks from top Makefile Masahiro Yamada 0 siblings, 1 reply; 4+ messages in thread From: Masahiro Yamada @ 2021-05-12 6:52 UTC (permalink / raw) To: linux-kbuild; +Cc: Masahiro Yamada, Michal Marek, linux-kernel The tools/ directory only exists in the kernel source tree, not in external modules. Do not expose the meaningless targets to external modules. Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> --- Makefile | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/Makefile b/Makefile index 7df040b1b023..d60dc028f09c 100644 --- a/Makefile +++ b/Makefile @@ -1351,6 +1351,22 @@ PHONY += scripts_unifdef scripts_unifdef: scripts_basic $(Q)$(MAKE) $(build)=scripts scripts/unifdef +# --------------------------------------------------------------------------- +# Tools + +# Clear a bunch of variables before executing the submake +ifeq ($(quiet),silent_) +tools_silent=s +endif + +tools/: FORCE + $(Q)mkdir -p $(objtree)/tools + $(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(abspath $(objtree)) subdir=tools -C $(srctree)/tools/ + +tools/%: FORCE + $(Q)mkdir -p $(objtree)/tools + $(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(abspath $(objtree)) subdir=tools -C $(srctree)/tools/ $* + # --------------------------------------------------------------------------- # Kernel selftest @@ -1951,20 +1967,6 @@ kernelversion: image_name: @echo $(KBUILD_IMAGE) -# Clear a bunch of variables before executing the submake - -ifeq ($(quiet),silent_) -tools_silent=s -endif - -tools/: FORCE - $(Q)mkdir -p $(objtree)/tools - $(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(abspath $(objtree)) subdir=tools -C $(srctree)/tools/ - -tools/%: FORCE - $(Q)mkdir -p $(objtree)/tools - $(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(abspath $(objtree)) subdir=tools -C $(srctree)/tools/ $* - quiet_cmd_rmfiles = $(if $(wildcard $(rm-files)),CLEAN $(wildcard $(rm-files))) cmd_rmfiles = rm -rf $(rm-files) -- 2.27.0 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] kbuild: remove libelf checks from top Makefile 2021-05-12 6:52 [PATCH 1/2] kbuild: hide tools/ build targets from external module builds Masahiro Yamada @ 2021-05-12 6:52 ` Masahiro Yamada 2021-05-12 19:36 ` Andrii Nakryiko 0 siblings, 1 reply; 4+ messages in thread From: Masahiro Yamada @ 2021-05-12 6:52 UTC (permalink / raw) To: linux-kbuild Cc: Masahiro Yamada, Alexei Starovoitov, Andrii Nakryiko, Daniel Borkmann, John Fastabend, KP Singh, Martin KaFai Lau, Michal Marek, Song Liu, Yonghong Song, bpf, linux-kernel, netdev I do not see a good reason why only the libelf development package must be so carefully checked. Kbuild generally does not check host tools or libraries. For example, x86_64 defconfig fails to build with no libssl development package installed. scripts/extract-cert.c:21:10: fatal error: openssl/bio.h: No such file or directory 21 | #include <openssl/bio.h> | ^~~~~~~~~~~~~~~ To solve the build error, you need to install libssl-dev or openssl-devel package, depending on your distribution. 'apt-file search', 'dnf provides', etc. is your frined to find a proper package to install. This commit removes all the libelf checks from the top Makefile. If libelf is missing, objtool will fail to build in a similar pattern: .../linux/tools/objtool/include/objtool/elf.h:10:10: fatal error: gelf.h: No such file or directory 10 | #include <gelf.h> You need to install libelf-dev, libelf-devel, or elfutils-libelf-devel to proceed. Another remarkable change is, CONFIG_STACK_VALIDATION (without CONFIG_UNWINDER_ORC) previously continued to build with a warning, but now it will treat missing libelf as an error. This is just a one-time installation, so it should not matter to break a build and make a user install the package. BTW, the traditional way to handle such checks is autotool, but according to [1], I do not expect the kernel build would have similar scripting like './configure' does. [1]: https://lore.kernel.org/lkml/CA+55aFzr2HTZVOuzpHYDwmtRJLsVzE-yqg2DHpHi_9ePsYp5ug@mail.gmail.com/ Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> --- Makefile | 78 +++++++++++---------------------------- scripts/Makefile.build | 2 - scripts/Makefile.modfinal | 2 - 3 files changed, 22 insertions(+), 60 deletions(-) diff --git a/Makefile b/Makefile index d60dc028f09c..bfbb7c8cbb0f 100644 --- a/Makefile +++ b/Makefile @@ -1081,41 +1081,6 @@ export INSTALL_DTBS_PATH ?= $(INSTALL_PATH)/dtbs/$(KERNELRELEASE) MODLIB = $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE) export MODLIB -HOST_LIBELF_LIBS = $(shell pkg-config libelf --libs 2>/dev/null || echo -lelf) - -has_libelf = $(call try-run,\ - echo "int main() {}" | $(HOSTCC) $(KBUILD_HOSTLDFLAGS) -xc -o /dev/null $(HOST_LIBELF_LIBS) -,1,0) - -ifdef CONFIG_STACK_VALIDATION - ifeq ($(has_libelf),1) - objtool_target := tools/objtool FORCE - else - SKIP_STACK_VALIDATION := 1 - export SKIP_STACK_VALIDATION - endif -endif - -PHONY += resolve_btfids_clean - -resolve_btfids_O = $(abspath $(objtree))/tools/bpf/resolve_btfids - -# tools/bpf/resolve_btfids directory might not exist -# in output directory, skip its clean in that case -resolve_btfids_clean: -ifneq ($(wildcard $(resolve_btfids_O)),) - $(Q)$(MAKE) -sC $(srctree)/tools/bpf/resolve_btfids O=$(resolve_btfids_O) clean -endif - -ifdef CONFIG_BPF -ifdef CONFIG_DEBUG_INFO_BTF - ifeq ($(has_libelf),1) - resolve_btfids_target := tools/bpf/resolve_btfids FORCE - else - ERROR_RESOLVE_BTFIDS := 1 - endif -endif # CONFIG_DEBUG_INFO_BTF -endif # CONFIG_BPF - PHONY += prepare0 export extmod_prefix = $(if $(KBUILD_EXTMOD),$(KBUILD_EXTMOD)/) @@ -1227,7 +1192,7 @@ prepare0: archprepare $(Q)$(MAKE) $(build)=. # All the preparing.. -prepare: prepare0 prepare-objtool prepare-resolve_btfids +prepare: prepare0 PHONY += remove-stale-files remove-stale-files: @@ -1244,26 +1209,6 @@ uapi-asm-generic: $(Q)$(MAKE) $(asm-generic)=arch/$(SRCARCH)/include/generated/uapi/asm \ generic=include/uapi/asm-generic -PHONY += prepare-objtool prepare-resolve_btfids -prepare-objtool: $(objtool_target) -ifeq ($(SKIP_STACK_VALIDATION),1) -ifdef CONFIG_FTRACE_MCOUNT_USE_OBJTOOL - @echo "error: Cannot generate __mcount_loc for CONFIG_DYNAMIC_FTRACE=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel" >&2 - @false -endif -ifdef CONFIG_UNWINDER_ORC - @echo "error: Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel" >&2 - @false -else - @echo "warning: Cannot use CONFIG_STACK_VALIDATION=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel" >&2 -endif -endif - -prepare-resolve_btfids: $(resolve_btfids_target) -ifeq ($(ERROR_RESOLVE_BTFIDS),1) - @echo "error: Cannot resolve BTF IDs for CONFIG_DEBUG_INFO_BTF, please install libelf-dev, libelf-devel or elfutils-libelf-devel" >&2 - @false -endif # Generate some files # --------------------------------------------------------------------------- @@ -1354,6 +1299,27 @@ scripts_unifdef: scripts_basic # --------------------------------------------------------------------------- # Tools +ifdef CONFIG_STACK_VALIDATION +prepare: tools/objtool +endif + +ifdef CONFIG_BPF +ifdef CONFIG_DEBUG_INFO_BTF +prepare: tools/bpf/resolve_btfids +endif +endif + +PHONY += resolve_btfids_clean + +resolve_btfids_O = $(abspath $(objtree))/tools/bpf/resolve_btfids + +# tools/bpf/resolve_btfids directory might not exist +# in output directory, skip its clean in that case +resolve_btfids_clean: +ifneq ($(wildcard $(resolve_btfids_O)),) + $(Q)$(MAKE) -sC $(srctree)/tools/bpf/resolve_btfids O=$(resolve_btfids_O) clean +endif + # Clear a bunch of variables before executing the submake ifeq ($(quiet),silent_) tools_silent=s diff --git a/scripts/Makefile.build b/scripts/Makefile.build index 949f723efe53..7adc3a2c3c31 100644 --- a/scripts/Makefile.build +++ b/scripts/Makefile.build @@ -219,7 +219,6 @@ endif # CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT ifdef CONFIG_STACK_VALIDATION ifndef CONFIG_LTO_CLANG -ifneq ($(SKIP_STACK_VALIDATION),1) __objtool_obj := $(objtree)/tools/objtool/objtool @@ -233,7 +232,6 @@ objtool_obj = $(if $(patsubst y%,, \ $(OBJECT_FILES_NON_STANDARD_$(basetarget).o)$(OBJECT_FILES_NON_STANDARD)n), \ $(__objtool_obj)) -endif # SKIP_STACK_VALIDATION endif # CONFIG_LTO_CLANG endif # CONFIG_STACK_VALIDATION diff --git a/scripts/Makefile.modfinal b/scripts/Makefile.modfinal index dd87cea9fba7..bdee3babc5cf 100644 --- a/scripts/Makefile.modfinal +++ b/scripts/Makefile.modfinal @@ -39,12 +39,10 @@ prelink-ext := .lto # so let's now process the prelinked binary before we link the module. ifdef CONFIG_STACK_VALIDATION -ifneq ($(SKIP_STACK_VALIDATION),1) cmd_ld_ko_o += \ $(objtree)/tools/objtool/objtool $(objtool_args) \ $(@:.ko=$(prelink-ext).o); -endif # SKIP_STACK_VALIDATION endif # CONFIG_STACK_VALIDATION endif # CONFIG_LTO_CLANG -- 2.27.0 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 2/2] kbuild: remove libelf checks from top Makefile 2021-05-12 6:52 ` [PATCH 2/2] kbuild: remove libelf checks from top Makefile Masahiro Yamada @ 2021-05-12 19:36 ` Andrii Nakryiko 2021-05-17 2:50 ` Masahiro Yamada 0 siblings, 1 reply; 4+ messages in thread From: Andrii Nakryiko @ 2021-05-12 19:36 UTC (permalink / raw) To: Masahiro Yamada Cc: Linux Kbuild mailing list, Alexei Starovoitov, Andrii Nakryiko, Daniel Borkmann, John Fastabend, KP Singh, Martin KaFai Lau, Michal Marek, Song Liu, Yonghong Song, bpf, open list, Networking On Tue, May 11, 2021 at 11:52 PM Masahiro Yamada <masahiroy@kernel.org> wrote: > > I do not see a good reason why only the libelf development package must > be so carefully checked. > > Kbuild generally does not check host tools or libraries. > > For example, x86_64 defconfig fails to build with no libssl development > package installed. > > scripts/extract-cert.c:21:10: fatal error: openssl/bio.h: No such file or directory > 21 | #include <openssl/bio.h> > | ^~~~~~~~~~~~~~~ > > To solve the build error, you need to install libssl-dev or openssl-devel > package, depending on your distribution. > > 'apt-file search', 'dnf provides', etc. is your frined to find a proper > package to install. > > This commit removes all the libelf checks from the top Makefile. > > If libelf is missing, objtool will fail to build in a similar pattern: > > .../linux/tools/objtool/include/objtool/elf.h:10:10: fatal error: gelf.h: No such file or directory > 10 | #include <gelf.h> > > You need to install libelf-dev, libelf-devel, or elfutils-libelf-devel > to proceed. > > Another remarkable change is, CONFIG_STACK_VALIDATION (without > CONFIG_UNWINDER_ORC) previously continued to build with a warning, > but now it will treat missing libelf as an error. > > This is just a one-time installation, so it should not matter to break > a build and make a user install the package. > > BTW, the traditional way to handle such checks is autotool, but according > to [1], I do not expect the kernel build would have similar scripting > like './configure' does. > > [1]: https://lore.kernel.org/lkml/CA+55aFzr2HTZVOuzpHYDwmtRJLsVzE-yqg2DHpHi_9ePsYp5ug@mail.gmail.com/ > > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> > --- > resolve_btfids part looks good to me: Acked-by: Andrii Nakryiko <andrii@kernel.org> > Makefile | 78 +++++++++++---------------------------- > scripts/Makefile.build | 2 - > scripts/Makefile.modfinal | 2 - > 3 files changed, 22 insertions(+), 60 deletions(-) > [...] ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 2/2] kbuild: remove libelf checks from top Makefile 2021-05-12 19:36 ` Andrii Nakryiko @ 2021-05-17 2:50 ` Masahiro Yamada 0 siblings, 0 replies; 4+ messages in thread From: Masahiro Yamada @ 2021-05-17 2:50 UTC (permalink / raw) To: Andrii Nakryiko Cc: Linux Kbuild mailing list, Alexei Starovoitov, Andrii Nakryiko, Daniel Borkmann, John Fastabend, KP Singh, Martin KaFai Lau, Michal Marek, Song Liu, Yonghong Song, bpf, open list, Networking, Josh Poimboeuf, Peter Zijlstra (Intel) (+CC: Josh, Peter) On Thu, May 13, 2021 at 4:36 AM Andrii Nakryiko <andrii.nakryiko@gmail.com> wrote: > > On Tue, May 11, 2021 at 11:52 PM Masahiro Yamada <masahiroy@kernel.org> wrote: > > > > I do not see a good reason why only the libelf development package must > > be so carefully checked. > > > > Kbuild generally does not check host tools or libraries. > > > > For example, x86_64 defconfig fails to build with no libssl development > > package installed. > > > > scripts/extract-cert.c:21:10: fatal error: openssl/bio.h: No such file or directory > > 21 | #include <openssl/bio.h> > > | ^~~~~~~~~~~~~~~ > > > > To solve the build error, you need to install libssl-dev or openssl-devel > > package, depending on your distribution. > > > > 'apt-file search', 'dnf provides', etc. is your frined to find a proper > > package to install. > > > > This commit removes all the libelf checks from the top Makefile. > > > > If libelf is missing, objtool will fail to build in a similar pattern: > > > > .../linux/tools/objtool/include/objtool/elf.h:10:10: fatal error: gelf.h: No such file or directory > > 10 | #include <gelf.h> > > > > You need to install libelf-dev, libelf-devel, or elfutils-libelf-devel > > to proceed. > > > > Another remarkable change is, CONFIG_STACK_VALIDATION (without > > CONFIG_UNWINDER_ORC) previously continued to build with a warning, > > but now it will treat missing libelf as an error. > > > > This is just a one-time installation, so it should not matter to break > > a build and make a user install the package. > > > > BTW, the traditional way to handle such checks is autotool, but according > > to [1], I do not expect the kernel build would have similar scripting > > like './configure' does. > > > > [1]: https://lore.kernel.org/lkml/CA+55aFzr2HTZVOuzpHYDwmtRJLsVzE-yqg2DHpHi_9ePsYp5ug@mail.gmail.com/ > > > > Signed-off-by: Masahiro Yamada <masahiroy@kernel.org> > > --- > > > > resolve_btfids part looks good to me: > > Acked-by: Andrii Nakryiko <andrii@kernel.org> > > > Makefile | 78 +++++++++++---------------------------- > > scripts/Makefile.build | 2 - > > scripts/Makefile.modfinal | 2 - > > 3 files changed, 22 insertions(+), 60 deletions(-) > > > > [...] -- Best Regards Masahiro Yamada ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-05-17 2:51 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2021-05-12 6:52 [PATCH 1/2] kbuild: hide tools/ build targets from external module builds Masahiro Yamada 2021-05-12 6:52 ` [PATCH 2/2] kbuild: remove libelf checks from top Makefile Masahiro Yamada 2021-05-12 19:36 ` Andrii Nakryiko 2021-05-17 2:50 ` Masahiro Yamada
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox