# Copyright 2019 Google LLC. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

assert(is_fuchsia)

import ("//build/fuchsia/sdk.gni")

pkg_dir = target_gen_dir
pkg_name = "skqp_pkg"

fuchsia_package(pkg_name) {
  testonly = true
  name = pkg_name
  version = 0
  deps = [
    "//build/fuchsia", "//:skqp",
  ]
  pkg_manifest = "${pkg_dir}/${target_name}.manifest"
}

fuchsia_repo("skqp_repo") {
  testonly = true
  deps = [ ":base_manifest", ":append_assets_to_manifest", ":skqp_pkg" ]

  # Put repo directory in out dir (not gen dir).
  repo = "$target_out_dir/skqp_repo"
  archives = [ "$root_out_dir/far/skqp_pkg.far" ]
}

#
# Base manifest entries (w/o assets) for SKQP.
#
group("base_manifest") {
  base_pkg_manifest = "${pkg_dir}/base_${pkg_name}.manifest"

  skqp_exec = rebase_path("${root_out_dir}/skqp")
  skqp_path = rebase_path("${target_gen_dir}")

  sdk_dist_path = rebase_path("${fuchsia_sdk_path}/arch/${target_cpu}/dist")
  sdk_sysroot_dist_path = rebase_path("${fuchsia_sdk_path}/arch/${target_cpu}/sysroot/dist/lib")

  skqp_component_manifest = rebase_path("//build/fuchsia/skqp/skqp.cmx")

  if (target_cpu == "x64" || target_cpu == "x86_64") {
    clang_path=rebase_path("${fuchsia_toolchain_path}/lib/x86_64-unknown-fuchsia/c++")
  } else if (target_cpu == "arm64") {
    clang_path=rebase_path("${fuchsia_toolchain_path}/lib/aarch64-unknown-fuchsia/c++")
  } else {
    assert(false, "Unknown target cpu for Fuchsia target.")
  }

  manifest_entries = [
    # Binary
    "bin/skqp=${skqp_exec}",

    # Meta Data
    "meta/package=${skqp_path}/meta/package",
    "meta/skqp.cmx=${skqp_component_manifest}",

    # Shared Libs (clang c++)
    "lib/libc++.so.2=${clang_path}/libc++.so.2",
    "lib/libc++abi.so.1=${clang_path}/libc++abi.so.1",
    "lib/libunwind.so.1=${clang_path}/libunwind.so.1",

    # Shared Libs (sdk dist)
    "lib/libvulkan.so=${sdk_dist_path}/libvulkan.so",
    "lib/libasync-default.so=${sdk_dist_path}/libasync-default.so",
    "lib/libfdio.so=${sdk_dist_path}/libfdio.so",
    "lib/libtrace-engine.so=${sdk_dist_path}/libtrace-engine.so",

    # Loader
    "lib/ld.so.1=${sdk_sysroot_dist_path}/ld.so.1",

    # Vulkan ICD / Validation / Loader
    "lib/libvulkan.so=${sdk_dist_path}/libvulkan.so",
    "lib/libVkLayer_image_pipe_swapchain.so=${sdk_dist_path}/libVkLayer_image_pipe_swapchain.so",
    "lib/VkLayer_core_validation.so=${sdk_dist_path}/VkLayer_core_validation.so",
    "lib/VkLayer_khronos_validation.so=${sdk_dist_path}/VkLayer_khronos_validation.so",
    "lib/VkLayer_thread_safety.so=${sdk_dist_path}/VkLayer_thread_safety.so",
    "lib/VkLayer_stateless_validation.so=${sdk_dist_path}/VkLayer_stateless_validation.so",
    "lib/VkLayer_object_lifetimes.so=${sdk_dist_path}/VkLayer_object_lifetimes.so",
    "lib/VkLayer_unique_objects.so=${sdk_dist_path}/VkLayer_unique_objects.so",
  ]
  write_file(base_pkg_manifest, manifest_entries)
}

#
# Asset manifest entries for SKQP.
#
action("append_assets_to_manifest") {
  script = "append_assets_to_manifest"

  base_pkg_manifest = "${pkg_dir}/base_${pkg_name}.manifest"
  pkg_manifest = "${pkg_dir}/${pkg_name}.manifest"
  assets_path = "//platform_tools/android/apps/skqp/src/main/assets"

  inputs = [
    assets_path,
  ]

  outputs = [
    base_pkg_manifest,
    pkg_manifest,
  ]

  args = [
    "--root_dir",
    rebase_path(assets_path),
    "--base_manifest",
    rebase_path(base_pkg_manifest),
    "--manifest",
    rebase_path(pkg_manifest),
  ]
}
