15f9996aaSopenharmony_ci# Copyright (c) 2020 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_ciimport("//build/lite/ohos_var.gni")
145f9996aaSopenharmony_ciimport("${device_path}/config.gni")
155f9996aaSopenharmony_ci
165f9996aaSopenharmony_ciif (target_os == "") {
175f9996aaSopenharmony_ci  target_os = "ohos"
185f9996aaSopenharmony_ci}
195f9996aaSopenharmony_ci
205f9996aaSopenharmony_ciif (target_cpu == "") {
215f9996aaSopenharmony_ci  target_cpu = board_cpu
225f9996aaSopenharmony_ci}
235f9996aaSopenharmony_ci
245f9996aaSopenharmony_citarget_arch_cflags = board_cflags
255f9996aaSopenharmony_ciif (board_arch != "") {
265f9996aaSopenharmony_ci  target_arch_cflags += [ "-march=$board_arch" ]
275f9996aaSopenharmony_ci}
285f9996aaSopenharmony_ciif (board_cpu != "") {
295f9996aaSopenharmony_ci  target_arch_cflags += [ "-mcpu=$board_cpu" ]
305f9996aaSopenharmony_ci}
315f9996aaSopenharmony_ci
325f9996aaSopenharmony_ciarch = "arm"
335f9996aaSopenharmony_ciif (ohos_kernel_type == "liteos_a") {
345f9996aaSopenharmony_ci  target_triple = "$arch-liteos-ohos"
355f9996aaSopenharmony_ci} else if (ohos_kernel_type == "linux") {
365f9996aaSopenharmony_ci  target_triple = "$arch-linux-ohos"
375f9996aaSopenharmony_ci}
385f9996aaSopenharmony_ci
395f9996aaSopenharmony_ciif (defined(board_configed_sysroot) && board_configed_sysroot != "") {
405f9996aaSopenharmony_ci  ohos_current_sysroot = board_configed_sysroot
415f9996aaSopenharmony_ci}
425f9996aaSopenharmony_ci
435f9996aaSopenharmony_ci# Only gcc available for liteos_m.
445f9996aaSopenharmony_ciif (ohos_kernel_type == "liteos_m" || ohos_kernel_type == "uniproton" ||
455f9996aaSopenharmony_ci    ohos_kernel_type == "linux") {
465f9996aaSopenharmony_ci  use_board_toolchain = true
475f9996aaSopenharmony_ci}
485f9996aaSopenharmony_ci
495f9996aaSopenharmony_citoolchain_cmd_suffix = ""
505f9996aaSopenharmony_ciif (host_os == "win") {
515f9996aaSopenharmony_ci  toolchain_cmd_suffix = ".exe"
525f9996aaSopenharmony_ci}
535f9996aaSopenharmony_ci
545f9996aaSopenharmony_ci# enable ccache if ccache is installed,
555f9996aaSopenharmony_ci# or enable xcache if xcache is installed.
565f9996aaSopenharmony_ciif (ohos_build_enable_ccache) {
575f9996aaSopenharmony_ci  compile_prefix = "ccache "
585f9996aaSopenharmony_ci} else if (ohos_build_enable_xcache) {
595f9996aaSopenharmony_ci  compile_prefix = "opt/buildtools/nextbuild/xcache "
605f9996aaSopenharmony_ci} else {
615f9996aaSopenharmony_ci  compile_prefix = ""
625f9996aaSopenharmony_ci}
635f9996aaSopenharmony_ci
645f9996aaSopenharmony_ci# Load board adapter dir from board config.
655f9996aaSopenharmony_ciif (board_adapter_dir != "") {
665f9996aaSopenharmony_ci  ohos_board_adapter_dir = board_adapter_dir
675f9996aaSopenharmony_ci  ohos_vendor_adapter_dir = board_adapter_dir
685f9996aaSopenharmony_ci}
695f9996aaSopenharmony_ci
705f9996aaSopenharmony_ci# Set current toolchain with to board configuration.
715f9996aaSopenharmony_ciif (board_toolchain != "" && use_board_toolchain) {
725f9996aaSopenharmony_ci  ohos_build_compiler = board_toolchain_type
735f9996aaSopenharmony_ci  if (board_toolchain_path != "") {
745f9996aaSopenharmony_ci    compile_prefix += "${board_toolchain_path}/${board_toolchain_prefix}"
755f9996aaSopenharmony_ci  } else {
765f9996aaSopenharmony_ci    compile_prefix += "${board_toolchain_prefix}"
775f9996aaSopenharmony_ci  }
785f9996aaSopenharmony_ci  set_default_toolchain("//build/lite/toolchain:${board_toolchain}")
795f9996aaSopenharmony_ci  if (board_toolchain_type == "gcc") {
805f9996aaSopenharmony_ci    ohos_current_cc_command = "${compile_prefix}gcc$toolchain_cmd_suffix"
815f9996aaSopenharmony_ci    ohos_current_cxx_command = "${compile_prefix}g++$toolchain_cmd_suffix"
825f9996aaSopenharmony_ci    ohos_current_ar_command = "${compile_prefix}ar$toolchain_cmd_suffix"
835f9996aaSopenharmony_ci    ohos_current_ld_command = ohos_current_cc_command
845f9996aaSopenharmony_ci    ohos_current_strip_command =
855f9996aaSopenharmony_ci        "${compile_prefix}strip$toolchain_cmd_suffix --strip-unneeded"
865f9996aaSopenharmony_ci    default_target_configs = [ "//build/lite/config:gcc_opt" ]
875f9996aaSopenharmony_ci  } else if (board_toolchain_type == "clang") {
885f9996aaSopenharmony_ci    ohos_current_cc_command = "${compile_prefix}clang$toolchain_cmd_suffix"
895f9996aaSopenharmony_ci    ohos_current_cxx_command = "${compile_prefix}clang++$toolchain_cmd_suffix"
905f9996aaSopenharmony_ci    compile_prefix += "llvm-"
915f9996aaSopenharmony_ci    ohos_current_ar_command = "${compile_prefix}ar$toolchain_cmd_suffix"
925f9996aaSopenharmony_ci    ohos_current_ld_command = ohos_current_cc_command
935f9996aaSopenharmony_ci    ohos_current_strip_command =
945f9996aaSopenharmony_ci        "${compile_prefix}strip$toolchain_cmd_suffix --strip-unneeded"
955f9996aaSopenharmony_ci    default_target_configs = [ "//build/lite/config:clang_opt" ]
965f9996aaSopenharmony_ci  } else if (board_toolchain_type == "iccarm") {
975f9996aaSopenharmony_ci    ohos_current_cc_command = "${compile_prefix}iccarm$toolchain_cmd_suffix"
985f9996aaSopenharmony_ci    ohos_current_cxx_command = "${compile_prefix}iccarm$toolchain_cmd_suffix"
995f9996aaSopenharmony_ci    ohos_current_ar_command = "${compile_prefix}iarchive$toolchain_cmd_suffix"
1005f9996aaSopenharmony_ci    ohos_current_as_command = "${compile_prefix}iasmarm$toolchain_cmd_suffix"
1015f9996aaSopenharmony_ci    ohos_current_ld_command = "${compile_prefix}ilinkarm$toolchain_cmd_suffix"
1025f9996aaSopenharmony_ci  }
1035f9996aaSopenharmony_ci
1045f9996aaSopenharmony_ci  # Overwrite ld cmd by customed cmd.
1055f9996aaSopenharmony_ci  if (defined(board_customed_ld_cmd) && board_customed_ld_cmd != "") {
1065f9996aaSopenharmony_ci    ohos_current_ld_command = board_customed_ld_cmd
1075f9996aaSopenharmony_ci  }
1085f9996aaSopenharmony_ci} else {
1095f9996aaSopenharmony_ci  # OHOS default toolchain
1105f9996aaSopenharmony_ci  ohos_build_compiler = "clang"
1115f9996aaSopenharmony_ci  ohos_clang_toolchain_dir = rebase_path("${ohos_build_compiler_dir}/bin")
1125f9996aaSopenharmony_ci  compile_prefix += "$ohos_clang_toolchain_dir/"
1135f9996aaSopenharmony_ci  ohos_current_cc_command = "${compile_prefix}clang$toolchain_cmd_suffix"
1145f9996aaSopenharmony_ci  ohos_current_cxx_command = "${compile_prefix}clang++$toolchain_cmd_suffix"
1155f9996aaSopenharmony_ci  compile_prefix += "llvm-"
1165f9996aaSopenharmony_ci  ohos_current_ar_command = "${compile_prefix}ar$toolchain_cmd_suffix"
1175f9996aaSopenharmony_ci  ohos_current_ld_command = ohos_current_cxx_command
1185f9996aaSopenharmony_ci  ohos_current_strip_command =
1195f9996aaSopenharmony_ci      "${compile_prefix}strip$toolchain_cmd_suffix --strip-unneeded"
1205f9996aaSopenharmony_ci  set_default_toolchain("//build/lite/toolchain:linux_x86_64_ohos_clang")
1215f9996aaSopenharmony_ci  default_target_configs = [ "//build/lite/config:ohos_clang" ]
1225f9996aaSopenharmony_ci  default_target_configs += [ "//build/lite/config:clang_opt" ]
1235f9996aaSopenharmony_ci}
1245f9996aaSopenharmony_ci
1255f9996aaSopenharmony_ciif (board_toolchain_type != "iccarm") {
1265f9996aaSopenharmony_ci  default_target_configs += [
1275f9996aaSopenharmony_ci    "//build/lite/config:board_config",
1285f9996aaSopenharmony_ci    "//build/lite/config:cpu_arch",
1295f9996aaSopenharmony_ci    "//build/lite/config:common",
1305f9996aaSopenharmony_ci    "//build/lite/config:default_link_path",
1315f9996aaSopenharmony_ci    "//build/lite/config:language_c",
1325f9996aaSopenharmony_ci    "//build/lite/config:language_cpp",
1335f9996aaSopenharmony_ci    "//build/lite/config:kernel_macros",
1345f9996aaSopenharmony_ci  ]
1355f9996aaSopenharmony_ci  if (ohos_build_type == "debug") {
1365f9996aaSopenharmony_ci    default_target_configs += [ "//build/lite/config:debug" ]
1375f9996aaSopenharmony_ci  } else if (ohos_build_type == "release") {
1385f9996aaSopenharmony_ci    default_target_configs += [ "//build/lite/config:release" ]
1395f9996aaSopenharmony_ci  }
1405f9996aaSopenharmony_ci
1415f9996aaSopenharmony_ci  if (ohos_kernel_type == "liteos_m") {
1425f9996aaSopenharmony_ci    default_target_configs += [ "//build/lite/config:stack_protector" ]
1435f9996aaSopenharmony_ci  }
1445f9996aaSopenharmony_ci}
1455f9996aaSopenharmony_ci
1465f9996aaSopenharmony_ciif (ohos_kernel_type == "liteos_a") {
1475f9996aaSopenharmony_ci  default_target_configs +=
1485f9996aaSopenharmony_ci      [ "//build/lite/config/kernel/liteos/cortex_a:default" ]
1495f9996aaSopenharmony_ci}
1505f9996aaSopenharmony_ci
1515f9996aaSopenharmony_ciif (ohos_kernel_type == "liteos_a" || ohos_kernel_type == "linux") {
1525f9996aaSopenharmony_ci  default_target_configs += [
1535f9996aaSopenharmony_ci    "//build/lite/config:security",
1545f9996aaSopenharmony_ci    "//build/lite/config:exceptions",
1555f9996aaSopenharmony_ci  ]
1565f9996aaSopenharmony_ci}
1575f9996aaSopenharmony_cidefault_shared_library_configs =
1585f9996aaSopenharmony_ci    default_target_configs + [ "//build/lite/config:shared_library_config" ]
1595f9996aaSopenharmony_cidefault_static_library_configs = default_target_configs
1605f9996aaSopenharmony_cidefault_executable_configs = default_static_library_configs
1615f9996aaSopenharmony_ciif (ohos_kernel_type != "liteos_m" && ohos_kernel_type != "uniproton") {
1625f9996aaSopenharmony_ci  default_static_library_configs += [ "//build/lite/config:static_pie_config" ]
1635f9996aaSopenharmony_ci  default_executable_configs += [ "//build/lite/config:static_pie_config" ]
1645f9996aaSopenharmony_ci  default_executable_configs += [ "//build/lite/config:pie_executable_config" ]
1655f9996aaSopenharmony_ci}
1665f9996aaSopenharmony_ci
1675f9996aaSopenharmony_ciset_defaults("executable") {
1685f9996aaSopenharmony_ci  configs = default_executable_configs
1695f9996aaSopenharmony_ci  configs += [ "//build/lite/config:board_exe_ld_flags" ]
1705f9996aaSopenharmony_ci}
1715f9996aaSopenharmony_ci
1725f9996aaSopenharmony_ciset_defaults("static_library") {
1735f9996aaSopenharmony_ci  configs = default_static_library_configs
1745f9996aaSopenharmony_ci}
1755f9996aaSopenharmony_ci
1765f9996aaSopenharmony_ciset_defaults("shared_library") {
1775f9996aaSopenharmony_ci  configs = default_shared_library_configs
1785f9996aaSopenharmony_ci}
1795f9996aaSopenharmony_ci
1805f9996aaSopenharmony_ciset_defaults("source_set") {
1815f9996aaSopenharmony_ci  configs = default_target_configs
1825f9996aaSopenharmony_ci}
1835f9996aaSopenharmony_ci
1845f9996aaSopenharmony_ci_target_type_list = [
1855f9996aaSopenharmony_ci  "executable",
1865f9996aaSopenharmony_ci  "static_library",
1875f9996aaSopenharmony_ci  "shared_library",
1885f9996aaSopenharmony_ci  "source_set",
1895f9996aaSopenharmony_ci  "action",
1905f9996aaSopenharmony_ci  "action_foreach",
1915f9996aaSopenharmony_ci]
1925f9996aaSopenharmony_ci
1935f9996aaSopenharmony_ciforeach(_target_type, _target_type_list) {
1945f9996aaSopenharmony_ci  template(_target_type) {
1955f9996aaSopenharmony_ci    target(_target_type, target_name) {
1965f9996aaSopenharmony_ci      forward_variables_from(invoker, "*", [ "no_default_deps" ])
1975f9996aaSopenharmony_ci      if (!defined(deps)) {
1985f9996aaSopenharmony_ci        deps = []
1995f9996aaSopenharmony_ci      }
2005f9996aaSopenharmony_ci      if (!defined(invoker.no_default_deps) || !invoker.no_default_deps) {
2015f9996aaSopenharmony_ci        deps += [ "//build/lite:prebuilts" ]
2025f9996aaSopenharmony_ci      }
2035f9996aaSopenharmony_ci    }
2045f9996aaSopenharmony_ci  }
2055f9996aaSopenharmony_ci}
206