diff --git a/Makefile b/Makefile index cf0f49e35..a6ac1121a 100644 --- a/Makefile +++ b/Makefile @@ -147,10 +147,10 @@ kernel-x86_64.elf: $(X86ASM) FORCE python3 scripts/embed_debug_info.py $@ x86_64_boot.img: kernel-x86_64.elf - RUSTFLAGS="$(RUSTC_MISC_ARGS)" cargo +$(RUSTV) run --release --package x86bootdisk -- --kernel $< --output $@ + RUSTFLAGS="$(RUSTC_MISC_ARGS)" cargo +$(RUSTV) run --release --package x86bootdisk --no-default-features --features bios -- --kernel $< --output $@ x86_64_uefi.img: kernel-x86_64.elf - RUSTFLAGS="$(RUSTC_MISC_ARGS)" cargo +$(RUSTV) run --release --package x86bootdisk -- --kernel $< --output $@ --pxe x86_64_uefi_pxe_boot --boot-type uefi + RUSTFLAGS="$(RUSTC_MISC_ARGS)" cargo +$(RUSTV) run --release --package x86bootdisk --no-default-features --features uefi -- --kernel $< --output $@ --pxe x86_64_uefi_pxe_boot --boot-type uefi $(X86ASM): FORCE $(MAKE) -C $@ diff --git a/mdbook/book.toml b/mdbook/book.toml index 8f5c1c4a3..4bf31f613 100644 --- a/mdbook/book.toml +++ b/mdbook/book.toml @@ -1,7 +1,6 @@ [book] authors = ["Yuuki Takano"] language = "en" -multilingual = false src = "src" title = "Awkernel" diff --git a/x86bootdisk/Cargo.toml b/x86bootdisk/Cargo.toml index 563cbb660..49afc75ae 100644 --- a/x86bootdisk/Cargo.toml +++ b/x86bootdisk/Cargo.toml @@ -5,8 +5,13 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +[features] +default = ["bios", "uefi"] +bios = ["bootloader/bios"] +uefi = ["bootloader/uefi"] + [dependencies] -bootloader = "0.11" +bootloader = { version = "0.11", default-features = false } ovmf-prebuilt = "0.2" clap = { version = "4.2", features = ["derive"] } home = "0.5" diff --git a/x86bootdisk/src/main.rs b/x86bootdisk/src/main.rs index 5098d11d3..37a3899df 100644 --- a/x86bootdisk/src/main.rs +++ b/x86bootdisk/src/main.rs @@ -1,14 +1,35 @@ -use bootloader::{BiosBoot, UefiBoot}; use clap::Parser; use ovmf_prebuilt::{Prebuilt, Source}; use std::{fs::File, io::Write, path::Path}; +#[cfg(not(any(feature = "bios", feature = "uefi")))] +compile_error!("At least one of the `bios` or `uefi` features must be enabled."); + +#[cfg(feature = "bios")] +use bootloader::BiosBoot; +#[cfg(feature = "uefi")] +use bootloader::UefiBoot; + #[derive(Debug, clap::ValueEnum, Clone)] enum BootType { + #[cfg(feature = "uefi")] Uefi, + #[cfg(feature = "bios")] Bios, } +impl Default for BootType { + #[cfg(feature = "bios")] + fn default() -> Self { + Self::Bios + } + + #[cfg(all(not(feature = "bios"), feature = "uefi"))] + fn default() -> Self { + Self::Uefi + } +} + /// Simple program to greet a person #[derive(Parser, Debug)] #[command(author, version, about, long_about = None)] @@ -26,7 +47,7 @@ struct Args { pxe: String, /// uefi or bios. - #[arg(value_enum, long, default_value_t = BootType::Bios)] + #[arg(value_enum, long, default_value_t = BootType::default())] boot_type: BootType, } @@ -38,6 +59,7 @@ fn main() { let pxe_path = Path::new(&args.pxe); match args.boot_type { + #[cfg(feature = "uefi")] BootType::Uefi => { let uefi = UefiBoot::new(kernel_path); uefi.create_disk_image(output_path).unwrap(); @@ -61,6 +83,7 @@ fn main() { output_path.display() ) } + #[cfg(feature = "bios")] BootType::Bios => { BiosBoot::new(kernel_path) .create_disk_image(output_path)