From: Sasha Levin <sashal@kernel.org>
To: Nathan Chancellor <nathan@kernel.org>,
Nicolas Schier <nsc@kernel.org>,
linux-kbuild@vger.kernel.org
Cc: Shuah Khan <shuah@kernel.org>,
linux-kselftest@vger.kernel.org,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Namhyung Kim <namhyung@kernel.org>,
Ian Rogers <irogers@google.com>,
linux-perf-users@vger.kernel.org, linux-kernel@vger.kernel.org,
Sasha Levin <sashal@kernel.org>
Subject: [RFC PATCH 0/6] kbuild: build the userspace tools in tools/ with the kernel
Date: Sun, 11 Oct 2026 19:36:39 -0400 [thread overview]
Message-ID: <20261011233647.2454648-1-sashal@kernel.org> (raw)
The userspace programs under tools/ are disconnected from the rest of the
kernel's build system. Each has its own makefiles and build framework, and
"make" never builds them: apart from the few host tools the build itself needs,
such as objtool and resolve_btfids, nothing under tools/ is compiled as part of
a kernel build.
That makes them easy to break. Most people, and most of the build bots, check a
change with "make allmodconfig && make", which doesn't cover tools/ at all. A
change that breaks a tool passes every build check and is only noticed when
someone happens to build that tool by hand, often much later.
We keep seeing this in tools/testing/: selftests that stop building after a
change elsewhere in the tree, or after a backport to a stable tree, and stay
broken until someone tries to build them. Others brought up the same concern at
LPC.
This series lets the kernel build also build the tools it is configured for:
- tools/Kconfig adds a "Build userspace tools from tools/" menu
(CONFIG_TOOLS_BUILD) with one entry per tool and per selftests
directory, so .config records what gets built, and a tool that breaks
can be turned off on its own.
- "make tools_build" builds the selected tools for the target, each with
its own build system as it is built standalone, into tools-build/ in
the object tree.
- With CONFIG_TOOLS_BUILD=y, "make all" builds them too. allmodconfig
and allyesconfig enable every entry when the compiler can link
userspace programs, so the usual build test catches tools breakage.
Toolchains without a C library are unaffected, as are "make vmlinux",
"make modules" and external module builds.
This is useful beyond build testing: the tools are built for the same
target, from the same tree, as the kernel they go with.
Sasha Levin (6):
kbuild: factor the userspace ABI flags out into KBUILD_USERABI
kbuild: add "make tools_build" to build userspace tools from tools/
tools: build perf in tools_build
tools: build kernel selftests in tools_build
kbuild: build the tools selected in tools/Kconfig as part of "make
all"
Documentation: describe building tools with the kernel
.gitignore | 5 +
Documentation/dev-tools/kselftest.rst | 4 +
Documentation/kbuild/kbuild.rst | 5 +-
Documentation/process/submit-checklist.rst | 5 +
Makefile | 24 +-
lib/Kconfig.debug | 2 +
tools/Kconfig | 326 +++++++++++++++++++++
tools/Makefile.kbuild | 198 +++++++++++++
8 files changed, 562 insertions(+), 7 deletions(-)
create mode 100644 tools/Kconfig
create mode 100644 tools/Makefile.kbuild
base-commit: a5ebb76233b79db01e82e061173cb73c6d2b5c6b
prerequisite-patch-id: 68eb8785244b88ec7e696e716420e2d9b1367dbc
prerequisite-patch-id: 37c57cf4c2a9700788cd1755912753f363cbb3f9
prerequisite-patch-id: 7772557d5d842a42f1bbb3ee18d41f337db9783a
prerequisite-patch-id: 75abf8d47ec8093740c215e9eebe7bbb5846ddd6
prerequisite-patch-id: de33c5273a0f7619a54dc6d1fd9c47383b7dd60e
prerequisite-patch-id: 5243b7b03f2c12a6e66c353b0c083f7f21fd7ba2
prerequisite-patch-id: 7153a847ba7b05e49a670caba5d5b8fa2508eff1
prerequisite-patch-id: 67a995618952454c30eb77960a5bf6f897d22547
prerequisite-patch-id: f0580be789bfbd90c903bfef8cf6099609e63347
prerequisite-patch-id: 975b27a83085ae7532771fbd7bb17b779ea2c254
prerequisite-patch-id: fa973600f98f37417659bbe282f76d7cbdfd84ff
prerequisite-patch-id: 333bf51a132f726bf970b5963017bdc607c0e315
prerequisite-patch-id: 7853ec5197ec9b9322a102a6b02dd62bba4df102
prerequisite-patch-id: 70780a52552f78b640178774bce254616b06f831
prerequisite-patch-id: 7a28872d234cdfa7bd5ec851e9dde01a65e91130
prerequisite-patch-id: f75a478f103e8707f7ce1ebb136e3a605f026cae
prerequisite-patch-id: c6aacf3772c239df0224afb7e4bb661fb9b81c63
prerequisite-patch-id: a71f47de3fd339d680c9f18e80f5bcde7eae0abf
--
2.53.0
next reply other threads:[~2026-10-11 23:36 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-11 23:36 Sasha Levin [this message]
2026-10-11 23:36 ` [RFC PATCH 1/6] kbuild: factor the userspace ABI flags out into KBUILD_USERABI Sasha Levin
2026-10-11 23:36 ` [RFC PATCH 2/6] kbuild: add "make tools_build" to build userspace tools from tools/ Sasha Levin
2026-10-11 23:36 ` [RFC PATCH 3/6] tools: build perf in tools_build Sasha Levin
2026-10-11 23:36 ` [RFC PATCH 4/6] tools: build kernel selftests " Sasha Levin
2026-10-11 23:36 ` [RFC PATCH 5/6] kbuild: build the tools selected in tools/Kconfig as part of "make all" Sasha Levin
2026-10-11 23:36 ` [RFC PATCH 6/6] Documentation: describe building tools with the kernel Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261011233647.2454648-1-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=acme@kernel.org \
--cc=irogers@google.com \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=namhyung@kernel.org \
--cc=nathan@kernel.org \
--cc=nsc@kernel.org \
--cc=shuah@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®