use std::env;
use alpha2_build_support::{
FFMPEG_SDK_HINT, check_pinned_sdk, compile_ffmpeg_shim, docs_rs, emit_ffmpeg_dev_rpath,
ffmpeg_include_dirs, generate_interop_bindings, shared_include_dir,
};
fn main() {
check_pinned_sdk();
emit_ffmpeg_dev_rpath();
let shared = shared_include_dir();
println!("cargo:rerun-if-changed=include/alpha2_ffmpeg_version.h");
println!(
"cargo:rerun-if-changed={}",
shared.join("alpha2_vulkan_loader.h").display()
);
generate_interop_bindings(
&[
shared.join("alpha2_vulkan_interop.h"),
"include/alpha2_videotoolbox_interop.h".into(),
"include/alpha2_d3d12_interop.h".into(),
],
&[
"Alpha2VulkanFrameInfo",
"Alpha2VulkanFrameAccess",
"Alpha2VulkanDeviceInfo",
"Alpha2VulkanQueueFamily",
"Alpha2VideoToolboxFrameInfo",
"Alpha2D3D12FrameInfo",
],
"interop.rs",
);
let target_os = env::var("CARGO_CFG_TARGET_OS").unwrap_or_default();
if env::var_os("CARGO_FEATURE_HWDEVICE").is_none() || docs_rs() {
return;
}
let (sources, library): (&[&str], _) = match target_os.as_str() {
"linux" => (
&["src/vulkan_shim.c", "src/videotoolbox_shim.c"],
"alpha2_ffmpeg_vulkan_shim",
),
"macos" => (
&["src/videotoolbox_shim.c"],
"alpha2_ffmpeg_videotoolbox_shim",
),
"windows" => (&["src/d3d12_shim.c"], "alpha2_ffmpeg_d3d12_shim"),
_ => return,
};
compile_ffmpeg_shim(
library,
sources,
&["include".into(), shared],
&ffmpeg_include_dirs(&["libavcodec", "libavutil"]),
&format!("failed to compile target FFmpeg hardware-frame shim. {FFMPEG_SDK_HINT}"),
);
if target_os == "linux" {
println!("cargo:rustc-link-lib=dl");
}
}