1*bb4ee6a4SAndroid Build Coastguard Worker // Copyright 2022 The ChromiumOS Authors 2*bb4ee6a4SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*bb4ee6a4SAndroid Build Coastguard Worker // found in the LICENSE file. 4*bb4ee6a4SAndroid Build Coastguard Worker 5*bb4ee6a4SAndroid Build Coastguard Worker use std::path::PathBuf; 6*bb4ee6a4SAndroid Build Coastguard Worker 7*bb4ee6a4SAndroid Build Coastguard Worker use pkg_config::Config; 8*bb4ee6a4SAndroid Build Coastguard Worker main()9*bb4ee6a4SAndroid Build Coastguard Workerfn main() { 10*bb4ee6a4SAndroid Build Coastguard Worker // Skip building dependencies when generating documents. 11*bb4ee6a4SAndroid Build Coastguard Worker if std::env::var("CARGO_DOC").is_ok() { 12*bb4ee6a4SAndroid Build Coastguard Worker return; 13*bb4ee6a4SAndroid Build Coastguard Worker } 14*bb4ee6a4SAndroid Build Coastguard Worker 15*bb4ee6a4SAndroid Build Coastguard Worker // ffmpeg is currently only supported on unix 16*bb4ee6a4SAndroid Build Coastguard Worker if std::env::var("CARGO_CFG_UNIX").is_err() { 17*bb4ee6a4SAndroid Build Coastguard Worker return; 18*bb4ee6a4SAndroid Build Coastguard Worker } 19*bb4ee6a4SAndroid Build Coastguard Worker 20*bb4ee6a4SAndroid Build Coastguard Worker // ffmgeg is not supported by CI on 32-bit arm 21*bb4ee6a4SAndroid Build Coastguard Worker if std::env::var("CARGO_CFG_TARGET_ARCH").unwrap() == "arm" { 22*bb4ee6a4SAndroid Build Coastguard Worker return; 23*bb4ee6a4SAndroid Build Coastguard Worker } 24*bb4ee6a4SAndroid Build Coastguard Worker 25*bb4ee6a4SAndroid Build Coastguard Worker // Match all ffmpeg 6.0+ versions. 26*bb4ee6a4SAndroid Build Coastguard Worker Config::new() 27*bb4ee6a4SAndroid Build Coastguard Worker .atleast_version("60") 28*bb4ee6a4SAndroid Build Coastguard Worker .probe("libavcodec") 29*bb4ee6a4SAndroid Build Coastguard Worker .unwrap(); 30*bb4ee6a4SAndroid Build Coastguard Worker Config::new() 31*bb4ee6a4SAndroid Build Coastguard Worker .atleast_version("58") 32*bb4ee6a4SAndroid Build Coastguard Worker .probe("libavutil") 33*bb4ee6a4SAndroid Build Coastguard Worker .unwrap(); 34*bb4ee6a4SAndroid Build Coastguard Worker Config::new() 35*bb4ee6a4SAndroid Build Coastguard Worker .atleast_version("7") 36*bb4ee6a4SAndroid Build Coastguard Worker .probe("libswscale") 37*bb4ee6a4SAndroid Build Coastguard Worker .unwrap(); 38*bb4ee6a4SAndroid Build Coastguard Worker 39*bb4ee6a4SAndroid Build Coastguard Worker let bindings = bindgen::Builder::default() 40*bb4ee6a4SAndroid Build Coastguard Worker .header("src/bindings.h") 41*bb4ee6a4SAndroid Build Coastguard Worker .allowlist_function("av_.*") 42*bb4ee6a4SAndroid Build Coastguard Worker .allowlist_function("avcodec_.*") 43*bb4ee6a4SAndroid Build Coastguard Worker .allowlist_function("sws_.*") 44*bb4ee6a4SAndroid Build Coastguard Worker .allowlist_function("av_image_.*") 45*bb4ee6a4SAndroid Build Coastguard Worker .allowlist_var("FF_PROFILE.*") 46*bb4ee6a4SAndroid Build Coastguard Worker .allowlist_var("AV_.*") 47*bb4ee6a4SAndroid Build Coastguard Worker .allowlist_var("AVERROR_.*") 48*bb4ee6a4SAndroid Build Coastguard Worker // Skip va_list and functions that use it to avoid ABI problems on aarch64. 49*bb4ee6a4SAndroid Build Coastguard Worker .blocklist_type(".*va_list.*") 50*bb4ee6a4SAndroid Build Coastguard Worker .blocklist_function("av_log_.*") 51*bb4ee6a4SAndroid Build Coastguard Worker .blocklist_function("av_vlog") 52*bb4ee6a4SAndroid Build Coastguard Worker .generate() 53*bb4ee6a4SAndroid Build Coastguard Worker .expect("failed to generate bindings"); 54*bb4ee6a4SAndroid Build Coastguard Worker let out_path = PathBuf::from(std::env::var("OUT_DIR").unwrap()); 55*bb4ee6a4SAndroid Build Coastguard Worker bindings 56*bb4ee6a4SAndroid Build Coastguard Worker .write_to_file(out_path.join("bindings.rs")) 57*bb4ee6a4SAndroid Build Coastguard Worker .expect("writing bindings to file failed"); 58*bb4ee6a4SAndroid Build Coastguard Worker } 59