# 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/compiled_action.gni")
import("//build/fidl/toolchain.gni")
import("//build/sdk/sdk_atom_alias.gni")

# Generates some C++ bindings for a FIDL library.
#
# The parameters for this template are defined in //build/fidl/fidl.gni. The
# relevant parameters in this template are:
#   - name;
#   - sources;
#   - cpp_legacy_callbacks.

template("fidl_cpp_codegen") {
  not_needed(invoker, [ "sources" ])

  main_target_name = target_name
  generation_target_name = "${target_name}_cpp_generate"

  library_name = target_name
  if (defined(invoker.name)) {
    library_name = invoker.name
  }

  fidl_root_gen_dir =
      get_label_info(":$target_name($fidl_toolchain)", "root_gen_dir")

  include_stem = string_replace(library_name, ".", "/") + "/cpp/fidl"
  file_stem = "$fidl_root_gen_dir/$include_stem"

  fidl_target_gen_dir =
      get_label_info(":$target_name($fidl_toolchain)", "target_gen_dir")
  json_representation = "$fidl_target_gen_dir/$target_name.fidl.json"

  fidl_root_gen_dir =
      get_label_info(":$target_name($fidl_toolchain)", "root_gen_dir")

  compiled_action(generation_target_name) {
    forward_variables_from(invoker, [ "testonly" ])

    visibility = [ ":$main_target_name" ]

    tool = "//garnet/go/src/fidl:fidlgen"

    inputs = [
      json_representation,
    ]

    outputs = [
      "$file_stem.h",
      "$file_stem.cc",
    ]

    args = [
      "--json",
      rebase_path(json_representation, root_build_dir),
      "--output-base",
      rebase_path(file_stem, root_build_dir),
      "--include-base",
      rebase_path(fidl_root_gen_dir, root_build_dir),
      "--generators",
      "cpp",
    ]

    if (defined(invoker.cpp_legacy_callbacks) && invoker.cpp_legacy_callbacks) {
      args += [ "--cpp-legacy-callbacks" ]
    }

    deps = [
      ":$main_target_name($fidl_toolchain)",
    ]
  }
}

template("fidl_cpp") {
  not_needed(invoker, "*")

  main_target_name = target_name
  generation_target_name = "${target_name}_cpp_generate"

  library_name = target_name
  if (defined(invoker.name)) {
    library_name = invoker.name
  }

  fidl_root_gen_dir =
      get_label_info(":$target_name($fidl_toolchain)", "root_gen_dir")

  include_stem = string_replace(library_name, ".", "/") + "/cpp/fidl"
  file_stem = "$fidl_root_gen_dir/$include_stem"

  source_set(main_target_name) {
    forward_variables_from(invoker,
                           [
                             "deps",
                             "testonly",
                             "visibility",
                           ])

    sources = [
      "$file_stem.cc",
      "$file_stem.h",
    ]

    # Let dependencies use `#include "$file_stem.h"`.
    public_configs = [ "//build/cpp:fidl_gen_config" ]

    public_deps = [
      ":$generation_target_name($fidl_toolchain)",
      ":$main_target_name($fidl_toolchain)",
      ":${main_target_name}_tables",
    ]

    if (is_fuchsia) {
      public_deps += [ "//garnet/public/lib/fidl/cpp" ]
    } else {
      public_deps += [ "//garnet/public/lib/fidl/cpp:cpp_base" ]
    }

    if (defined(invoker.public_deps)) {
      public_deps += invoker.public_deps
    }
  }

  if (defined(invoker.sdk_category) && invoker.sdk_category != "excluded") {
    # Instead of depending on the generated bindings, set up a dependency on the
    # original library.
    sdk_target_name = "${main_target_name}_sdk"
    sdk_atom_alias(sdk_target_name) {
      atom = ":$sdk_target_name($fidl_toolchain)"
    }
  }
}
