nom-kconfig

Crates.ionom-kconfig
lib.rsnom-kconfig
version0.2.0
sourcesrc
created_at2023-08-12 11:56:32.262166
updated_at2023-08-20 20:19:08.222177
descriptionA Kconfig parser
homepagehttps://github.com/Mcdostone/nom-kconfig
repositoryhttps://github.com/Mcdostone/nom-kconfig
max_upload_size
id942704
size709,826
Yann Prono (Mcdostone)

documentation

README


Tux, the pinguin

A Kconfig parser written in rust.

Build status code coverage Minimum supported rust version: 1.56.0 or plus crates.io Version

Kconfig is a language that describes configuration options for the linux Kernel. The syntax looks like this:

# https://github.com/torvalds/linux/blob/master/arch/riscv/Kconfig#L771
config EFI
	bool "UEFI runtime support"
	depends on MMU
	default y
	select EFI_STUB
	help
	  This option provides support for runtime services provided
	  by UEFI firmware.
  • The file starts with a config entry: We define a config named EFI. The next lines are the attributes of this entry.
  • EFI is a boolean config.
  • EFI depends on the config MMU.
  • Its default value is y.
  • If EFI is equals to true then it enables EFI_STUB.
  • The help attribute defines a help text for the end user.

There are plenty of other keywords in the Kconfig language, check out the official documentation for more details.

Features

  • This is a parser.

  • There is no semantic analysis in this library.

  • This library only supports UTF-8 encoded files.

  • List of supported entris can be found here.

  • List of supported attributes can be found here.

  • When source is met, it reads and parses the specified configuration file.

  • This library uses clone() a lot. Do not expect amazing performances.

  • This parser has been tested on the linux kernel repository from 2.6.11 to 6.4.9 (3733 versions).

Getting started

cargo add nom-kconfig
use std::path::PathBuf;
use nom_kconfig::{kconfig::parse_kconfig, KconfigInput, KconfigFile};

// curl https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.4.9.tar.xz | tar -xJ -C /tmp/
fn main() -> Result<(), Box<dyn std::error::Error>> {
    let kconfig_file = KconfigFile::new(
        PathBuf::from("/tmp/linux-6.4.9"), 
        PathBuf::from("/tmp/linux-6.4.9/Kconfig")
    );
    let input = kconfig_file.read_to_string().unwrap();
    let kconfig = parse_kconfig(KconfigInput::new_extra(&input, kconfig_file));
    println!("{:?}", kconfig);
    Ok(())
}

Resources

Commit count: 91

cargo fmt