| // Copyright 2019 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "gn/rust_variables.h" |
| |
| namespace variables { |
| |
| // Rust target variables ------------------------------------------------------ |
| |
| const char kRustAliasedDeps[] = "aliased_deps"; |
| const char kRustAliasedDeps_HelpShort[] = |
| "aliased_deps: [scope] Set of crate-dependency pairs."; |
| const char kRustAliasedDeps_Help[] = |
| R"(aliased_deps: [scope] Set of crate-dependency pairs. |
| |
| Valid for `rust_library` targets and `executable`, `static_library`, and |
| `shared_library` targets that contain Rust sources. |
| |
| A scope, each key indicating the renamed crate and the corresponding value |
| specifying the label of the dependency producing the relevant binary. |
| |
| All dependencies listed in this field *must* be listed as deps of the target. |
| |
| executable("foo") { |
| sources = [ "main.rs" ] |
| deps = [ "//bar" ] |
| } |
| |
| This target would compile the `foo` crate with the following `extern` flag: |
| `rustc ...command... --extern bar=<build_out_dir>/obj/bar` |
| |
| executable("foo") { |
| sources = [ "main.rs" ] |
| deps = [ ":bar" ] |
| aliased_deps = { |
| bar_renamed = ":bar" |
| } |
| } |
| |
| With the addition of `aliased_deps`, above target would instead compile with: |
| `rustc ...command... --extern bar_renamed=<build_out_dir>/obj/bar` |
| )"; |
| |
| const char kRustCrateName[] = "crate_name"; |
| const char kRustCrateName_HelpShort[] = |
| "crate_name: [string] The name for the compiled crate."; |
| const char kRustCrateName_Help[] = |
| R"(crate_name: [string] The name for the compiled crate. |
| |
| Valid for `rust_library` targets and `executable`, `static_library`, |
| `shared_library`, and `source_set` targets that contain Rust sources. |
| |
| If crate_name is not set, then this rule will use the target name. |
| )"; |
| |
| const char kRustCrateType[] = "crate_type"; |
| const char kRustCrateType_HelpShort[] = |
| "crate_type: [string] The type of linkage to use on a shared_library."; |
| const char kRustCrateType_Help[] = |
| R"(crate_type: [string] The type of linkage to use on a shared_library. |
| |
| Valid for `rust_library` targets and `executable`, `static_library`, |
| `shared_library`, and `source_set` targets that contain Rust sources. |
| |
| Options for this field are "cdylib", "staticlib", "proc-macro", and "dylib". |
| This field sets the `crate-type` attribute for the `rustc` tool on static |
| libraries, as well as the appropiate output extension in the |
| `rust_output_extension` attribute. Since outputs must be explicit, the `lib` |
| crate type (where the Rust compiler produces what it thinks is the |
| appropriate library type) is not supported. |
| |
| It should be noted that the "dylib" crate type in Rust is unstable in the set |
| of symbols it exposes, and most usages today are potentially wrong and will |
| be broken in the future. |
| |
| Static libraries, rust libraries, and executables have this field set |
| automatically. |
| )"; |
| |
| const char kRustCrateRoot[] = "crate_root"; |
| const char kRustCrateRoot_HelpShort[] = |
| "crate_root: [string] The root source file for a binary or library."; |
| const char kRustCrateRoot_Help[] = |
| R"(crate_root: [string] The root source file for a binary or library. |
| |
| Valid for `rust_library` targets and `executable`, `static_library`, |
| `shared_library`, and `source_set` targets that contain Rust sources. |
| |
| This file is usually the `main.rs` or `lib.rs` for binaries and libraries, |
| respectively. |
| |
| If crate_root is not set, then this rule will look for a lib.rs file (or |
| main.rs for executable) or a single file in sources, if sources contains |
| only one file. |
| )"; |
| |
| void InsertRustVariables(VariableInfoMap* info_map) { |
| info_map->insert(std::make_pair( |
| kRustAliasedDeps, |
| VariableInfo(kRustAliasedDeps_HelpShort, kRustAliasedDeps_Help))); |
| info_map->insert(std::make_pair( |
| kRustCrateName, |
| VariableInfo(kRustCrateName_HelpShort, kRustCrateName_Help))); |
| info_map->insert(std::make_pair( |
| kRustCrateType, |
| VariableInfo(kRustCrateType_HelpShort, kRustCrateType_Help))); |
| info_map->insert(std::make_pair( |
| kRustCrateRoot, |
| VariableInfo(kRustCrateRoot_HelpShort, kRustCrateRoot_Help))); |
| } |
| |
| } // namespace variables |