# Copyright 2018 The Chromium Authors. 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/config/fuchsia/fidl_library.gni")

# Templates for Fuchsia SDK packages.

# Declares a package specifying FIDL files and its dependencies.
#
# Parameters:
#   package_name - Name of the library. target_name is used if name
#                  is not specified explicitly.
#   namespace, namespace_path - FIDL namespace. See fidl_library.gni
#                               for details.
#   sources      - List of sources relative to sdk/fidl/${name}.
#   deps         - List of dependencies.
template("fuchsia_sdk_fidl_pkg") {
  _package_name = target_name
  if (defined(invoker.package_name)) {
    _package_name = invoker.package_name
  }

  fidl_library(target_name) {
    forward_variables_from(invoker,
                           [
                             "deps",
                             "public_deps",
                             "testonly",
                             "visibility",
                           ])

    library_name = _package_name

    if (defined(invoker.namespace)) {
      assert(defined(invoker.namespace_path),
             "SDK packages with namespace must specify namespace_path")
      namespace = invoker.namespace
      namespace_path = invoker.namespace_path

      _library_name = "${namespace}.${_package_name}"
    } else {
      _library_name = _package_name
    }

    sources = []
    foreach(file, invoker.sources) {
      sources += [ "sdk/fidl/${_library_name}/${file}" ]
    }
  }
}

# Declares a package containing uncompiled code and/or precompiled libraries.
#
# Parameters:
#   package_name - Name of the library. target_name is used if name
#                  is not specified explicitly.
#   sources      - List of sources relative to sdk/pkg/${name}.
#   deps         - List of dependencies.
#   libs         - List of precompiled libraries.
template("fuchsia_sdk_pkg") {
  _package_name = target_name
  if (defined(invoker.package_name)) {
    _package_name = invoker.package_name
  }

  config("${target_name}_config") {
    visibility = [ ":${invoker.target_name}" ]
    include_dirs = [ "sdk/pkg/${_package_name}/include" ]
  }

  static_library(target_name) {
    forward_variables_from(invoker,
                           [
                             "data",
                             "deps",
                             "public_deps",
                             "testonly",
                             "visibility",
                           ])

    sources = []
    if (defined(invoker.sources)) {
      foreach(src, invoker.sources) {
        sources += [ "sdk/pkg/${_package_name}/${src}" ]
      }
    }

    public_configs = [ ":${invoker.target_name}_config" ]

    if (defined(invoker.libs)) {
      configs += [ ":sdk_lib_dirs_config" ]
      libs = invoker.libs
    }
  }
}
