aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation/kbuild
diff options
context:
space:
mode:
authorRandy Dunlap <randy.dunlap@oracle.com>2007-11-12 19:17:55 -0500
committerSam Ravnborg <sam@ravnborg.org>2008-01-28 17:14:37 -0500
commit0486bc9098f4556a0aa90d57f717d08164b7647e (patch)
treea1c0fed3cffab7d81b4b137b1ab8ced54235a468 /Documentation/kbuild
parentb052ce4c840e2da3c72ab7dadb97d1094f6e3a89 (diff)
kconfig: add hints/tips/tricks to Documentation/kbuild/kconfig-language.txt
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> Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Diffstat (limited to 'Documentation/kbuild')
-rw-r--r--Documentation/kbuild/kconfig-language.txt54
1 files changed, 48 insertions, 6 deletions
diff --git a/Documentation/kbuild/kconfig-language.txt b/Documentation/kbuild/kconfig-language.txt
index 616043a6da99..53ca12f7999f 100644
--- a/Documentation/kbuild/kconfig-language.txt
+++ b/Documentation/kbuild/kconfig-language.txt
@@ -24,7 +24,7 @@ visible if its parent entry is also visible.
24Menu entries 24Menu entries
25------------ 25------------
26 26
27Most entries define a config option, all other entries help to organize 27Most entries define a config option; all other entries help to organize
28them. A single configuration option is defined like this: 28them. A single configuration option is defined like this:
29 29
30config MODVERSIONS 30config MODVERSIONS
@@ -50,7 +50,7 @@ applicable everywhere (see syntax).
50 50
51- type definition: "bool"/"tristate"/"string"/"hex"/"int" 51- type definition: "bool"/"tristate"/"string"/"hex"/"int"
52 Every config option must have a type. There are only two basic types: 52 Every config option must have a type. There are only two basic types:
53 tristate and string, the other types are based on these two. The type 53 tristate and string; the other types are based on these two. The type
54 definition optionally accepts an input prompt, so these two examples 54 definition optionally accepts an input prompt, so these two examples
55 are equivalent: 55 are equivalent:
56 56
@@ -108,7 +108,7 @@ applicable everywhere (see syntax).
108 equal to 'y' without visiting the dependencies. So abusing 108 equal to 'y' without visiting the dependencies. So abusing
109 select you are able to select a symbol FOO even if FOO depends 109 select you are able to select a symbol FOO even if FOO depends
110 on BAR that is not set. In general use select only for 110 on BAR that is not set. In general use select only for
111 non-visible symbols (no promts anywhere) and for symbols with 111 non-visible symbols (no prompts anywhere) and for symbols with
112 no dependencies. That will limit the usefulness but on the 112 no dependencies. That will limit the usefulness but on the
113 other hand avoid the illegal configurations all over. kconfig 113 other hand avoid the illegal configurations all over. kconfig
114 should one day warn about such things. 114 should one day warn about such things.
@@ -162,9 +162,9 @@ An expression can have a value of 'n', 'm' or 'y' (or 0, 1, 2
162respectively for calculations). A menu entry becomes visible when it's 162respectively for calculations). A menu entry becomes visible when it's
163expression evaluates to 'm' or 'y'. 163expression evaluates to 'm' or 'y'.
164 164
165There are two types of symbols: constant and nonconstant symbols. 165There are two types of symbols: constant and non-constant symbols.
166Nonconstant symbols are the most common ones and are defined with the 166Non-constant symbols are the most common ones and are defined with the
167'config' statement. Nonconstant symbols consist entirely of alphanumeric 167'config' statement. Non-constant symbols consist entirely of alphanumeric
168characters or underscores. 168characters or underscores.
169Constant symbols are only part of expressions. Constant symbols are 169Constant symbols are only part of expressions. Constant symbols are
170always surrounded by single or double quotes. Within the quote, any 170always surrounded by single or double quotes. Within the quote, any
@@ -301,3 +301,45 @@ mainmenu:
301 301
302This sets the config program's title bar if the config program chooses 302This sets the config program's title bar if the config program chooses
303to use it. 303to use it.
304
305
306Kconfig hints
307-------------
308This is a collection of Kconfig tips, most of which aren't obvious at
309first glance and most of which have become idioms in several Kconfig
310files.
311
312Build as module only
313~~~~~~~~~~~~~~~~~~~~
314To restrict a component build to module-only, qualify its config symbol
315with "depends on m". E.g.:
316
317config FOO
318 depends on BAR && m
319
320limits FOO to module (=m) or disabled (=n).
321
322
323Build limited by a third config symbol which may be =y or =m
324~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
325A common idiom that we see (and sometimes have problems with) is this:
326
327When option C in B (module or subsystem) uses interfaces from A (module
328or subsystem), and both A and B are tristate (could be =y or =m if they
329were independent of each other, but they aren't), then we need to limit
330C such that it cannot be built statically if A is built as a loadable
331module. (C already depends on B, so there is no dependency issue to
332take care of here.)
333
334If A is linked statically into the kernel image, C can be built
335statically or as loadable module(s). However, if A is built as loadable
336module(s), then C must be restricted to loadable module(s) also. This
337can be expressed in kconfig language as:
338
339config C
340 depends on A = y || A = B
341
342or for real examples, use this command in a kernel tree:
343
344$ find . -name Kconfig\* | xargs grep -ns "depends on.*=.*||.*=" | grep -v orig
345