# Copyright 2020 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("//sdk/ctf/build/internal/ctf_element.gni")
import("//sdk/ctf/build/internal/ctf_version.gni")
import("//sdk/ctf/build/internal/write_ctf_file.gni")

# A source_set that can be used in CTF.
#
# An equivalent to the built-in source_set, but ensures dependencies are allowed
# in CTF.
#
# Example:
# ```
# ctf_source_set("my-source-set") {
#   sources = [
#     "//sdk/ctf/tests/my_test/my_lib.h",
#     "//sdk/ctf/tests/my_test/my_lib.cc",
#   ]
# }
# ```
template("ctf_source_set") {
  invoker_deps = []
  if (defined(invoker.deps)) {
    invoker_deps += invoker.deps
  }
  if (defined(invoker.public_deps)) {
    invoker_deps += invoker.public_deps
  }

  if (invoker_deps != [] && cts_version == "") {
    verify_target = target_name + "_verify_deps"
  }
  write_file_target = target_name + "_ctf_file"

  if (defined(verify_target)) {
    ctf_element(verify_target) {
      deps_to_verify = invoker_deps
      invoker_label =
          get_label_info(":${invoker.target_name}", "label_no_toolchain")
    }
  }

  write_ctf_file(write_file_target) {
  }

  source_set(target_name) {
    forward_variables_from(invoker, "*", [ "non_cts_deps" ])
    if (!defined(deps)) {
      deps = []
    }

    if (defined(verify_target)) {
      deps += [ ":$verify_target" ]
    }
    deps += [ ":$write_file_target" ]
  }
}

set_defaults("ctf_source_set") {
  configs = default_common_binary_configs
}
