mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [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®