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:
- Any 'default' expressions that can never be reached.
- Symbols that are defined but never used.
- Help text starting with no whitespace.
- Directories specified in a 'source' keyword do not exist.
- 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:
- #define of Kconfig symbol - Symbols should only be defined in Kconfig.
- #define starting with 'CONFIG_' - these should be reserved for Kconfig
  symbols.
- 'IS_ENABLED()' block that could not be interpreted.
- Kconfig files that are not loaded by a 'source' keyword.
- '#ifdef' or '#if defined' used on bool, int, or hex - these are always
  defined in coreboot's version of Kconfig.

Errors in Kconfig files:
- 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.
- 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.

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:
- The IS_ENABLED macro is only valid for bool symbols.
- The IS_ENABLED used on unknown CONFIG_ value, like an obsolete symbol.
- The IS_ENABLED macro is used on a symbol without the CONFIG_ prefix.

TODO: check for choice entries at the top level
