1*cf5a6c84SAndroid Build Coastguard WorkerLinux 2.6.12 Documentation/kbuild/kconfig-language.txt 2*cf5a6c84SAndroid Build Coastguard Worker 3*cf5a6c84SAndroid Build Coastguard WorkerIntroduction 4*cf5a6c84SAndroid Build Coastguard Worker------------ 5*cf5a6c84SAndroid Build Coastguard Worker 6*cf5a6c84SAndroid Build Coastguard WorkerThe configuration database is collection of configuration options 7*cf5a6c84SAndroid Build Coastguard Workerorganized in a tree structure: 8*cf5a6c84SAndroid Build Coastguard Worker 9*cf5a6c84SAndroid Build Coastguard Worker +- Code maturity level options 10*cf5a6c84SAndroid Build Coastguard Worker | +- Prompt for development and/or incomplete code/drivers 11*cf5a6c84SAndroid Build Coastguard Worker +- General setup 12*cf5a6c84SAndroid Build Coastguard Worker | +- Networking support 13*cf5a6c84SAndroid Build Coastguard Worker | +- System V IPC 14*cf5a6c84SAndroid Build Coastguard Worker | +- BSD Process Accounting 15*cf5a6c84SAndroid Build Coastguard Worker | +- Sysctl support 16*cf5a6c84SAndroid Build Coastguard Worker +- Loadable module support 17*cf5a6c84SAndroid Build Coastguard Worker | +- Enable loadable module support 18*cf5a6c84SAndroid Build Coastguard Worker | +- Set version information on all module symbols 19*cf5a6c84SAndroid Build Coastguard Worker | +- Kernel module loader 20*cf5a6c84SAndroid Build Coastguard Worker +- ... 21*cf5a6c84SAndroid Build Coastguard Worker 22*cf5a6c84SAndroid Build Coastguard WorkerEvery entry has its own dependencies. These dependencies are used 23*cf5a6c84SAndroid Build Coastguard Workerto determine the visibility of an entry. Any child entry is only 24*cf5a6c84SAndroid Build Coastguard Workervisible if its parent entry is also visible. 25*cf5a6c84SAndroid Build Coastguard Worker 26*cf5a6c84SAndroid Build Coastguard WorkerMenu entries 27*cf5a6c84SAndroid Build Coastguard Worker------------ 28*cf5a6c84SAndroid Build Coastguard Worker 29*cf5a6c84SAndroid Build Coastguard WorkerMost entries define a config option, all other entries help to organize 30*cf5a6c84SAndroid Build Coastguard Workerthem. A single configuration option is defined like this: 31*cf5a6c84SAndroid Build Coastguard Worker 32*cf5a6c84SAndroid Build Coastguard Workerconfig MODVERSIONS 33*cf5a6c84SAndroid Build Coastguard Worker bool "Set version information on all module symbols" 34*cf5a6c84SAndroid Build Coastguard Worker depends MODULES 35*cf5a6c84SAndroid Build Coastguard Worker help 36*cf5a6c84SAndroid Build Coastguard Worker Usually, modules have to be recompiled whenever you switch to a new 37*cf5a6c84SAndroid Build Coastguard Worker kernel. ... 38*cf5a6c84SAndroid Build Coastguard Worker 39*cf5a6c84SAndroid Build Coastguard WorkerEvery line starts with a key word and can be followed by multiple 40*cf5a6c84SAndroid Build Coastguard Workerarguments. "config" starts a new config entry. The following lines 41*cf5a6c84SAndroid Build Coastguard Workerdefine attributes for this config option. Attributes can be the type of 42*cf5a6c84SAndroid Build Coastguard Workerthe config option, input prompt, dependencies, help text and default 43*cf5a6c84SAndroid Build Coastguard Workervalues. A config option can be defined multiple times with the same 44*cf5a6c84SAndroid Build Coastguard Workername, but every definition can have only a single input prompt and the 45*cf5a6c84SAndroid Build Coastguard Workertype must not conflict. 46*cf5a6c84SAndroid Build Coastguard Worker 47*cf5a6c84SAndroid Build Coastguard WorkerMenu attributes 48*cf5a6c84SAndroid Build Coastguard Worker--------------- 49*cf5a6c84SAndroid Build Coastguard Worker 50*cf5a6c84SAndroid Build Coastguard WorkerA menu entry can have a number of attributes. Not all of them are 51*cf5a6c84SAndroid Build Coastguard Workerapplicable everywhere (see syntax). 52*cf5a6c84SAndroid Build Coastguard Worker 53*cf5a6c84SAndroid Build Coastguard Worker- type definition: "bool"/"tristate"/"string"/"hex"/"int" 54*cf5a6c84SAndroid Build Coastguard Worker Every config option must have a type. There are only two basic types: 55*cf5a6c84SAndroid Build Coastguard Worker tristate and string, the other types are based on these two. The type 56*cf5a6c84SAndroid Build Coastguard Worker definition optionally accepts an input prompt, so these two examples 57*cf5a6c84SAndroid Build Coastguard Worker are equivalent: 58*cf5a6c84SAndroid Build Coastguard Worker 59*cf5a6c84SAndroid Build Coastguard Worker bool "Networking support" 60*cf5a6c84SAndroid Build Coastguard Worker and 61*cf5a6c84SAndroid Build Coastguard Worker bool 62*cf5a6c84SAndroid Build Coastguard Worker prompt "Networking support" 63*cf5a6c84SAndroid Build Coastguard Worker 64*cf5a6c84SAndroid Build Coastguard Worker- input prompt: "prompt" <prompt> ["if" <expr>] 65*cf5a6c84SAndroid Build Coastguard Worker Every menu entry can have at most one prompt, which is used to display 66*cf5a6c84SAndroid Build Coastguard Worker to the user. Optionally dependencies only for this prompt can be added 67*cf5a6c84SAndroid Build Coastguard Worker with "if". 68*cf5a6c84SAndroid Build Coastguard Worker 69*cf5a6c84SAndroid Build Coastguard Worker- default value: "default" <expr> ["if" <expr>] 70*cf5a6c84SAndroid Build Coastguard Worker A config option can have any number of default values. If multiple 71*cf5a6c84SAndroid Build Coastguard Worker default values are visible, only the first defined one is active. 72*cf5a6c84SAndroid Build Coastguard Worker Default values are not limited to the menu entry, where they are 73*cf5a6c84SAndroid Build Coastguard Worker defined, this means the default can be defined somewhere else or be 74*cf5a6c84SAndroid Build Coastguard Worker overridden by an earlier definition. 75*cf5a6c84SAndroid Build Coastguard Worker The default value is only assigned to the config symbol if no other 76*cf5a6c84SAndroid Build Coastguard Worker value was set by the user (via the input prompt above). If an input 77*cf5a6c84SAndroid Build Coastguard Worker prompt is visible the default value is presented to the user and can 78*cf5a6c84SAndroid Build Coastguard Worker be overridden by him. 79*cf5a6c84SAndroid Build Coastguard Worker Optionally dependencies only for this default value can be added with 80*cf5a6c84SAndroid Build Coastguard Worker "if". 81*cf5a6c84SAndroid Build Coastguard Worker 82*cf5a6c84SAndroid Build Coastguard Worker- dependencies: "depends on"/"requires" <expr> 83*cf5a6c84SAndroid Build Coastguard Worker This defines a dependency for this menu entry. If multiple 84*cf5a6c84SAndroid Build Coastguard Worker dependencies are defined they are connected with '&&'. Dependencies 85*cf5a6c84SAndroid Build Coastguard Worker are applied to all other options within this menu entry (which also 86*cf5a6c84SAndroid Build Coastguard Worker accept an "if" expression), so these two examples are equivalent: 87*cf5a6c84SAndroid Build Coastguard Worker 88*cf5a6c84SAndroid Build Coastguard Worker bool "foo" if BAR 89*cf5a6c84SAndroid Build Coastguard Worker default y if BAR 90*cf5a6c84SAndroid Build Coastguard Worker and 91*cf5a6c84SAndroid Build Coastguard Worker depends on BAR 92*cf5a6c84SAndroid Build Coastguard Worker bool "foo" 93*cf5a6c84SAndroid Build Coastguard Worker default y 94*cf5a6c84SAndroid Build Coastguard Worker 95*cf5a6c84SAndroid Build Coastguard Worker- reverse dependencies: "select" <symbol> ["if" <expr>] 96*cf5a6c84SAndroid Build Coastguard Worker While normal dependencies reduce the upper limit of a symbol (see 97*cf5a6c84SAndroid Build Coastguard Worker below), reverse dependencies can be used to force a lower limit of 98*cf5a6c84SAndroid Build Coastguard Worker another symbol. The value of the current menu symbol is used as the 99*cf5a6c84SAndroid Build Coastguard Worker minimal value <symbol> can be set to. If <symbol> is selected multiple 100*cf5a6c84SAndroid Build Coastguard Worker times, the limit is set to the largest selection. 101*cf5a6c84SAndroid Build Coastguard Worker Reverse dependencies can only be used with boolean or tristate 102*cf5a6c84SAndroid Build Coastguard Worker symbols. 103*cf5a6c84SAndroid Build Coastguard Worker 104*cf5a6c84SAndroid Build Coastguard Worker- numerical ranges: "range" <symbol> <symbol> ["if" <expr>] 105*cf5a6c84SAndroid Build Coastguard Worker This allows to limit the range of possible input values for int 106*cf5a6c84SAndroid Build Coastguard Worker and hex symbols. The user can only input a value which is larger than 107*cf5a6c84SAndroid Build Coastguard Worker or equal to the first symbol and smaller than or equal to the second 108*cf5a6c84SAndroid Build Coastguard Worker symbol. 109*cf5a6c84SAndroid Build Coastguard Worker 110*cf5a6c84SAndroid Build Coastguard Worker- help text: "help" or "---help---" 111*cf5a6c84SAndroid Build Coastguard Worker This defines a help text. The end of the help text is determined by 112*cf5a6c84SAndroid Build Coastguard Worker the indentation level, this means it ends at the first line which has 113*cf5a6c84SAndroid Build Coastguard Worker a smaller indentation than the first line of the help text. 114*cf5a6c84SAndroid Build Coastguard Worker "---help---" and "help" do not differ in behaviour, "---help---" is 115*cf5a6c84SAndroid Build Coastguard Worker used to help visually seperate configuration logic from help within 116*cf5a6c84SAndroid Build Coastguard Worker the file as an aid to developers. 117*cf5a6c84SAndroid Build Coastguard Worker 118*cf5a6c84SAndroid Build Coastguard Worker 119*cf5a6c84SAndroid Build Coastguard WorkerMenu dependencies 120*cf5a6c84SAndroid Build Coastguard Worker----------------- 121*cf5a6c84SAndroid Build Coastguard Worker 122*cf5a6c84SAndroid Build Coastguard WorkerDependencies define the visibility of a menu entry and can also reduce 123*cf5a6c84SAndroid Build Coastguard Workerthe input range of tristate symbols. The tristate logic used in the 124*cf5a6c84SAndroid Build Coastguard Workerexpressions uses one more state than normal boolean logic to express the 125*cf5a6c84SAndroid Build Coastguard Workermodule state. Dependency expressions have the following syntax: 126*cf5a6c84SAndroid Build Coastguard Worker 127*cf5a6c84SAndroid Build Coastguard Worker<expr> ::= <symbol> (1) 128*cf5a6c84SAndroid Build Coastguard Worker <symbol> '=' <symbol> (2) 129*cf5a6c84SAndroid Build Coastguard Worker <symbol> '!=' <symbol> (3) 130*cf5a6c84SAndroid Build Coastguard Worker '(' <expr> ')' (4) 131*cf5a6c84SAndroid Build Coastguard Worker '!' <expr> (5) 132*cf5a6c84SAndroid Build Coastguard Worker <expr> '&&' <expr> (6) 133*cf5a6c84SAndroid Build Coastguard Worker <expr> '||' <expr> (7) 134*cf5a6c84SAndroid Build Coastguard Worker 135*cf5a6c84SAndroid Build Coastguard WorkerExpressions are listed in decreasing order of precedence. 136*cf5a6c84SAndroid Build Coastguard Worker 137*cf5a6c84SAndroid Build Coastguard Worker(1) Convert the symbol into an expression. Boolean and tristate symbols 138*cf5a6c84SAndroid Build Coastguard Worker are simply converted into the respective expression values. All 139*cf5a6c84SAndroid Build Coastguard Worker other symbol types result in 'n'. 140*cf5a6c84SAndroid Build Coastguard Worker(2) If the values of both symbols are equal, it returns 'y', 141*cf5a6c84SAndroid Build Coastguard Worker otherwise 'n'. 142*cf5a6c84SAndroid Build Coastguard Worker(3) If the values of both symbols are equal, it returns 'n', 143*cf5a6c84SAndroid Build Coastguard Worker otherwise 'y'. 144*cf5a6c84SAndroid Build Coastguard Worker(4) Returns the value of the expression. Used to override precedence. 145*cf5a6c84SAndroid Build Coastguard Worker(5) Returns the result of (2-/expr/). 146*cf5a6c84SAndroid Build Coastguard Worker(6) Returns the result of min(/expr/, /expr/). 147*cf5a6c84SAndroid Build Coastguard Worker(7) Returns the result of max(/expr/, /expr/). 148*cf5a6c84SAndroid Build Coastguard Worker 149*cf5a6c84SAndroid Build Coastguard WorkerAn expression can have a value of 'n', 'm' or 'y' (or 0, 1, 2 150*cf5a6c84SAndroid Build Coastguard Workerrespectively for calculations). A menu entry becomes visible when it's 151*cf5a6c84SAndroid Build Coastguard Workerexpression evaluates to 'm' or 'y'. 152*cf5a6c84SAndroid Build Coastguard Worker 153*cf5a6c84SAndroid Build Coastguard WorkerThere are two types of symbols: constant and nonconstant symbols. 154*cf5a6c84SAndroid Build Coastguard WorkerNonconstant symbols are the most common ones and are defined with the 155*cf5a6c84SAndroid Build Coastguard Worker'config' statement. Nonconstant symbols consist entirely of alphanumeric 156*cf5a6c84SAndroid Build Coastguard Workercharacters or underscores. 157*cf5a6c84SAndroid Build Coastguard WorkerConstant symbols are only part of expressions. Constant symbols are 158*cf5a6c84SAndroid Build Coastguard Workeralways surrounded by single or double quotes. Within the quote any 159*cf5a6c84SAndroid Build Coastguard Workerother character is allowed and the quotes can be escaped using '\'. 160*cf5a6c84SAndroid Build Coastguard Worker 161*cf5a6c84SAndroid Build Coastguard WorkerMenu structure 162*cf5a6c84SAndroid Build Coastguard Worker-------------- 163*cf5a6c84SAndroid Build Coastguard Worker 164*cf5a6c84SAndroid Build Coastguard WorkerThe position of a menu entry in the tree is determined in two ways. First 165*cf5a6c84SAndroid Build Coastguard Workerit can be specified explicitly: 166*cf5a6c84SAndroid Build Coastguard Worker 167*cf5a6c84SAndroid Build Coastguard Workermenu "Network device support" 168*cf5a6c84SAndroid Build Coastguard Worker depends NET 169*cf5a6c84SAndroid Build Coastguard Worker 170*cf5a6c84SAndroid Build Coastguard Workerconfig NETDEVICES 171*cf5a6c84SAndroid Build Coastguard Worker ... 172*cf5a6c84SAndroid Build Coastguard Worker 173*cf5a6c84SAndroid Build Coastguard Workerendmenu 174*cf5a6c84SAndroid Build Coastguard Worker 175*cf5a6c84SAndroid Build Coastguard WorkerAll entries within the "menu" ... "endmenu" block become a submenu of 176*cf5a6c84SAndroid Build Coastguard Worker"Network device support". All subentries inherit the dependencies from 177*cf5a6c84SAndroid Build Coastguard Workerthe menu entry, e.g. this means the dependency "NET" is added to the 178*cf5a6c84SAndroid Build Coastguard Workerdependency list of the config option NETDEVICES. 179*cf5a6c84SAndroid Build Coastguard Worker 180*cf5a6c84SAndroid Build Coastguard WorkerThe other way to generate the menu structure is done by analyzing the 181*cf5a6c84SAndroid Build Coastguard Workerdependencies. If a menu entry somehow depends on the previous entry, it 182*cf5a6c84SAndroid Build Coastguard Workercan be made a submenu of it. First, the previous (parent) symbol must 183*cf5a6c84SAndroid Build Coastguard Workerbe part of the dependency list and then one of these two conditions 184*cf5a6c84SAndroid Build Coastguard Workermust be true: 185*cf5a6c84SAndroid Build Coastguard Worker- the child entry must become invisible, if the parent is set to 'n' 186*cf5a6c84SAndroid Build Coastguard Worker- the child entry must only be visible, if the parent is visible 187*cf5a6c84SAndroid Build Coastguard Worker 188*cf5a6c84SAndroid Build Coastguard Workerconfig MODULES 189*cf5a6c84SAndroid Build Coastguard Worker bool "Enable loadable module support" 190*cf5a6c84SAndroid Build Coastguard Worker 191*cf5a6c84SAndroid Build Coastguard Workerconfig MODVERSIONS 192*cf5a6c84SAndroid Build Coastguard Worker bool "Set version information on all module symbols" 193*cf5a6c84SAndroid Build Coastguard Worker depends MODULES 194*cf5a6c84SAndroid Build Coastguard Worker 195*cf5a6c84SAndroid Build Coastguard Workercomment "module support disabled" 196*cf5a6c84SAndroid Build Coastguard Worker depends !MODULES 197*cf5a6c84SAndroid Build Coastguard Worker 198*cf5a6c84SAndroid Build Coastguard WorkerMODVERSIONS directly depends on MODULES, this means it's only visible if 199*cf5a6c84SAndroid Build Coastguard WorkerMODULES is different from 'n'. The comment on the other hand is always 200*cf5a6c84SAndroid Build Coastguard Workervisible when MODULES is visible (the (empty) dependency of MODULES is 201*cf5a6c84SAndroid Build Coastguard Workeralso part of the comment dependencies). 202*cf5a6c84SAndroid Build Coastguard Worker 203*cf5a6c84SAndroid Build Coastguard Worker 204*cf5a6c84SAndroid Build Coastguard WorkerKconfig syntax 205*cf5a6c84SAndroid Build Coastguard Worker-------------- 206*cf5a6c84SAndroid Build Coastguard Worker 207*cf5a6c84SAndroid Build Coastguard WorkerThe configuration file describes a series of menu entries, where every 208*cf5a6c84SAndroid Build Coastguard Workerline starts with a keyword (except help texts). The following keywords 209*cf5a6c84SAndroid Build Coastguard Workerend a menu entry: 210*cf5a6c84SAndroid Build Coastguard Worker- config 211*cf5a6c84SAndroid Build Coastguard Worker- menuconfig 212*cf5a6c84SAndroid Build Coastguard Worker- choice/endchoice 213*cf5a6c84SAndroid Build Coastguard Worker- comment 214*cf5a6c84SAndroid Build Coastguard Worker- menu/endmenu 215*cf5a6c84SAndroid Build Coastguard Worker- if/endif 216*cf5a6c84SAndroid Build Coastguard Worker- source 217*cf5a6c84SAndroid Build Coastguard WorkerThe first five also start the definition of a menu entry. 218*cf5a6c84SAndroid Build Coastguard Worker 219*cf5a6c84SAndroid Build Coastguard Workerconfig: 220*cf5a6c84SAndroid Build Coastguard Worker 221*cf5a6c84SAndroid Build Coastguard Worker "config" <symbol> 222*cf5a6c84SAndroid Build Coastguard Worker <config options> 223*cf5a6c84SAndroid Build Coastguard Worker 224*cf5a6c84SAndroid Build Coastguard WorkerThis defines a config symbol <symbol> and accepts any of above 225*cf5a6c84SAndroid Build Coastguard Workerattributes as options. 226*cf5a6c84SAndroid Build Coastguard Worker 227*cf5a6c84SAndroid Build Coastguard Workermenuconfig: 228*cf5a6c84SAndroid Build Coastguard Worker "menuconfig" <symbol> 229*cf5a6c84SAndroid Build Coastguard Worker <config options> 230*cf5a6c84SAndroid Build Coastguard Worker 231*cf5a6c84SAndroid Build Coastguard WorkerThis is similiar to the simple config entry above, but it also gives a 232*cf5a6c84SAndroid Build Coastguard Workerhint to front ends, that all suboptions should be displayed as a 233*cf5a6c84SAndroid Build Coastguard Workerseparate list of options. 234*cf5a6c84SAndroid Build Coastguard Worker 235*cf5a6c84SAndroid Build Coastguard Workerchoices: 236*cf5a6c84SAndroid Build Coastguard Worker 237*cf5a6c84SAndroid Build Coastguard Worker "choice" 238*cf5a6c84SAndroid Build Coastguard Worker <choice options> 239*cf5a6c84SAndroid Build Coastguard Worker <choice block> 240*cf5a6c84SAndroid Build Coastguard Worker "endchoice" 241*cf5a6c84SAndroid Build Coastguard Worker 242*cf5a6c84SAndroid Build Coastguard WorkerThis defines a choice group and accepts any of above attributes as 243*cf5a6c84SAndroid Build Coastguard Workeroptions. A choice can only be of type bool or tristate, while a boolean 244*cf5a6c84SAndroid Build Coastguard Workerchoice only allows a single config entry to be selected, a tristate 245*cf5a6c84SAndroid Build Coastguard Workerchoice also allows any number of config entries to be set to 'm'. This 246*cf5a6c84SAndroid Build Coastguard Workercan be used if multiple drivers for a single hardware exists and only a 247*cf5a6c84SAndroid Build Coastguard Workersingle driver can be compiled/loaded into the kernel, but all drivers 248*cf5a6c84SAndroid Build Coastguard Workercan be compiled as modules. 249*cf5a6c84SAndroid Build Coastguard WorkerA choice accepts another option "optional", which allows to set the 250*cf5a6c84SAndroid Build Coastguard Workerchoice to 'n' and no entry needs to be selected. 251*cf5a6c84SAndroid Build Coastguard Worker 252*cf5a6c84SAndroid Build Coastguard Workercomment: 253*cf5a6c84SAndroid Build Coastguard Worker 254*cf5a6c84SAndroid Build Coastguard Worker "comment" <prompt> 255*cf5a6c84SAndroid Build Coastguard Worker <comment options> 256*cf5a6c84SAndroid Build Coastguard Worker 257*cf5a6c84SAndroid Build Coastguard WorkerThis defines a comment which is displayed to the user during the 258*cf5a6c84SAndroid Build Coastguard Workerconfiguration process and is also echoed to the output files. The only 259*cf5a6c84SAndroid Build Coastguard Workerpossible options are dependencies. 260*cf5a6c84SAndroid Build Coastguard Worker 261*cf5a6c84SAndroid Build Coastguard Workermenu: 262*cf5a6c84SAndroid Build Coastguard Worker 263*cf5a6c84SAndroid Build Coastguard Worker "menu" <prompt> 264*cf5a6c84SAndroid Build Coastguard Worker <menu options> 265*cf5a6c84SAndroid Build Coastguard Worker <menu block> 266*cf5a6c84SAndroid Build Coastguard Worker "endmenu" 267*cf5a6c84SAndroid Build Coastguard Worker 268*cf5a6c84SAndroid Build Coastguard WorkerThis defines a menu block, see "Menu structure" above for more 269*cf5a6c84SAndroid Build Coastguard Workerinformation. The only possible options are dependencies. 270*cf5a6c84SAndroid Build Coastguard Worker 271*cf5a6c84SAndroid Build Coastguard Workerif: 272*cf5a6c84SAndroid Build Coastguard Worker 273*cf5a6c84SAndroid Build Coastguard Worker "if" <expr> 274*cf5a6c84SAndroid Build Coastguard Worker <if block> 275*cf5a6c84SAndroid Build Coastguard Worker "endif" 276*cf5a6c84SAndroid Build Coastguard Worker 277*cf5a6c84SAndroid Build Coastguard WorkerThis defines an if block. The dependency expression <expr> is appended 278*cf5a6c84SAndroid Build Coastguard Workerto all enclosed menu entries. 279*cf5a6c84SAndroid Build Coastguard Worker 280*cf5a6c84SAndroid Build Coastguard Workersource: 281*cf5a6c84SAndroid Build Coastguard Worker 282*cf5a6c84SAndroid Build Coastguard Worker "source" <prompt> 283*cf5a6c84SAndroid Build Coastguard Worker 284*cf5a6c84SAndroid Build Coastguard WorkerThis reads the specified configuration file. This file is always parsed. 285