On Wed, 13 Sep 2023, Arnd Bergmann <arnd@xxxxxxxxxx> wrote: > From: Arnd Bergmann <arnd@xxxxxxxx> > > This problem frequently comes up in randconfig testing, with > drivers failing to link because of a dependency on an optional > feature. > > The Kconfig language for this is very confusing, so try to > document it in "Kconfig hints" section. Thanks for doing this. > > Signed-off-by: Arnd Bergmann <arnd@xxxxxxxx> > --- > Documentation/kbuild/kconfig-language.rst | 26 +++++++++++++++++++++++ > 1 file changed, 26 insertions(+) > > diff --git a/Documentation/kbuild/kconfig-language.rst b/Documentation/kbuild/kconfig-language.rst > index 858ed5d80defe..89dea587a469a 100644 > --- a/Documentation/kbuild/kconfig-language.rst > +++ b/Documentation/kbuild/kconfig-language.rst > @@ -573,6 +573,32 @@ above, leading to: > bool "Support for foo hardware" > depends on ARCH_FOO_VENDOR || COMPILE_TEST > > +Optional dependencies > +~~~~~~~~~~~~~~~~~~~~~ > + > +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 slighly counterintuitive > + > + config FOO > + bool "Support for foo hardware" > + depends on BAR || !BAR depends on BAR || BAR=n seems to be an alternative that's about as common: $ git grep "depends on \([A-Z0-9_]\+\) || \!\1" | wc -l 109 $ git grep "depends on \([A-Z0-9_]\+\) || \1=n" | wc -l 107 Maybe worth mentioning both? BR, Jani. > + > +This means that there is either a dependency on BAR that disallows > +the combination of FOO=y with BAR=m, or BAR is completely disabled. > +For a more formalized approach if there are multiple drivers that have > +the same dependency, a helper symbol can be used, like > + > + config FOO > + bool "Support for foo hardware" > + depends on BAR_OPTIONAL > + > + config BAR_OPTIONAL > + def_tristate BAR || !BAR > + > Kconfig recursive dependency limitations > ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- Jani Nikula, Intel