axbuild 0.5.0

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

use clap::ValueEnum;
use serde::Deserialize;

use crate::test::case::{HostHttpServerConfig, TestQemuSubcase};

#[derive(Debug, Clone, Copy, PartialEq, Eq, ValueEnum)]
pub enum StarryAppKind {
    Qemu,
    Board,
}

#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct StarryAppCase {
    pub(crate) name: String,
    pub(crate) kind: StarryAppKind,
    pub(crate) case_dir: PathBuf,
    pub(crate) prebuild_path: Option<PathBuf>,
    pub(crate) requires: Vec<String>,
}

#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct StarryAppBoardCase {
    pub(crate) name: String,
    pub(crate) case_dir: PathBuf,
    pub(crate) init_path: PathBuf,
    pub(crate) init_cmd: String,
    pub(crate) build_config_path: PathBuf,
    pub(crate) board_config_path: PathBuf,
    pub(crate) target: String,
}

#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct StarryAppQemuCase {
    pub(crate) name: String,
    pub(crate) arch: String,
    pub(crate) target: String,
    pub(crate) build_config_path: Option<PathBuf>,
    pub(crate) qemu_config_path: Option<PathBuf>,
    pub(crate) rootfs_path: PathBuf,
    pub(crate) rootfs_write_policy: crate::rootfs::qemu::RootfsWritePolicy,
    pub(crate) test_commands: Vec<String>,
    pub(crate) host_symbolize_success_regex: Vec<String>,
    pub(crate) host_http_server: Option<HostHttpServerConfig>,
    pub(crate) subcases: Vec<TestQemuSubcase>,
}

#[derive(Debug, Clone, PartialEq, Eq, Default)]
pub(crate) enum RootfsPreparation {
    #[default]
    Default,
    AppOwned(AppOwnedRootfsPreparation),
}

#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct AppOwnedRootfsPreparation {
    pub(crate) builder_path: PathBuf,
    pub(crate) target_arch: String,
}

#[derive(Debug, Clone, PartialEq, Eq, Default, Deserialize)]
pub(crate) struct RootfsPreparationConfig {
    #[serde(default)]
    pub(crate) mode: RootfsPreparationMode,
    pub(crate) builder: Option<PathBuf>,
    pub(crate) target_arch: Option<String>,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub(crate) enum RootfsPreparationMode {
    #[default]
    Default,
    AppOwned,
}