910e62b5创建于 1月15日历史提交
# Copyright 2024 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/rust/rust_bindgen_generator.gni")
import("//build/rust/rust_static_library.gni")

rust_bindgen_generator("crabbyavif_dav1d_bindings") {
  header = "src/sys/dav1d-sys/wrapper.h"
  deps = [ "//third_party/dav1d:dav1d_headers" ]
  configs = [ "//third_party/dav1d:dav1d_config" ]
  output_name = "dav1d_bindgen"
  bindgen_flags = [
    "no-doc-comments",
    "generate=functions,types,vars,methods,constructors,destructors",
    "allowlist-item=DAV1D_MAX_THREADS",
    "allowlist-item=dav1d_close",
    "allowlist-item=dav1d_data_unref",
    "allowlist-item=dav1d_data_wrap",
    "allowlist-item=dav1d_default_settings",
    "allowlist-item=dav1d_error",
    "allowlist-item=dav1d_get_picture",
    "allowlist-item=dav1d_open",
    "allowlist-item=dav1d_picture_unref",
    "allowlist-item=dav1d_send_data",
    "allowlist-item=dav1d_version",
  ]
}

rust_static_library("crabbyavif_dav1d_sys") {
  crate_root = "src/sys/dav1d-sys/src/lib.rs"

  # This is a wrapper interface to a C library. So unsafe has to be allowed.
  allow_unsafe = true
  crate_name = "dav1d_sys"
  sources = [ "src/sys/dav1d-sys/src/lib.rs" ]
  bindgen_deps = [ ":crabbyavif_dav1d_bindings" ]
  features = [ "dav1d" ]
}

rust_bindgen_generator("crabbyavif_libyuv_bindings") {
  header = "src/sys/libyuv-sys/wrapper.h"
  configs = [ "//third_party/libyuv:libyuv_config" ]
  output_name = "libyuv_bindgen"
  bindgen_flags = [
    "no-doc-comments",
    "generate=functions,types,vars,methods,constructors,destructors",
    "allowlist-item=ABGRToI420",
    "allowlist-item=ABGRToJ400",
    "allowlist-item=ABGRToJ420",
    "allowlist-item=ABGRToJ422",
    "allowlist-item=AR30ToAB30",
    "allowlist-item=ARGBAttenuate",
    "allowlist-item=ARGBToABGR",
    "allowlist-item=ARGBToI400",
    "allowlist-item=ARGBToI420",
    "allowlist-item=ARGBToI422",
    "allowlist-item=ARGBToI444",
    "allowlist-item=ARGBToJ400",
    "allowlist-item=ARGBToJ420",
    "allowlist-item=ARGBToJ422",
    "allowlist-item=ARGBUnattenuate",
    "allowlist-item=BGRAToI420",
    "allowlist-item=Convert16To8Plane",
    "allowlist-item=FilterMode",
    "allowlist-item=FilterMode_kFilterBilinear",
    "allowlist-item=FilterMode_kFilterBox",
    "allowlist-item=FilterMode_kFilterNone",
    "allowlist-item=HalfFloatPlane",
    "allowlist-item=I010AlphaToARGBMatrix",
    "allowlist-item=I010AlphaToARGBMatrixFilter",
    "allowlist-item=I010ToAR30Matrix",
    "allowlist-item=I010ToARGBMatrix",
    "allowlist-item=I010ToARGBMatrixFilter",
    "allowlist-item=I012ToARGBMatrix",
    "allowlist-item=I210AlphaToARGBMatrix",
    "allowlist-item=I210AlphaToARGBMatrixFilter",
    "allowlist-item=I210ToARGBMatrix",
    "allowlist-item=I210ToARGBMatrixFilter",
    "allowlist-item=I400ToARGBMatrix",
    "allowlist-item=I410AlphaToARGBMatrix",
    "allowlist-item=I410ToARGBMatrix",
    "allowlist-item=I420AlphaToARGBMatrix",
    "allowlist-item=I420AlphaToARGBMatrixFilter",
    "allowlist-item=I420ToARGBMatrix",
    "allowlist-item=I420ToARGBMatrixFilter",
    "allowlist-item=I420ToRGB24Matrix",
    "allowlist-item=I420ToRGB24MatrixFilter",
    "allowlist-item=I420ToRGB565Matrix",
    "allowlist-item=I420ToRGBAMatrix",
    "allowlist-item=I422AlphaToARGBMatrix",
    "allowlist-item=I422AlphaToARGBMatrixFilter",
    "allowlist-item=I422ToARGBMatrix",
    "allowlist-item=I422ToARGBMatrixFilter",
    "allowlist-item=I422ToRGB24MatrixFilter",
    "allowlist-item=I422ToRGB565Matrix",
    "allowlist-item=I422ToRGBAMatrix",
    "allowlist-item=I444AlphaToARGBMatrix",
    "allowlist-item=I444ToARGBMatrix",
    "allowlist-item=I444ToRGB24Matrix",
    "allowlist-item=LIBYUV_VERSION",
    "allowlist-item=NV12Scale",
    "allowlist-item=NV12ToARGBMatrix",
    "allowlist-item=NV12ToRGB565Matrix",
    "allowlist-item=NV21ToARGBMatrix",
    "allowlist-item=P010ToAR30Matrix",
    "allowlist-item=P010ToARGBMatrix",
    "allowlist-item=P010ToI010",
    "allowlist-item=RAWToI420",
    "allowlist-item=RAWToJ400",
    "allowlist-item=RAWToJ420",
    "allowlist-item=RGB24ToI420",
    "allowlist-item=RGB24ToJ400",
    "allowlist-item=RGB24ToJ420",
    "allowlist-item=RGBAToI420",
    "allowlist-item=RGBAToJ400",
    "allowlist-item=ScalePlane",
    "allowlist-item=ScalePlane_12",
    "allowlist-item=YuvConstants",
    "allowlist-item=kYuv2020Constants",
    "allowlist-item=kYuvF709Constants",
    "allowlist-item=kYuvH709Constants",
    "allowlist-item=kYuvI601Constants",
    "allowlist-item=kYuvJPEGConstants",
    "allowlist-item=kYuvV2020Constants",
    "allowlist-item=kYvu2020Constants",
    "allowlist-item=kYvuF709Constants",
    "allowlist-item=kYvuH709Constants",
    "allowlist-item=kYvuI601Constants",
    "allowlist-item=kYvuJPEGConstants",
    "allowlist-item=kYvuV2020Constants",
  ]
}

