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