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/templates/cxx/cxx.gni")
155f9996aaSopenharmony_ci
165f9996aaSopenharmony_ciallowAllLints = [
175f9996aaSopenharmony_ci  "--cap-lints",
185f9996aaSopenharmony_ci  "allow",
195f9996aaSopenharmony_ci]
205f9996aaSopenharmony_cirustcOhosLints = [
215f9996aaSopenharmony_ci  "-A",
225f9996aaSopenharmony_ci  "deprecated",
235f9996aaSopenharmony_ci  "-D",
245f9996aaSopenharmony_ci  "missing-docs",
255f9996aaSopenharmony_ci  "-D",
265f9996aaSopenharmony_ci  "warnings",
275f9996aaSopenharmony_ci]
285f9996aaSopenharmony_cirustcVendorLints = [
295f9996aaSopenharmony_ci  "-A",
305f9996aaSopenharmony_ci  "deprecated",
315f9996aaSopenharmony_ci  "-D",
325f9996aaSopenharmony_ci  "warnings",
335f9996aaSopenharmony_ci]
345f9996aaSopenharmony_ciclippyOhosLints = [
355f9996aaSopenharmony_ci  "-A",
365f9996aaSopenharmony_ci  "clippy::type-complexity",
375f9996aaSopenharmony_ci  "-A",
385f9996aaSopenharmony_ci  "clippy::unnecessary-wraps",
395f9996aaSopenharmony_ci  "-A",
405f9996aaSopenharmony_ci  "clippy::unusual-byte-groupings",
415f9996aaSopenharmony_ci  "-A",
425f9996aaSopenharmony_ci  "clippy::upper-case-acronyms",
435f9996aaSopenharmony_ci]
445f9996aaSopenharmony_ciclippyVendorLints = [
455f9996aaSopenharmony_ci  "-A",
465f9996aaSopenharmony_ci  "clippy::complexity",
475f9996aaSopenharmony_ci  "-A",
485f9996aaSopenharmony_ci  "clippy::perf",
495f9996aaSopenharmony_ci  "-A",
505f9996aaSopenharmony_ci  "clippy::style",
515f9996aaSopenharmony_ci]
525f9996aaSopenharmony_ci
535f9996aaSopenharmony_citemplate("rust_target_lints") {
545f9996aaSopenharmony_ci  _target_name = target_name
555f9996aaSopenharmony_ci  _crate_name = target_name
565f9996aaSopenharmony_ci  _crate_type = invoker.crate_type
575f9996aaSopenharmony_ci  _target_type = invoker.target_type
585f9996aaSopenharmony_ci  _rustflags = [ "-Zstack-protector=all" ]
595f9996aaSopenharmony_ci
605f9996aaSopenharmony_ci  target(_target_type, "$_target_name") {
615f9996aaSopenharmony_ci    forward_variables_from(invoker, "*")
625f9996aaSopenharmony_ci    crate_name = _crate_name
635f9996aaSopenharmony_ci    crate_type = _crate_type
645f9996aaSopenharmony_ci
655f9996aaSopenharmony_ci    if (defined(invoker.rustc_lints)) {
665f9996aaSopenharmony_ci      rustc_lints = invoker.rustc_lints
675f9996aaSopenharmony_ci    }
685f9996aaSopenharmony_ci    if (defined(invoker.clippy_lints)) {
695f9996aaSopenharmony_ci      clippy_lints = invoker.clippy_lints
705f9996aaSopenharmony_ci    }
715f9996aaSopenharmony_ci    if (!defined(rustc_lints) && !defined(clippy_lints)) {
725f9996aaSopenharmony_ci      file_path =
735f9996aaSopenharmony_ci          get_path_info(get_path_info(invoker.sources, "dir"), "abspath")
745f9996aaSopenharmony_ci      file_path_split = string_split(file_path[0], "/")
755f9996aaSopenharmony_ci      source_dir_begin = file_path_split[2]
765f9996aaSopenharmony_ci      print(source_dir_begin)
775f9996aaSopenharmony_ci      if (source_dir_begin == "openharmony") {
785f9996aaSopenharmony_ci        _rustflags += allowAllLints
795f9996aaSopenharmony_ci      } else if (source_dir_begin == "prebuilts") {
805f9996aaSopenharmony_ci        _rustflags += allowAllLints
815f9996aaSopenharmony_ci      } else if (source_dir_begin == "vendor") {
825f9996aaSopenharmony_ci        _rustflags += rustcVendorLints
835f9996aaSopenharmony_ci        _rustflags += clippyVendorLints
845f9996aaSopenharmony_ci      } else if (source_dir_begin == "device") {
855f9996aaSopenharmony_ci        _rustflags += rustcVendorLints
865f9996aaSopenharmony_ci        _rustflags += clippyVendorLints
875f9996aaSopenharmony_ci      } else {
885f9996aaSopenharmony_ci        _rustflags += rustcOhosLints
895f9996aaSopenharmony_ci        _rustflags += clippyOhosLints
905f9996aaSopenharmony_ci      }
915f9996aaSopenharmony_ci    }
925f9996aaSopenharmony_ci
935f9996aaSopenharmony_ci    if (defined(rustc_lints)) {
945f9996aaSopenharmony_ci      if (invoker.rustc_lints == "openharmony") {
955f9996aaSopenharmony_ci        _rustflags += rustcOhosLints
965f9996aaSopenharmony_ci      } else if (rustc_lints == "vendor") {
975f9996aaSopenharmony_ci        _rustflags += rustcVendorLints
985f9996aaSopenharmony_ci      } else if (rustc_lints == "none") {
995f9996aaSopenharmony_ci        _rustflags += allowAllLints
1005f9996aaSopenharmony_ci      }
1015f9996aaSopenharmony_ci    }
1025f9996aaSopenharmony_ci    if (defined(clippy_lints)) {
1035f9996aaSopenharmony_ci      if (invoker.clippy_lints == "openharmony") {
1045f9996aaSopenharmony_ci        _rustflags += clippyOhosLints
1055f9996aaSopenharmony_ci      } else if (clippy_lints == "vendor") {
1065f9996aaSopenharmony_ci        _rustflags += clippyVendorLints
1075f9996aaSopenharmony_ci      } else if (clippy_lints == "none") {
1085f9996aaSopenharmony_ci        _rustflags += allowAllLints
1095f9996aaSopenharmony_ci      }
1105f9996aaSopenharmony_ci    }
1115f9996aaSopenharmony_ci    if (!defined(rustflags)) {
1125f9996aaSopenharmony_ci      rustflags = _rustflags
1135f9996aaSopenharmony_ci    } else {
1145f9996aaSopenharmony_ci      rustflags += _rustflags
1155f9996aaSopenharmony_ci    }
1165f9996aaSopenharmony_ci  }
1175f9996aaSopenharmony_ci}
118