15f9996aaSopenharmony_ci# Copyright (c) 2022 Huawei Device Co., Ltd.
25f9996aaSopenharmony_ci# Licensed under the Apache License, Version 2.0 (the "License");
35f9996aaSopenharmony_ci# you may not use this file except in compliance with the License.
45f9996aaSopenharmony_ci# You may obtain a copy of the License at
55f9996aaSopenharmony_ci#
65f9996aaSopenharmony_ci#     http://www.apache.org/licenses/LICENSE-2.0
75f9996aaSopenharmony_ci#
85f9996aaSopenharmony_ci# Unless required by applicable law or agreed to in writing, software
95f9996aaSopenharmony_ci# distributed under the License is distributed on an "AS IS" BASIS,
105f9996aaSopenharmony_ci# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
115f9996aaSopenharmony_ci# See the License for the specific language governing permissions and
125f9996aaSopenharmony_ci# limitations under the License.
135f9996aaSopenharmony_ci
145f9996aaSopenharmony_ciimport("//build/rust/rustc_toolchain.gni")
155f9996aaSopenharmony_ciimport("//build/templates/cxx/cxx.gni")
165f9996aaSopenharmony_ciimport("//build/templates/rust/ohos_rust_library.gni")
175f9996aaSopenharmony_ci
185f9996aaSopenharmony_ciallowAllLints = [
195f9996aaSopenharmony_ci  "--cap-lints",
205f9996aaSopenharmony_ci  "allow",
215f9996aaSopenharmony_ci]
225f9996aaSopenharmony_cirustcOhosLints = [
235f9996aaSopenharmony_ci  "-A",
245f9996aaSopenharmony_ci  "deprecated",
255f9996aaSopenharmony_ci  "-D",
265f9996aaSopenharmony_ci  "missing-docs",
275f9996aaSopenharmony_ci  "-D",
285f9996aaSopenharmony_ci  "warnings",
295f9996aaSopenharmony_ci]
305f9996aaSopenharmony_cirustcVendorLints = [
315f9996aaSopenharmony_ci  "-A",
325f9996aaSopenharmony_ci  "deprecated",
335f9996aaSopenharmony_ci  "-D",
345f9996aaSopenharmony_ci  "warnings",
355f9996aaSopenharmony_ci]
365f9996aaSopenharmony_cirustcAllWarningLints = [
375f9996aaSopenharmony_ci  "-W",
385f9996aaSopenharmony_ci  "non_ascii_idents",
395f9996aaSopenharmony_ci  "-W",
405f9996aaSopenharmony_ci  "ambiguous_associated_items",
415f9996aaSopenharmony_ci  "-W",
425f9996aaSopenharmony_ci  "arithmetic_overflow",
435f9996aaSopenharmony_ci  "-W",
445f9996aaSopenharmony_ci  "bindings_with_variant_name",
455f9996aaSopenharmony_ci  "-W",
465f9996aaSopenharmony_ci  "cenum_impl_drop_cast",
475f9996aaSopenharmony_ci  "-W",
485f9996aaSopenharmony_ci  "conflicting_repr_hints",
495f9996aaSopenharmony_ci  "-W",
505f9996aaSopenharmony_ci  "deprecated_cfg_attr_crate_type_name",
515f9996aaSopenharmony_ci  "-W",
525f9996aaSopenharmony_ci  "enum_intrinsics_non_enums",
535f9996aaSopenharmony_ci  "-W",
545f9996aaSopenharmony_ci  "ill_formed_attribute_input",
555f9996aaSopenharmony_ci  "-W",
565f9996aaSopenharmony_ci  "implied_bounds_entailment",
575f9996aaSopenharmony_ci  "-W",
585f9996aaSopenharmony_ci  "incomplete_include",
595f9996aaSopenharmony_ci  "-W",
605f9996aaSopenharmony_ci  "ineffective_unstable_trait_impl",
615f9996aaSopenharmony_ci  "-W",
625f9996aaSopenharmony_ci  "invalid_atomic_ordering",
635f9996aaSopenharmony_ci  "-W",
645f9996aaSopenharmony_ci  "invalid_type_param_default",
655f9996aaSopenharmony_ci  "-W",
665f9996aaSopenharmony_ci  "let_underscore_lock",
675f9996aaSopenharmony_ci  "-W",
685f9996aaSopenharmony_ci  "macro_expanded_macro_exports_accessed_by_absolute_paths",
695f9996aaSopenharmony_ci  "-W",
705f9996aaSopenharmony_ci  "missing_fragment_specifier",
715f9996aaSopenharmony_ci  "-W",
725f9996aaSopenharmony_ci  "mutable_transmutes",
735f9996aaSopenharmony_ci  "-W",
745f9996aaSopenharmony_ci  "named_asm_labels",
755f9996aaSopenharmony_ci  "-W",
765f9996aaSopenharmony_ci  "no_mangle_const_items",
775f9996aaSopenharmony_ci  "-W",
785f9996aaSopenharmony_ci  "order_dependent_trait_objects",
795f9996aaSopenharmony_ci  "-W",
805f9996aaSopenharmony_ci  "overflowing_literals",
815f9996aaSopenharmony_ci  "-W",
825f9996aaSopenharmony_ci  "patterns_in_fns_without_body",
835f9996aaSopenharmony_ci  "-W",
845f9996aaSopenharmony_ci  "proc_macro_back_compat",
855f9996aaSopenharmony_ci  "-W",
865f9996aaSopenharmony_ci  "proc_macro_derive_resolution_fallback",
875f9996aaSopenharmony_ci  "-W",
885f9996aaSopenharmony_ci  "pub_use_of_private_extern_crate",
895f9996aaSopenharmony_ci  "-W",
905f9996aaSopenharmony_ci  "soft_unstable",
915f9996aaSopenharmony_ci  "-W",
925f9996aaSopenharmony_ci  "test_unstable_lint",
935f9996aaSopenharmony_ci  "-W",
945f9996aaSopenharmony_ci  "text_direction_codepoint_in_comment",
955f9996aaSopenharmony_ci  "-W",
965f9996aaSopenharmony_ci  "text_direction_codepoint_in_literal",
975f9996aaSopenharmony_ci  "-W",
985f9996aaSopenharmony_ci  "unconditional_panic",
995f9996aaSopenharmony_ci  "-W",
1005f9996aaSopenharmony_ci  "unknown_crate_types",
1015f9996aaSopenharmony_ci  "-W",
1025f9996aaSopenharmony_ci  "useless_deprecated",
1035f9996aaSopenharmony_ci]
1045f9996aaSopenharmony_ciclippyOhosLints = [
1055f9996aaSopenharmony_ci  "-A",
1065f9996aaSopenharmony_ci  "clippy::type-complexity",
1075f9996aaSopenharmony_ci  "-A",
1085f9996aaSopenharmony_ci  "clippy::unnecessary-wraps",
1095f9996aaSopenharmony_ci  "-A",
1105f9996aaSopenharmony_ci  "clippy::unusual-byte-groupings",
1115f9996aaSopenharmony_ci  "-A",
1125f9996aaSopenharmony_ci  "clippy::upper-case-acronyms",
1135f9996aaSopenharmony_ci  "-A",
1145f9996aaSopenharmony_ci  "clippy::let_and_return",
1155f9996aaSopenharmony_ci  "-A",
1165f9996aaSopenharmony_ci  "clippy::unnecessary-cast",
1175f9996aaSopenharmony_ci]
1185f9996aaSopenharmony_ciclippyVendorLints = [
1195f9996aaSopenharmony_ci  "-A",
1205f9996aaSopenharmony_ci  "clippy::complexity",
1215f9996aaSopenharmony_ci  "-A",
1225f9996aaSopenharmony_ci  "clippy::perf",
1235f9996aaSopenharmony_ci  "-A",
1245f9996aaSopenharmony_ci  "clippy::style",
1255f9996aaSopenharmony_ci]
1265f9996aaSopenharmony_ciclippyAllWarningLints = [
1275f9996aaSopenharmony_ci  "-W",
1285f9996aaSopenharmony_ci  "clippy::all",
1295f9996aaSopenharmony_ci  "-W",
1305f9996aaSopenharmony_ci  "clippy::pedantic",
1315f9996aaSopenharmony_ci  "-W",
1325f9996aaSopenharmony_ci  "clippy::restriction",
1335f9996aaSopenharmony_ci]
1345f9996aaSopenharmony_ci
1355f9996aaSopenharmony_citemplate("rust_target") {
1365f9996aaSopenharmony_ci  assert(!defined(invoker.crate_root) ||
1375f9996aaSopenharmony_ci         !(defined(invoker.generate_crate_root) && invoker.generate_crate_root))
1385f9996aaSopenharmony_ci
1395f9996aaSopenharmony_ci  _crate_name = target_name
1405f9996aaSopenharmony_ci  if (defined(invoker.crate_name)) {
1415f9996aaSopenharmony_ci    _crate_name = invoker.crate_name
1425f9996aaSopenharmony_ci  }
1435f9996aaSopenharmony_ci  _crate_type = ""
1445f9996aaSopenharmony_ci  if (defined(invoker.crate_type)) {
1455f9996aaSopenharmony_ci    _crate_type = invoker.crate_type
1465f9996aaSopenharmony_ci  }
1475f9996aaSopenharmony_ci  _deps = []
1485f9996aaSopenharmony_ci  if (defined(invoker.deps)) {
1495f9996aaSopenharmony_ci    _deps += invoker.deps
1505f9996aaSopenharmony_ci  }
1515f9996aaSopenharmony_ci
1525f9996aaSopenharmony_ci  _rustflags = [ "-Zstack-protector=all" ]
1535f9996aaSopenharmony_ci  if (defined(invoker.rustflags)) {
1545f9996aaSopenharmony_ci    _rustflags += invoker.rustflags
1555f9996aaSopenharmony_ci  }
1565f9996aaSopenharmony_ci
1575f9996aaSopenharmony_ci  _public_deps = []
1585f9996aaSopenharmony_ci  if (defined(invoker.public_deps)) {
1595f9996aaSopenharmony_ci    _public_deps += invoker.public_deps
1605f9996aaSopenharmony_ci  }
1615f9996aaSopenharmony_ci
1625f9996aaSopenharmony_ci  if (defined(invoker.output_dir) && invoker.output_dir != "") {
1635f9996aaSopenharmony_ci    _out_dir = invoker.output_dir
1645f9996aaSopenharmony_ci  } else {
1655f9996aaSopenharmony_ci    _out_dir = target_out_dir
1665f9996aaSopenharmony_ci  }
1675f9996aaSopenharmony_ci
1685f9996aaSopenharmony_ci  if (defined(invoker.features)) {
1695f9996aaSopenharmony_ci    foreach(i, invoker.features) {
1705f9996aaSopenharmony_ci      _rustflags += [ "--cfg=feature=\"${i}\"" ]
1715f9996aaSopenharmony_ci    }
1725f9996aaSopenharmony_ci  }
1735f9996aaSopenharmony_ci  _rustenv = [ "OUT_DIR=" + rebase_path(_out_dir) ]
1745f9996aaSopenharmony_ci  if (defined(invoker.rustenv)) {
1755f9996aaSopenharmony_ci    _rustenv += invoker.rustenv
1765f9996aaSopenharmony_ci  }
1775f9996aaSopenharmony_ci
1785f9996aaSopenharmony_ci  assert(defined(invoker.sources), "sources must be listed")
1795f9996aaSopenharmony_ci
1805f9996aaSopenharmony_ci  _rust_deps = _deps
1815f9996aaSopenharmony_ci  _rust_public_deps = _public_deps
1825f9996aaSopenharmony_ci
1835f9996aaSopenharmony_ci  _edition = rust_default_edition
1845f9996aaSopenharmony_ci  if (defined(invoker.edition)) {
1855f9996aaSopenharmony_ci    _edition = invoker.edition
1865f9996aaSopenharmony_ci  }
1875f9996aaSopenharmony_ci  _rustflags += [ string_join("",
1885f9996aaSopenharmony_ci                              [
1895f9996aaSopenharmony_ci                                "--edition=",
1905f9996aaSopenharmony_ci                                _edition,
1915f9996aaSopenharmony_ci                              ]) ]
1925f9996aaSopenharmony_ci  if (invoker.target_type == "rust_proc_macro") {
1935f9996aaSopenharmony_ci    _rustflags += [
1945f9996aaSopenharmony_ci      "--extern",
1955f9996aaSopenharmony_ci      "proc_macro",
1965f9996aaSopenharmony_ci    ]
1975f9996aaSopenharmony_ci  }
1985f9996aaSopenharmony_ci
1995f9996aaSopenharmony_ci  if (is_asan) {
2005f9996aaSopenharmony_ci    if (use_hwasan) {
2015f9996aaSopenharmony_ci      _rustflags += [
2025f9996aaSopenharmony_ci        "-Clink-arg=-fsanitize=hwaddress",
2035f9996aaSopenharmony_ci        "-Clink-arg=-shared-libasan",
2045f9996aaSopenharmony_ci      ]
2055f9996aaSopenharmony_ci    } else {
2065f9996aaSopenharmony_ci      _rustflags += [
2075f9996aaSopenharmony_ci        "-Clink-arg=-fsanitize=address",
2085f9996aaSopenharmony_ci        "-Clink-arg=-shared-libasan",
2095f9996aaSopenharmony_ci      ]
2105f9996aaSopenharmony_ci    }
2115f9996aaSopenharmony_ci  }
2125f9996aaSopenharmony_ci
2135f9996aaSopenharmony_ci  if (is_tsan && !is_mingw && !is_win) {
2145f9996aaSopenharmony_ci    _rustflags += [
2155f9996aaSopenharmony_ci      "-Clink-arg=-fsanitize=thread",
2165f9996aaSopenharmony_ci      "-Clink-arg=-shared-libasan",
2175f9996aaSopenharmony_ci    ]
2185f9996aaSopenharmony_ci  }
2195f9996aaSopenharmony_ci
2205f9996aaSopenharmony_ci  target(invoker.target_type, "${target_name}") {
2215f9996aaSopenharmony_ci    forward_variables_from(invoker,
2225f9996aaSopenharmony_ci                           "*",
2235f9996aaSopenharmony_ci                           [
2245f9996aaSopenharmony_ci                             "features",
2255f9996aaSopenharmony_ci                             "deps",
2265f9996aaSopenharmony_ci                             "public_deps",
2275f9996aaSopenharmony_ci                             "rustflags",
2285f9996aaSopenharmony_ci                             "rustenv",
2295f9996aaSopenharmony_ci
2305f9996aaSopenharmony_ci                             # "configs",
2315f9996aaSopenharmony_ci                             "output_dir",
2325f9996aaSopenharmony_ci                             "crate_type",
2335f9996aaSopenharmony_ci                           ])
2345f9996aaSopenharmony_ci    crate_name = _crate_name
2355f9996aaSopenharmony_ci
2365f9996aaSopenharmony_ci    deps = _rust_deps
2375f9996aaSopenharmony_ci    public_deps = _rust_public_deps
2385f9996aaSopenharmony_ci    rustflags = _rustflags
2395f9996aaSopenharmony_ci    rustenv = _rustenv
2405f9996aaSopenharmony_ci    crate_type = _crate_type
2415f9996aaSopenharmony_ci    if (target_type == "rust_proc_macro") {
2425f9996aaSopenharmony_ci      output_dir = _out_dir
2435f9996aaSopenharmony_ci    }
2445f9996aaSopenharmony_ci    if (!defined(output_name) || output_name == "") {
2455f9996aaSopenharmony_ci      output_name = crate_name
2465f9996aaSopenharmony_ci    }
2475f9996aaSopenharmony_ci    if (use_clang_coverage == true) {
2485f9996aaSopenharmony_ci      if (!defined(ldflags)) {
2495f9996aaSopenharmony_ci        ldflags = []
2505f9996aaSopenharmony_ci      }
2515f9996aaSopenharmony_ci      ldflags += [ "-Wl,--undefined-version" ]
2525f9996aaSopenharmony_ci      rustflags += [
2535f9996aaSopenharmony_ci        "-Cinstrument-coverage",
2545f9996aaSopenharmony_ci        "-Clink-dead-code",
2555f9996aaSopenharmony_ci        "-Zprofile",
2565f9996aaSopenharmony_ci        "-Ccodegen-units=1",
2575f9996aaSopenharmony_ci      ]
2585f9996aaSopenharmony_ci    }
2595f9996aaSopenharmony_ci  }
2605f9996aaSopenharmony_ci}
2615f9996aaSopenharmony_ci
2625f9996aaSopenharmony_citemplate("ohos_rust_executable") {
2635f9996aaSopenharmony_ci  _target_name = target_name
2645f9996aaSopenharmony_ci  _rustflags = []
2655f9996aaSopenharmony_ci  rust_target("$_target_name") {
2665f9996aaSopenharmony_ci    target_type = "ohos_executable"
2675f9996aaSopenharmony_ci    forward_variables_from(invoker, "*")
2685f9996aaSopenharmony_ci    if (!defined(invoker.crate_name)) {
2695f9996aaSopenharmony_ci      crate_name = _target_name
2705f9996aaSopenharmony_ci    }
2715f9996aaSopenharmony_ci    crate_type = "bin"
2725f9996aaSopenharmony_ci    if (defined(invoker.crate_type)) {
2735f9996aaSopenharmony_ci      assert(invoker.crate_type == crate_type,
2745f9996aaSopenharmony_ci             "crate_type should be $crate_type or use default value.")
2755f9996aaSopenharmony_ci    }
2765f9996aaSopenharmony_ci    configs = []
2775f9996aaSopenharmony_ci    if (!defined(deps)) {
2785f9996aaSopenharmony_ci      deps = []
2795f9996aaSopenharmony_ci    }
2805f9996aaSopenharmony_ci    if (defined(invoker.rustc_lints)) {
2815f9996aaSopenharmony_ci      rustc_lints = invoker.rustc_lints
2825f9996aaSopenharmony_ci    }
2835f9996aaSopenharmony_ci    if (defined(invoker.clippy_lints)) {
2845f9996aaSopenharmony_ci      clippy_lints = invoker.clippy_lints
2855f9996aaSopenharmony_ci    }
2865f9996aaSopenharmony_ci
2875f9996aaSopenharmony_ci    if (defined(rustc_codecheck) && rustc_codecheck) {
2885f9996aaSopenharmony_ci      rustc_lints = "allWarning"
2895f9996aaSopenharmony_ci      clippy_lints = "allWarning"
2905f9996aaSopenharmony_ci    }
2915f9996aaSopenharmony_ci
2925f9996aaSopenharmony_ci    if (!defined(rustc_lints) && !defined(clippy_lints)) {
2935f9996aaSopenharmony_ci      file_path =
2945f9996aaSopenharmony_ci          get_path_info(get_path_info(invoker.sources, "dir"), "abspath")
2955f9996aaSopenharmony_ci      file_path_split = string_split(file_path[0], "/")
2965f9996aaSopenharmony_ci      source_dir_begin = file_path_split[2]
2975f9996aaSopenharmony_ci
2985f9996aaSopenharmony_ci      if (defined(invoker.install_images)) {
2995f9996aaSopenharmony_ci        install_images = []
3005f9996aaSopenharmony_ci        install_images = invoker.install_images
3015f9996aaSopenharmony_ci      }
3025f9996aaSopenharmony_ci
3035f9996aaSopenharmony_ci      if (source_dir_begin == "third_party") {
3045f9996aaSopenharmony_ci        _rustflags += allowAllLints
3055f9996aaSopenharmony_ci      } else if (source_dir_begin == "prebuilts") {
3065f9996aaSopenharmony_ci        _rustflags += allowAllLints
3075f9996aaSopenharmony_ci      } else if (source_dir_begin == "vendor" &&
3085f9996aaSopenharmony_ci                 file_path_split[3] == "open_source") {
3095f9996aaSopenharmony_ci        _rustflags += allowAllLints
3105f9996aaSopenharmony_ci      } else if (source_dir_begin == "vendor") {
3115f9996aaSopenharmony_ci        _rustflags += rustcVendorLints
3125f9996aaSopenharmony_ci        _rustflags += clippyVendorLints
3135f9996aaSopenharmony_ci      } else if (source_dir_begin == "device") {
3145f9996aaSopenharmony_ci        _rustflags += rustcVendorLints
3155f9996aaSopenharmony_ci        _rustflags += clippyVendorLints
3165f9996aaSopenharmony_ci      } else {
3175f9996aaSopenharmony_ci        _rustflags += rustcOhosLints
3185f9996aaSopenharmony_ci        _rustflags += clippyOhosLints
3195f9996aaSopenharmony_ci      }
3205f9996aaSopenharmony_ci    }
3215f9996aaSopenharmony_ci
3225f9996aaSopenharmony_ci    if (defined(rustc_lints)) {
3235f9996aaSopenharmony_ci      if (rustc_lints == "openharmony") {
3245f9996aaSopenharmony_ci        _rustflags += rustcOhosLints
3255f9996aaSopenharmony_ci      } else if (rustc_lints == "vendor") {
3265f9996aaSopenharmony_ci        _rustflags += rustcVendorLints
3275f9996aaSopenharmony_ci      } else if (rustc_lints == "none") {
3285f9996aaSopenharmony_ci        _rustflags += allowAllLints
3295f9996aaSopenharmony_ci      } else if (rustc_lints == "allWarning") {
3305f9996aaSopenharmony_ci        _rustflags += rustcAllWarningLints
3315f9996aaSopenharmony_ci      }
3325f9996aaSopenharmony_ci    }
3335f9996aaSopenharmony_ci    if (defined(clippy_lints)) {
3345f9996aaSopenharmony_ci      if (clippy_lints == "openharmony") {
3355f9996aaSopenharmony_ci        _rustflags += clippyOhosLints
3365f9996aaSopenharmony_ci      } else if (clippy_lints == "vendor") {
3375f9996aaSopenharmony_ci        _rustflags += clippyVendorLints
3385f9996aaSopenharmony_ci      } else if (clippy_lints == "none") {
3395f9996aaSopenharmony_ci        _rustflags += allowAllLints
3405f9996aaSopenharmony_ci      } else if (clippy_lints == "allWarning") {
3415f9996aaSopenharmony_ci        _rustflags += clippyAllWarningLints
3425f9996aaSopenharmony_ci      }
3435f9996aaSopenharmony_ci    }
3445f9996aaSopenharmony_ci    if (!defined(rustflags)) {
3455f9996aaSopenharmony_ci      rustflags = _rustflags
3465f9996aaSopenharmony_ci    } else {
3475f9996aaSopenharmony_ci      rustflags += _rustflags
3485f9996aaSopenharmony_ci    }
3495f9996aaSopenharmony_ci    if (!defined(rust_static_link) || !rust_static_link) {
3505f9996aaSopenharmony_ci      rustflags += [ "-Cprefer-dynamic" ]
3515f9996aaSopenharmony_ci    }
3525f9996aaSopenharmony_ci  }
3535f9996aaSopenharmony_ci}
3545f9996aaSopenharmony_ci
3555f9996aaSopenharmony_citemplate("ohos_rust_shared_library") {
3565f9996aaSopenharmony_ci  _target_name = target_name
3575f9996aaSopenharmony_ci  _rustflags = []
3585f9996aaSopenharmony_ci  rust_target("$_target_name") {
3595f9996aaSopenharmony_ci    target_type = "ohos_rust_library"
3605f9996aaSopenharmony_ci    forward_variables_from(invoker, "*")
3615f9996aaSopenharmony_ci    if (!defined(invoker.crate_name)) {
3625f9996aaSopenharmony_ci      crate_name = _target_name
3635f9996aaSopenharmony_ci    }
3645f9996aaSopenharmony_ci    crate_type = "dylib"
3655f9996aaSopenharmony_ci    if (defined(invoker.crate_type)) {
3665f9996aaSopenharmony_ci      assert(invoker.crate_type == crate_type,
3675f9996aaSopenharmony_ci             "crate_type should be $crate_type or use default value.")
3685f9996aaSopenharmony_ci    }
3695f9996aaSopenharmony_ci
3705f9996aaSopenharmony_ci    if (defined(invoker.output_extension)) {
3715f9996aaSopenharmony_ci      module_output_extension = "." + invoker.output_extension
3725f9996aaSopenharmony_ci    } else {
3735f9996aaSopenharmony_ci      module_output_extension = dylib_extension
3745f9996aaSopenharmony_ci    }
3755f9996aaSopenharmony_ci
3765f9996aaSopenharmony_ci    if (defined(invoker.rustc_lints)) {
3775f9996aaSopenharmony_ci      rustc_lints = invoker.rustc_lints
3785f9996aaSopenharmony_ci    }
3795f9996aaSopenharmony_ci    if (defined(invoker.clippy_lints)) {
3805f9996aaSopenharmony_ci      clippy_lints = invoker.clippy_lints
3815f9996aaSopenharmony_ci    }
3825f9996aaSopenharmony_ci
3835f9996aaSopenharmony_ci    if (defined(rustc_codecheck) && rustc_codecheck) {
3845f9996aaSopenharmony_ci      rustc_lints = "allWarning"
3855f9996aaSopenharmony_ci      clippy_lints = "allWarning"
3865f9996aaSopenharmony_ci    }
3875f9996aaSopenharmony_ci
3885f9996aaSopenharmony_ci    if (!defined(rustc_lints) && !defined(clippy_lints)) {
3895f9996aaSopenharmony_ci      file_path =
3905f9996aaSopenharmony_ci          get_path_info(get_path_info(invoker.sources, "dir"), "abspath")
3915f9996aaSopenharmony_ci      file_path_split = string_split(file_path[0], "/")
3925f9996aaSopenharmony_ci      source_dir_begin = file_path_split[2]
3935f9996aaSopenharmony_ci
3945f9996aaSopenharmony_ci      if (source_dir_begin == "third_party") {
3955f9996aaSopenharmony_ci        _rustflags += allowAllLints
3965f9996aaSopenharmony_ci      } else if (source_dir_begin == "prebuilts") {
3975f9996aaSopenharmony_ci        _rustflags += allowAllLints
3985f9996aaSopenharmony_ci      } else if (source_dir_begin == "vendor" &&
3995f9996aaSopenharmony_ci                 file_path_split[3] == "open_source") {
4005f9996aaSopenharmony_ci        _rustflags += allowAllLints
4015f9996aaSopenharmony_ci      } else if (source_dir_begin == "vendor") {
4025f9996aaSopenharmony_ci        _rustflags += rustcVendorLints
4035f9996aaSopenharmony_ci        _rustflags += clippyVendorLints
4045f9996aaSopenharmony_ci      } else if (source_dir_begin == "device") {
4055f9996aaSopenharmony_ci        _rustflags += rustcVendorLints
4065f9996aaSopenharmony_ci        _rustflags += clippyVendorLints
4075f9996aaSopenharmony_ci      } else {
4085f9996aaSopenharmony_ci        _rustflags += rustcOhosLints
4095f9996aaSopenharmony_ci        _rustflags += clippyOhosLints
4105f9996aaSopenharmony_ci      }
4115f9996aaSopenharmony_ci    }
4125f9996aaSopenharmony_ci
4135f9996aaSopenharmony_ci    if (defined(invoker.install_images)) {
4145f9996aaSopenharmony_ci      install_images = []
4155f9996aaSopenharmony_ci      install_images = invoker.install_images
4165f9996aaSopenharmony_ci    }
4175f9996aaSopenharmony_ci
4185f9996aaSopenharmony_ci    if (defined(rustc_lints)) {
4195f9996aaSopenharmony_ci      if (rustc_lints == "openharmony") {
4205f9996aaSopenharmony_ci        _rustflags += rustcOhosLints
4215f9996aaSopenharmony_ci      } else if (rustc_lints == "vendor") {
4225f9996aaSopenharmony_ci        _rustflags += rustcVendorLints
4235f9996aaSopenharmony_ci      } else if (rustc_lints == "none") {
4245f9996aaSopenharmony_ci        _rustflags += allowAllLints
4255f9996aaSopenharmony_ci      } else if (rustc_lints == "allWarning") {
4265f9996aaSopenharmony_ci        _rustflags += rustcAllWarningLints
4275f9996aaSopenharmony_ci      }
4285f9996aaSopenharmony_ci    }
4295f9996aaSopenharmony_ci    if (defined(clippy_lints)) {
4305f9996aaSopenharmony_ci      if (clippy_lints == "openharmony") {
4315f9996aaSopenharmony_ci        _rustflags += clippyOhosLints
4325f9996aaSopenharmony_ci      } else if (clippy_lints == "vendor") {
4335f9996aaSopenharmony_ci        _rustflags += clippyVendorLints
4345f9996aaSopenharmony_ci      } else if (clippy_lints == "none") {
4355f9996aaSopenharmony_ci        _rustflags += allowAllLints
4365f9996aaSopenharmony_ci      } else if (clippy_lints == "allWarning") {
4375f9996aaSopenharmony_ci        _rustflags += clippyAllWarningLints
4385f9996aaSopenharmony_ci      }
4395f9996aaSopenharmony_ci    }
4405f9996aaSopenharmony_ci    if (!defined(rustflags)) {
4415f9996aaSopenharmony_ci      rustflags = _rustflags
4425f9996aaSopenharmony_ci    } else {
4435f9996aaSopenharmony_ci      rustflags += _rustflags
4445f9996aaSopenharmony_ci    }
4455f9996aaSopenharmony_ci  }
4465f9996aaSopenharmony_ci}
4475f9996aaSopenharmony_ci
4485f9996aaSopenharmony_citemplate("ohos_rust_static_library") {
4495f9996aaSopenharmony_ci  _target_name = target_name
4505f9996aaSopenharmony_ci  _rustflags = []
4515f9996aaSopenharmony_ci  rust_target("$_target_name") {
4525f9996aaSopenharmony_ci    target_type = "ohos_rust_library"
4535f9996aaSopenharmony_ci    forward_variables_from(invoker, "*")
4545f9996aaSopenharmony_ci    if (!defined(invoker.crate_name)) {
4555f9996aaSopenharmony_ci      crate_name = _target_name
4565f9996aaSopenharmony_ci    }
4575f9996aaSopenharmony_ci    crate_type = "rlib"
4585f9996aaSopenharmony_ci    if (defined(invoker.crate_type)) {
4595f9996aaSopenharmony_ci      assert(invoker.crate_type == crate_type,
4605f9996aaSopenharmony_ci             "crate_type should be $crate_type or use default value.")
4615f9996aaSopenharmony_ci    }
4625f9996aaSopenharmony_ci    module_output_extension = rlib_extension
4635f9996aaSopenharmony_ci    install_enable = false
4645f9996aaSopenharmony_ci
4655f9996aaSopenharmony_ci    if (defined(invoker.rustc_lints)) {
4665f9996aaSopenharmony_ci      rustc_lints = invoker.rustc_lints
4675f9996aaSopenharmony_ci    }
4685f9996aaSopenharmony_ci    if (defined(invoker.clippy_lints)) {
4695f9996aaSopenharmony_ci      clippy_lints = invoker.clippy_lints
4705f9996aaSopenharmony_ci    }
4715f9996aaSopenharmony_ci
4725f9996aaSopenharmony_ci    if (defined(rustc_codecheck) && rustc_codecheck) {
4735f9996aaSopenharmony_ci      rustc_lints = "allWarning"
4745f9996aaSopenharmony_ci      clippy_lints = "allWarning"
4755f9996aaSopenharmony_ci    }
4765f9996aaSopenharmony_ci
4775f9996aaSopenharmony_ci    if (!defined(rustc_lints) && !defined(clippy_lints)) {
4785f9996aaSopenharmony_ci      file_path =
4795f9996aaSopenharmony_ci          get_path_info(get_path_info(invoker.sources, "dir"), "abspath")
4805f9996aaSopenharmony_ci      file_path_split = string_split(file_path[0], "/")
4815f9996aaSopenharmony_ci      source_dir_begin = file_path_split[2]
4825f9996aaSopenharmony_ci
4835f9996aaSopenharmony_ci      if (source_dir_begin == "third_party") {
4845f9996aaSopenharmony_ci        _rustflags += allowAllLints
4855f9996aaSopenharmony_ci      } else if (source_dir_begin == "prebuilts") {
4865f9996aaSopenharmony_ci        _rustflags += allowAllLints
4875f9996aaSopenharmony_ci      } else if (source_dir_begin == "vendor" &&
4885f9996aaSopenharmony_ci                 file_path_split[3] == "open_source") {
4895f9996aaSopenharmony_ci        _rustflags += allowAllLints
4905f9996aaSopenharmony_ci      } else if (source_dir_begin == "vendor") {
4915f9996aaSopenharmony_ci        _rustflags += rustcVendorLints
4925f9996aaSopenharmony_ci        _rustflags += clippyVendorLints
4935f9996aaSopenharmony_ci      } else if (source_dir_begin == "device") {
4945f9996aaSopenharmony_ci        _rustflags += rustcVendorLints
4955f9996aaSopenharmony_ci        _rustflags += clippyVendorLints
4965f9996aaSopenharmony_ci      } else {
4975f9996aaSopenharmony_ci        _rustflags += rustcOhosLints
4985f9996aaSopenharmony_ci        _rustflags += clippyOhosLints
4995f9996aaSopenharmony_ci      }
5005f9996aaSopenharmony_ci    }
5015f9996aaSopenharmony_ci
5025f9996aaSopenharmony_ci    if (defined(invoker.install_images)) {
5035f9996aaSopenharmony_ci      install_images = []
5045f9996aaSopenharmony_ci      install_images = invoker.install_images
5055f9996aaSopenharmony_ci    }
5065f9996aaSopenharmony_ci
5075f9996aaSopenharmony_ci    if (defined(rustc_lints)) {
5085f9996aaSopenharmony_ci      if (rustc_lints == "openharmony") {
5095f9996aaSopenharmony_ci        _rustflags += rustcOhosLints
5105f9996aaSopenharmony_ci      } else if (rustc_lints == "vendor") {
5115f9996aaSopenharmony_ci        _rustflags += rustcVendorLints
5125f9996aaSopenharmony_ci      } else if (rustc_lints == "none") {
5135f9996aaSopenharmony_ci        _rustflags += allowAllLints
5145f9996aaSopenharmony_ci      } else if (rustc_lints == "allWarning") {
5155f9996aaSopenharmony_ci        _rustflags += rustcAllWarningLints
5165f9996aaSopenharmony_ci      }
5175f9996aaSopenharmony_ci    }
5185f9996aaSopenharmony_ci    if (defined(clippy_lints)) {
5195f9996aaSopenharmony_ci      if (clippy_lints == "openharmony") {
5205f9996aaSopenharmony_ci        _rustflags += clippyOhosLints
5215f9996aaSopenharmony_ci      } else if (clippy_lints == "vendor") {
5225f9996aaSopenharmony_ci        _rustflags += clippyVendorLints
5235f9996aaSopenharmony_ci      } else if (clippy_lints == "none") {
5245f9996aaSopenharmony_ci        _rustflags += allowAllLints
5255f9996aaSopenharmony_ci      } else if (clippy_lints == "allWarning") {
5265f9996aaSopenharmony_ci        _rustflags += clippyAllWarningLints
5275f9996aaSopenharmony_ci      }
5285f9996aaSopenharmony_ci    }
5295f9996aaSopenharmony_ci    if (!defined(rustflags)) {
5305f9996aaSopenharmony_ci      rustflags = _rustflags
5315f9996aaSopenharmony_ci    } else {
5325f9996aaSopenharmony_ci      rustflags += _rustflags
5335f9996aaSopenharmony_ci    }
5345f9996aaSopenharmony_ci  }
5355f9996aaSopenharmony_ci}
5365f9996aaSopenharmony_ci
5375f9996aaSopenharmony_citemplate("ohos_rust_shared_ffi") {
5385f9996aaSopenharmony_ci  _target_name = target_name
5395f9996aaSopenharmony_ci  _rustflags = []
5405f9996aaSopenharmony_ci  rust_target("$_target_name") {
5415f9996aaSopenharmony_ci    target_type = "ohos_shared_library"
5425f9996aaSopenharmony_ci    forward_variables_from(invoker, "*")
5435f9996aaSopenharmony_ci    if (!defined(invoker.crate_name)) {
5445f9996aaSopenharmony_ci      crate_name = _target_name
5455f9996aaSopenharmony_ci    }
5465f9996aaSopenharmony_ci    crate_type = "cdylib"
5475f9996aaSopenharmony_ci    if (defined(invoker.crate_type)) {
5485f9996aaSopenharmony_ci      assert(invoker.crate_type == crate_type,
5495f9996aaSopenharmony_ci             "crate_type should be $crate_type or use default value.")
5505f9996aaSopenharmony_ci    }
5515f9996aaSopenharmony_ci
5525f9996aaSopenharmony_ci    if (!defined(deps)) {
5535f9996aaSopenharmony_ci      deps = []
5545f9996aaSopenharmony_ci    }
5555f9996aaSopenharmony_ci
5565f9996aaSopenharmony_ci    if (defined(invoker.rustc_lints)) {
5575f9996aaSopenharmony_ci      rustc_lints = invoker.rustc_lints
5585f9996aaSopenharmony_ci    }
5595f9996aaSopenharmony_ci    if (defined(invoker.clippy_lints)) {
5605f9996aaSopenharmony_ci      clippy_lints = invoker.clippy_lints
5615f9996aaSopenharmony_ci    }
5625f9996aaSopenharmony_ci
5635f9996aaSopenharmony_ci    if (defined(rustc_codecheck) && rustc_codecheck) {
5645f9996aaSopenharmony_ci      rustc_lints = "allWarning"
5655f9996aaSopenharmony_ci      clippy_lints = "allWarning"
5665f9996aaSopenharmony_ci    }
5675f9996aaSopenharmony_ci
5685f9996aaSopenharmony_ci    if (!defined(rustc_lints) && !defined(clippy_lints)) {
5695f9996aaSopenharmony_ci      file_path =
5705f9996aaSopenharmony_ci          get_path_info(get_path_info(invoker.sources, "dir"), "abspath")
5715f9996aaSopenharmony_ci      file_path_split = string_split(file_path[0], "/")
5725f9996aaSopenharmony_ci      source_dir_begin = file_path_split[2]
5735f9996aaSopenharmony_ci
5745f9996aaSopenharmony_ci      if (source_dir_begin == "third_party") {
5755f9996aaSopenharmony_ci        _rustflags += allowAllLints
5765f9996aaSopenharmony_ci      } else if (source_dir_begin == "prebuilts") {
5775f9996aaSopenharmony_ci        _rustflags += allowAllLints
5785f9996aaSopenharmony_ci      } else if (source_dir_begin == "vendor" &&
5795f9996aaSopenharmony_ci                 file_path_split[3] == "open_source") {
5805f9996aaSopenharmony_ci        _rustflags += allowAllLints
5815f9996aaSopenharmony_ci      } else if (source_dir_begin == "vendor") {
5825f9996aaSopenharmony_ci        _rustflags += rustcVendorLints
5835f9996aaSopenharmony_ci        _rustflags += clippyVendorLints
5845f9996aaSopenharmony_ci      } else if (source_dir_begin == "device") {
5855f9996aaSopenharmony_ci        _rustflags += rustcVendorLints
5865f9996aaSopenharmony_ci        _rustflags += clippyVendorLints
5875f9996aaSopenharmony_ci      } else {
5885f9996aaSopenharmony_ci        _rustflags += rustcOhosLints
5895f9996aaSopenharmony_ci        _rustflags += clippyOhosLints
5905f9996aaSopenharmony_ci      }
5915f9996aaSopenharmony_ci    }
5925f9996aaSopenharmony_ci
5935f9996aaSopenharmony_ci    if (defined(invoker.install_images)) {
5945f9996aaSopenharmony_ci      install_images = []
5955f9996aaSopenharmony_ci      install_images = invoker.install_images
5965f9996aaSopenharmony_ci    }
5975f9996aaSopenharmony_ci
5985f9996aaSopenharmony_ci    if (defined(rustc_lints)) {
5995f9996aaSopenharmony_ci      if (rustc_lints == "openharmony") {
6005f9996aaSopenharmony_ci        _rustflags += rustcOhosLints
6015f9996aaSopenharmony_ci      } else if (rustc_lints == "vendor") {
6025f9996aaSopenharmony_ci        _rustflags += rustcVendorLints
6035f9996aaSopenharmony_ci      } else if (rustc_lints == "none") {
6045f9996aaSopenharmony_ci        _rustflags += allowAllLints
6055f9996aaSopenharmony_ci      } else if (rustc_lints == "allWarning") {
6065f9996aaSopenharmony_ci        _rustflags += rustcAllWarningLints
6075f9996aaSopenharmony_ci      }
6085f9996aaSopenharmony_ci    }
6095f9996aaSopenharmony_ci    if (defined(clippy_lints)) {
6105f9996aaSopenharmony_ci      if (clippy_lints == "openharmony") {
6115f9996aaSopenharmony_ci        _rustflags += clippyOhosLints
6125f9996aaSopenharmony_ci      } else if (clippy_lints == "vendor") {
6135f9996aaSopenharmony_ci        _rustflags += clippyVendorLints
6145f9996aaSopenharmony_ci      } else if (clippy_lints == "none") {
6155f9996aaSopenharmony_ci        _rustflags += allowAllLints
6165f9996aaSopenharmony_ci      } else if (clippy_lints == "allWarning") {
6175f9996aaSopenharmony_ci        _rustflags += clippyAllWarningLints
6185f9996aaSopenharmony_ci      }
6195f9996aaSopenharmony_ci    }
6205f9996aaSopenharmony_ci    if (!defined(rustflags)) {
6215f9996aaSopenharmony_ci      rustflags = _rustflags
6225f9996aaSopenharmony_ci    } else {
6235f9996aaSopenharmony_ci      rustflags += _rustflags
6245f9996aaSopenharmony_ci    }
6255f9996aaSopenharmony_ci  }
6265f9996aaSopenharmony_ci}
6275f9996aaSopenharmony_ci
6285f9996aaSopenharmony_citemplate("ohos_rust_static_ffi") {
6295f9996aaSopenharmony_ci  _target_name = target_name
6305f9996aaSopenharmony_ci  _rustflags = []
6315f9996aaSopenharmony_ci  rust_target("$_target_name") {
6325f9996aaSopenharmony_ci    target_type = "ohos_static_library"
6335f9996aaSopenharmony_ci    forward_variables_from(invoker, "*")
6345f9996aaSopenharmony_ci    if (!defined(invoker.crate_name)) {
6355f9996aaSopenharmony_ci      crate_name = _target_name
6365f9996aaSopenharmony_ci    }
6375f9996aaSopenharmony_ci    crate_type = "staticlib"
6385f9996aaSopenharmony_ci    if (defined(invoker.crate_type)) {
6395f9996aaSopenharmony_ci      assert(invoker.crate_type == crate_type,
6405f9996aaSopenharmony_ci             "crate_type should be $crate_type or use default value.")
6415f9996aaSopenharmony_ci    }
6425f9996aaSopenharmony_ci    if (!defined(deps)) {
6435f9996aaSopenharmony_ci      deps = []
6445f9996aaSopenharmony_ci    }
6455f9996aaSopenharmony_ci    if (defined(invoker.rustc_lints)) {
6465f9996aaSopenharmony_ci      rustc_lints = invoker.rustc_lints
6475f9996aaSopenharmony_ci    }
6485f9996aaSopenharmony_ci    if (defined(invoker.clippy_lints)) {
6495f9996aaSopenharmony_ci      clippy_lints = invoker.clippy_lints
6505f9996aaSopenharmony_ci    }
6515f9996aaSopenharmony_ci
6525f9996aaSopenharmony_ci    if (defined(rustc_codecheck) && rustc_codecheck) {
6535f9996aaSopenharmony_ci      rustc_lints = "allWarning"
6545f9996aaSopenharmony_ci      clippy_lints = "allWarning"
6555f9996aaSopenharmony_ci    }
6565f9996aaSopenharmony_ci
6575f9996aaSopenharmony_ci    if (!defined(rustc_lints) && !defined(clippy_lints)) {
6585f9996aaSopenharmony_ci      file_path =
6595f9996aaSopenharmony_ci          get_path_info(get_path_info(invoker.sources, "dir"), "abspath")
6605f9996aaSopenharmony_ci      file_path_split = string_split(file_path[0], "/")
6615f9996aaSopenharmony_ci      source_dir_begin = file_path_split[2]
6625f9996aaSopenharmony_ci
6635f9996aaSopenharmony_ci      if (source_dir_begin == "third_party") {
6645f9996aaSopenharmony_ci        _rustflags += allowAllLints
6655f9996aaSopenharmony_ci      } else if (source_dir_begin == "prebuilts") {
6665f9996aaSopenharmony_ci        _rustflags += allowAllLints
6675f9996aaSopenharmony_ci      } else if (source_dir_begin == "vendor" &&
6685f9996aaSopenharmony_ci                 file_path_split[3] == "open_source") {
6695f9996aaSopenharmony_ci        _rustflags += allowAllLints
6705f9996aaSopenharmony_ci      } else if (source_dir_begin == "vendor") {
6715f9996aaSopenharmony_ci        _rustflags += rustcVendorLints
6725f9996aaSopenharmony_ci        _rustflags += clippyVendorLints
6735f9996aaSopenharmony_ci      } else if (source_dir_begin == "device") {
6745f9996aaSopenharmony_ci        _rustflags += rustcVendorLints
6755f9996aaSopenharmony_ci        _rustflags += clippyVendorLints
6765f9996aaSopenharmony_ci      } else {
6775f9996aaSopenharmony_ci        _rustflags += rustcOhosLints
6785f9996aaSopenharmony_ci        _rustflags += clippyOhosLints
6795f9996aaSopenharmony_ci      }
6805f9996aaSopenharmony_ci    }
6815f9996aaSopenharmony_ci
6825f9996aaSopenharmony_ci    if (defined(invoker.install_images)) {
6835f9996aaSopenharmony_ci      install_images = []
6845f9996aaSopenharmony_ci      install_images = invoker.install_images
6855f9996aaSopenharmony_ci    }
6865f9996aaSopenharmony_ci
6875f9996aaSopenharmony_ci    if (defined(rustc_lints)) {
6885f9996aaSopenharmony_ci      if (rustc_lints == "openharmony") {
6895f9996aaSopenharmony_ci        _rustflags += rustcOhosLints
6905f9996aaSopenharmony_ci      } else if (rustc_lints == "vendor") {
6915f9996aaSopenharmony_ci        _rustflags += rustcVendorLints
6925f9996aaSopenharmony_ci      } else if (rustc_lints == "none") {
6935f9996aaSopenharmony_ci        _rustflags += allowAllLints
6945f9996aaSopenharmony_ci      } else if (rustc_lints == "allWarning") {
6955f9996aaSopenharmony_ci        _rustflags += rustcAllWarningLints
6965f9996aaSopenharmony_ci      }
6975f9996aaSopenharmony_ci    }
6985f9996aaSopenharmony_ci    if (defined(clippy_lints)) {
6995f9996aaSopenharmony_ci      if (clippy_lints == "openharmony") {
7005f9996aaSopenharmony_ci        _rustflags += clippyOhosLints
7015f9996aaSopenharmony_ci      } else if (clippy_lints == "vendor") {
7025f9996aaSopenharmony_ci        _rustflags += clippyVendorLints
7035f9996aaSopenharmony_ci      } else if (clippy_lints == "none") {
7045f9996aaSopenharmony_ci        _rustflags += allowAllLints
7055f9996aaSopenharmony_ci      } else if (clippy_lints == "allWarning") {
7065f9996aaSopenharmony_ci        _rustflags += clippyAllWarningLints
7075f9996aaSopenharmony_ci      }
7085f9996aaSopenharmony_ci    }
7095f9996aaSopenharmony_ci    if (!defined(rustflags)) {
7105f9996aaSopenharmony_ci      rustflags = _rustflags
7115f9996aaSopenharmony_ci    } else {
7125f9996aaSopenharmony_ci      rustflags += _rustflags
7135f9996aaSopenharmony_ci    }
7145f9996aaSopenharmony_ci  }
7155f9996aaSopenharmony_ci}
7165f9996aaSopenharmony_ci
7175f9996aaSopenharmony_citemplate("ohos_rust_proc_macro") {
7185f9996aaSopenharmony_ci  assert(!defined(invoker.output_dir),
7195f9996aaSopenharmony_ci         "output_dir is not allowed to be defined.")
7205f9996aaSopenharmony_ci  _test_target = defined(invoker.testonly) && invoker.testonly
7215f9996aaSopenharmony_ci  if (defined(invoker.subsystem_name) && defined(invoker.part_name)) {
7225f9996aaSopenharmony_ci    subsystem_name = invoker.subsystem_name
7235f9996aaSopenharmony_ci    part_name = invoker.part_name
7245f9996aaSopenharmony_ci  } else if (defined(invoker.part_name)) {
7255f9996aaSopenharmony_ci    part_name = invoker.part_name
7265f9996aaSopenharmony_ci    _part_subsystem_info_file =
7275f9996aaSopenharmony_ci        "$root_build_dir/build_configs/parts_info/part_subsystem.json"
7285f9996aaSopenharmony_ci    _arguments = [
7295f9996aaSopenharmony_ci      "--part-name",
7305f9996aaSopenharmony_ci      part_name,
7315f9996aaSopenharmony_ci      "--part-subsystem-info-file",
7325f9996aaSopenharmony_ci      rebase_path(_part_subsystem_info_file, root_build_dir),
7335f9996aaSopenharmony_ci    ]
7345f9996aaSopenharmony_ci    get_subsystem_script = "//build/templates/common/get_subsystem_name.py"
7355f9996aaSopenharmony_ci    subsystem_name =
7365f9996aaSopenharmony_ci        exec_script(get_subsystem_script, _arguments, "trim string")
7375f9996aaSopenharmony_ci    if (is_use_check_deps && !_test_target) {
7385f9996aaSopenharmony_ci      skip_check_subsystem = true
7395f9996aaSopenharmony_ci    }
7405f9996aaSopenharmony_ci  } else if (defined(invoker.subsystem_name)) {
7415f9996aaSopenharmony_ci    subsystem_name = invoker.subsystem_name
7425f9996aaSopenharmony_ci    part_name = subsystem_name
7435f9996aaSopenharmony_ci  } else {
7445f9996aaSopenharmony_ci    subsystem_name = "build"
7455f9996aaSopenharmony_ci    part_name = "build_framework"
7465f9996aaSopenharmony_ci  }
7475f9996aaSopenharmony_ci  assert(subsystem_name != "")
7485f9996aaSopenharmony_ci  assert(part_name != "")
7495f9996aaSopenharmony_ci  if (is_use_check_deps && !_test_target) {
7505f9996aaSopenharmony_ci    _check_target = "${target_name}__check"
7515f9996aaSopenharmony_ci    target_path = get_label_info(":${target_name}", "label_no_toolchain")
7525f9996aaSopenharmony_ci    check_target(_check_target) {
7535f9996aaSopenharmony_ci      module_deps = []
7545f9996aaSopenharmony_ci      if (defined(invoker.deps)) {
7555f9996aaSopenharmony_ci        module_deps += invoker.deps
7565f9996aaSopenharmony_ci      }
7575f9996aaSopenharmony_ci      if (defined(invoker.public_deps)) {
7585f9996aaSopenharmony_ci        module_deps += invoker.public_deps
7595f9996aaSopenharmony_ci      }
7605f9996aaSopenharmony_ci      if (defined(invoker.external_deps)) {
7615f9996aaSopenharmony_ci        module_ex_deps = invoker.external_deps
7625f9996aaSopenharmony_ci      }
7635f9996aaSopenharmony_ci    }
7645f9996aaSopenharmony_ci  }
7655f9996aaSopenharmony_ci  if (check_deps) {
7665f9996aaSopenharmony_ci    deps_data = {
7675f9996aaSopenharmony_ci    }
7685f9996aaSopenharmony_ci    module_label = get_label_info(":${target_name}", "label_with_toolchain")
7695f9996aaSopenharmony_ci    module_deps = []
7705f9996aaSopenharmony_ci    if (defined(invoker.deps)) {
7715f9996aaSopenharmony_ci      foreach(dep, invoker.deps) {
7725f9996aaSopenharmony_ci        module_deps += [ get_label_info(dep, "label_no_toolchain") ]
7735f9996aaSopenharmony_ci      }
7745f9996aaSopenharmony_ci    }
7755f9996aaSopenharmony_ci    module_ex_deps = []
7765f9996aaSopenharmony_ci    if (defined(invoker.external_deps) && invoker.external_deps != []) {
7775f9996aaSopenharmony_ci      module_ex_deps = invoker.external_deps
7785f9996aaSopenharmony_ci    }
7795f9996aaSopenharmony_ci    deps_data = {
7805f9996aaSopenharmony_ci      part_name = part_name
7815f9996aaSopenharmony_ci      module_label = module_label
7825f9996aaSopenharmony_ci      deps = module_deps
7835f9996aaSopenharmony_ci      external_deps = module_ex_deps
7845f9996aaSopenharmony_ci    }
7855f9996aaSopenharmony_ci    write_file("${root_out_dir}/deps_files/${part_name}__${target_name}.json",
7865f9996aaSopenharmony_ci               deps_data,
7875f9996aaSopenharmony_ci               "json")
7885f9996aaSopenharmony_ci  }
7895f9996aaSopenharmony_ci
7905f9996aaSopenharmony_ci  if (is_standard_system) {
7915f9996aaSopenharmony_ci    output_dir = "${root_out_dir}/${subsystem_name}/${part_name}"
7925f9996aaSopenharmony_ci  } else {
7935f9996aaSopenharmony_ci    output_dir = "${root_out_dir}"
7945f9996aaSopenharmony_ci  }
7955f9996aaSopenharmony_ci
7965f9996aaSopenharmony_ci  if (!_test_target) {
7975f9996aaSopenharmony_ci    module_label = get_label_info(":${target_name}", "label_with_toolchain")
7985f9996aaSopenharmony_ci    _collect_target = "${target_name}__collect"
7995f9996aaSopenharmony_ci    collect_module_target(_collect_target) {
8005f9996aaSopenharmony_ci      forward_variables_from(invoker, [ "install_images" ])
8015f9996aaSopenharmony_ci    }
8025f9996aaSopenharmony_ci
8035f9996aaSopenharmony_ci    _notice_target = "${target_name}__notice"
8045f9996aaSopenharmony_ci    _main_target_name = target_name
8055f9996aaSopenharmony_ci    collect_notice(_notice_target) {
8065f9996aaSopenharmony_ci      forward_variables_from(invoker,
8075f9996aaSopenharmony_ci                             [
8085f9996aaSopenharmony_ci                               "testonly",
8095f9996aaSopenharmony_ci                               "license_as_sources",
8105f9996aaSopenharmony_ci                               "license_file",
8115f9996aaSopenharmony_ci                             ])
8125f9996aaSopenharmony_ci
8135f9996aaSopenharmony_ci      module_name = _main_target_name
8145f9996aaSopenharmony_ci      module_source_dir = get_label_info(":${_main_target_name}", "dir")
8155f9996aaSopenharmony_ci    }
8165f9996aaSopenharmony_ci  }
8175f9996aaSopenharmony_ci
8185f9996aaSopenharmony_ci  target_label = get_label_info(":${target_name}", "label_with_toolchain")
8195f9996aaSopenharmony_ci  target_toolchain = get_label_info(target_label, "toolchain")
8205f9996aaSopenharmony_ci
8215f9996aaSopenharmony_ci  if (target_toolchain == "${current_toolchain}") {
8225f9996aaSopenharmony_ci    ohos_module_name = target_name
8235f9996aaSopenharmony_ci    _module_info_target = "${target_name}_info"
8245f9996aaSopenharmony_ci    generate_module_info(_module_info_target) {
8255f9996aaSopenharmony_ci      module_name = ohos_module_name
8265f9996aaSopenharmony_ci      module_type = "lib"
8275f9996aaSopenharmony_ci      module_source_dir = "$root_out_dir"
8285f9996aaSopenharmony_ci      if (defined(output_dir)) {
8295f9996aaSopenharmony_ci        module_source_dir = output_dir
8305f9996aaSopenharmony_ci      }
8315f9996aaSopenharmony_ci
8325f9996aaSopenharmony_ci      module_install_name = ohos_module_name
8335f9996aaSopenharmony_ci      if (defined(invoker.output_name)) {
8345f9996aaSopenharmony_ci        module_install_name = invoker.output_name
8355f9996aaSopenharmony_ci      }
8365f9996aaSopenharmony_ci
8375f9996aaSopenharmony_ci      module_install_images = [ "system" ]
8385f9996aaSopenharmony_ci      if (defined(invoker.install_images)) {
8395f9996aaSopenharmony_ci        module_install_images = []
8405f9996aaSopenharmony_ci        module_install_images += invoker.install_images
8415f9996aaSopenharmony_ci      }
8425f9996aaSopenharmony_ci
8435f9996aaSopenharmony_ci      module_output_extension = shlib_extension
8445f9996aaSopenharmony_ci      if (defined(invoker.output_extension)) {
8455f9996aaSopenharmony_ci        module_output_extension = "." + invoker.output_extension
8465f9996aaSopenharmony_ci      }
8475f9996aaSopenharmony_ci
8485f9996aaSopenharmony_ci      install_enable = true
8495f9996aaSopenharmony_ci      if (defined(invoker.install_enable)) {
8505f9996aaSopenharmony_ci        install_enable = invoker.install_enable
8515f9996aaSopenharmony_ci      }
8525f9996aaSopenharmony_ci
8535f9996aaSopenharmony_ci      if (defined(invoker.module_install_dir)) {
8545f9996aaSopenharmony_ci        module_install_dir = invoker.module_install_dir
8555f9996aaSopenharmony_ci      }
8565f9996aaSopenharmony_ci
8575f9996aaSopenharmony_ci      if (defined(invoker.relative_install_dir)) {
8585f9996aaSopenharmony_ci        relative_install_dir = invoker.relative_install_dir
8595f9996aaSopenharmony_ci      }
8605f9996aaSopenharmony_ci
8615f9996aaSopenharmony_ci      if (defined(invoker.symlink_target_name)) {
8625f9996aaSopenharmony_ci        symlink_target_name = invoker.symlink_target_name
8635f9996aaSopenharmony_ci      }
8645f9996aaSopenharmony_ci
8655f9996aaSopenharmony_ci      if (defined(invoker.output_prefix_override)) {
8665f9996aaSopenharmony_ci        output_prefix_override = invoker.output_prefix_override
8675f9996aaSopenharmony_ci      }
8685f9996aaSopenharmony_ci      notice = "$target_out_dir/$ohos_module_name.notice.txt"
8695f9996aaSopenharmony_ci    }
8705f9996aaSopenharmony_ci  }
8715f9996aaSopenharmony_ci
8725f9996aaSopenharmony_ci  _rustflags = []
8735f9996aaSopenharmony_ci  rust_target(target_name) {
8745f9996aaSopenharmony_ci    target_type = "rust_proc_macro"
8755f9996aaSopenharmony_ci    forward_variables_from(invoker,
8765f9996aaSopenharmony_ci                           "*",
8775f9996aaSopenharmony_ci                           [
8785f9996aaSopenharmony_ci                             "configs",
8795f9996aaSopenharmony_ci                             "remove_configs",
8805f9996aaSopenharmony_ci                             "no_default_deps",
8815f9996aaSopenharmony_ci                             "install_images",
8825f9996aaSopenharmony_ci                             "module_install_dir",
8835f9996aaSopenharmony_ci                             "relative_install_dir",
8845f9996aaSopenharmony_ci                             "symlink_target_name",
8855f9996aaSopenharmony_ci                             "output_dir",
8865f9996aaSopenharmony_ci                             "install_enable",
8875f9996aaSopenharmony_ci                             "version_script",
8885f9996aaSopenharmony_ci                             "license_file",
8895f9996aaSopenharmony_ci                             "license_as_sources",
8905f9996aaSopenharmony_ci                             "use_exceptions",
8915f9996aaSopenharmony_ci                             "stl",
8925f9996aaSopenharmony_ci
8935f9996aaSopenharmony_ci                             # Sanitizer variables
8945f9996aaSopenharmony_ci                             "sanitize",
8955f9996aaSopenharmony_ci                           ])
8965f9996aaSopenharmony_ci    if (!defined(invoker.crate_name)) {
8975f9996aaSopenharmony_ci      crate_name = _target_name
8985f9996aaSopenharmony_ci    }
8995f9996aaSopenharmony_ci    crate_type = "proc-macro"
9005f9996aaSopenharmony_ci    if (defined(invoker.crate_type)) {
9015f9996aaSopenharmony_ci      assert(invoker.crate_type == crate_type,
9025f9996aaSopenharmony_ci             "crate_type should be $crate_type or use default value.")
9035f9996aaSopenharmony_ci    }
9045f9996aaSopenharmony_ci
9055f9996aaSopenharmony_ci    output_dir = output_dir
9065f9996aaSopenharmony_ci
9075f9996aaSopenharmony_ci    if (!defined(inputs)) {
9085f9996aaSopenharmony_ci      inputs = []
9095f9996aaSopenharmony_ci    }
9105f9996aaSopenharmony_ci
9115f9996aaSopenharmony_ci    if (!defined(ldflags)) {
9125f9996aaSopenharmony_ci      ldflags = []
9135f9996aaSopenharmony_ci    }
9145f9996aaSopenharmony_ci
9155f9996aaSopenharmony_ci    if (defined(invoker.configs)) {
9165f9996aaSopenharmony_ci      configs += invoker.configs
9175f9996aaSopenharmony_ci    }
9185f9996aaSopenharmony_ci    if (defined(invoker.remove_configs)) {
9195f9996aaSopenharmony_ci      configs -= invoker.remove_configs
9205f9996aaSopenharmony_ci    }
9215f9996aaSopenharmony_ci
9225f9996aaSopenharmony_ci    if (!defined(output_name)) {
9235f9996aaSopenharmony_ci      output_name = target_name
9245f9996aaSopenharmony_ci    }
9255f9996aaSopenharmony_ci
9265f9996aaSopenharmony_ci    if (defined(invoker.no_default_deps)) {
9275f9996aaSopenharmony_ci      no_default_deps = invoker.no_default_deps
9285f9996aaSopenharmony_ci    }
9295f9996aaSopenharmony_ci
9305f9996aaSopenharmony_ci    if (!defined(libs)) {
9315f9996aaSopenharmony_ci      libs = []
9325f9996aaSopenharmony_ci    }
9335f9996aaSopenharmony_ci    if (!defined(cflags_cc)) {
9345f9996aaSopenharmony_ci      cflags_cc = []
9355f9996aaSopenharmony_ci    }
9365f9996aaSopenharmony_ci    if (!defined(deps)) {
9375f9996aaSopenharmony_ci      deps = []
9385f9996aaSopenharmony_ci    }
9395f9996aaSopenharmony_ci    if (is_use_check_deps && !_test_target) {
9405f9996aaSopenharmony_ci      deps += [ ":$_check_target" ]
9415f9996aaSopenharmony_ci    }
9425f9996aaSopenharmony_ci    if (target_toolchain == "${current_toolchain}" && !skip_gen_module_info) {
9435f9996aaSopenharmony_ci      deps += [ ":$_module_info_target" ]
9445f9996aaSopenharmony_ci    }
9455f9996aaSopenharmony_ci
9465f9996aaSopenharmony_ci    if (!_test_target) {
9475f9996aaSopenharmony_ci      deps += [
9485f9996aaSopenharmony_ci        ":$_notice_target",
9495f9996aaSopenharmony_ci        ":${_collect_target}",
9505f9996aaSopenharmony_ci      ]
9515f9996aaSopenharmony_ci    }
9525f9996aaSopenharmony_ci    if (!defined(include_dirs)) {
9535f9996aaSopenharmony_ci      include_dirs = []
9545f9996aaSopenharmony_ci    }
9555f9996aaSopenharmony_ci
9565f9996aaSopenharmony_ci    install_module_info = {
9575f9996aaSopenharmony_ci      module_def = target_label
9585f9996aaSopenharmony_ci      module_info_file =
9595f9996aaSopenharmony_ci          rebase_path(get_label_info(module_def, "target_out_dir"),
9605f9996aaSopenharmony_ci                      root_build_dir) + "/${target_name}_module_info.json"
9615f9996aaSopenharmony_ci      subsystem_name = subsystem_name
9625f9996aaSopenharmony_ci      part_name = part_name
9635f9996aaSopenharmony_ci      toolchain = current_toolchain
9645f9996aaSopenharmony_ci      toolchain_out_dir = rebase_path(root_out_dir, root_build_dir)
9655f9996aaSopenharmony_ci    }
9665f9996aaSopenharmony_ci    metadata = {
9675f9996aaSopenharmony_ci      install_modules = [ install_module_info ]
9685f9996aaSopenharmony_ci    }
9695f9996aaSopenharmony_ci    if (defined(is_debug) && !is_debug && enable_debug_components != "") {
9705f9996aaSopenharmony_ci      foreach(component_name, debug_components) {
9715f9996aaSopenharmony_ci        if (part_name == component_name) {
9725f9996aaSopenharmony_ci          configs -= default_opt_configs
9735f9996aaSopenharmony_ci          configs += debug_level_configs
9745f9996aaSopenharmony_ci        }
9755f9996aaSopenharmony_ci      }
9765f9996aaSopenharmony_ci    }
9775f9996aaSopenharmony_ci
9785f9996aaSopenharmony_ci    if (defined(invoker.rustc_lints)) {
9795f9996aaSopenharmony_ci      rustc_lints = invoker.rustc_lints
9805f9996aaSopenharmony_ci    }
9815f9996aaSopenharmony_ci    if (defined(invoker.clippy_lints)) {
9825f9996aaSopenharmony_ci      clippy_lints = invoker.clippy_lints
9835f9996aaSopenharmony_ci    }
9845f9996aaSopenharmony_ci
9855f9996aaSopenharmony_ci    if (defined(rustc_codecheck) && rustc_codecheck) {
9865f9996aaSopenharmony_ci      rustc_lints = "allWarning"
9875f9996aaSopenharmony_ci      clippy_lints = "allWarning"
9885f9996aaSopenharmony_ci    }
9895f9996aaSopenharmony_ci
9905f9996aaSopenharmony_ci    if (!defined(rustc_lints) && !defined(clippy_lints)) {
9915f9996aaSopenharmony_ci      file_path =
9925f9996aaSopenharmony_ci          get_path_info(get_path_info(invoker.sources, "dir"), "abspath")
9935f9996aaSopenharmony_ci      file_path_split = string_split(file_path[0], "/")
9945f9996aaSopenharmony_ci      source_dir_begin = file_path_split[2]
9955f9996aaSopenharmony_ci
9965f9996aaSopenharmony_ci      if (source_dir_begin == "third_party") {
9975f9996aaSopenharmony_ci        _rustflags += allowAllLints
9985f9996aaSopenharmony_ci      } else if (source_dir_begin == "prebuilts") {
9995f9996aaSopenharmony_ci        _rustflags += allowAllLints
10005f9996aaSopenharmony_ci      } else if (source_dir_begin == "vendor" &&
10015f9996aaSopenharmony_ci                 file_path_split[3] == "open_source") {
10025f9996aaSopenharmony_ci        _rustflags += allowAllLints
10035f9996aaSopenharmony_ci      } else if (source_dir_begin == "vendor") {
10045f9996aaSopenharmony_ci        _rustflags += rustcVendorLints
10055f9996aaSopenharmony_ci        _rustflags += clippyVendorLints
10065f9996aaSopenharmony_ci      } else if (source_dir_begin == "device") {
10075f9996aaSopenharmony_ci        _rustflags += rustcVendorLints
10085f9996aaSopenharmony_ci        _rustflags += clippyVendorLints
10095f9996aaSopenharmony_ci      } else {
10105f9996aaSopenharmony_ci        _rustflags += rustcOhosLints
10115f9996aaSopenharmony_ci        _rustflags += clippyOhosLints
10125f9996aaSopenharmony_ci      }
10135f9996aaSopenharmony_ci    }
10145f9996aaSopenharmony_ci
10155f9996aaSopenharmony_ci    if (defined(rustc_lints)) {
10165f9996aaSopenharmony_ci      if (rustc_lints == "openharmony") {
10175f9996aaSopenharmony_ci        _rustflags += rustcOhosLints
10185f9996aaSopenharmony_ci      } else if (rustc_lints == "vendor") {
10195f9996aaSopenharmony_ci        _rustflags += rustcVendorLints
10205f9996aaSopenharmony_ci      } else if (rustc_lints == "none") {
10215f9996aaSopenharmony_ci        _rustflags += allowAllLints
10225f9996aaSopenharmony_ci      } else if (rustc_lints == "allWarning") {
10235f9996aaSopenharmony_ci        _rustflags += rustcAllWarningLints
10245f9996aaSopenharmony_ci      }
10255f9996aaSopenharmony_ci    }
10265f9996aaSopenharmony_ci    if (defined(clippy_lints)) {
10275f9996aaSopenharmony_ci      if (clippy_lints == "openharmony") {
10285f9996aaSopenharmony_ci        _rustflags += clippyOhosLints
10295f9996aaSopenharmony_ci      } else if (clippy_lints == "vendor") {
10305f9996aaSopenharmony_ci        _rustflags += clippyVendorLints
10315f9996aaSopenharmony_ci      } else if (clippy_lints == "none") {
10325f9996aaSopenharmony_ci        _rustflags += allowAllLints
10335f9996aaSopenharmony_ci      } else if (clippy_lints == "allWarning") {
10345f9996aaSopenharmony_ci        _rustflags += clippyAllWarningLints
10355f9996aaSopenharmony_ci      }
10365f9996aaSopenharmony_ci    }
10375f9996aaSopenharmony_ci    if (!defined(rustflags)) {
10385f9996aaSopenharmony_ci      rustflags = _rustflags
10395f9996aaSopenharmony_ci    } else {
10405f9996aaSopenharmony_ci      rustflags += _rustflags
10415f9996aaSopenharmony_ci    }
10425f9996aaSopenharmony_ci  }
10435f9996aaSopenharmony_ci}
1044