# Copyright 2018 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/package.gni")
import("//build/test/test_package.gni")
import("//garnet/lib/magma/gnbuild/magma.gni")

package("magma-intel-gen") {
  if (build_intel_gen) {
    deprecated_system_image = true
    if (magma_enable_developer_build) {
      testonly = true
    }

    deps = build_libvulkan

    filename = "$target_gen_dir/vulkan/icd.d/libvulkan_intel.json"
    icd_data = [
      "{",
      "\"file_format_version\": \"1.0.0\",",
      "\"ICD\": {",
      "\"library_path\": \"libvulkan_intel.so\",",
      "\"api_version\": \"1.0.68\"",
      "}",
      "}",
    ]
    write_file(filename, icd_data)

    resources = [
      {
        path = rebase_path("$target_gen_dir/vulkan/icd.d/libvulkan_intel.json")
        dest = "vulkan/icd.d/libvulkan_intel.json"
      },
    ]
    libraries = [
      {
        name = "libvulkan_intel.so"
      },
    ]

    if (magma_enable_developer_build) {
      deps += [ "$msd_intel_gen_build_root:msd_intel_test" ]
      drivers = [
        {
          name = "libmsd_intel_test.so"
        },
      ]
    } else {
      deps += [ "$msd_intel_gen_build_root:msd_intel" ]
      drivers = [
        {
          name = "libmsd_intel.so"
        },
      ]
    }
  }
}

test_package("magma_intel_gen_nonhardware_tests") {
  tests = []
  if (build_intel_gen) {
    deps = [
      "$mesa_build_root:tests",
      "$msd_intel_gen_build_root:tests",
    ]

    tests += [
      {
        name = "msd_intel_gen_nonhardware_tests"
      },
      {
        name = "mesa_unit_tests"
      },
      {
        name = "state_pool"
      },
      {
        name = "state_pool_free_list_only"
      },
      {
        name = "state_pool_no_free"
      },
      {
        name = "block_pool_no_free"
      },
    ]
  }
}

test_package("magma_intel_gen_integration_tests") {
  tests = []
  if (build_intel_gen) {
    deps = [
      "//garnet/drivers/gpu/msd-intel-gen/tests/integration",
    ]

    tests += [
      {
        name = "msd_intel_gen_integration_tests"
        environments = intel_gpu_envs
      },
    ]
  }
}

package("magma_intel_autorun") {
  testonly = true
  deprecated_system_image = true

  if (build_intel_gen) {
    deps = [
      ":autorun",
    ]

    binaries = [
      {
        name = "autorun"
        dest = "magma_autorun"
      },
    ]
  }
}

copy("autorun") {
  sources = [
    "$magma_build_root/scripts/autorun",
  ]
  outputs = [
    "$root_out_dir/autorun",
  ]
}
