# 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.
#

import("//build/components.gni")

declare_args() {
  intel_media_driver_debug = is_debug
}

va_install_root = "$root_out_dir/build-intel-media-driver/install"

config("va-config") {
  include_dirs = [ "$va_install_root/include" ]
  libs = [ "$va_install_root/lib/libva.so.2" ]
}

resource("libva-resource") {
  sources = [ "$va_install_root/lib/libva.so.2" ]
  outputs = [ "lib/libva.so.2" ]
}

group("va") {
  public_configs = [ ":va-config" ]
  public_deps = [ ":libva-resource" ]
}

config("va-magma-config") {
  include_dirs = [ "$va_install_root/include" ]
  libs = [ "$va_install_root/lib/libva-magma.so.2" ]
}

resource("libva-magma-resource") {
  sources = [ "$va_install_root/lib/libva-magma.so.2" ]
  outputs = [ "lib/libva-magma.so.2" ]
}

group("va-magma") {
  public_configs = [ ":va-magma-config" ]
  public_deps = [
    ":libva-magma-resource",
    "//src/graphics/lib/magma/include:magma",
  ]
}

resource("gmmlib-resource") {
  sources = [ "$va_install_root/lib/libigdgmm.so.11" ]
  outputs = [ "lib/libigdgmm.so.11" ]
}

resource("va-intel-resource") {
  sources = [ "$va_install_root/iHD_drv_video.so" ]
  outputs = [ "lib/iHD_drv_video.so" ]
}

# Only have a copy of the action in one toolchain.
if (current_toolchain == default_toolchain) {
  action("out-of-tree-build") {
    script = "build.sh"

    outputs = [
      "$va_install_root/lib/libva.so.2",
      "$va_install_root/lib/libva-magma.so.2",
      "$va_install_root/lib/libigdgmm.so.11",
      "$va_install_root/iHD_drv_video.so",

      # Placeholder is here just to force an incremental build
      "$va_install_root/place_holder",
    ]

    fuchsia_dir = rebase_path("$root_build_dir/../..")
    fuchsia_out_dir = rebase_path(root_out_dir)

    args = [
      fuchsia_dir,
      fuchsia_out_dir,
    ]

    if (intel_media_driver_debug) {
      args += [ "debug" ]
    } else {
      args += [ "release" ]
    }

    deps = [
      "//sdk:zircon_sysroot_export",
      "//src/graphics/lib/magma/src/libmagma:libmagma_complete($shlib_toolchain)",
    ]
  }
}

group("va-intel") {
  public_deps = [
    ":gmmlib-resource",
    ":va",
    ":va-intel-resource",
    ":va-magma",
  ]
  deps = [ ":out-of-tree-build" ]
}
