diff --git a/src/builders/build_stardust.rs b/src/builders/build_stardust.rs index 21d7344..c04ff1d 100644 --- a/src/builders/build_stardust.rs +++ b/src/builders/build_stardust.rs @@ -1,26 +1,56 @@ -use std::collections::VecDeque; -use crate::{ui::job_worker::job::WorkerJob, build_tools::git::Git, paths::{get_cache_dir, get_data_dir}}; +use crate::ui::job_worker::job::WorkerJob; +use std::{collections::VecDeque, path::PathBuf}; +#[derive(Debug, Clone)] pub struct StardustServerSpec { repo: String, branch: String, + debug: bool, + wayland_support: bool, +} +impl Default for StardustServerSpec { + fn default() -> Self { + Self { + repo: "https://github.com/StardustXR/server.git".into(), + branch: "main".into(), + debug: false, + wayland_support: true, + } + } } +#[derive(Debug, Clone)] pub struct StardustClientSpec { + repo: String, + branch: String, + debug: bool, } -pub fn get_build_stardust_jobs(server_spec: StardustServerSpec, client_specs: [StardustClientSpec]) -> VecDeque { +pub fn get_build_stardust_jobs( + prefix_path: PathBuf, + server_spec: StardustServerSpec, + client_specs: &[StardustClientSpec], +) -> VecDeque { let mut jobs = VecDeque::::new(); - let git = Git { - repo: server_spec.repo, - dir: format!("{}/stardust/server", get_data_dir()), - default_branch: "main".into(), - }; - - jobs.extend(git.get_pre_build_jobs(true)); - - // jobs.push(WorkerJob::new_cmd(env, cmd, args)); + let mut args = vec![ + "install".into(), + "--git".into(), + server_spec.repo, + "--branch".into(), + server_spec.branch, + "--root".into(), + prefix_path.to_string_lossy().to_string(), + "--no-default-features".into(), + ]; + if server_spec.wayland_support { + args.push("--features".into()); + args.push("wayland".into()); + } + if server_spec.debug { + args.push("--debug".into()); + } + jobs.push_back(WorkerJob::new_cmd(None, "cargo".into(), Some(args))); jobs } diff --git a/src/dependencies/mod.rs b/src/dependencies/mod.rs index 37f4ba4..0285fae 100644 --- a/src/dependencies/mod.rs +++ b/src/dependencies/mod.rs @@ -6,4 +6,5 @@ pub mod mercury_deps; pub mod monado_deps; pub mod openhmd_deps; pub mod pkexec_dep; +pub mod stardust_deps; pub mod wivrn_deps; diff --git a/src/dependencies/stardust_deps.rs b/src/dependencies/stardust_deps.rs new file mode 100644 index 0000000..6a61a80 --- /dev/null +++ b/src/dependencies/stardust_deps.rs @@ -0,0 +1,20 @@ +use crate::{ + depcheck::{check_dependencies, Dependency, DependencyCheckResult}, + dependencies::common::{dep_cmake, dep_gcc, dep_git, dep_gpp, dep_openxr}, +}; + +fn stardust_server_deps() -> Vec { + vec![dep_openxr(), dep_cmake(), dep_git(), dep_gcc(), dep_gpp()] +} + +pub fn check_stardust_deps() -> Vec { + check_dependencies(stardust_server_deps()) +} + +pub fn get_missing_stardust_deps() -> Vec { + check_stardust_deps() + .iter() + .filter(|res| !res.found) + .map(|res| res.dependency.clone()) + .collect() +}