rust_static_library("crabbyavif_libyuv_sys") {
  crate_root = "src/sys/libyuv-sys/src/lib.rs"

  # This is a wrapper interface to a C++ library. So unsafe has to be allowed.
  allow_unsafe = true
  crate_name = "libyuv_sys"
  sources = [ "src/sys/libyuv-sys/src/lib.rs" ]
  bindgen_deps = [ ":crabbyavif_libyuv_bindings" ]
  features = [ "libyuv" ]
}

rust_static_library("crabbyavif") {
  crate_root = "src/src/lib.rs"
  edition = "2021"

  # This library exposes a C API and uses a couple of C/C++ libraries. So unsafe
  # has to be allowed in order to allow those. The core library itself does not
  # contain any unsafe Rust.
  allow_unsafe = true

  sources = [
    "src/src/capi/decoder.rs",
    "src/src/capi/gainmap.rs",
    "src/src/capi/image.rs",
    "src/src/capi/io.rs",
    "src/src/capi/mod.rs",
    "src/src/capi/reformat.rs",
    "src/src/capi/types.rs",
    "src/src/codecs/dav1d.rs",
    "src/src/codecs/mod.rs",
    "src/src/decoder/item.rs",
    "src/src/decoder/mod.rs",
    "src/src/decoder/tile.rs",
    "src/src/decoder/track.rs",
    "src/src/gainmap.rs",
    "src/src/image.rs",
    "src/src/internal_utils/io.rs",
    "src/src/internal_utils/mod.rs",
    "src/src/internal_utils/sampletransform.rs",
    "src/src/internal_utils/stream.rs",
    "src/src/lib.rs",
    "src/src/parser/exif.rs",
    "src/src/parser/mini.rs",
    "src/src/parser/mod.rs",
    "src/src/parser/mp4box.rs",
    "src/src/parser/obu.rs",
    "src/src/reformat/alpha.rs",
    "src/src/reformat/coeffs.rs",
    "src/src/reformat/libyuv.rs",
    "src/src/reformat/mod.rs",
    "src/src/reformat/rgb.rs",
    "src/src/reformat/rgb_impl.rs",
    "src/src/reformat/scale.rs",
    "src/src/utils/clap.rs",
    "src/src/utils/error.rs",
    "src/src/utils/mod.rs",
    "src/src/utils/pixels.rs",
    "src/src/utils/reader/mod.rs",
    "src/src/utils/reader/y4m.rs",
    "src/src/utils/writer/mod.rs",
    "src/src/utils/writer/y4m.rs",
  ]

  features = [
    "dav1d",
    "libyuv",
    "capi",
    "disable_cfi",
  ]

  # Required for disable_cfi feature.
  configs -= [ "//build/config/compiler:disallow_unstable_features" ]
  rustflags = [ "-Zallow-features=sanitize" ]

  public_deps = [ ":header_files" ]
  deps = [
    ":crabbyavif_dav1d_sys",
    ":crabbyavif_libyuv_sys",
    "//third_party/dav1d",
    "//third_party/libyuv",
    "//third_party/rust/libc/v0_2:lib",
  ]
}

source_set("header_files") {
  visibility = [ ":*" ]
  sources = [ "src/include/avif/avif.h" ]
}