| # Copyright 2021 The Chromium Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import("//build/rust/rust_target.gni") |
| |
| # Defines a Rust executable. |
| # |
| # This is identical to the built-in gn intrinsic 'executable' but |
| # supports some additional parameters, as below: |
| # |
| # edition (optional) |
| # Edition of the Rust language to be used. |
| # Options are "2015", "2018" and "2021". Defaults to "2021". |
| # |
| # test_deps (optional) |
| # List of GN targets on which this crate's tests depend, in addition |
| # to deps. |
| # |
| # build_native_rust_unit_tests (optional) |
| # Builds native unit tests (under #[cfg(test)]) written inside the Rust |
| # crate. This will create a `<name>_unittests` executable in the output |
| # directory when set to true. |
| # Chromium code should not set this, and instead prefer to split the code |
| # into a library and write gtests against it. See how to do that in |
| # //testing/rust_gtest_interop/README.md. |
| # |
| # unit_test_target (optional) |
| # Overrides the default name for the unit tests target |
| # |
| # features (optional) |
| # A list of conditional compilation flags to enable. This can be used |
| # to set features for crates built in-tree which are also published to |
| # crates.io. Each feature in the list will be passed to rustc as |
| # '--cfg feature=XXX' |
| # |
| # inputs (optional) |
| # Additional input files needed for compilation (such as `include!`ed files) |
| # |
| # test_inputs (optional) |
| # Same as above but for the unit tests target |
| # |
| # Example of usage: |
| # |
| # rust_executable("foo_bar") { |
| # deps = [ |
| # "//boo/public/rust/bar", |
| # ] |
| # sources = [ "src/main.rs" ] |
| # } |
| # |
| # This template is intended to serve the same purpose as 'rustc_library' |
| # in Fuchsia. |
| template("rust_executable") { |
| rust_target(target_name) { |
| forward_variables_from(invoker, |
| "*", |
| TESTONLY_AND_VISIBILITY + [ "configs" ]) |
| forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) |
| executable_configs = invoker.configs |
| target_type = "executable" |
| assert(!defined(cxx_bindings)) |
| |
| # Executable targets should be unique names as they all get placed in the |
| # root output dir. We want their exe file name to be the same as the GN |
| # target, not a mangled name including the full GN path, and the exe file |
| # name comes from the crate name. |
| if (!defined(invoker.crate_name)) { |
| crate_name = target_name |
| } |
| } |
| } |
| |
| set_defaults("rust_executable") { |
| configs = default_executable_configs |
| } |