diff --git a/libraries/build-rs/src/git.rs b/libraries/build-rs/src/git.rs index 0b151dfe..fa907844 100644 --- a/libraries/build-rs/src/git.rs +++ b/libraries/build-rs/src/git.rs @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// Copyright 2023 IROX Contributors +// Copyright 2025 IROX Contributors // use crate::{BuildEnvironment, BuildVariable, Error, VariableSource, VariableType}; @@ -46,19 +46,6 @@ macro_rules! add_bool_varbl { }; } -macro_rules! add_int_varbl { - ($name:literal, $env:ident, $val:ident) => { - $env.variables.insert( - $name.to_string(), - BuildVariable { - source: VariableSource::Git, - name: $name.to_string(), - value: VariableType::Integer($val), - }, - ); - }; -} - #[cfg(feature = "git")] pub fn load_git_variables(env: &mut BuildEnvironment) -> Result<(), Error> { let start_dir = std::env::var("CARGO_MANIFEST_DIR").unwrap_or_default(); @@ -91,8 +78,8 @@ pub fn load_git_variables(env: &mut BuildEnvironment) -> Result<(), Error> { let when = author.when(); let seconds = when.seconds(); let offset_seconds = when.offset_minutes() as i64 * 60; - add_int_varbl!("GIT_COMMIT_TIMESTAMP_SECS", env, seconds); - add_int_varbl!("GIT_COMMIT_TZ_OFFSET_SECS", env, offset_seconds); + add_str_varbl!("GIT_COMMIT_TIMESTAMP_SECS", env, seconds); + add_str_varbl!("GIT_COMMIT_TZ_OFFSET_SECS", env, offset_seconds); let time = irox_time::epoch::UnixTimestamp::from_offset(Duration::from_seconds(seconds as u64)); let time = Into::::into(time).format(&EXTENDED_DATE_TIME_FORMAT); diff --git a/libraries/build-rs/src/lib.rs b/libraries/build-rs/src/lib.rs index f718a96e..8d5b20dd 100644 --- a/libraries/build-rs/src/lib.rs +++ b/libraries/build-rs/src/lib.rs @@ -1,5 +1,6 @@ // SPDX-License-Identifier: MIT -// Copyright 2023 IROX Contributors +// Copyright 2025 IROX Contributors +// //! //! Compile-time build metadata injection inspired by `shadow-rs` @@ -36,14 +37,26 @@ pub enum VariableSource { pub enum VariableType { String(String), Bool(bool), - Integer(i64), } impl Display for VariableType { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { match self { VariableType::String(s) => write!(f, "{s}"), VariableType::Bool(b) => write!(f, "{b}"), - VariableType::Integer(i) => write!(f, "{i}"), + } + } +} +impl VariableType { + pub fn as_str(&self) -> &str { + match self { + VariableType::String(s) => s.as_str(), + VariableType::Bool(b) => { + if *b { + "true" + } else { + "false" + } + } } } } @@ -52,6 +65,42 @@ impl Display for VariableType { pub struct BuildEnvironment { pub(crate) variables: BTreeMap, } +impl BuildEnvironment { + pub fn as_parsed_environment(&self) -> ParsedBuildVariables { + let mut out = ParsedBuildVariables::default(); + for (k, v) in &self.variables { + let v = v.value.as_str(); + if cargo::CARGO_ENV_VARIABLES.contains(&k.as_str()) { + out.cargo_items.insert(k, v); + out.grouped.entry("CARGO_ITEMS").or_default().insert(k, v); + } else if cargo::RUSTC_ENV_VARIABLES.contains(&k.as_str()) { + out.rustc_items.insert(k, v); + out.grouped.entry("RUSTC_ITEMS").or_default().insert(k, v); + } else if cargo::BUILD_HOST_VARIABLES.contains(&k.as_str()) { + out.build_host.insert(k, v); + out.grouped.entry("BUILD_HOST").or_default().insert(k, v); + } else { + #[cfg(feature = "git")] + if git::GIT_VARIABLES.contains(&k.as_str()) { + out.git_items.insert(k, v); + out.grouped.entry("GIT_ITEMS").or_default().insert(k, v); + } + } + out.all_items.insert(k, v); + } + out + } +} +#[derive(Default, Debug, Clone, Eq, PartialEq)] +pub struct ParsedBuildVariables<'a> { + pub all_items: BTreeMap<&'a str, &'a str>, + pub cargo_items: BTreeMap<&'a str, &'a str>, + pub rustc_items: BTreeMap<&'a str, &'a str>, + pub build_host: BTreeMap<&'a str, &'a str>, + pub git_items: BTreeMap<&'a str, &'a str>, + + pub grouped: BTreeMap<&'a str, BTreeMap<&'a str, &'a str>>, +} #[derive(Debug, Clone, Eq, PartialEq)] pub struct BuildVariable { @@ -231,9 +280,6 @@ pub fn write_environment( VariableType::Bool(val) => { writeln!(dest_file, "pub const {name}: bool = {val};")?; } - VariableType::Integer(val) => { - writeln!(dest_file, "pub const {name}: i64 = {val};")?; - } } } @@ -331,7 +377,6 @@ fn write_aggregation_block( match varbl.value { VariableType::String(_) => writeln!(dest_file, "\t\t(\"{name}\", {name}),")?, VariableType::Bool(b) => writeln!(dest_file, "\t\t(\"{name}\", \"{b}\"),")?, - VariableType::Integer(i) => writeln!(dest_file, "\t\t(\"{name}\", \"{i}\"),")?, } } writeln!(dest_file, "\t]))")?; @@ -366,7 +411,6 @@ fn write_grouped_block( match varbl.value { VariableType::String(_) => writeln!(dest_file, "\t\t\t(\"{name}\", {name}),")?, VariableType::Bool(b) => writeln!(dest_file, "\t\t\t(\"{name}\", \"{b}\"),")?, - VariableType::Integer(i) => writeln!(dest_file, "\t\t\t(\"{name}\", \"{i}\"),")?, } } writeln!(dest_file, "\t\t])),")?; diff --git a/libraries/egui_extras/Cargo.toml b/libraries/egui_extras/Cargo.toml index 2d78b333..603a96e7 100644 --- a/libraries/egui_extras/Cargo.toml +++ b/libraries/egui_extras/Cargo.toml @@ -25,7 +25,7 @@ docsrs = ["eframe/x11", "eframe/wayland"] [dependencies] egui.workspace = true -eframe = { workspace = true, features = [] } +eframe = { workspace = true, default-features = false, features = [] } ron.workspace = true serde = { workspace = true, optional = true } irox-bits = { workspace = true, optional = true, features = ["alloc"] } @@ -39,16 +39,17 @@ profiling = { workspace = true, optional = true } puffin = { workspace = true, optional = true } [target.'cfg(target_arch = "wasm32")'.dependencies] -eframe = { workspace = true, features = ["wgpu"] } +eframe = { workspace = true, default-features = false, features = ["wgpu"] } wasm-bindgen-futures.workspace = true [dev-dependencies] -eframe = { workspace = true, features = ["glow", "default_fonts"] } -egui = { workspace = true, features = ["rayon"] } +eframe = { workspace = true, default-features = false, features = ["glow", "default_fonts"] } +egui = { workspace = true, default-features = false, features = ["rayon"] } irox-time = { workspace = true, features = ["std"] } irox-tools = { workspace = true, features = ["std"] } puffin_http = { workspace = true } irox-csv = { workspace = true } +irox-build-rs = { workspace = true, features = ["git"] } [target.'cfg(target_os = "linux")'.dev-dependencies] eframe = { workspace = true, features = ["x11", "wayland"] } @@ -61,9 +62,6 @@ required-features = ["serde", "plots"] name = "plotsperf" required-features = ["plots"] -[build-dependencies] -irox-build-rs.workspace = true - [package.metadata.docs.rs] all-features = true rustdoc-args = ["--cfg", "docsrs"] diff --git a/libraries/egui_extras/build.rs b/libraries/egui_extras/build.rs deleted file mode 100644 index b815e9f9..00000000 --- a/libraries/egui_extras/build.rs +++ /dev/null @@ -1,11 +0,0 @@ -// SPDX-License-Identifier: MIT -// Copyright 2023 IROX Contributors -// - -pub fn main() -> Result<(), irox_build_rs::Error> { - println!("cargo:rerun-if-changed=build.rs"); - - irox_build_rs::generate_module()?; - - Ok(()) -} diff --git a/libraries/egui_extras/examples/irox_egui_gallery.rs b/libraries/egui_extras/examples/irox_egui_gallery.rs index ed81e518..d0d34f8e 100644 --- a/libraries/egui_extras/examples/irox_egui_gallery.rs +++ b/libraries/egui_extras/examples/irox_egui_gallery.rs @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// Copyright 2023 IROX Contributors +// Copyright 2025 IROX Contributors // use std::collections::BTreeMap; @@ -9,6 +9,7 @@ use std::sync::Arc; use eframe::emath::Align; use eframe::{App, CreationContext, Frame}; use egui::{CentralPanel, Context, Layout, Pos2, Shape, Vec2, ViewportBuilder, Window}; +use irox_build_rs::BuildEnvironment; use irox_egui_extras::about::AboutWindow; use irox_egui_extras::logplot::{BasicPlot, IntoColor32, PlotPoint}; use irox_egui_extras::progressbar::ProgressBar; @@ -16,9 +17,14 @@ use irox_egui_extras::serde::EguiSerializer; use irox_egui_extras::toolframe::{ToolApp, ToolFrame}; use irox_egui_extras::visuals::VisualsWindow; use irox_imagery::Color; +use irox_tools::static_init; use log::error; use serde::Serialize; +static_init!(get_env, BuildEnvironment, { + irox_build_rs::generate_build_environment().unwrap_or_default() +}); + pub fn main() { let viewport = ViewportBuilder::default().with_inner_size(Vec2::new(1024., 800.)); @@ -205,15 +211,16 @@ impl App for TestApp { ui.radio_value(&mut self.about_tabs, AboutTabs::Grouped, "Grouped"); ui.radio_value(&mut self.about_tabs, AboutTabs::All, "All"); }); + let pe = get_env().as_parsed_environment(); match self.about_tabs { AboutTabs::Important => { - AboutWindow::show_important(irox_egui_extras::build::get_ALL_ITEMS, ui); + AboutWindow::show_important(|| &pe.all_items, ui); } AboutTabs::Grouped => { - AboutWindow::show_grouped(irox_egui_extras::build::get_GROUPS, ui); + AboutWindow::show_grouped(|| &pe.grouped, ui); } AboutTabs::All => { - AboutWindow::show(irox_egui_extras::build::get_ALL_ITEMS, ui); + AboutWindow::show(|| &pe.all_items, ui); } } }); diff --git a/libraries/egui_extras/src/about.rs b/libraries/egui_extras/src/about.rs index b33fa060..f3ffb7ab 100644 --- a/libraries/egui_extras/src/about.rs +++ b/libraries/egui_extras/src/about.rs @@ -1,5 +1,5 @@ // SPDX-License-Identifier: MIT -// Copyright 2023 IROX Contributors +// Copyright 2025 IROX Contributors // use egui::Ui; @@ -85,10 +85,9 @@ impl AboutWindow { } pub fn show_grouped< - F: Fn() -> &'static std::collections::BTreeMap< - &'static str, - std::collections::BTreeMap<&'static str, &'static str>, - >, + 'a, + F: Fn() + -> &'a std::collections::BTreeMap<&'a str, std::collections::BTreeMap<&'a str, &'a str>>, >( providerfn: F, ui: &mut Ui, diff --git a/libraries/egui_extras/src/lib.rs b/libraries/egui_extras/src/lib.rs index d6f6ef84..246d1401 100644 --- a/libraries/egui_extras/src/lib.rs +++ b/libraries/egui_extras/src/lib.rs @@ -1,5 +1,6 @@ // SPDX-License-Identifier: MIT -// Copyright 2023 IROX Contributors +// Copyright 2025 IROX Contributors +// //! //! Stuff that should have been in [`egui`], but isn't. @@ -40,10 +41,6 @@ pub mod serde; pub mod toolframe; pub mod visuals; -pub mod build { - include!(concat!(env!("OUT_DIR"), "/builders.rs")); -} - pub trait WithAlpha { #[must_use] fn with_alpha(self, alpha: u8) -> Self;