# Copyright 2021 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#

libva_utils = "//third_party/intel/libva-utils"

if (is_fuchsia) {
  # Defines libva
  import("fuchsia/libva-utils.gni")
}

config("vautils-common-public-config") {
  include_dirs = [ "$libva_utils/common" ]
}

config("vautils-common-config") {
  cflags = [
    "-Wno-shorten-64-to-32",
    "-Wno-unused-but-set-variable",
  ]
  if (is_fuchsia) {
    defines = [ "HAVE_VA_MAGMA=1" ]
  }
}

source_set("vautils-common") {
  public_configs = [ ":vautils-common-public-config" ]
  configs += [ ":vautils-common-config" ]
  sources = [
    "$libva_utils/common/va_display.c",
    "$libva_utils/common/va_display.h",
    "$libva_utils/common/va_display_magma.cpp",
  ]
  deps = [
    "//sdk/lib/fdio",
    "//src/graphics/lib/magma/src/libmagma",
    "//zircon/system/ulib/zx",
    libva,
  ]
}

config("vainfo-config") {
  cflags = [
    "-Wno-sign-compare",
    "-Wno-incompatible-pointer-types-discards-qualifiers",
  ]
}

executable("vainfo-bin") {
  testonly = true
  sources = [ "$libva_utils/vainfo/vainfo.c" ]
  configs += [ ":vainfo-config" ]
  deps = [
    ":vautils-common",
    libva,
  ]
}

config("mpeg2vldemo-config") {
  cflags = [
    "-Wno-gnu-designator",
    "-Wno-c99-designator",
  ]
}

executable("mpeg2vldemo-bin") {
  testonly = true
  sources = [ "$libva_utils/decode/mpeg2vldemo.cpp" ]
  configs += [ ":mpeg2vldemo-config" ]
  deps = [
    ":vautils-common",
    libva,
  ]
}

config("avcenc-config") {
  cflags = [
    "-Wno-sign-compare",
    "-Wno-incompatible-pointer-types-discards-qualifiers",
    "-Wno-conversion",
    "-Wno-strict-prototypes",
  ]
}

executable("avcenc-bin") {
  testonly = true
  sources = [ "$libva_utils/encode/avcenc.c" ]
  configs += [ ":avcenc-config" ]
  deps = [
    ":vautils-common",
    libva,
  ]
}
