diff --git a/Cargo.lock b/Cargo.lock index a8f8b66..588ec6d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3271,6 +3271,7 @@ name = "jarvis-app" version = "0.1.0" dependencies = [ "dotenvy", + "embed-resource", "glib 0.21.5", "gtk", "image", diff --git a/crates/jarvis-app/Cargo.toml b/crates/jarvis-app/Cargo.toml index 2e47394..3a1a89c 100644 --- a/crates/jarvis-app/Cargo.toml +++ b/crates/jarvis-app/Cargo.toml @@ -31,4 +31,7 @@ winrt-notification.workspace = true [target.'cfg(target_os = "linux")'.dependencies] gtk = "0.18" -glib = "0.21.5" \ No newline at end of file +glib = "0.21.5" + +[target.'cfg(target_os = "windows")'.build-dependencies] +embed-resource = "3" \ No newline at end of file diff --git a/crates/jarvis-app/app.manifest b/crates/jarvis-app/app.manifest new file mode 100644 index 0000000..de8adb1 --- /dev/null +++ b/crates/jarvis-app/app.manifest @@ -0,0 +1,60 @@ + + + + J.A.R.V.I.S. voice assistant daemon + + + + + + + + + + + + + + + + + + + + + + + + + true/pm + PerMonitorV2,PerMonitor + UTF-8 + + + + + + + + + + + diff --git a/crates/jarvis-app/app.manifest.rc b/crates/jarvis-app/app.manifest.rc new file mode 100644 index 0000000..bbb1850 --- /dev/null +++ b/crates/jarvis-app/app.manifest.rc @@ -0,0 +1,4 @@ +#define RT_MANIFEST 24 +#define CREATEPROCESS_MANIFEST_RESOURCE_ID 1 + +CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "app.manifest" diff --git a/crates/jarvis-app/build.rs b/crates/jarvis-app/build.rs index 30a6d3f..e7a70a7 100644 --- a/crates/jarvis-app/build.rs +++ b/crates/jarvis-app/build.rs @@ -1,10 +1,18 @@ fn main() { - // link to Vosk lib - // println!("cargo:rustc-link-lib=libvosk.dll"); - let manifest_dir = std::env::var("CARGO_MANIFEST_DIR").unwrap(); let lib_path = std::path::Path::new(&manifest_dir) .join("..\\..\\lib\\windows\\amd64"); - + println!("cargo:rustc-link-search=native={}", lib_path.display()); + + // Embed a Common-Controls v6 manifest on Windows so transitive imports + // pulled in by tray-icon / winit (TaskDialogIndirect, themed controls, + // per-monitor DPI) resolve against comctl32 v6. Without this the exe + // crashes at load with "TaskDialogIndirect entry point not found". + #[cfg(target_os = "windows")] + { + println!("cargo:rerun-if-changed=app.manifest"); + println!("cargo:rerun-if-changed=app.manifest.rc"); + let _ = embed_resource::compile("app.manifest.rc", embed_resource::NONE); + } }