# 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/build_id.gni")
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",
      "$va_install_root/lib/libva.so.2.debug",
      "$va_install_root/lib/libva-magma.so.2.debug",
      "$va_install_root/lib/libigdgmm.so.11.debug",
      "$va_install_root/iHD_drv_video.so.debug",
    ]

    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)",
    ]

    depfile = "$root_out_dir/build-intel-media-driver/media-driver.d"
  }
}

build_id_entry("libva_build_id") {
  stripped = "$va_install_root/lib/libva.so.2"
  debug = "$va_install_root/lib/libva.so.2.debug"
  deps = [ ":out-of-tree-build" ]
}

build_id_entry("libva_magma_build_id") {
  stripped = "$va_install_root/lib/libva-magma.so.2"
  debug = "$va_install_root/lib/libva-magma.so.2.debug"
  deps = [ ":out-of-tree-build" ]
}

build_id_entry("libigdgmm_build_id") {
  stripped = "$va_install_root/lib/libigdgmm.so.11"
  debug = "$va_install_root/lib/libigdgmm.so.11.debug"
  deps = [ ":out-of-tree-build" ]
}

build_id_entry("iHD_build_id") {
  stripped = "$va_install_root/iHD_drv_video.so"
  debug = "$va_install_root/iHD_drv_video.so.debug"
  deps = [ ":out-of-tree-build" ]
}

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