blob: b3005820c373980c56f96183bac18109286f9fd1 [file] [log] [blame]
# 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.
assert(is_fuchsia, "Zircon libraries only available for Fuchsia targets")
import("//build/config/fuchsia/zircon.gni")
import("//build/unification/images/artifacts.gni")
# Creates a group with distribution_entries metadata that looks like:
#
# {
# destination = "lib/libtest-xxxxx.so"
# label = '//build/unification/lib/toolchain:libtest"
# source = "../../prebuilt/third_party/..../libtest-xxxxx.so"
# }
#
# Exposes a library provided by the ZN build to the manifest metadata collection
# scheme.
#
# This template allows such libraries and their various variants to be included
# in manifests generated from metadata.
#
# Parameters
#
# library (required)
# [string] Name of the library to expose.
template("zircon_runtime_library") {
assert(defined(invoker.library), "Must provide a library")
_variant_suffix = ""
if (toolchain_variant.instrumented && toolchain_variant.name != "") {
# Fuzzers just use the base variant.
_variant_suffix +=
"." + string_replace(toolchain_variant.name, "-fuzzer", "")
}
name = "lib.${invoker.library}" + _variant_suffix
# TODO(tmandry): Remove fallback logic once clang toolchain rolls.
fallback_name = false
if (defined(invoker.fallback)) {
fallback_name = "lib.${invoker.fallback}" + _variant_suffix
}
artifact = false
foreach(entry, zircon_artifacts) {
if (entry.name == name || entry.name == fallback_name) {
assert(artifact == false, "Duplicate Zircon library: $name")
artifact = entry
}
}
assert(artifact != false, "Could not find Zircon library: $name")
assert(artifact.deps == [],
"Cannot handle Zircon library $name, deps not supported")
script = "//build/unification/lib/format_metadata.py"
format_args = [
"-S", # https://bugs.fuchsia.dev/p/fuchsia/issues/detail?id=62771
rebase_path(script, root_build_dir),
"--zircon-build-dir",
rebase_path(zircon_root_build_dir),
"--build-dir",
rebase_path(root_build_dir),
# NOTE: not including the toolchain here as this target can be reached from
# different paths due to its hacky nature, and label stability is key to
# ensure the build does not fail due to a bogus duplicate.
# This will go away naturally when these libraries are handled directly in
# the GN build.
"--label",
get_label_info(":$target_name", "label_no_toolchain"),
]
foreach(line, artifact.lines) {
format_args += [
"--entry",
line,
]
}
metadata_entries =
exec_script(python_exe_src, format_args, "json", [ script ])
group(target_name) {
forward_variables_from(invoker, [ "visibility" ])
metadata = {
# Used by the distribution_manifest template.
distribution_entries_barrier = []
distribution_entries = metadata_entries
}
}
}