13d8536b4Sopenharmony_ci# Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
23d8536b4Sopenharmony_ci# Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
33d8536b4Sopenharmony_ci#
43d8536b4Sopenharmony_ci# Redistribution and use in source and binary forms, with or without modification,
53d8536b4Sopenharmony_ci# are permitted provided that the following conditions are met:
63d8536b4Sopenharmony_ci#
73d8536b4Sopenharmony_ci# 1. Redistributions of source code must retain the above copyright notice, this list of
83d8536b4Sopenharmony_ci#    conditions and the following disclaimer.
93d8536b4Sopenharmony_ci#
103d8536b4Sopenharmony_ci# 2. Redistributions in binary form must reproduce the above copyright notice, this list
113d8536b4Sopenharmony_ci#    of conditions and the following disclaimer in the documentation and/or other materials
123d8536b4Sopenharmony_ci#    provided with the distribution.
133d8536b4Sopenharmony_ci#
143d8536b4Sopenharmony_ci# 3. Neither the name of the copyright holder nor the names of its contributors may be used
153d8536b4Sopenharmony_ci#    to endorse or promote products derived from this software without specific prior written
163d8536b4Sopenharmony_ci#    permission.
173d8536b4Sopenharmony_ci#
183d8536b4Sopenharmony_ci# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
193d8536b4Sopenharmony_ci# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
203d8536b4Sopenharmony_ci# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
213d8536b4Sopenharmony_ci# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
223d8536b4Sopenharmony_ci# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
233d8536b4Sopenharmony_ci# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
243d8536b4Sopenharmony_ci# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
253d8536b4Sopenharmony_ci# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
263d8536b4Sopenharmony_ci# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
273d8536b4Sopenharmony_ci# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
283d8536b4Sopenharmony_ci# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
293d8536b4Sopenharmony_ci
303d8536b4Sopenharmony_ciimport("//build/lite/config/component/lite_component.gni")
313d8536b4Sopenharmony_ci
323d8536b4Sopenharmony_ciLITEOS_MENUCONFIG_H = rebase_path("$root_out_dir/config.h")
333d8536b4Sopenharmony_ci
343d8536b4Sopenharmony_ciliteos_config_file = "${ohos_build_type}.config"
353d8536b4Sopenharmony_ci
363d8536b4Sopenharmony_ciliteos_config_file =
373d8536b4Sopenharmony_ci    rebase_path(liteos_config_file, "", "$product_path/kernel_configs")
383d8536b4Sopenharmony_ciprint("liteos_config_file:", liteos_config_file)
393d8536b4Sopenharmony_ci
403d8536b4Sopenharmony_ciexec_script("//build/lite/run_shell_cmd.py",
413d8536b4Sopenharmony_ci            [ "env" + " CONFIG_=LOSCFG_" + " KCONFIG_CONFIG_HEADER='y=true'" +
423d8536b4Sopenharmony_ci                  " KCONFIG_CONFIG=$liteos_config_file" +
433d8536b4Sopenharmony_ci                  " BOARD_COMPANY=$device_company" +
443d8536b4Sopenharmony_ci                  " DEVICE_PATH=$device_path" + " srctree=" + rebase_path(".") +
453d8536b4Sopenharmony_ci                  " genconfig" + " --header-path $LITEOS_MENUCONFIG_H" +
463d8536b4Sopenharmony_ci                  " --file-list kconfig_files.txt" +
473d8536b4Sopenharmony_ci                  " --env-list kconfig_env.txt" + " --config-out config.gni" ],
483d8536b4Sopenharmony_ci            "",
493d8536b4Sopenharmony_ci            [ liteos_config_file ])
503d8536b4Sopenharmony_ci
513d8536b4Sopenharmony_ciimport("$root_out_dir/config.gni")
523d8536b4Sopenharmony_ci
533d8536b4Sopenharmony_ciLITEOSTOPDIR = "//kernel/liteos_m"
543d8536b4Sopenharmony_ciHDFTOPDIR = "//drivers/hdf_core/adapter/khdf/liteos_m"
553d8536b4Sopenharmony_ciTHIRDPARTY_BOUNDS_CHECKING_FUNCTION_DIR =
563d8536b4Sopenharmony_ci    "//third_party/bounds_checking_function"
573d8536b4Sopenharmony_ciLITEOSTHIRDPARTY = "//third_party"
583d8536b4Sopenharmony_ciTHIRDPARTY_FATFS_DIR = "//third_party/FatFs"
593d8536b4Sopenharmony_ciTHIRDPARTY_MUSL_DIR = "//third_party/musl"
603d8536b4Sopenharmony_ciTHIRDPARTY_LITTLEFS_DIR = "//third_party/littlefs"
613d8536b4Sopenharmony_ciTHIRDPARTY_CMSIS_DIR = "//third_party/cmsis"
623d8536b4Sopenharmony_ciTHIRDPARTY_LWIP_DIR = "//third_party/lwip"
633d8536b4Sopenharmony_ciDEVICE_BOARD_DIR = "//device/board"
643d8536b4Sopenharmony_ciDEVICE_SOC_DIR = "//device/soc"
653d8536b4Sopenharmony_ciCOMMONLIBRARY_UTILS_LITE_DIR = "//commonlibrary/utils_lite"
663d8536b4Sopenharmony_ciTEST_XTS_TOOLS_DIR = "//test/xts/tools"
673d8536b4Sopenharmony_ci
683d8536b4Sopenharmony_ciARCH = ""
693d8536b4Sopenharmony_ciif (defined(LOSCFG_ARCH_ARM_AARCH32)) {
703d8536b4Sopenharmony_ci  ARCH = "arm"
713d8536b4Sopenharmony_ci} else if (defined(LOSCFG_ARCH_ARM_AARCH64)) {
723d8536b4Sopenharmony_ci  ARCH = "aarch64"
733d8536b4Sopenharmony_ci} else if (defined(LOSCFG_ARCH_RISCV32)) {
743d8536b4Sopenharmony_ci  ARCH = "rv32imac"
753d8536b4Sopenharmony_ci} else if (defined(LOSCFG_ARCH_CSKY)) {
763d8536b4Sopenharmony_ci  ARCH = "csky"
773d8536b4Sopenharmony_ci} else if (defined(LOSCFG_ARCH_XTENSA)) {
783d8536b4Sopenharmony_ci  ARCH = "xtensa"
793d8536b4Sopenharmony_ci}
803d8536b4Sopenharmony_ci
813d8536b4Sopenharmony_citemplate("kernel_module") {
823d8536b4Sopenharmony_ci  build_gn = rebase_path("BUILD.gn")
833d8536b4Sopenharmony_ci  cmd = "grep -c '^\s*\(kernel_module\|hdf_driver\)\s*(\s*\S*\s*)\s*{\s*\$' $build_gn"
843d8536b4Sopenharmony_ci  modules_count = exec_script("//build/lite/run_shell_cmd.py", [ cmd ], "value")
853d8536b4Sopenharmony_ci  if (modules_count == 1) {
863d8536b4Sopenharmony_ci    auto_config = true
873d8536b4Sopenharmony_ci  }
883d8536b4Sopenharmony_ci
893d8536b4Sopenharmony_ci  cmd = "if grep -q '^\s*\(config\s*(\s*\"public\"\s*)\|module_group\s*(\s*\"\S*\"\s*)\)\s*{\s*\$' $build_gn; then echo true; else echo false; fi"
903d8536b4Sopenharmony_ci  has_public_config =
913d8536b4Sopenharmony_ci      exec_script("//build/lite/run_shell_cmd.py", [ cmd ], "value")
923d8536b4Sopenharmony_ci  if (!has_public_config && defined(auto_config)) {
933d8536b4Sopenharmony_ci    config("public") {
943d8536b4Sopenharmony_ci      configs = []
953d8536b4Sopenharmony_ci    }
963d8536b4Sopenharmony_ci  }
973d8536b4Sopenharmony_ci
983d8536b4Sopenharmony_ci  current_dir_name = get_path_info(rebase_path("."), "file")
993d8536b4Sopenharmony_ci  if (target_name != current_dir_name) {
1003d8536b4Sopenharmony_ci    cmd = "if grep -q '^\s*\(module_group\|group\)\s*(\s*\"$current_dir_name\"\s*)\s*{\s*\$' $build_gn; then echo true; else echo false; fi"
1013d8536b4Sopenharmony_ci    has_current_dir_group =
1023d8536b4Sopenharmony_ci        exec_script("//build/lite/run_shell_cmd.py", [ cmd ], "value")
1033d8536b4Sopenharmony_ci    if (!has_current_dir_group && defined(auto_config)) {
1043d8536b4Sopenharmony_ci      module_name = target_name
1053d8536b4Sopenharmony_ci      group(current_dir_name) {
1063d8536b4Sopenharmony_ci        public_deps = [ ":$module_name" ]
1073d8536b4Sopenharmony_ci      }
1083d8536b4Sopenharmony_ci    }
1093d8536b4Sopenharmony_ci  }
1103d8536b4Sopenharmony_ci
1113d8536b4Sopenharmony_ci  if (defined(invoker.module_switch) && !invoker.module_switch) {
1123d8536b4Sopenharmony_ci    group(target_name) {
1133d8536b4Sopenharmony_ci      not_needed(invoker, "*")
1143d8536b4Sopenharmony_ci    }
1153d8536b4Sopenharmony_ci  } else {
1163d8536b4Sopenharmony_ci    source_set(target_name) {
1173d8536b4Sopenharmony_ci      public_configs = []
1183d8536b4Sopenharmony_ci      forward_variables_from(invoker, "*", [ "configs" ])
1193d8536b4Sopenharmony_ci      configs += invoker.configs
1203d8536b4Sopenharmony_ci      if (has_public_config) {
1213d8536b4Sopenharmony_ci        included_public_config = false
1223d8536b4Sopenharmony_ci        foreach(cfg, public_configs) {
1233d8536b4Sopenharmony_ci          what = "label_no_toolchain"
1243d8536b4Sopenharmony_ci          if (get_label_info(cfg, what) == get_label_info(":public", what)) {
1253d8536b4Sopenharmony_ci            included_public_config = true
1263d8536b4Sopenharmony_ci          }
1273d8536b4Sopenharmony_ci        }
1283d8536b4Sopenharmony_ci        if (!included_public_config) {
1293d8536b4Sopenharmony_ci          public_configs += [ ":public" ]
1303d8536b4Sopenharmony_ci        }
1313d8536b4Sopenharmony_ci      }
1323d8536b4Sopenharmony_ci    }
1333d8536b4Sopenharmony_ci  }
1343d8536b4Sopenharmony_ci  not_needed([ "auto_config" ])
1353d8536b4Sopenharmony_ci}
1363d8536b4Sopenharmony_ci
1373d8536b4Sopenharmony_citemplate("config") {
1383d8536b4Sopenharmony_ci  config(target_name) {
1393d8536b4Sopenharmony_ci    if (defined(invoker.module_switch) && !invoker.module_switch &&
1403d8536b4Sopenharmony_ci        target_name == "public") {
1413d8536b4Sopenharmony_ci      not_needed(invoker, "*")
1423d8536b4Sopenharmony_ci      forward_variables_from(invoker, [ "configs" ])
1433d8536b4Sopenharmony_ci    } else {
1443d8536b4Sopenharmony_ci      forward_variables_from(invoker, "*")
1453d8536b4Sopenharmony_ci    }
1463d8536b4Sopenharmony_ci  }
1473d8536b4Sopenharmony_ci}
1483d8536b4Sopenharmony_ci
1493d8536b4Sopenharmony_citemplate("module_group") {
1503d8536b4Sopenharmony_ci  assert(defined(invoker.modules), "modules are must")
1513d8536b4Sopenharmony_ci  group(target_name) {
1523d8536b4Sopenharmony_ci    deps = []
1533d8536b4Sopenharmony_ci    foreach(m, invoker.modules) {
1543d8536b4Sopenharmony_ci      deps += [ m ]
1553d8536b4Sopenharmony_ci    }
1563d8536b4Sopenharmony_ci    if (defined(invoker.deps)) {
1573d8536b4Sopenharmony_ci      deps += invoker.deps
1583d8536b4Sopenharmony_ci    }
1593d8536b4Sopenharmony_ci  }
1603d8536b4Sopenharmony_ci  config("public") {
1613d8536b4Sopenharmony_ci    configs = []
1623d8536b4Sopenharmony_ci    foreach(m, invoker.modules) {
1633d8536b4Sopenharmony_ci      configs += [ "$m:public" ]
1643d8536b4Sopenharmony_ci    }
1653d8536b4Sopenharmony_ci    if (defined(invoker.configs)) {
1663d8536b4Sopenharmony_ci      configs += invoker.configs
1673d8536b4Sopenharmony_ci    }
1683d8536b4Sopenharmony_ci  }
1693d8536b4Sopenharmony_ci}
1703d8536b4Sopenharmony_ci
1713d8536b4Sopenharmony_ciset_defaults("kernel_module") {
1723d8536b4Sopenharmony_ci  configs = [
1733d8536b4Sopenharmony_ci    "$LITEOSTOPDIR:public",
1743d8536b4Sopenharmony_ci    "$LITEOSTOPDIR:los_config",
1753d8536b4Sopenharmony_ci  ]
1763d8536b4Sopenharmony_ci  visibility = [
1773d8536b4Sopenharmony_ci    ":*",
1783d8536b4Sopenharmony_ci    "$LITEOSTOPDIR:*",
1793d8536b4Sopenharmony_ci    "..:*",
1803d8536b4Sopenharmony_ci    "../..:*",
1813d8536b4Sopenharmony_ci  ]
1823d8536b4Sopenharmony_ci}
183