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