* [PATCH/RFC] kconfig hints/tips/tricks
@ 2007-11-13 0:17 Randy Dunlap
2008-01-03 19:54 ` Sam Ravnborg
0 siblings, 1 reply; 2+ messages in thread
From: Randy Dunlap @ 2007-11-13 0:17 UTC (permalink / raw)
To: lkml; +Cc: sam
I'm not very happy with hint #2. I struggled with ways to express it
and finally decided to ship it^W^W release early/release often. :)
Suggestions welcome.
---
From: Randy Dunlap <randy.dunlap@oracle.com>
Add a section on kconfig hints: how to do <something> in Kconfig files.
Fix a few typos/spellos.
Signed-off-by: Randy Dunlap <randy.dunlap@oracle.com>
---
Documentation/kbuild/kconfig-language.txt | 54 ++++++++++++++++++++---
1 file changed, 48 insertions(+), 6 deletions(-)
--- linux-2.6.24-rc2-git2.orig/Documentation/kbuild/kconfig-language.txt
+++ linux-2.6.24-rc2-git2/Documentation/kbuild/kconfig-language.txt
@@ -24,7 +24,7 @@ visible if its parent entry is also visi
Menu entries
------------
-Most entries define a config option, all other entries help to organize
+Most entries define a config option; all other entries help to organize
them. A single configuration option is defined like this:
config MODVERSIONS
@@ -50,7 +50,7 @@ applicable everywhere (see syntax).
- type definition: "bool"/"tristate"/"string"/"hex"/"int"
Every config option must have a type. There are only two basic types:
- tristate and string, the other types are based on these two. The type
+ tristate and string; the other types are based on these two. The type
definition optionally accepts an input prompt, so these two examples
are equivalent:
@@ -108,7 +108,7 @@ applicable everywhere (see syntax).
equal to 'y' without visiting the dependencies. So abusing
select you are able to select a symbol FOO even if FOO depends
on BAR that is not set. In general use select only for
- non-visible symbols (no promts anywhere) and for symbols with
+ non-visible symbols (no prompts anywhere) and for symbols with
no dependencies. That will limit the usefulness but on the
other hand avoid the illegal configurations all over. kconfig
should one day warn about such things.
@@ -162,9 +162,9 @@ An expression can have a value of 'n', '
respectively for calculations). A menu entry becomes visible when it's
expression evaluates to 'm' or 'y'.
-There are two types of symbols: constant and nonconstant symbols.
-Nonconstant symbols are the most common ones and are defined with the
-'config' statement. Nonconstant symbols consist entirely of alphanumeric
+There are two types of symbols: constant and non-constant symbols.
+Non-constant symbols are the most common ones and are defined with the
+'config' statement. Non-constant symbols consist entirely of alphanumeric
characters or underscores.
Constant symbols are only part of expressions. Constant symbols are
always surrounded by single or double quotes. Within the quote, any
@@ -301,3 +301,45 @@ mainmenu:
This sets the config program's title bar if the config program chooses
to use it.
+
+
+Kconfig hints
+-------------
+This is a collection of Kconfig tips, most of which aren't obvious at
+first glance and most of which have become idioms in several Kconfig
+files.
+
+Build as module only
+~~~~~~~~~~~~~~~~~~~~
+To restrict a component build to module-only, qualify its config symbol
+with "depends on m". E.g.:
+
+config FOO
+ depends on BAR && m
+
+limits FOO to module (=m) or disabled (=n).
+
+
+Build limited by a third config symbol which may be =y or =m
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+A common idiom that we see (and sometimes have problems with) is this:
+
+When option C in B (module or subsystem) uses interfaces from A (module
+or subsystem), and both A and B are tristate (could be =y or =m if they
+were independent of each other, but they aren't), then we need to limit
+C such that it cannot be built statically if A is built as a loadable
+module. (C already depends on B, so there is no dependency issue to
+take care of here.)
+
+If A is linked statically into the kernel image, C can be built
+statically or as loadable module(s). However, if A is built as loadable
+module(s), then C must be restricted to loadable module(s) also. This
+can be expressed in kconfig language as:
+
+config C
+ depends on A = y || A = B
+
+or for real examples, use this command in a kernel tree:
+
+$ find . -name Kconfig\* | xargs grep -ns "depends on.*=.*||.*=" | grep -v orig
+
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH/RFC] kconfig hints/tips/tricks
2007-11-13 0:17 [PATCH/RFC] kconfig hints/tips/tricks Randy Dunlap
@ 2008-01-03 19:54 ` Sam Ravnborg
0 siblings, 0 replies; 2+ messages in thread
From: Sam Ravnborg @ 2008-01-03 19:54 UTC (permalink / raw)
To: Randy Dunlap; +Cc: lkml
On Mon, Nov 12, 2007 at 04:17:55PM -0800, Randy Dunlap wrote:
> I'm not very happy with hint #2. I struggled with ways to express it
> and finally decided to ship it^W^W release early/release often. :)
> Suggestions welcome.
>
> ---
> From: Randy Dunlap <randy.dunlap@oracle.com>
>
> Add a section on kconfig hints: how to do <something> in Kconfig files.
>
> Fix a few typos/spellos.
Applied as is.
Sam
>
> Signed-off-by: Randy Dunlap <randy.dunlap@oracle.com>
> ---
> Documentation/kbuild/kconfig-language.txt | 54 ++++++++++++++++++++---
> 1 file changed, 48 insertions(+), 6 deletions(-)
>
> --- linux-2.6.24-rc2-git2.orig/Documentation/kbuild/kconfig-language.txt
> +++ linux-2.6.24-rc2-git2/Documentation/kbuild/kconfig-language.txt
> @@ -24,7 +24,7 @@ visible if its parent entry is also visi
> Menu entries
> ------------
>
> -Most entries define a config option, all other entries help to organize
> +Most entries define a config option; all other entries help to organize
> them. A single configuration option is defined like this:
>
> config MODVERSIONS
> @@ -50,7 +50,7 @@ applicable everywhere (see syntax).
>
> - type definition: "bool"/"tristate"/"string"/"hex"/"int"
> Every config option must have a type. There are only two basic types:
> - tristate and string, the other types are based on these two. The type
> + tristate and string; the other types are based on these two. The type
> definition optionally accepts an input prompt, so these two examples
> are equivalent:
>
> @@ -108,7 +108,7 @@ applicable everywhere (see syntax).
> equal to 'y' without visiting the dependencies. So abusing
> select you are able to select a symbol FOO even if FOO depends
> on BAR that is not set. In general use select only for
> - non-visible symbols (no promts anywhere) and for symbols with
> + non-visible symbols (no prompts anywhere) and for symbols with
> no dependencies. That will limit the usefulness but on the
> other hand avoid the illegal configurations all over. kconfig
> should one day warn about such things.
> @@ -162,9 +162,9 @@ An expression can have a value of 'n', '
> respectively for calculations). A menu entry becomes visible when it's
> expression evaluates to 'm' or 'y'.
>
> -There are two types of symbols: constant and nonconstant symbols.
> -Nonconstant symbols are the most common ones and are defined with the
> -'config' statement. Nonconstant symbols consist entirely of alphanumeric
> +There are two types of symbols: constant and non-constant symbols.
> +Non-constant symbols are the most common ones and are defined with the
> +'config' statement. Non-constant symbols consist entirely of alphanumeric
> characters or underscores.
> Constant symbols are only part of expressions. Constant symbols are
> always surrounded by single or double quotes. Within the quote, any
> @@ -301,3 +301,45 @@ mainmenu:
>
> This sets the config program's title bar if the config program chooses
> to use it.
> +
> +
> +Kconfig hints
> +-------------
> +This is a collection of Kconfig tips, most of which aren't obvious at
> +first glance and most of which have become idioms in several Kconfig
> +files.
> +
> +Build as module only
> +~~~~~~~~~~~~~~~~~~~~
> +To restrict a component build to module-only, qualify its config symbol
> +with "depends on m". E.g.:
> +
> +config FOO
> + depends on BAR && m
> +
> +limits FOO to module (=m) or disabled (=n).
> +
> +
> +Build limited by a third config symbol which may be =y or =m
> +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> +A common idiom that we see (and sometimes have problems with) is this:
> +
> +When option C in B (module or subsystem) uses interfaces from A (module
> +or subsystem), and both A and B are tristate (could be =y or =m if they
> +were independent of each other, but they aren't), then we need to limit
> +C such that it cannot be built statically if A is built as a loadable
> +module. (C already depends on B, so there is no dependency issue to
> +take care of here.)
> +
> +If A is linked statically into the kernel image, C can be built
> +statically or as loadable module(s). However, if A is built as loadable
> +module(s), then C must be restricted to loadable module(s) also. This
> +can be expressed in kconfig language as:
> +
> +config C
> + depends on A = y || A = B
> +
> +or for real examples, use this command in a kernel tree:
> +
> +$ find . -name Kconfig\* | xargs grep -ns "depends on.*=.*||.*=" | grep -v orig
> +
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2008-01-03 19:54 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-11-13 0:17 [PATCH/RFC] kconfig hints/tips/tricks Randy Dunlap
2008-01-03 19:54 ` Sam Ravnborg
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®