Crates.io | nom-kconfig |
lib.rs | nom-kconfig |
version | 0.2.0 |
source | src |
created_at | 2023-08-12 11:56:32.262166 |
updated_at | 2023-08-20 20:19:08.222177 |
description | A Kconfig parser |
homepage | https://github.com/Mcdostone/nom-kconfig |
repository | https://github.com/Mcdostone/nom-kconfig |
max_upload_size | |
id | 942704 |
size | 709,826 |
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.
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
.y
.EFI
is equals to true
then it enables EFI_STUB
.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).
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(())
}