use clap::Parser;
use revive_llvm_builder::ccache_variant::CcacheVariant;
#[derive(Debug, Parser)]
#[command(version, about)]
pub struct Arguments {
#[arg(long, default_value_t = revive_llvm_builder::target_env::TargetEnv::GNU)]
pub target_env: revive_llvm_builder::target_env::TargetEnv,
#[command(subcommand)]
pub subcommand: Subcommand,
}
#[derive(Debug, clap::Subcommand)]
pub enum Subcommand {
Build {
#[arg(long, default_value_t = revive_llvm_builder::BuildType::Release)]
build_type: revive_llvm_builder::BuildType,
#[arg(long)]
targets: Vec<String>,
#[arg(long)]
llvm_projects: Vec<revive_llvm_builder::llvm_project::LLVMProject>,
#[arg(long)]
enable_rtti: bool,
#[arg(long)]
default_target: Option<revive_llvm_builder::target_triple::TargetTriple>,
#[arg(long)]
enable_tests: bool,
#[arg(long)]
enable_coverage: bool,
#[arg(long)]
extra_args: Vec<String>,
#[arg(long)]
ccache_variant: Option<CcacheVariant>,
#[arg(long, default_value_t = true)]
enable_assertions: bool,
#[arg(long)]
sanitizer: Option<revive_llvm_builder::sanitizer::Sanitizer>,
#[arg(long)]
enable_valgrind: bool,
},
Emsdk,
Clean,
Builtins {
#[arg(long, default_value_t = revive_llvm_builder::BuildType::Release)]
build_type: revive_llvm_builder::BuildType,
#[arg(long)]
default_target: Option<revive_llvm_builder::target_triple::TargetTriple>,
#[arg(long)]
extra_args: Vec<String>,
#[arg(long)]
ccache_variant: Option<CcacheVariant>,
#[arg(long)]
sanitizer: Option<revive_llvm_builder::sanitizer::Sanitizer>,
},
}