blob: 668ae6bfe20f8218d98423bd64049653fabaf4a7 [file] [log] [blame]
# 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/cpp/fidl_cpp.gni")
import("//build/dart/toolchain.gni")
import("//build/fidl/toolchain.gni")
import("//build/go/toolchain.gni")
import("//build/rust/toolchain.gni")
# Declares a FIDL library.
#
# Depending on the toolchain in which this targets is expanded, it will yield
# different results:
# - in the FIDL toolchain, it will compile its source files into an
# intermediate representation consumable by language bindings generators;
# - in the target or shared toolchain, this will produce a source_set
# containing C++ bindings.
#
# Parameters
#
# sources (required)
# List of paths to library source files.
#
# name (optional)
# Name of the library.
# Defaults to the target's name.
#
# sdk_category (optional)
# Publication level of the library in SDKs.
# See //build/sdk/sdk_atom.gni.
#
# api (optional)
# Path to the file representing the API of this library.
# This file is used to ensure modifications to the library's API are
# explicitly acknowledged. It is mandatory for publication categories of
# "partner" or "public".
# Defaults to "<target name>.api".
template("fidl") {
if (defined(invoker.sdk_category)) {
not_needed(invoker, [ "sdk_category" ])
}
if (defined(invoker.api)) {
not_needed(invoker, [ "api" ])
}
# TODO(ZX-3365): Hack for - compat names during soft transition.
# Remove whole conditional block when final conversion to . names is done.
if (get_label_info("..", "dir") == "//zircon/public/fidl" &&
string_replace(target_name, ".", "-") != target_name) {
not_needed(invoker, "*")
compat_name = string_replace(target_name, ".", "-")
if (current_toolchain == dart_toolchain) {
foreach(suffix, [ "" ]) {
group(target_name + suffix) {
forward_variables_from(invoker, [ "testonly" ])
public_deps = [
"//zircon/public/fidl/$compat_name:$compat_name$suffix",
]
}
}
copy("${target_name}_dot_packages") {
forward_variables_from(invoker, [ "testonly" ])
deps = [
"//zircon/public/fidl/$compat_name:${compat_name}_dot_packages",
]
sources = [
get_label_info(deps[0], "target_gen_dir") + "/$compat_name.packages",
]
outputs = [
"$target_gen_dir/$target_name.packages",
]
}
if (defined(invoker.sdk_category) && invoker.sdk_category != "excluded") {
import("//build/sdk/sdk_atom_alias.gni")
sdk_atom_alias("${target_name}_sdk") {
atom = "//zircon/public/fidl/$compat_name:${compat_name}_sdk($fidl_toolchain)"
}
}
} else if (current_toolchain == fidl_toolchain) {
copy(target_name) {
forward_variables_from(invoker, [ "testonly" ])
deps = [
"//zircon/public/fidl/$compat_name:${compat_name}",
]
sources = [
get_label_info(deps[0], "target_gen_dir") + "/$compat_name.libraries",
]
outputs = [
"$target_gen_dir/$target_name.libraries",
]
}
} else {
foreach(suffix,
[
"",
"-rustc",
"_c",
"_c_client",
"_c_server",
"_llcpp",
"_overnet_embedded",
"_overnet_internal",
]) {
group(target_name + suffix) {
forward_variables_from(invoker, [ "testonly" ])
public_deps = [
"//zircon/public/fidl/$compat_name:$compat_name$suffix",
]
}
}
}
} else if (current_toolchain == dart_toolchain) {
import("//build/dart/fidl_dart.gni")
fidl_dart(target_name) {
forward_variables_from(invoker, "*")
}
} else if (current_toolchain == rust_toolchain) {
import("//build/rust/fidl_rust.gni")
fidl_rust(target_name) {
forward_variables_from(invoker, "*")
}
} else if (current_toolchain == go_toolchain) {
import("//build/go/fidl_go.gni")
fidl_go(target_name) {
forward_variables_from(invoker, "*")
}
} else {
import("//build/c/fidl_c.gni")
if (current_toolchain == fidl_toolchain) {
import("//build/fidl/fidl_library.gni")
fidl_library(target_name) {
forward_variables_from(invoker, "*")
}
}
if (is_fuchsia) {
hlcpp_public_deps = [ "//sdk/lib/fidl/cpp" ]
_llcpp_generators = [
{
target_suffix = "llcpp"
fidlgen_generator = "llcpp"
output_stem = "llcpp/fidl"
additional_public_deps = [
"//zircon/public/lib/fidl",
"//zircon/public/lib/fidl-llcpp",
"//zircon/public/lib/fit",
]
},
]
} else {
hlcpp_public_deps = [ "//sdk/lib/fidl/cpp:cpp_base" ]
_llcpp_generators = []
}
fidl_cpp(target_name) {
forward_variables_from(invoker, "*")
generators = [
{
fidlgen_tool = "//garnet/go/src/fidl:fidlgen"
fidlgen_generator = "cpp"
output_stem = "cpp/fidl"
additional_public_deps = hlcpp_public_deps
},
{
target_suffix = "overnet_internal"
fidlgen_tool = "//garnet/go/src/fidl:fidlgen"
fidlgen_generator = "overnet_internal"
output_stem = "cpp/overnet_internal"
additional_public_deps =
hlcpp_public_deps + [
"//src/connectivity/overnet/lib/protocol:fidl_stream",
":$target_name",
]
},
{
target_suffix = "overnet_embedded"
fidlgen_tool = "//garnet/go/src/fidl:fidlgen"
fidlgen_generator = "overnet_embedded"
output_stem = "cpp/overnet_embedded"
additional_public_deps = [
"//src/connectivity/overnet/lib/embedded:runtime",
":$target_name",
]
},
]
llcpp_generators = _llcpp_generators
}
fidl_tables(target_name) {
forward_variables_from(invoker,
[
"testonly",
"visibility",
])
}
if (is_fuchsia) {
import("//build/rust/fidl_rust_library.gni")
# TODO(cramertj): remove pending TC-81.
fidl_rust_library(target_name) {
forward_variables_from(invoker, "*")
}
fidl_c_client(target_name) {
forward_variables_from(invoker, "*")
}
fidl_c_server(target_name) {
forward_variables_from(invoker, "*")
}
group("${target_name}_c") {
forward_variables_from(invoker,
[
"testonly",
"visibility",
])
public_deps = [
":${target_name}_client",
":${target_name}_server",
]
}
}
}
}