blob: 957fb5bf21382d995f7d305d22e7aae9f518d9a9 [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/testing/host_test_data.gni")
import("config.gni")
group("disable_strict_sources_check_allowlist") {
# ________ _________ ________ ________
# |\ ____\|\___ ___\\ __ \|\ __ \
# \ \ \___|\|___ \ \_\ \ \|\ \ \ \|\ \
# \ \_____ \ \ \ \ \ \ \\\ \ \ ____\
# \|____|\ \ \ \ \ \ \ \\\ \ \ \___|
# ____\_\ \ \ \__\ \ \_______\ \__\
# |\_________\ \|__| \|_______|\|__|
# \|_________|
# This is an allowlist of packages that do not enforce that the source files
# are listed in `source`. This is only intended to be used as a temporary
# allowlist during soft migrations.
#
# All file dependencies of the targets in this list should be covered by the
# paths in the skipAnalysisAllowlist in
# //tools/integration/fint/should_build.go.
visibility = []
}
cargo_toml_gen_desc_out = "$target_out_dir/cargo_toml_gen_desc.json"
action("cargo_toml_gen_desc") {
visibility = [ ":cargo_toml_gen" ]
script = "//scripts/generate_cargo_desc.py"
sources = []
inputs = []
hermetic_deps = false
# This target must leak the output directory because `fx gen-cargo`
# generates symlinks in locations outside of //out. Those symlinks refer to
# Cargo.toml files generated by the subsequent `cargo_toml_gen` action, and
# `cargo` resolves paths relative to the location of the Cargo.toml symlink
# itself.
no_output_dir_leaks = false
outputs = [ cargo_toml_gen_desc_out ]
depfile = "$cargo_toml_gen_desc_out.d"
args = [
"--root_build_dir",
".",
"--fuchsia_dir",
rebase_path("//", root_build_dir),
"--gn_binary",
rebase_path("//prebuilt/third_party/gn/${host_platform}/gn",
root_build_dir),
"--output",
rebase_path(cargo_toml_gen_desc_out, root_build_dir),
"--depfile",
rebase_path("$cargo_toml_gen_desc_out.d", root_build_dir),
]
}
# NOTE: This target is used by "fx set --cargo-toml-gen ..." which
# will do the following:
#
# 1) Ensure that "fx gen" (and "fx build") will pass `--ide-json`
# to `gn gen`, which generates an up-to-date
# `$root_build_dir/project.json` file, used here as input.
#
# 2) Add this target to the host_labels list to ensure its action script is
# run by "fx build".
#
# For more details, see docs/development/language/rust/README.md
#
# Notes on transitioning this target from `base_package_labels` to `host_tools`:
#
# 1) Existing `args.gn` files created by `fx set --cargo-toml-gen` will have
# added the target to the `base_package_labels` list. This list assumes the
# default toolchain.
# 2) `base_package_labels` currently feeds into
# - `//:developer_base_package_labels`
# 3) New `args.gn` files created by `fx set --cargo-toml-gen` will instead use
# the `host_labels` arg (which assumes the host toolchain). That list is
# currently being used with the `//:host` group, but it's being split into
# - `//build/input/product:host_labels`
# - `//build/input/board:host_labels`
# - `//:host` will remain for developer-specified host tools to include in
# the build.
# 4) Developers _may_ have added `//build/rust:cargo_toml_gen` to either of
# following:
# - `cache_package_labels` (`//:developer_cache_packages`)
# - `universe_package_labels` (`//:developer_universe_packages`)
# and those are being split as well, and so the following groups will need
# to be added to visibility:
# - `//:developer_cache_packages`
# - `//:developer_universe_packages`
#
if (current_toolchain != default_toolchain) {
# This is a redirect from the host toolchain to the default toolchain, as it
# is added to the host_labels group, not the product definition inputs.
group("cargo_toml_gen") {
public_deps = [ ":cargo_toml_gen($default_toolchain)" ]
visibility = [
# This is the supported group for developers to add tools to, going
# forward, and the group used by `fx set --cargo-toml-gen`.
"//:host",
]
}
} else {
action("cargo_toml_gen") {
# Nothing in-tree should depend on Cargo files.
visibility = [
# The only expected use of this target, going forward (the above group)
":cargo_toml_gen",
# `fx set ... --cargo-toml-gen` previously used the `base_package_labels`
# GN arg, which feeds into `//:developer_base_packages`. This is here for
# providing a transition for developers' existing `args.gn` files.
"//:developer_base_packages",
# Developers may have used these as well (also deprecated for this
# target).
"//:developer_cache_packages",
"//:developer_universe_packages",
# via --with-host or `host_labels`, and specifying the fuchsia toolchain:
"//:host",
]
script = "//scripts/generate_cargo.py"
sources = []
inputs = [
cargo_toml_gen_desc_out,
"//third_party/rust_crates/Cargo.toml",
]
hermetic_deps = false
outputs = [ "$root_build_dir/cargo/generate_cargo.stamp" ]
depfile = "$root_build_dir/cargo/generate_cargo.stamp.d"
args = [
rebase_path(cargo_toml_gen_desc_out, root_build_dir),
"--root_build_dir",
".",
"--fuchsia_dir",
rebase_path("//", root_build_dir),
]
deps = [ ":cargo_toml_gen_desc" ]
}
}
# When panic=abort, the Rust libtest framework requires sys.process.Launcher in
# every test manifest. This is so it can launch a subprocess for each unit
# test.
#
# We stick a test_needs_process_launcher flag in metadata so that any
# package which contains this test automatically has its manifest patched
# with the sys.process.Launcher capability (this is done in
# //build/package.gni).
#
# This group is included in every Rust test.
group("rust_test_metadata") {
metadata = {
cmx_patches_data = [
{
sandbox = {
services = [ "fuchsia.process.Launcher" ]
}
},
]
}
}
# Multiple integration tests rely on having a Rust toolchain available on the host test
# runner, and host_test_data does not appear to support multiple definitions of the
# same output path in the same build, so we provide a central target here to be used
# by integration tests that need cargo or rustc.
if (is_host) {
action("make_toolchain_host_binaries") {
script = "//build/copy_tree.py"
_stamp = "$target_gen_dir/$target_name.stamp"
_depfile = "$target_out_dir/$target_name.d"
args = [
rebased_rustc_prefix,
out_rustc_prefix,
rebase_path(_stamp, root_build_dir),
"--depfile",
rebase_path(_depfile, root_build_dir),
]
outputs = [ _stamp ]
depfile = _depfile
}
# This target adds llvm-profdata for the rust toolchain to tool_paths.json.
# Since this tool has the same name as the clang counterpart, we need to
# append -rust to the name to differentiate them. It also needs to be built
# in the host_toolchain in order for the tool path to be correct.
group("tool_paths.llvm-profdata-rust") {
visibility = [ "//:tool_paths" ]
deps = [ ":make_toolchain_host_binaries" ]
metadata = {
tool_paths = [
{
cpu = host_cpu
label = get_label_info(":$target_name", "label_with_toolchain")
name = "llvm-profdata-rust"
os = host_os
path = rebase_path("$rustc_prefix/bin/llvm-profdata", root_build_dir)
},
]
}
}
host_test_data("prebuilt_toolchain_host_test_data") {
deps = [ ":make_toolchain_host_binaries" ]
sources = [ "$root_build_dir/$out_rustc_prefix" ]
}
}
group("tests") {
testonly = true
deps = [ "tests" ]
}