blob: 35694721f032cf750c05dfc49695e534ccf14905 [file] [log] [blame]
# Copyright 2022 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.
# This list should be kept up to date with the public and partner SDKs in //sdk:sdk.
ALLOWED_SDKS = [
"//sdk:core",
"//sdk:e2e_testing",
]
# Verifies dependencies are released in an SDK.
#
# Ensures that dependencies exist in a public SDK's generated manifest. Allow lists can
# be passed to permit specific dependencies or directories.
#
# The verification target produced by this template will not actually depend on
# deps_to_verify, because it only relies on information from gn gen time.
#
# Parameters
#
# deps_to_verify (required)
# A list of dependencies to verify.
# invoker_label (required)
# The label of the invoking target. This is used to print a helpful error message.
# e.g. "The following dependencies of $invoker_label cannot be used."
# type: string
# allowed_deps (optional)
# A list of non-SDK dependencies that are allowed to be used.
# type: list
# allowed_dirs (optional)
# A list of directories where all dependencies in those directories are allowed.
# Useful for allowing all third_party dependencies.
# e.g. [ "//third_party/rust_crates/*" ]
# type: list
template("verify_deps_in_sdk") {
assert(defined(invoker.deps_to_verify))
assert(defined(invoker.invoker_label))
assert(!defined(invoker.deps),
"All dependencies should be added to \"deps_to_verify\"")
assert(!defined(invoker.public_deps),
"All dependencies should be added to \"deps_to_verify\"")
fully_qualified_deps = []
foreach(dep, invoker.deps_to_verify) {
fully_qualified_deps += [ get_label_info(dep, "label_no_toolchain") ]
}
action(target_name) {
forward_variables_from(invoker, "*")
deps = []
inputs = []
foreach(sdk, ALLOWED_SDKS) {
sdk_manifest_copy = sdk + "_copy($target_toolchain)"
sdk_manifest = get_label_info(sdk_manifest_copy, "root_out_dir") +
"/sdk/manifest/" + get_label_info(sdk, "name")
deps += [ sdk_manifest_copy ]
inputs += [ sdk_manifest ]
}
metadata = {
# expect_includes are not relevant for dependency verification, so disarm
# them here to avoid spurious include errors.
expect_includes_barrier = []
}
testonly = true
script = "//sdk/ctf/build/scripts/verify_deps_in_sdk.py"
# GN requires an action to output a file. This file is written, but not used.
outputs = [ "${target_gen_dir}/${target_name}.unused" ]
args = [
"--root_build_dir",
rebase_path(root_build_dir, root_build_dir),
"--output",
rebase_path(outputs[0], root_build_dir),
"--invoker_label",
invoker_label,
"--deps_to_verify",
]
args += fully_qualified_deps
if (defined(allowed_deps)) {
args += [ "--allowed_deps" ]
args += allowed_deps
}
if (defined(allowed_dirs)) {
args += [ "--allowed_dirs" ]
args += allowed_dirs
}
args += [ "--sdk_manifests" ]
args += rebase_path(inputs, root_build_dir)
}
}