diff --git a/Cargo.lock b/Cargo.lock index de9734b0..f592f841 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -691,6 +691,16 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" +[[package]] +name = "lact" +version = "0.1.0" +dependencies = [ + "anyhow", + "clap", + "lact-daemon", + "lact-gui", +] + [[package]] name = "lact-cli" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index 3cf776ef..75cf7cf8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,3 +1,3 @@ [workspace] resolver = "2" -members = ["lact-*"] +members = ["lact*"] diff --git a/Makefile b/Makefile index 2645043f..1ebfc9fd 100644 --- a/Makefile +++ b/Makefile @@ -5,17 +5,13 @@ build-release: cargo build --release install: - install -Dm755 target/release/lact-daemon ${DESTDIR}/bin/lact-daemon - install -Dm755 target/release/lact-gui ${DESTDIR}/bin/lact-gui - install -Dm755 target/release/lact-cli ${DESTDIR}/bin/lact-cli + install -Dm755 target/release/lact ${DESTDIR}/bin/lact install -Dm755 res/lactd.service ${DESTDIR}/lib/systemd/system/lactd.service install -Dm755 res/lact.desktop ${DESTDIR}/share/applications/lact.desktop install -Dm755 res/lact.png ${DESTDIR}/share/pixmaps/lact.png uninstall: - rm ${DESTDIR}/bin/lact-daemon - rm ${DESTDIR}/bin/lact-gui - rm ${DESTDIR}/bin/lact-cli + rm ${DESTDIR}/bin/lact rm ${DESTDIR}/lib/systemd/system/lactd.service rm ${DESTDIR}/share/applications/lact.desktop rm ${DESTDIR}/share/pixmaps/lact.png diff --git a/lact-daemon/src/lib.rs b/lact-daemon/src/lib.rs new file mode 100644 index 00000000..f9290ebd --- /dev/null +++ b/lact-daemon/src/lib.rs @@ -0,0 +1,42 @@ +mod config; +mod fork; +mod server; +mod socket; + +use anyhow::Context; +use config::Config; +use server::Server; +use std::str::FromStr; +use tokio::{runtime, signal::ctrl_c}; +use tracing::{debug_span, Instrument, Level}; + +pub fn run() -> anyhow::Result<()> { + let rt = runtime::Builder::new_current_thread() + .enable_all() + .build() + .expect("Could not initialize tokio runtime"); + rt.block_on(async { + let config = Config::load_or_create()?; + + let max_level = Level::from_str(&config.daemon.log_level).context("Invalid log level")?; + tracing_subscriber::fmt().with_max_level(max_level).init(); + + let server = Server::new(config).await?; + let handler = server.handler.clone(); + + tokio::spawn(async move { + ctrl_c().await.expect("Could not listen to shutdown signal"); + + async { + handler.cleanup().await; + socket::cleanup(); + } + .instrument(debug_span!("shutdown_cleanup")) + .await; + std::process::exit(0); + }); + + server.run().await; + Ok(()) + }) +} diff --git a/lact-daemon/src/main.rs b/lact-daemon/src/main.rs deleted file mode 100644 index 82dff225..00000000 --- a/lact-daemon/src/main.rs +++ /dev/null @@ -1,37 +0,0 @@ -mod config; -mod fork; -mod server; -mod socket; - -use anyhow::Context; -use config::Config; -use server::Server; -use std::str::FromStr; -use tokio::signal::ctrl_c; -use tracing::{debug_span, Instrument, Level}; - -#[tokio::main(flavor = "current_thread")] -async fn main() -> anyhow::Result<()> { - let config = Config::load_or_create()?; - - let max_level = Level::from_str(&config.daemon.log_level).context("Invalid log level")?; - tracing_subscriber::fmt().with_max_level(max_level).init(); - - let server = Server::new(config).await?; - let handler = server.handler.clone(); - - tokio::spawn(async move { - ctrl_c().await.expect("Could not listen to shutdown signal"); - - async { - handler.cleanup().await; - socket::cleanup(); - } - .instrument(debug_span!("shutdown_cleanup")) - .await; - std::process::exit(0); - }); - - server.run().await; - Ok(()) -} diff --git a/lact-gui/src/app/mod.rs b/lact-gui/src/app/mod.rs index 6160e014..14a1505c 100644 --- a/lact-gui/src/app/mod.rs +++ b/lact-gui/src/app/mod.rs @@ -157,7 +157,7 @@ impl App { app.window.show(); })); - self.application.run(); + self.application.run_with_args::(&[]); Ok(()) } diff --git a/lact-gui/src/app/root_stack/info_page/vulkan_info/feature_model/mod.rs b/lact-gui/src/app/root_stack/info_page/vulkan_info/feature_model/mod.rs index c55f6c8b..a7cbc49b 100644 --- a/lact-gui/src/app/root_stack/info_page/vulkan_info/feature_model/mod.rs +++ b/lact-gui/src/app/root_stack/info_page/vulkan_info/feature_model/mod.rs @@ -1,9 +1,6 @@ mod imp; -use std::borrow::Cow; - use gtk::glib::{self, Object}; -use indexmap::IndexMap; glib::wrapper! { pub struct FeatureModel(ObjectSubclass); diff --git a/lact-gui/src/main.rs b/lact-gui/src/lib.rs similarity index 94% rename from lact-gui/src/main.rs rename to lact-gui/src/lib.rs index fbe5e59b..93278f19 100644 --- a/lact-gui/src/main.rs +++ b/lact-gui/src/lib.rs @@ -6,7 +6,7 @@ use lact_client::DaemonClient; use tracing::metadata::LevelFilter; use tracing_subscriber::EnvFilter; -fn main() -> anyhow::Result<()> { +pub fn run() -> anyhow::Result<()> { let env_filter = EnvFilter::builder() .with_default_directive(LevelFilter::INFO.into()) .from_env_lossy(); diff --git a/lact/Cargo.toml b/lact/Cargo.toml new file mode 100644 index 00000000..78040d89 --- /dev/null +++ b/lact/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "lact" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +lact-daemon = { path = "../lact-daemon" } +lact-gui = { path = "../lact-gui" } +anyhow = "1.0.68" +clap = { version = "4.0.32", features = ["derive"] } diff --git a/lact/src/args.rs b/lact/src/args.rs new file mode 100644 index 00000000..9ab362b2 --- /dev/null +++ b/lact/src/args.rs @@ -0,0 +1,9 @@ +use clap::Parser; + +#[derive(Parser)] +pub enum Command { + /// Run the daemon + Daemon, + /// Run the GUI + Gui, +} diff --git a/lact/src/main.rs b/lact/src/main.rs new file mode 100644 index 00000000..386aa516 --- /dev/null +++ b/lact/src/main.rs @@ -0,0 +1,12 @@ +mod args; + +use args::Command; +use clap::Parser; + +fn main() -> anyhow::Result<()> { + let command = Command::parse(); + match command { + Command::Daemon => lact_daemon::run(), + Command::Gui => lact_gui::run(), + } +} diff --git a/res/lact.desktop b/res/lact.desktop index 3d0772c0..a5687ba5 100644 --- a/res/lact.desktop +++ b/res/lact.desktop @@ -2,6 +2,6 @@ Type=Application Name=LACT GenericName=AMDGPU Control Application -Exec=lact-gui +Exec=lact gui Icon=lact Categories=System; diff --git a/res/lactd.service b/res/lactd.service index 140144ec..97a486cf 100644 --- a/res/lactd.service +++ b/res/lactd.service @@ -3,7 +3,7 @@ Description=AMDGPU Control Daemon After=multi-user.target [Service] -ExecStart=lact-daemon +ExecStart=lact daemon [Install] WantedBy=graphical.target