diff mbox series

[v2] Makefile: add comment to discourage tools/* addition for kernel builds

Message ID 20240717182828.1527504-1-masahiroy@kernel.org (mailing list archive)
State New
Headers show
Series [v2] Makefile: add comment to discourage tools/* addition for kernel builds | expand

Commit Message

Masahiro Yamada July 17, 2024, 6:28 p.m. UTC
Kbuild provides scripts/Makefile.host to build host programs used for
building the kernel. Unfortunately, there are two exceptions that opt
out of Kbuild. The build system under tools/ is a cheesy replica, and
cause issues. I was recently poked about a problem in the tools build
system, which I do not maintain (and nobody maintains). [1]

Without a comment, people might believe this is the right location
because that is where objtool lives, even if a more robust Kbuild
syntax satisfies their needs. [2]

[1]: https://lore.kernel.org/linux-kbuild/ZnIYWBgrJ-IJtqK8@google.com/T/#m8ece130dd0e23c6f2395ed89070161948dee8457
[2]: https://lore.kernel.org/all/20240618200501.GA1611012@google.com/

Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
Acked-by: Nicolas Schier <nicolas@fjasle.eu>
Reviewed-by: Brian Norris <briannorris@chromium.org>
---

Changes in v2:
  - rephase the comment for clarification

 Makefile | 6 ++++++
 1 file changed, 6 insertions(+)

Comments

Sami Tolvanen July 18, 2024, 5:54 p.m. UTC | #1
Hi Masahiro,

On Wed, Jul 17, 2024 at 6:28 PM Masahiro Yamada <masahiroy@kernel.org> wrote:
>
> Kbuild provides scripts/Makefile.host to build host programs used for
> building the kernel. Unfortunately, there are two exceptions that opt
> out of Kbuild. The build system under tools/ is a cheesy replica, and
> cause issues. I was recently poked about a problem in the tools build
> system, which I do not maintain (and nobody maintains). [1]
>
> Without a comment, people might believe this is the right location
> because that is where objtool lives, even if a more robust Kbuild
> syntax satisfies their needs. [2]
>
> [1]: https://lore.kernel.org/linux-kbuild/ZnIYWBgrJ-IJtqK8@google.com/T/#m8ece130dd0e23c6f2395ed89070161948dee8457
> [2]: https://lore.kernel.org/all/20240618200501.GA1611012@google.com/
>
> Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
> Acked-by: Nicolas Schier <nicolas@fjasle.eu>
> Reviewed-by: Brian Norris <briannorris@chromium.org>
> ---
>
> Changes in v2:
>   - rephase the comment for clarification
>
>  Makefile | 6 ++++++
>  1 file changed, 6 insertions(+)
>
> diff --git a/Makefile b/Makefile
> index 768d3dc107f8..943899656977 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -1328,6 +1328,12 @@ prepare: tools/bpf/resolve_btfids
>  endif
>  endif
>
> +# The tools build system is not a part of Kbuild and tends to introduce
> +# its own unique issues. If you need to integrate a new tool into Kbuild,
> +# please consider locating that tool outside the tools/ tree and using the
> +# standard Kbuild "hostprogs" syntax instead of adding a new tools/* entry
> +# here. See Documentation/kbuild/makefiles.rst for details.
> +
>  PHONY += resolve_btfids_clean
>
>  resolve_btfids_O = $(abspath $(objtree))/tools/bpf/resolve_btfids

Looks good to me, thanks for adding the clarification!

Reviewed-by: Sami Tolvanen <samitolvanen@google.com>

Sami
Josh Poimboeuf July 19, 2024, 10:55 p.m. UTC | #2
On Thu, Jul 18, 2024 at 03:28:19AM +0900, Masahiro Yamada wrote:
> Kbuild provides scripts/Makefile.host to build host programs used for
> building the kernel. Unfortunately, there are two exceptions that opt
> out of Kbuild. The build system under tools/ is a cheesy replica, and
> cause issues. I was recently poked about a problem in the tools build
> system, which I do not maintain (and nobody maintains). [1]
> 
> Without a comment, people might believe this is the right location
> because that is where objtool lives, even if a more robust Kbuild
> syntax satisfies their needs. [2]

I think the original idea (from Ingo?) was to make objtool portable so
it could be easily copied and built separately without getting too
intertwined with the kernel source.

I think that's still a useful goal.  To my knowledge it's been used in
at least one other code base and could be used elsewhere going forward
as much of its functionality might be transferable to other code bases.

Also being in tools helps it shares library code (libsubcmd) and
synced headers with perf (and others).

If there's some other way to make it portable and allow it to share code
with other tools that then I wouldn't object to moving it to scripts.

Or, if the main problem is that there are two custom build systems (one
of them being a cheap knockoff), could kbuild be made portable enough to
be used in tools?
Masahiro Yamada July 20, 2024, 2:22 p.m. UTC | #3
On Sat, Jul 20, 2024 at 7:55 AM Josh Poimboeuf <jpoimboe@kernel.org> wrote:
>
> On Thu, Jul 18, 2024 at 03:28:19AM +0900, Masahiro Yamada wrote:
> > Kbuild provides scripts/Makefile.host to build host programs used for
> > building the kernel. Unfortunately, there are two exceptions that opt
> > out of Kbuild. The build system under tools/ is a cheesy replica, and
> > cause issues. I was recently poked about a problem in the tools build
> > system, which I do not maintain (and nobody maintains). [1]
> >
> > Without a comment, people might believe this is the right location
> > because that is where objtool lives, even if a more robust Kbuild
> > syntax satisfies their needs. [2]
>
> I think the original idea (from Ingo?) was to make objtool portable so
> it could be easily copied and built separately without getting too
> intertwined with the kernel source.
>
> I think that's still a useful goal.  To my knowledge it's been used in
> at least one other code base and could be used elsewhere going forward
> as much of its functionality might be transferable to other code bases.
>
> Also being in tools helps it shares library code (libsubcmd) and
> synced headers with perf (and others).
>
> If there's some other way to make it portable and allow it to share code
> with other tools that then I wouldn't object to moving it to scripts.
>
> Or, if the main problem is that there are two custom build systems (one
> of them being a cheap knockoff), could kbuild be made portable enough to
> be used in tools?


I checked Debian and Fedora, but I did not find such a package that provides
objtool as a standalone tool.

In reality, objtool is tightly bound to the kernel source.
If people had thought it useful outside the kernel tree,
such a disto package would have been widely available.

I do not think there is a good reason to complicate Kbuild
based on the hypothetical statement.
diff mbox series

Patch

diff --git a/Makefile b/Makefile
index 768d3dc107f8..943899656977 100644
--- a/Makefile
+++ b/Makefile
@@ -1328,6 +1328,12 @@  prepare: tools/bpf/resolve_btfids
 endif
 endif
 
+# The tools build system is not a part of Kbuild and tends to introduce
+# its own unique issues. If you need to integrate a new tool into Kbuild,
+# please consider locating that tool outside the tools/ tree and using the
+# standard Kbuild "hostprogs" syntax instead of adding a new tools/* entry
+# here. See Documentation/kbuild/makefiles.rst for details.
+
 PHONY += resolve_btfids_clean
 
 resolve_btfids_O = $(abspath $(objtree))/tools/bpf/resolve_btfids