diff --git a/src/args.rs b/src/args.rs index 908f3e4..1688fc6 100644 --- a/src/args.rs +++ b/src/args.rs @@ -153,6 +153,10 @@ pub struct BuildCommand { #[serde(default)] pub show_config: bool, + /// Build target. + #[arg(short, long, value_enum, default_value_t = Target::Native)] + pub target: Target, + #[command(flatten)] #[serde(default)] pub tree_sitter: TreeSitter, @@ -169,6 +173,7 @@ impl Default for BuildCommand { out_dir: PathBuf::from(TSDL_OUT_DIR), prefix: String::from(TSDL_PREFIX), show_config: TSDL_SHOW_CONFIG, + target: Target::Native, tree_sitter: TreeSitter::default(), } } @@ -197,6 +202,16 @@ pub enum ParserConfig { Ref(String), } +#[derive(clap::ValueEnum, Clone, Debug, Deserialize, Diff, Serialize, PartialEq, Eq)] +#[diff(attr( + #[derive(Debug, PartialEq)] +))] +pub enum Target { + All, + Native, + Wasm, +} + #[derive(clap::Args, Clone, Debug, Diff, Deserialize, PartialEq, Eq, Serialize)] #[diff(attr( #[derive(Debug, PartialEq)] diff --git a/src/build.rs b/src/build.rs index 63dc393..b461343 100644 --- a/src/build.rs +++ b/src/build.rs @@ -11,7 +11,7 @@ use tracing::error; use url::Url; use crate::{ - args::{BuildCommand, ParserConfig}, + args::{BuildCommand, ParserConfig, Target}, config, consts::TSDL_FROM, display::{Handle, Progress, ProgressState, TICK_CHARS}, @@ -70,6 +70,7 @@ fn build(command: &BuildCommand, progress: Progress) -> Result<()> { command.build_dir.clone(), command.out_dir.clone(), &command.prefix, + &command.target, ) .unwrap(); create_dir_all(&command.out_dir) @@ -102,6 +103,7 @@ fn languages( build_dir: PathBuf, out_dir: PathBuf, prefix: &str, + target: &Target, ) -> Result, error::LanguageCollection> { let (res, errs) = unique_languages( ts_cli, @@ -111,6 +113,7 @@ fn languages( requested_languages, defined_parsers, progress, + target, ); if errs.is_empty() { Ok(res.into_iter().map(Result::unwrap).collect()) @@ -135,6 +138,7 @@ fn unique_languages( requested_languages: &Option>, defined_parsers: &Option>, progress: Arc>, + target: &Target, ) -> Languages { let ts_cli = Arc::new(ts_cli); let final_languages = requested_languages @@ -162,6 +166,7 @@ fn unique_languages( out_dir.canon().unwrap(), prefix.into(), repo, + target.clone(), ts_cli.clone(), ) }) diff --git a/src/parser.rs b/src/parser.rs index 1f7af3f..5a797ab 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -11,6 +11,7 @@ use tracing::warn; use url::Url; use crate::{ + args::Target, display::{Handle, ProgressHandle}, error, git::{clone_fast, Ref}, @@ -57,6 +58,8 @@ pub struct Language { out_dir: PathBuf, prefix: String, repo: Url, + #[allow(dead_code)] + target: Target, ts_cli: Arc, } @@ -72,6 +75,7 @@ impl Language { out_dir: PathBuf, prefix: String, repo: Url, + target: Target, ts_cli: Arc, ) -> Self { Language { @@ -83,6 +87,7 @@ impl Language { out_dir, prefix, repo, + target, ts_cli, } }