102 lines
4.4 KiB
Plaintext
102 lines
4.4 KiB
Plaintext
|
kconfig_lint is a tool to help identify issues within coreboot's Kconfig
|
||
|
files. It is very specific to coreboot, and is not intended to be used as a
|
||
|
generic Kconfig lint tool for other projects.
|
||
|
|
||
|
Operation:
|
||
|
kconfig_lint parses the entire kconfig tree, building up a hash table of all
|
||
|
of the statements. It then searches the coreboot tree looking for all usage of
|
||
|
any Kconfig symbols. By combining these two, it is able to find many issues
|
||
|
that would be difficult to locate otherwise.
|
||
|
|
||
|
Usage:
|
||
|
kconfig_lint <options>
|
||
|
-o|--output=file Set output filename
|
||
|
-p|--print Print full output
|
||
|
-e|--errors_off Don't print warnings or errors
|
||
|
-w|--warnings_off Don't print warnings
|
||
|
-n|--notes Show minor notes
|
||
|
-G|--no_git_grep Use standard grep tools instead of git grep
|
||
|
|
||
|
|
||
|
Options:
|
||
|
-o|--output=file Send the output to a file instead of printing to stdout.
|
||
|
|
||
|
-p|--print Shows the entire Kconfig tree as parsed by kconfig_lint,
|
||
|
including the filename and line number of each statement.
|
||
|
This can be very helpful for debugging Kconfig issues.
|
||
|
|
||
|
-e|--errors_off Suppress both error and warning output. Useful along with
|
||
|
the --print command
|
||
|
|
||
|
-w|--warnings_off Suppress warning output
|
||
|
|
||
|
-n|--notes Enable the display of minor notes that kconfig_lint has
|
||
|
found. These might be issues, but probably are not.
|
||
|
|
||
|
-G|--no_git_grep Instead of using the 'git grep' command, use regular grep.
|
||
|
This is useful for checking coreboot trees that are not
|
||
|
contained in a git repo.
|
||
|
|
||
|
Issues that kconfig_lint checks for:
|
||
|
|
||
|
Notes:
|
||
|
- Show when the range set for a hex or int does not match a previous range
|
||
|
|
||
|
Warnings in Kconfig files:
|
||
|
- Symbols that are defined but never used.
|
||
|
- A 'source' keyword loading a Kconfig file that has already been loaded.
|
||
|
- A 'source' keyword loading a Kconfig file that doesn't exist. Note that
|
||
|
globs are excluded from this check.
|
||
|
|
||
|
Warnings in coreboot source files:
|
||
|
- Kconfig files that are not loaded by a 'source' keyword.
|
||
|
- Naked use of boolean CONFIG_XXX Kconfig in C that's not wrapped in CONFIG()
|
||
|
|
||
|
Errors in Kconfig files:
|
||
|
- Any 'default' expressions that can never be reached.
|
||
|
- Directories specified in a 'source' keyword do not exist.
|
||
|
- Selects do not work on symbols created in a choice block.
|
||
|
- All symbols used in selects or expressions must be defined in a config
|
||
|
statement.
|
||
|
- 'endchoice' keyword not used in a choice block
|
||
|
- Choice block defined with no symbols.
|
||
|
- The 'tristate' type is not used in coreboot.
|
||
|
- A 'select' keyword used outside of a config block.
|
||
|
- Symbols created both inside and outside of a choice block or in two
|
||
|
different choice blocks.
|
||
|
- A 'range' keyword has higher minimum than maximum value.
|
||
|
- A config block with a prompt at the top level (the top level is currently
|
||
|
just for menus).
|
||
|
- Indentation using spaces instead of tabs. We indent using tabs, although
|
||
|
the tab may be followed by spaces, particularly for help blocks.
|
||
|
- Lines not ending with a linefeed. These can cause some keywords to not
|
||
|
function properly ('source' keywords in particular). It's also just
|
||
|
generally good to end the file with a linefeed.
|
||
|
- Help text starting with no whitespace.
|
||
|
- Help text that starts at the same indentation level as the 'help' keyword.
|
||
|
|
||
|
Errors in Kconfig that are also caught by Kconfig itself:
|
||
|
- Invalid expressions.
|
||
|
- Unrecognized keywords.
|
||
|
- An 'optional' keyword used outside of a choice block
|
||
|
- The 'select' keyword only works on bool symbols.
|
||
|
- A 'range' keyword used outside of a config block.
|
||
|
- A 'default' keyword used outside of a config or choice block.
|
||
|
- Symbol types must be consistent - they cannot be bool in one location and
|
||
|
int in another location.
|
||
|
- Type keywords (bool, int, hex, string) used outside of a config block.
|
||
|
- Using a 'prompt' keyword not inside a config or choice block.
|
||
|
- Symbols with no defined type.
|
||
|
|
||
|
Errors in coreboot source files:
|
||
|
- #define of Kconfig symbol - Symbols should only be defined in Kconfig.
|
||
|
- #define starting with 'CONFIG_' - these should be reserved for Kconfig
|
||
|
symbols.
|
||
|
- '#ifdef' or '#if defined' used on bool, int, or hex - these are always
|
||
|
defined in coreboot's version of Kconfig.
|
||
|
- The CONFIG() macro is only valid for bool symbols.
|
||
|
- CONFIG() used on unknown Kconfig, like an obsolete symbol.
|
||
|
- The deprecated IS_ENABLED() macro is used.
|
||
|
|
||
|
TODO: check for choice entries at the top level
|