xref: /aosp_15_r20/external/crosvm/media/ffmpeg/build.rs (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
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 Worker fn 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