fn main() { // Use pkg-config to find VPL libraries if let Ok(lib) = pkg_config::Config::new().probe("vpl") { for path in lib.link_paths { println!("cargo:rustc-link-search=native={}", path.display()); } for lib_name in lib.libs { println!("cargo:rustc-link-lib={}", lib_name); } println!("cargo:rustc-link-lib=stdc++"); // VPL requires C++ stdlib println!("cargo:rustc-link-lib=dl"); // VPL requires libdl } else { // Fallback: manual linking println!("cargo:rustc-link-search=native=/usr/lib/x86_64-linux-gnu"); println!("cargo:rustc-link-lib=vpl"); println!("cargo:rustc-link-lib=mfx"); println!("cargo:rustc-link-lib=stdc++"); println!("cargo:rustc-link-lib=dl"); } // Direct VA-API linking for hardware acceleration if let Ok(lib) = pkg_config::Config::new().probe("libva-drm") { for path in lib.link_paths { println!("cargo:rustc-link-search=native={}", path.display()); } for lib_name in lib.libs { println!("cargo:rustc-link-lib={}", lib_name); } } else { // Fallback: manual VA-API linking with Intel Media SDK path println!("cargo:rustc-link-search=native=/opt/intel/media/lib64"); println!("cargo:rustc-link-search=native=/lib/x86_64-linux-gnu"); println!("cargo:rustc-link-search=native=/usr/lib/x86_64-linux-gnu"); println!("cargo:rustc-link-lib=va"); println!("cargo:rustc-link-lib=va-drm"); } // Always add Intel Media SDK paths for hardware acceleration println!("cargo:rustc-link-search=native=/opt/intel/media/lib64"); println!("cargo:rustc-link-lib=va"); println!("cargo:rustc-link-lib=va-drm"); // Ensure we rebuild when headers change println!("cargo:rerun-if-changed=/usr/include/vpl/"); println!("cargo:rerun-if-changed=/usr/include/va/"); }