# 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 = [
    "//:skqp",
    "//build/fuchsia",
  ]
  pkg_manifest = "${pkg_dir}/${target_name}.manifest"
}

fuchsia_repo("skqp_repo") {
  testonly = true
  deps = [
    ":append_assets_to_manifest",
    ":base_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.
#
# TODO(rosasco): Convert this group() to generated_file() when a
#                sufficiently modern version of gn rolls in.
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")
  layer_path = rebase_path("${fuchsia_sdk_path}/pkg/vulkan_layers")

  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/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/VkLayer_khronos_validation.so=${sdk_dist_path}/VkLayer_khronos_validation.so",

    "data/vulkan/explicit_layer.d/VkLayer_khronos_validation.json=${layer_path}/data/vulkan/explicit_layer.d/VkLayer_khronos_validation.json",
  ]

  # TODO(rosasco): Add 2 lines when generated_file() switch is implemented
  #                and remove the 'write_file' below.
  # contents = manifest_entries
  # outputs = [ base_pkg_manifest ]

  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 = [ pkg_manifest ]

  manifest_deps = "$target_out_dir/skqp_manifest.d"

  args = [
    "--root_dir",
    rebase_path(assets_path),
    "--base_manifest",
    rebase_path(base_pkg_manifest),
    "--manifest",
    rebase_path(pkg_manifest),
    "--deps",
    rebase_path(manifest_deps),
    "--root_build_dir",
    rebase_path(root_out_dir),
  ]

  deps = [ ":base_manifest" ]
  depfile = manifest_deps
}
