All of lore.kernel.org
 help / color / mirror / Atom feed
* [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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.