axbuild 0.4.20

An OS build lib toolkit used by arceos
Documentation
use std::path::PathBuf;

use serde::{Deserialize, Serialize};

use crate::build::BuildInfo;

pub type AxvisorBuildInfo = crate::build::BuildInfo;

pub const AXVISOR_PACKAGE: &str = "axvisor";

#[derive(Debug, Clone, Deserialize, Serialize, PartialEq, Default)]
pub struct AxvisorBoardConfig {
    #[serde(flatten, default)]
    pub(crate) build_info: BuildInfo,
    #[serde(default)]
    pub vm_configs: Vec<PathBuf>,
}

#[derive(Debug, Clone, PartialEq)]
pub(super) struct LoadedAxvisorBuildConfig {
    pub(super) build_info: AxvisorBuildInfo,
    pub(super) target: String,
    pub(super) vm_configs: Vec<PathBuf>,
}

#[derive(Debug, Clone, Deserialize, PartialEq)]
pub(crate) struct AxvisorBoardFile {
    pub(crate) target: String,
    #[serde(flatten)]
    pub(crate) config: AxvisorBoardConfig,
}

impl AxvisorBoardFile {
    pub(crate) fn into_board_config(self) -> AxvisorBoardConfig {
        self.config
    }

    pub(super) fn into_loaded(self) -> LoadedAxvisorBuildConfig {
        let Self { target, config } = self;
        config.into_loaded(target)
    }
}

pub(crate) fn default_axvisor_build_info() -> AxvisorBuildInfo {
    let mut build_info = AxvisorBuildInfo::default();
    build_info.features.clear();
    build_info
}

impl AxvisorBoardConfig {
    pub(super) fn into_loaded(self, target: String) -> LoadedAxvisorBuildConfig {
        LoadedAxvisorBuildConfig {
            build_info: self.build_info,
            target,
            vm_configs: self.vm_configs,
        }
    }
}