summaryrefslogtreecommitdiff
path: root/Documentation/kbuild
diff options
context:
space:
mode:
authorNicolas Pitre <nico@fluxnic.net>2025-12-15 15:06:54 -0800
committerNathan Chancellor <nathan@kernel.org>2026-01-06 14:57:15 -0700
commit76df6815dab76d7890936dc5f6d91cf7e7f88358 (patch)
tree4429aa6346ff0f79623d03274f0425d297efdf23 /Documentation/kbuild
parent5ce3218d4f102aca5e90d3c831259b6e380f88b4 (diff)
downloadlinux-next-76df6815dab76d7890936dc5f6d91cf7e7f88358.tar.gz
linux-next-76df6815dab76d7890936dc5f6d91cf7e7f88358.zip
kconfig: Support conditional deps using "depends on X if Y"
Extend the "depends on" syntax to support conditional dependencies using "depends on X if Y". While functionally equivalent to "depends on X || (Y == n)", "depends on X if Y" is much more readable and makes the kconfig language uniform in supporting the "if <expr>" suffix. This also improves readability for "optional" dependencies, which are the subset of conditional dependencies where X is Y. Previously such optional dependencies had to be expressed as the counterintuitive "depends on X || !X", now this can be represented as "depends on X if X". The change is implemented by converting the "X if Y" syntax into the "X || (Y == n)" syntax during "depends on" token processing. Signed-off-by: Nicolas Pitre <nico@fluxnic.net> [Graham Roff: Rewrote commit message, updated patch, added tests] Signed-off-by: Graham Roff <grahamr@qti.qualcomm.com> Acked-by: Randy Dunlap <rdunlap@infradead.org> Link: https://patch.msgid.link/20251215-kconfig_conditional_deps-v3-1-59519af0a5df@qti.qualcomm.com [nathan: Minor adjustments to spacing] Signed-off-by: Nathan Chancellor <nathan@kernel.org>
Diffstat (limited to 'Documentation/kbuild')
-rw-r--r--Documentation/kbuild/kconfig-language.rst22
1 files changed, 19 insertions, 3 deletions
diff --git a/Documentation/kbuild/kconfig-language.rst b/Documentation/kbuild/kconfig-language.rst
index abce88f15d7c..9ff3e530b2b4 100644
--- a/Documentation/kbuild/kconfig-language.rst
+++ b/Documentation/kbuild/kconfig-language.rst
@@ -118,7 +118,7 @@ applicable everywhere (see syntax).
This is a shorthand notation for a type definition plus a value.
Optionally dependencies for this default value can be added with "if".
-- dependencies: "depends on" <expr>
+- dependencies: "depends on" <expr> ["if" <expr>]
This defines a dependency for this menu entry. If multiple
dependencies are defined, they are connected with '&&'. Dependencies
@@ -134,6 +134,16 @@ applicable everywhere (see syntax).
bool "foo"
default y
+ The dependency definition itself may be conditional by appending "if"
+ followed by an expression. For example::
+
+ config FOO
+ tristate
+ depends on BAR if BAZ
+
+ meaning that FOO is constrained by the value of BAR only if BAZ is
+ also set.
+
- reverse dependencies: "select" <symbol> ["if" <expr>]
While normal dependencies reduce the upper limit of a symbol (see
@@ -602,8 +612,14 @@ Some drivers are able to optionally use a feature from another module
or build cleanly with that module disabled, but cause a link failure
when trying to use that loadable module from a built-in driver.
-The most common way to express this optional dependency in Kconfig logic
-uses the slightly counterintuitive::
+The recommended way to express this optional dependency in Kconfig logic
+uses the conditional form::
+
+ config FOO
+ tristate "Support for foo hardware"
+ depends on BAR if BAR
+
+This slightly counterintuitive style is also widely used::
config FOO
tristate "Support for foo hardware"