| # 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" ] |
| } |