15f9996aaSopenharmony_ci# Copyright (c) 2013 The Chromium Authors. All rights reserved. 25f9996aaSopenharmony_ci# Use of this source code is governed by a BSD-style license that can be 35f9996aaSopenharmony_ci# found in the LICENSE file. 45f9996aaSopenharmony_ci 55f9996aaSopenharmony_ci# ============================================================================= 65f9996aaSopenharmony_ci# WHAT IS THIS FILE? 75f9996aaSopenharmony_ci# ============================================================================= 85f9996aaSopenharmony_ci# 95f9996aaSopenharmony_ci# This is the master GN build configuration. This file is loaded after the 105f9996aaSopenharmony_ci# build args (args.gn) for the build directory and after the toplevel ".gn" 115f9996aaSopenharmony_ci# file (which points to this file as the build configuration). 125f9996aaSopenharmony_ci# 135f9996aaSopenharmony_ci# This file will be executed and the resulting context will be used to execute 145f9996aaSopenharmony_ci# every other file in the build. So variables declared here (that don't start 155f9996aaSopenharmony_ci# with an underscore) will be implicitly global. 165f9996aaSopenharmony_ci 175f9996aaSopenharmony_ci# ============================================================================= 185f9996aaSopenharmony_ci# PLATFORM SELECTION 195f9996aaSopenharmony_ci# ============================================================================= 205f9996aaSopenharmony_ci# 215f9996aaSopenharmony_ci# There are two main things to set: "os" and "cpu". The "toolchain" is the name 225f9996aaSopenharmony_ci# of the GN thing that encodes combinations of these things. 235f9996aaSopenharmony_ci# 245f9996aaSopenharmony_ci# Users typically only set the variables "target_os" and "target_cpu" in "gn 255f9996aaSopenharmony_ci# args", the rest are set up by our build and internal to GN. 265f9996aaSopenharmony_ci# 275f9996aaSopenharmony_ci# There are three different types of each of these things: The "host" 285f9996aaSopenharmony_ci# represents the computer doing the compile and never changes. The "target" 295f9996aaSopenharmony_ci# represents the main thing we're trying to build. The "current" represents 305f9996aaSopenharmony_ci# which configuration is currently being defined, which can be either the 315f9996aaSopenharmony_ci# host, the target, or something completely different (like nacl). GN will 325f9996aaSopenharmony_ci# run the same build file multiple times for the different required 335f9996aaSopenharmony_ci# configuration in the same build. 345f9996aaSopenharmony_ci# 355f9996aaSopenharmony_ci# This gives the following variables: 365f9996aaSopenharmony_ci# - host_os, host_cpu, host_toolchain 375f9996aaSopenharmony_ci# - target_os, target_cpu, default_toolchain 385f9996aaSopenharmony_ci# - current_os, current_cpu, current_toolchain. 395f9996aaSopenharmony_ci# 405f9996aaSopenharmony_ci# Note the default_toolchain isn't symmetrical (you would expect 415f9996aaSopenharmony_ci# target_toolchain). This is because the "default" toolchain is a GN built-in 425f9996aaSopenharmony_ci# concept, and "target" is something our build sets up that's symmetrical with 435f9996aaSopenharmony_ci# its GYP counterpart. Potentially the built-in default_toolchain variable 445f9996aaSopenharmony_ci# could be renamed in the future. 455f9996aaSopenharmony_ci# 465f9996aaSopenharmony_ci# When writing build files, to do something only for the host: 475f9996aaSopenharmony_ci# if (current_toolchain == host_toolchain) { ... 485f9996aaSopenharmony_ci 495f9996aaSopenharmony_cicheck_mac_system_and_cpu_script = 505f9996aaSopenharmony_ci rebase_path("//build/scripts/check_mac_system_and_cpu.py") 515f9996aaSopenharmony_cicheck_darwin_system_result = 525f9996aaSopenharmony_ci exec_script(check_mac_system_and_cpu_script, [ "system" ], "string") 535f9996aaSopenharmony_ci 545f9996aaSopenharmony_ciif (check_darwin_system_result != "") { 555f9996aaSopenharmony_ci check_mac_host_cpu_result = 565f9996aaSopenharmony_ci exec_script(check_mac_system_and_cpu_script, [ "cpu" ], "string") 575f9996aaSopenharmony_ci if (check_mac_host_cpu_result != "") { 585f9996aaSopenharmony_ci host_cpu = "arm64" 595f9996aaSopenharmony_ci } 605f9996aaSopenharmony_ci} 615f9996aaSopenharmony_ci 625f9996aaSopenharmony_cideclare_args() { 635f9996aaSopenharmony_ci product_name = "" 645f9996aaSopenharmony_ci device_name = "" 655f9996aaSopenharmony_ci} 665f9996aaSopenharmony_ci 675f9996aaSopenharmony_cideclare_args() { 685f9996aaSopenharmony_ci using_hb_new = true 695f9996aaSopenharmony_ci} 705f9996aaSopenharmony_ci 715f9996aaSopenharmony_cideclare_args() { 725f9996aaSopenharmony_ci ohos_indep_compiler_enable = false 735f9996aaSopenharmony_ci} 745f9996aaSopenharmony_ci 755f9996aaSopenharmony_cideclare_args() { 765f9996aaSopenharmony_ci preloader_output_dir = "//out/preloader/${product_name}" 775f9996aaSopenharmony_ci} 785f9996aaSopenharmony_ci 795f9996aaSopenharmony_cideclare_args() { 805f9996aaSopenharmony_ci enable_lto_O0 = false 815f9996aaSopenharmony_ci} 825f9996aaSopenharmony_ci 835f9996aaSopenharmony_cideclare_args() { 845f9996aaSopenharmony_ci enable_gn_2021 = true 855f9996aaSopenharmony_ci} 865f9996aaSopenharmony_ci 875f9996aaSopenharmony_cideclare_args() { 885f9996aaSopenharmony_ci is_llvm_build = false 895f9996aaSopenharmony_ci} 905f9996aaSopenharmony_ci 915f9996aaSopenharmony_cideclare_args() { 925f9996aaSopenharmony_ci rustc_codecheck = false 935f9996aaSopenharmony_ci} 945f9996aaSopenharmony_ci 955f9996aaSopenharmony_ciproduct_build_config = 965f9996aaSopenharmony_ci read_file("${preloader_output_dir}/build_config.json", "json") 975f9996aaSopenharmony_ci 985f9996aaSopenharmony_ciglobal_parts_info = 995f9996aaSopenharmony_ci read_file("${preloader_output_dir}/parts_config.json", "json") 1005f9996aaSopenharmony_ci 1015f9996aaSopenharmony_cinapi_white_list_path = "developtools/integration_verification/tools/deps_guard/rules/NO-Depends-On-NAPI" 1025f9996aaSopenharmony_ciif (!is_llvm_build) { 1035f9996aaSopenharmony_ci if (!ohos_indep_compiler_enable) { 1045f9996aaSopenharmony_ci napi_white_list = read_file( 1055f9996aaSopenharmony_ci "//${napi_white_list_path}/whitelist.json", 1065f9996aaSopenharmony_ci "json") 1075f9996aaSopenharmony_ci } else if (ohos_indep_compiler_enable) { 1085f9996aaSopenharmony_ci napi_white_list = read_file( 1095f9996aaSopenharmony_ci "//build/indep_configs/mapping/config/${napi_white_list_path}/whitelist.json", 1105f9996aaSopenharmony_ci "json") 1115f9996aaSopenharmony_ci } 1125f9996aaSopenharmony_ci} 1135f9996aaSopenharmony_ci 1145f9996aaSopenharmony_ciproduct_company = product_build_config.product_company 1155f9996aaSopenharmony_cidevice_company = product_build_config.device_company 1165f9996aaSopenharmony_cidevice_build_path = product_build_config.device_build_path 1175f9996aaSopenharmony_citarget_os = product_build_config.target_os 1185f9996aaSopenharmony_citarget_cpu = product_build_config.target_cpu 1195f9996aaSopenharmony_ciproduct_toolchain = product_build_config.product_toolchain_label 1205f9996aaSopenharmony_ciif (product_toolchain == "") { 1215f9996aaSopenharmony_ci product_toolchain = "//build/toolchain/ohos:ohos_clang_$target_cpu" 1225f9996aaSopenharmony_ci} 1235f9996aaSopenharmony_ciif (defined(product_build_config.ext_root_proc_conf_path)) { 1245f9996aaSopenharmony_ci ext_root_proc_conf_path = product_build_config.ext_root_proc_conf_path 1255f9996aaSopenharmony_ci} else { 1265f9996aaSopenharmony_ci ext_root_proc_conf_path = "" 1275f9996aaSopenharmony_ci} 1285f9996aaSopenharmony_ciif (defined(product_build_config.ext_critical_proc_conf_path)) { 1295f9996aaSopenharmony_ci ext_critical_proc_conf_path = product_build_config.ext_critical_proc_conf_path 1305f9996aaSopenharmony_ci} else { 1315f9996aaSopenharmony_ci ext_critical_proc_conf_path = "" 1325f9996aaSopenharmony_ci} 1335f9996aaSopenharmony_ciif (defined(product_build_config.ext_sanitizer_check_list_path)) { 1345f9996aaSopenharmony_ci ext_sanitizer_check_list_path = 1355f9996aaSopenharmony_ci product_build_config.ext_sanitizer_check_list_path 1365f9996aaSopenharmony_ci} else { 1375f9996aaSopenharmony_ci joint_check_list_path = "//vendor/${product_company}/${product_name}/security_config/sanitizer_check_list.gni" 1385f9996aaSopenharmony_ci sanitize_list_exist = 1395f9996aaSopenharmony_ci exec_script(rebase_path("//build/scripts/check_file_exist.py"), 1405f9996aaSopenharmony_ci [ rebase_path("${joint_check_list_path}") ], 1415f9996aaSopenharmony_ci "string") 1425f9996aaSopenharmony_ci if (sanitize_list_exist != "") { 1435f9996aaSopenharmony_ci ext_sanitizer_check_list_path = joint_check_list_path 1445f9996aaSopenharmony_ci } 1455f9996aaSopenharmony_ci} 1465f9996aaSopenharmony_ciif (defined(product_build_config.enable_ramdisk)) { 1475f9996aaSopenharmony_ci enable_ramdisk = product_build_config.enable_ramdisk 1485f9996aaSopenharmony_ci} else { 1495f9996aaSopenharmony_ci enable_ramdisk = false 1505f9996aaSopenharmony_ci} 1515f9996aaSopenharmony_ciif (defined(product_build_config.chipprod_config_path)) { 1525f9996aaSopenharmony_ci chipprod_config_path = product_build_config.chipprod_config_path 1535f9996aaSopenharmony_ci import("${chipprod_config_path}/chip_product_list.gni") 1545f9996aaSopenharmony_ci} else { 1555f9996aaSopenharmony_ci chip_product_list = [] 1565f9996aaSopenharmony_ci} 1575f9996aaSopenharmony_ci 1585f9996aaSopenharmony_ciif (defined(product_build_config.ext_sdk_config_file)) { 1595f9996aaSopenharmony_ci ext_sdk_config_file = product_build_config.ext_sdk_config_file 1605f9996aaSopenharmony_ci} 1615f9996aaSopenharmony_ci 1625f9996aaSopenharmony_ciif (defined(product_build_config.ext_ndk_config_file)) { 1635f9996aaSopenharmony_ci ext_ndk_config_file = product_build_config.ext_ndk_config_file 1645f9996aaSopenharmony_ci} 1655f9996aaSopenharmony_ci 1665f9996aaSopenharmony_ciif (defined(product_build_config.enable_absystem)) { 1675f9996aaSopenharmony_ci enable_absystem = product_build_config.enable_absystem 1685f9996aaSopenharmony_ci} else { 1695f9996aaSopenharmony_ci enable_absystem = false 1705f9996aaSopenharmony_ci} 1715f9996aaSopenharmony_ci 1725f9996aaSopenharmony_ciif (defined(product_build_config.enable_mesa3d)) { 1735f9996aaSopenharmony_ci enable_mesa3d = product_build_config.enable_mesa3d 1745f9996aaSopenharmony_ci} else { 1755f9996aaSopenharmony_ci enable_mesa3d = false 1765f9996aaSopenharmony_ci} 1775f9996aaSopenharmony_ci 1785f9996aaSopenharmony_ciif (defined(product_build_config.build_selinux)) { 1795f9996aaSopenharmony_ci build_selinux = product_build_config.build_selinux 1805f9996aaSopenharmony_ci} else { 1815f9996aaSopenharmony_ci build_selinux = false 1825f9996aaSopenharmony_ci} 1835f9996aaSopenharmony_ci 1845f9996aaSopenharmony_ciif (defined(product_build_config.build_seccomp)) { 1855f9996aaSopenharmony_ci build_seccomp = product_build_config.build_seccomp 1865f9996aaSopenharmony_ci} else { 1875f9996aaSopenharmony_ci build_seccomp = false 1885f9996aaSopenharmony_ci} 1895f9996aaSopenharmony_ci 1905f9996aaSopenharmony_ciif (defined(product_build_config.support_jsapi)) { 1915f9996aaSopenharmony_ci support_jsapi = product_build_config.support_jsapi 1925f9996aaSopenharmony_ci} else { 1935f9996aaSopenharmony_ci if (defined(global_parts_info) && !defined(global_parts_info.arkui_napi)) { 1945f9996aaSopenharmony_ci support_jsapi = false 1955f9996aaSopenharmony_ci } else { 1965f9996aaSopenharmony_ci support_jsapi = true 1975f9996aaSopenharmony_ci } 1985f9996aaSopenharmony_ci} 1995f9996aaSopenharmony_ciif (defined(product_build_config.ext_sign_hap_py_path)) { 2005f9996aaSopenharmony_ci sign_hap_py_path = product_build_config.ext_sign_hap_py_path 2015f9996aaSopenharmony_ci} 2025f9996aaSopenharmony_ci 2035f9996aaSopenharmony_ciif (defined(product_build_config.global_ext_var_file)) { 2045f9996aaSopenharmony_ci import(product_build_config.global_ext_var_file) 2055f9996aaSopenharmony_ci} 2065f9996aaSopenharmony_ci 2075f9996aaSopenharmony_ciif (target_os == "") { 2085f9996aaSopenharmony_ci target_os = "ohos" 2095f9996aaSopenharmony_ci} 2105f9996aaSopenharmony_ci 2115f9996aaSopenharmony_ciif (target_cpu == "") { 2125f9996aaSopenharmony_ci if (target_os == "ohos" || target_os == "android" || target_os == "ios") { 2135f9996aaSopenharmony_ci target_cpu = "arm" 2145f9996aaSopenharmony_ci } else { 2155f9996aaSopenharmony_ci target_cpu = host_cpu 2165f9996aaSopenharmony_ci } 2175f9996aaSopenharmony_ci} 2185f9996aaSopenharmony_ci 2195f9996aaSopenharmony_ciif (current_cpu == "") { 2205f9996aaSopenharmony_ci current_cpu = target_cpu 2215f9996aaSopenharmony_ci} 2225f9996aaSopenharmony_ciif (current_os == "") { 2235f9996aaSopenharmony_ci current_os = target_os 2245f9996aaSopenharmony_ci} 2255f9996aaSopenharmony_ci 2265f9996aaSopenharmony_cideclare_args() { 2275f9996aaSopenharmony_ci is_mini_system = false 2285f9996aaSopenharmony_ci is_small_system = false 2295f9996aaSopenharmony_ci is_standard_system = false 2305f9996aaSopenharmony_ci} 2315f9996aaSopenharmony_ci 2325f9996aaSopenharmony_ciif (ohos_indep_compiler_enable) { 2335f9996aaSopenharmony_ci is_standard_system = true 2345f9996aaSopenharmony_ci musl_is_legacy = false 2355f9996aaSopenharmony_ci} 2365f9996aaSopenharmony_ci 2375f9996aaSopenharmony_ciif (is_mini_system) { 2385f9996aaSopenharmony_ci os_level = "mini" 2395f9996aaSopenharmony_ci} 2405f9996aaSopenharmony_ciif (is_small_system) { 2415f9996aaSopenharmony_ci os_level = "small" 2425f9996aaSopenharmony_ci} 2435f9996aaSopenharmony_ciif (is_standard_system) { 2445f9996aaSopenharmony_ci os_level = "standard" 2455f9996aaSopenharmony_ci} 2465f9996aaSopenharmony_ci 2475f9996aaSopenharmony_cideclare_args() { 2485f9996aaSopenharmony_ci is_large_system = !(is_standard_system || is_small_system || is_mini_system) 2495f9996aaSopenharmony_ci} 2505f9996aaSopenharmony_ci 2515f9996aaSopenharmony_cideclare_args() { 2525f9996aaSopenharmony_ci factory = false 2535f9996aaSopenharmony_ci} 2545f9996aaSopenharmony_ci 2555f9996aaSopenharmony_ciis_lite_system = is_mini_system || is_small_system 2565f9996aaSopenharmony_ci 2575f9996aaSopenharmony_ci# ============================================================================= 2585f9996aaSopenharmony_ci# BUILD FLAGS 2595f9996aaSopenharmony_ci# ============================================================================= 2605f9996aaSopenharmony_ci# 2615f9996aaSopenharmony_ci# This block lists input arguments to the build, along with their default 2625f9996aaSopenharmony_ci# values. 2635f9996aaSopenharmony_ci# 2645f9996aaSopenharmony_ci# If a value is specified on the command line, it will overwrite the defaults 2655f9996aaSopenharmony_ci# given in a declare_args block, otherwise the default will be used. 2665f9996aaSopenharmony_ci# 2675f9996aaSopenharmony_ci# YOU SHOULD ALMOST NEVER NEED TO ADD FLAGS TO THIS FILE. GN allows any file in 2685f9996aaSopenharmony_ci# the build to declare build flags. If you need a flag for a single component, 2695f9996aaSopenharmony_ci# you can just declare it in the corresponding BUILD.gn file. 2705f9996aaSopenharmony_ci# 2715f9996aaSopenharmony_ci# - If your feature is a single target, say //components/foo, you can put 2725f9996aaSopenharmony_ci# a declare_args() block in //components/foo/BUILD.gn and use it there. 2735f9996aaSopenharmony_ci# Nobody else in the build needs to see the flag. 2745f9996aaSopenharmony_ci# 2755f9996aaSopenharmony_ci# - Defines based on build variables should be implemented via the generated 2765f9996aaSopenharmony_ci# build flag header system. See //build/buildflag_header.gni. You can put 2775f9996aaSopenharmony_ci# the buildflag_header target in the same file as the build flag itself. You 2785f9996aaSopenharmony_ci# should almost never set "defines" directly. 2795f9996aaSopenharmony_ci# 2805f9996aaSopenharmony_ci# - If your flag toggles a target on and off or toggles between different 2815f9996aaSopenharmony_ci# versions of similar things, write a "group" target that forwards to the 2825f9996aaSopenharmony_ci# right target (or no target) depending on the value of the build flag. This 2835f9996aaSopenharmony_ci# group can be in the same BUILD.gn file as the build flag, and targets can 2845f9996aaSopenharmony_ci# depend unconditionally on the group rather than duplicating flag checks 2855f9996aaSopenharmony_ci# across many targets. 2865f9996aaSopenharmony_ci# 2875f9996aaSopenharmony_ci# - If a semi-random set of build files REALLY needs to know about a define and 2885f9996aaSopenharmony_ci# the above pattern for isolating the build logic in a forwarding group 2895f9996aaSopenharmony_ci# doesn't work, you can put the argument in a .gni file. This should be put 2905f9996aaSopenharmony_ci# in the lowest level of the build that knows about this feature (which should 2915f9996aaSopenharmony_ci# almost always be outside of the //build directory!). 2925f9996aaSopenharmony_ci# 2935f9996aaSopenharmony_ci# Other flag advice: 2945f9996aaSopenharmony_ci# 2955f9996aaSopenharmony_ci# - Use boolean values when possible. If you need a default value that expands 2965f9996aaSopenharmony_ci# to some complex thing in the default case (like the location of the 2975f9996aaSopenharmony_ci# compiler which would be computed by a script), use a default value of -1 or 2985f9996aaSopenharmony_ci# the empty string. Outside of the declare_args block, conditionally expand 2995f9996aaSopenharmony_ci# the default value as necessary. 3005f9996aaSopenharmony_ci# 3015f9996aaSopenharmony_ci# - Use a name like "use_foo" or "is_foo" (whatever is more appropriate for 3025f9996aaSopenharmony_ci# your feature) rather than just "foo". 3035f9996aaSopenharmony_ci# 3045f9996aaSopenharmony_ci# - Write good comments directly above the declaration with no blank line. 3055f9996aaSopenharmony_ci# These comments will appear as documentation in "gn args --list". 3065f9996aaSopenharmony_ci# 3075f9996aaSopenharmony_ci# - Don't call exec_script inside declare_args. This will execute the script 3085f9996aaSopenharmony_ci# even if the value is overridden, which is wasteful. See first bullet. 3095f9996aaSopenharmony_ci 3105f9996aaSopenharmony_cideclare_args() { 3115f9996aaSopenharmony_ci # Set to enable the official build level of optimization. This has nothing 3125f9996aaSopenharmony_ci # to do with branding, but enables an additional level of optimization above 3135f9996aaSopenharmony_ci # release (!is_debug). This might be better expressed as a tri-state 3145f9996aaSopenharmony_ci # (debug, release, official) but for historical reasons there are two 3155f9996aaSopenharmony_ci # separate flags. 3165f9996aaSopenharmony_ci is_official_build = false 3175f9996aaSopenharmony_ci 3185f9996aaSopenharmony_ci # Whether we're a traditional desktop unix. 3195f9996aaSopenharmony_ci is_desktop_linux = current_os == "linux" 3205f9996aaSopenharmony_ci 3215f9996aaSopenharmony_ci # Set to true when compiling with the Clang compiler. 3225f9996aaSopenharmony_ci is_clang = current_os != "linux" || 3235f9996aaSopenharmony_ci (current_cpu != "s390x" && current_cpu != "s390" && 3245f9996aaSopenharmony_ci current_cpu != "ppc64" && current_cpu != "ppc" && 3255f9996aaSopenharmony_ci current_cpu != "mips" && current_cpu != "mips64") 3265f9996aaSopenharmony_ci 3275f9996aaSopenharmony_ci # Allows the path to a custom target toolchain to be injected as a single 3285f9996aaSopenharmony_ci # argument, and set as the default toolchain. 3295f9996aaSopenharmony_ci custom_toolchain = "" 3305f9996aaSopenharmony_ci 3315f9996aaSopenharmony_ci # This should not normally be set as a build argument. It's here so that 3325f9996aaSopenharmony_ci # every toolchain can pass through the "global" value via toolchain_args(). 3335f9996aaSopenharmony_ci host_toolchain = "" 3345f9996aaSopenharmony_ci 3355f9996aaSopenharmony_ci # target platform 3365f9996aaSopenharmony_ci target_platform = "phone" 3375f9996aaSopenharmony_ci 3385f9996aaSopenharmony_ci # Whether it is test. 3395f9996aaSopenharmony_ci is_test = false 3405f9996aaSopenharmony_ci 3415f9996aaSopenharmony_ci # Whether it is double framework. 3425f9996aaSopenharmony_ci is_double_framework = false 3435f9996aaSopenharmony_ci 3445f9996aaSopenharmony_ci # build for cross platform 3455f9996aaSopenharmony_ci is_arkui_x = false 3465f9996aaSopenharmony_ci} 3475f9996aaSopenharmony_ci 3485f9996aaSopenharmony_cideclare_args() { 3495f9996aaSopenharmony_ci use_musl = true 3505f9996aaSopenharmony_ci} 3515f9996aaSopenharmony_ci 3525f9996aaSopenharmony_cideclare_args() { 3535f9996aaSopenharmony_ci is_emulator = false 3545f9996aaSopenharmony_ci} 3555f9996aaSopenharmony_ci 3565f9996aaSopenharmony_ciasdk_libs_dir = "//prebuilts/asdk_libs" 3575f9996aaSopenharmony_ci 3585f9996aaSopenharmony_ci# Whether it is a phone product. 3595f9996aaSopenharmony_ciis_phone_product = "${target_platform}" == "phone" 3605f9996aaSopenharmony_ci 3615f9996aaSopenharmony_ci# Whether it is a ivi product. 3625f9996aaSopenharmony_ciis_ivi_product = "${target_platform}" == "ivi" 3635f9996aaSopenharmony_ci 3645f9996aaSopenharmony_ciis_wearable_product = "${target_platform}" == "wearable" 3655f9996aaSopenharmony_ci 3665f9996aaSopenharmony_ciis_intellitv_product = "${target_platform}" == "intellitv" 3675f9996aaSopenharmony_ci 3685f9996aaSopenharmony_ciif ((target_os == "ohos" && target_cpu == "x86_64") || 3695f9996aaSopenharmony_ci device_company == "emulator") { 3705f9996aaSopenharmony_ci is_emulator = true 3715f9996aaSopenharmony_ci} 3725f9996aaSopenharmony_ci 3735f9996aaSopenharmony_ci# different host platform tools directory. 3745f9996aaSopenharmony_ciif (host_os == "linux") { 3755f9996aaSopenharmony_ci host_platform_dir = "linux-x86_64" 3765f9996aaSopenharmony_ci} else if (host_os == "mac") { 3775f9996aaSopenharmony_ci if (host_cpu == "arm64") { 3785f9996aaSopenharmony_ci host_platform_dir = "darwin-arm64" 3795f9996aaSopenharmony_ci } else { 3805f9996aaSopenharmony_ci host_platform_dir = "darwin-x86_64" 3815f9996aaSopenharmony_ci } 3825f9996aaSopenharmony_ci} else { 3835f9996aaSopenharmony_ci assert(false, "Unsupported host_os: $host_os") 3845f9996aaSopenharmony_ci} 3855f9996aaSopenharmony_ci 3865f9996aaSopenharmony_cideclare_args() { 3875f9996aaSopenharmony_ci # Debug build. Enabling official builds automatically sets is_debug to false. 3885f9996aaSopenharmony_ci is_debug = false 3895f9996aaSopenharmony_ci} 3905f9996aaSopenharmony_ci 3915f9996aaSopenharmony_cideclare_args() { 3925f9996aaSopenharmony_ci # Profile build. Enabling official builds automatically sets is_profile to false. 3935f9996aaSopenharmony_ci is_profile = false 3945f9996aaSopenharmony_ci} 3955f9996aaSopenharmony_ci 3965f9996aaSopenharmony_cideclare_args() { 3975f9996aaSopenharmony_ci # The runtime mode ("debug", "profile", "release") 3985f9996aaSopenharmony_ci runtime_mode = "release" 3995f9996aaSopenharmony_ci} 4005f9996aaSopenharmony_ci 4015f9996aaSopenharmony_cideclare_args() { 4025f9996aaSopenharmony_ci # Enable mini debug info, it will add .gnu_debugdata 4035f9996aaSopenharmony_ci # section in each stripped sofile 4045f9996aaSopenharmony_ci 4055f9996aaSopenharmony_ci # Currently, we don't publish ohos-adapted python on m1 platform, 4065f9996aaSopenharmony_ci # So that we disable mini debug info on m1 platform until 4075f9996aaSopenharmony_ci # ohos-adapted python publishing on m1 platform 4085f9996aaSopenharmony_ci if (host_os == "mac") { 4095f9996aaSopenharmony_ci full_mini_debug = false 4105f9996aaSopenharmony_ci } else { 4115f9996aaSopenharmony_ci full_mini_debug = true 4125f9996aaSopenharmony_ci } 4135f9996aaSopenharmony_ci} 4145f9996aaSopenharmony_ci 4155f9996aaSopenharmony_cideclare_args() { 4165f9996aaSopenharmony_ci # Full Debug mode. Setting optimize level to "-O0" and symbol level to "-g3". 4175f9996aaSopenharmony_ci # It should be used with "is_debug" 4185f9996aaSopenharmony_ci ohos_full_debug = false 4195f9996aaSopenharmony_ci} 4205f9996aaSopenharmony_ci 4215f9996aaSopenharmony_cideclare_args() { 4225f9996aaSopenharmony_ci # Specifies which components use the DEBUG compilation level 4235f9996aaSopenharmony_ci # Using this arg like this, --gn-args 'enable_debug_components="component1,component2"' 4245f9996aaSopenharmony_ci enable_debug_components = "" 4255f9996aaSopenharmony_ci} 4265f9996aaSopenharmony_ci 4275f9996aaSopenharmony_cideclare_args() { 4285f9996aaSopenharmony_ci # We use this arg to split "enable_debug_components" to a list 4295f9996aaSopenharmony_ci debug_components = string_split(enable_debug_components, ",") 4305f9996aaSopenharmony_ci} 4315f9996aaSopenharmony_ci 4325f9996aaSopenharmony_cideclare_args() { 4335f9996aaSopenharmony_ci build_xts = false 4345f9996aaSopenharmony_ci precise_xts = false 4355f9996aaSopenharmony_ci} 4365f9996aaSopenharmony_ci 4375f9996aaSopenharmony_cideclare_args() { 4385f9996aaSopenharmony_ci # Component build. Setting to true compiles targets declared as "components" 4395f9996aaSopenharmony_ci # as shared libraries loaded dynamically. This speeds up development time. 4405f9996aaSopenharmony_ci # When false, components will be linked statically. 4415f9996aaSopenharmony_ci # 4425f9996aaSopenharmony_ci # For more information see 4435f9996aaSopenharmony_ci # https://chromium.googlesource.com/chromium/src/+/master/docs/component_build.md 4445f9996aaSopenharmony_ci is_component_build = true 4455f9996aaSopenharmony_ci} 4465f9996aaSopenharmony_ci 4475f9996aaSopenharmony_cideclare_args() { 4485f9996aaSopenharmony_ci enable_adlt = false 4495f9996aaSopenharmony_ci adlt_exe = "" 4505f9996aaSopenharmony_ci allowed_lib_list = "" 4515f9996aaSopenharmony_ci adlt_lib_name = "" 4525f9996aaSopenharmony_ci} 4535f9996aaSopenharmony_ci 4545f9996aaSopenharmony_ciassert(!(is_debug && is_official_build), "Can't do official debug builds") 4555f9996aaSopenharmony_ci 4565f9996aaSopenharmony_ci# ============================================================================== 4575f9996aaSopenharmony_ci# TOOLCHAIN SETUP 4585f9996aaSopenharmony_ci# ============================================================================== 4595f9996aaSopenharmony_ci# 4605f9996aaSopenharmony_ci# Here we set the default toolchain, as well as the variable host_toolchain 4615f9996aaSopenharmony_ci# which will identify the toolchain corresponding to the local system when 4625f9996aaSopenharmony_ci# doing cross-compiles. When not cross-compiling, this will be the same as the 4635f9996aaSopenharmony_ci# default toolchain. 4645f9996aaSopenharmony_ci# 4655f9996aaSopenharmony_ci# We do this before anything else to make sure we complain about any 4665f9996aaSopenharmony_ci# unsupported os/cpu combinations as early as possible. 4675f9996aaSopenharmony_ci 4685f9996aaSopenharmony_ciif (host_toolchain == "") { 4695f9996aaSopenharmony_ci # This should only happen in the top-level context. 4705f9996aaSopenharmony_ci # In a specific toolchain context, the toolchain_args() 4715f9996aaSopenharmony_ci # block should have propagated a value down. 4725f9996aaSopenharmony_ci 4735f9996aaSopenharmony_ci if (host_os == "linux") { 4745f9996aaSopenharmony_ci if (target_os != "linux") { 4755f9996aaSopenharmony_ci host_toolchain = "//build/toolchain/linux:clang_$host_cpu" 4765f9996aaSopenharmony_ci } else if (is_clang) { 4775f9996aaSopenharmony_ci host_toolchain = "//build/toolchain/linux:clang_$host_cpu" 4785f9996aaSopenharmony_ci } else { 4795f9996aaSopenharmony_ci host_toolchain = "//build/toolchain/linux:$host_cpu" 4805f9996aaSopenharmony_ci } 4815f9996aaSopenharmony_ci } else if (host_os == "mac") { 4825f9996aaSopenharmony_ci host_toolchain = "//build/toolchain/mac:clang_$host_cpu" 4835f9996aaSopenharmony_ci } else if (host_os == "win") { 4845f9996aaSopenharmony_ci if (target_cpu == "x86" || target_cpu == "x64") { 4855f9996aaSopenharmony_ci if (is_clang) { 4865f9996aaSopenharmony_ci host_toolchain = "//build/toolchain/win:win_clang_$target_cpu" 4875f9996aaSopenharmony_ci } else { 4885f9996aaSopenharmony_ci host_toolchain = "//build/toolchain/win:$target_cpu" 4895f9996aaSopenharmony_ci } 4905f9996aaSopenharmony_ci } else if (is_clang) { 4915f9996aaSopenharmony_ci host_toolchain = "//build/toolchain/win:win_clang_$host_cpu" 4925f9996aaSopenharmony_ci } else { 4935f9996aaSopenharmony_ci host_toolchain = "//build/toolchain/win:$host_cpu" 4945f9996aaSopenharmony_ci } 4955f9996aaSopenharmony_ci } else { 4965f9996aaSopenharmony_ci assert(false, "Unsupported host_os: $host_os") 4975f9996aaSopenharmony_ci } 4985f9996aaSopenharmony_ci} 4995f9996aaSopenharmony_ci 5005f9996aaSopenharmony_ciif (is_standard_system) { 5015f9996aaSopenharmony_ci _default_toolchain = "" 5025f9996aaSopenharmony_ci 5035f9996aaSopenharmony_ci if (target_os == "ohos") { 5045f9996aaSopenharmony_ci assert(host_os == "linux" || host_os == "mac", 5055f9996aaSopenharmony_ci "ohos builds are only supported on Linux and Mac hosts.") 5065f9996aaSopenharmony_ci _default_toolchain = product_toolchain 5075f9996aaSopenharmony_ci } else if (target_os == "linux") { 5085f9996aaSopenharmony_ci if (is_clang) { 5095f9996aaSopenharmony_ci _default_toolchain = "//build/toolchain/linux:clang_$target_cpu" 5105f9996aaSopenharmony_ci } else { 5115f9996aaSopenharmony_ci _default_toolchain = "//build/toolchain/linux:$target_cpu" 5125f9996aaSopenharmony_ci } 5135f9996aaSopenharmony_ci } else if (target_os == "android") { 5145f9996aaSopenharmony_ci assert(host_os == "linux" || host_os == "mac", 5155f9996aaSopenharmony_ci "AOSP builds are only supported on Linux and Mac hosts.") 5165f9996aaSopenharmony_ci _default_toolchain = "//build_plugins/toolchain/aosp:aosp_clang_$target_cpu" 5175f9996aaSopenharmony_ci } else if (target_os == "ios") { 5185f9996aaSopenharmony_ci _default_toolchain = "//build_plugins/toolchain/ios:ios_clang_$target_cpu" 5195f9996aaSopenharmony_ci import("//build_plugins/config/ios/ios_sdk.gni") # For use_ios_simulator 5205f9996aaSopenharmony_ci if (use_ios_simulator) { 5215f9996aaSopenharmony_ci if (target_cpu == "arm64") { 5225f9996aaSopenharmony_ci _default_toolchain = "//build_plugins/toolchain/ios:ios_clang_arm64_sim" 5235f9996aaSopenharmony_ci } else { 5245f9996aaSopenharmony_ci _default_toolchain = "//build_plugins/toolchain/ios:ios_clang_x64_sim" 5255f9996aaSopenharmony_ci } 5265f9996aaSopenharmony_ci } 5275f9996aaSopenharmony_ci } else { 5285f9996aaSopenharmony_ci assert(false, "Unsupported target_os: $target_os") 5295f9996aaSopenharmony_ci } 5305f9996aaSopenharmony_ci 5315f9996aaSopenharmony_ci # If a custom toolchain has been set in the args, set it as default. Otherwise, 5325f9996aaSopenharmony_ci # set the default toolchain for the platform (if any). 5335f9996aaSopenharmony_ci if (custom_toolchain != "") { 5345f9996aaSopenharmony_ci set_default_toolchain(custom_toolchain) 5355f9996aaSopenharmony_ci } else if (_default_toolchain != "") { 5365f9996aaSopenharmony_ci set_default_toolchain(_default_toolchain) 5375f9996aaSopenharmony_ci } 5385f9996aaSopenharmony_ci} 5395f9996aaSopenharmony_ci 5405f9996aaSopenharmony_ci# ============================================================================= 5415f9996aaSopenharmony_ci# OS DEFINITIONS 5425f9996aaSopenharmony_ci# ============================================================================= 5435f9996aaSopenharmony_ci# 5445f9996aaSopenharmony_ci# We set these various is_FOO booleans for convenience in writing OS-based 5455f9996aaSopenharmony_ci# conditions. 5465f9996aaSopenharmony_ci# 5475f9996aaSopenharmony_ci# - is_ohos, is_chromeos, and is_win should be obvious. 5485f9996aaSopenharmony_ci# - is_mac is set only for desktop Mac. 5495f9996aaSopenharmony_ci# - is_posix is true for mac and any Unix-like system (basically everything 5505f9996aaSopenharmony_ci# except Windows). 5515f9996aaSopenharmony_ci# - is_linux is true for desktop Linux and ChromeOS. 5525f9996aaSopenharmony_ci# 5535f9996aaSopenharmony_ci# Do not add more is_* variants here for random lesser-used Unix systems like 5545f9996aaSopenharmony_ci# aix or one of the BSDs. If you need to check these, just check the 5555f9996aaSopenharmony_ci# current_os value directly. 5565f9996aaSopenharmony_ci 5575f9996aaSopenharmony_ciif (current_os == "win" || current_os == "winuwp") { 5585f9996aaSopenharmony_ci is_aix = false 5595f9996aaSopenharmony_ci is_ohos = false 5605f9996aaSopenharmony_ci is_chromeos = false 5615f9996aaSopenharmony_ci is_linux = false 5625f9996aaSopenharmony_ci is_mac = false 5635f9996aaSopenharmony_ci is_nacl = false 5645f9996aaSopenharmony_ci is_posix = false 5655f9996aaSopenharmony_ci is_win = true 5665f9996aaSopenharmony_ci is_mingw = false 5675f9996aaSopenharmony_ci is_android = false 5685f9996aaSopenharmony_ci is_ios = false 5695f9996aaSopenharmony_ci} else if (current_os == "mac") { 5705f9996aaSopenharmony_ci is_aix = false 5715f9996aaSopenharmony_ci is_ohos = false 5725f9996aaSopenharmony_ci is_chromeos = false 5735f9996aaSopenharmony_ci is_linux = false 5745f9996aaSopenharmony_ci is_mac = true 5755f9996aaSopenharmony_ci is_nacl = false 5765f9996aaSopenharmony_ci is_posix = true 5775f9996aaSopenharmony_ci is_win = false 5785f9996aaSopenharmony_ci is_mingw = false 5795f9996aaSopenharmony_ci is_android = false 5805f9996aaSopenharmony_ci is_ios = false 5815f9996aaSopenharmony_ci} else if (current_os == "ohos") { 5825f9996aaSopenharmony_ci is_aix = false 5835f9996aaSopenharmony_ci is_ohos = true 5845f9996aaSopenharmony_ci is_chromeos = false 5855f9996aaSopenharmony_ci is_linux = false 5865f9996aaSopenharmony_ci is_mac = false 5875f9996aaSopenharmony_ci is_nacl = false 5885f9996aaSopenharmony_ci is_posix = true 5895f9996aaSopenharmony_ci is_win = false 5905f9996aaSopenharmony_ci is_mingw = false 5915f9996aaSopenharmony_ci is_android = false 5925f9996aaSopenharmony_ci is_ios = false 5935f9996aaSopenharmony_ci} else if (current_os == "linux") { 5945f9996aaSopenharmony_ci is_aix = false 5955f9996aaSopenharmony_ci is_ohos = false 5965f9996aaSopenharmony_ci is_chromeos = false 5975f9996aaSopenharmony_ci is_linux = true 5985f9996aaSopenharmony_ci is_mac = false 5995f9996aaSopenharmony_ci is_nacl = false 6005f9996aaSopenharmony_ci is_posix = true 6015f9996aaSopenharmony_ci is_win = false 6025f9996aaSopenharmony_ci is_mingw = false 6035f9996aaSopenharmony_ci is_android = false 6045f9996aaSopenharmony_ci is_ios = false 6055f9996aaSopenharmony_ci} else if (current_os == "mingw") { 6065f9996aaSopenharmony_ci is_aix = false 6075f9996aaSopenharmony_ci is_ohos = false 6085f9996aaSopenharmony_ci is_chromeos = false 6095f9996aaSopenharmony_ci is_linux = false 6105f9996aaSopenharmony_ci is_mac = false 6115f9996aaSopenharmony_ci is_nacl = false 6125f9996aaSopenharmony_ci is_posix = true 6135f9996aaSopenharmony_ci is_win = false 6145f9996aaSopenharmony_ci is_mingw = true 6155f9996aaSopenharmony_ci is_android = false 6165f9996aaSopenharmony_ci is_ios = false 6175f9996aaSopenharmony_ci} else if (current_os == "android") { 6185f9996aaSopenharmony_ci is_aix = false 6195f9996aaSopenharmony_ci is_ohos = false 6205f9996aaSopenharmony_ci is_chromeos = false 6215f9996aaSopenharmony_ci is_linux = false 6225f9996aaSopenharmony_ci is_mac = false 6235f9996aaSopenharmony_ci is_nacl = false 6245f9996aaSopenharmony_ci is_posix = true 6255f9996aaSopenharmony_ci is_win = false 6265f9996aaSopenharmony_ci is_mingw = false 6275f9996aaSopenharmony_ci is_android = true 6285f9996aaSopenharmony_ci is_ios = false 6295f9996aaSopenharmony_ci} else if (current_os == "ios") { 6305f9996aaSopenharmony_ci is_aix = false 6315f9996aaSopenharmony_ci is_ohos = false 6325f9996aaSopenharmony_ci is_chromeos = false 6335f9996aaSopenharmony_ci is_linux = false 6345f9996aaSopenharmony_ci is_mac = false 6355f9996aaSopenharmony_ci is_nacl = false 6365f9996aaSopenharmony_ci is_posix = true 6375f9996aaSopenharmony_ci is_win = false 6385f9996aaSopenharmony_ci is_mingw = false 6395f9996aaSopenharmony_ci is_android = false 6405f9996aaSopenharmony_ci is_ios = true 6415f9996aaSopenharmony_ci} 6425f9996aaSopenharmony_ci 6435f9996aaSopenharmony_ci# ============================================================================= 6445f9996aaSopenharmony_ci# SOURCES FILTERS 6455f9996aaSopenharmony_ci# ============================================================================= 6465f9996aaSopenharmony_ci# 6475f9996aaSopenharmony_ci# These patterns filter out platform-specific files when assigning to the 6485f9996aaSopenharmony_ci# sources variable. The magic variable |sources_assignment_filter| is applied 6495f9996aaSopenharmony_ci# to each assignment or appending to the sources variable and matches are 6505f9996aaSopenharmony_ci# automatically removed. 6515f9996aaSopenharmony_ci# 6525f9996aaSopenharmony_ci# Note that the patterns are NOT regular expressions. Only "*" and "\b" (path 6535f9996aaSopenharmony_ci# boundary = end of string or slash) are supported, and the entire string 6545f9996aaSopenharmony_ci# must match the pattern (so you need "*.cc" to match all .cc files, for 6555f9996aaSopenharmony_ci# example). 6565f9996aaSopenharmony_ci 6575f9996aaSopenharmony_ci# DO NOT ADD MORE PATTERNS TO THIS LIST, see set_sources_assignment_filter call 6585f9996aaSopenharmony_ci# below. 6595f9996aaSopenharmony_cisources_assignment_filter = [] 6605f9996aaSopenharmony_ci 6615f9996aaSopenharmony_ciif (!is_win && !is_mingw) { 6625f9996aaSopenharmony_ci sources_assignment_filter += [ 6635f9996aaSopenharmony_ci "*_win.cc", 6645f9996aaSopenharmony_ci "*_win.h", 6655f9996aaSopenharmony_ci "*_win_unittest.cc", 6665f9996aaSopenharmony_ci "*\bwin/*", 6675f9996aaSopenharmony_ci "*.def", 6685f9996aaSopenharmony_ci ] 6695f9996aaSopenharmony_ci} 6705f9996aaSopenharmony_ciif (!is_mac || !is_ios) { 6715f9996aaSopenharmony_ci sources_assignment_filter += [ 6725f9996aaSopenharmony_ci "*_mac.h", 6735f9996aaSopenharmony_ci "*_mac.cc", 6745f9996aaSopenharmony_ci "*_mac.mm", 6755f9996aaSopenharmony_ci "*_mac_unittest.h", 6765f9996aaSopenharmony_ci "*_mac_unittest.cc", 6775f9996aaSopenharmony_ci "*_mac_unittest.mm", 6785f9996aaSopenharmony_ci "*\bmac/*", 6795f9996aaSopenharmony_ci "*_cocoa.h", 6805f9996aaSopenharmony_ci "*_cocoa.cc", 6815f9996aaSopenharmony_ci "*_cocoa.mm", 6825f9996aaSopenharmony_ci "*_cocoa_unittest.h", 6835f9996aaSopenharmony_ci "*_cocoa_unittest.cc", 6845f9996aaSopenharmony_ci "*_cocoa_unittest.mm", 6855f9996aaSopenharmony_ci "*\bcocoa/*", 6865f9996aaSopenharmony_ci ] 6875f9996aaSopenharmony_ci} 6885f9996aaSopenharmony_ciif (!is_linux && !is_ohos && !is_android && !is_ios) { 6895f9996aaSopenharmony_ci sources_assignment_filter += [ 6905f9996aaSopenharmony_ci "*_linux.h", 6915f9996aaSopenharmony_ci "*_linux.cc", 6925f9996aaSopenharmony_ci "*_linux_unittest.h", 6935f9996aaSopenharmony_ci "*_linux_unittest.cc", 6945f9996aaSopenharmony_ci "*\blinux/*", 6955f9996aaSopenharmony_ci ] 6965f9996aaSopenharmony_ci} 6975f9996aaSopenharmony_ciif (!is_ohos) { 6985f9996aaSopenharmony_ci sources_assignment_filter += [] 6995f9996aaSopenharmony_ci} 7005f9996aaSopenharmony_ci 7015f9996aaSopenharmony_ci#set_sources_assignment_filter(sources_assignment_filter) 7025f9996aaSopenharmony_ciif (is_standard_system) { 7035f9996aaSopenharmony_ci file_exist = exec_script(rebase_path("//build/scripts/check_file_exist.py"), 7045f9996aaSopenharmony_ci [ rebase_path("//${device_build_path}/config.gni") ], 7055f9996aaSopenharmony_ci "string") 7065f9996aaSopenharmony_ci if (file_exist != "") { 7075f9996aaSopenharmony_ci import("//${device_build_path}/config.gni") 7085f9996aaSopenharmony_ci } 7095f9996aaSopenharmony_ci 7105f9996aaSopenharmony_ci # ============================================================================= 7115f9996aaSopenharmony_ci # TARGET DEFAULTS 7125f9996aaSopenharmony_ci # ============================================================================= 7135f9996aaSopenharmony_ci # 7145f9996aaSopenharmony_ci # Set up the default configuration for every build target of the given type. 7155f9996aaSopenharmony_ci # The values configured here will be automatically set on the scope of the 7165f9996aaSopenharmony_ci # corresponding target. Target definitions can add or remove to the settings 7175f9996aaSopenharmony_ci # here as needed. 7185f9996aaSopenharmony_ci # 7195f9996aaSopenharmony_ci # WHAT GOES HERE? 7205f9996aaSopenharmony_ci # 7215f9996aaSopenharmony_ci # Other than the main compiler and linker configs, the only reason for a config 7225f9996aaSopenharmony_ci # to be in this list is if some targets need to explicitly override that config 7235f9996aaSopenharmony_ci # by removing it. This is how targets opt-out of flags. If you don't have that 7245f9996aaSopenharmony_ci # requirement and just need to add a config everywhere, reference it as a 7255f9996aaSopenharmony_ci # sub-config of an existing one, most commonly the main "compiler" one. 7265f9996aaSopenharmony_ci 7275f9996aaSopenharmony_ci # Holds all configs used for running the compiler. 7285f9996aaSopenharmony_ci default_compiler_configs = [ 7295f9996aaSopenharmony_ci "//build/config:feature_flags", 7305f9996aaSopenharmony_ci "//build/config/compiler:afdo", 7315f9996aaSopenharmony_ci "//build/config/compiler:afdo_optimize_size", 7325f9996aaSopenharmony_ci "//build/config/compiler:compiler", 7335f9996aaSopenharmony_ci "//build/config/compiler:compiler_arm_fpu", 7345f9996aaSopenharmony_ci "//build/config/compiler:compiler_arm_thumb", 7355f9996aaSopenharmony_ci "//build/config/compiler:chromium_code", 7365f9996aaSopenharmony_ci "//build/config/compiler:default_include_dirs", 7375f9996aaSopenharmony_ci "//build/config/compiler:default_optimization", 7385f9996aaSopenharmony_ci "//build/config/compiler:default_stack_frames", 7395f9996aaSopenharmony_ci "//build/config/compiler:default_symbols", 7405f9996aaSopenharmony_ci "//build/config/compiler:export_dynamic", 7415f9996aaSopenharmony_ci "//build/config/compiler:no_exceptions", 7425f9996aaSopenharmony_ci "//build/config/compiler:no_rtti", 7435f9996aaSopenharmony_ci "//build/config/compiler:runtime_library", 7445f9996aaSopenharmony_ci "//build/config/compiler:thin_archive", 7455f9996aaSopenharmony_ci "//build/config/compiler:no_common", 7465f9996aaSopenharmony_ci "//build/config/coverage:default_coverage", 7475f9996aaSopenharmony_ci "//build/config/sanitizers:default_sanitizer_flags", 7485f9996aaSopenharmony_ci "//build/config/security:default_security_configs", 7495f9996aaSopenharmony_ci "//build/config/rust:rust_config", 7505f9996aaSopenharmony_ci "//build/config:predefined_macro", 7515f9996aaSopenharmony_ci ] 7525f9996aaSopenharmony_ci 7535f9996aaSopenharmony_ci if (is_ohos) { 7545f9996aaSopenharmony_ci default_compiler_configs += [ 7555f9996aaSopenharmony_ci "//build/config/ohos:default_orderfile_instrumentation", 7565f9996aaSopenharmony_ci "//build/config/gcc:symbol_visibility_inline_hidden", 7575f9996aaSopenharmony_ci ] 7585f9996aaSopenharmony_ci } 7595f9996aaSopenharmony_ci 7605f9996aaSopenharmony_ci if (is_clang) { 7615f9996aaSopenharmony_ci default_compiler_configs += [ 7625f9996aaSopenharmony_ci "//build/config/clang:find_bad_constructs", 7635f9996aaSopenharmony_ci "//build/config/clang:extra_warnings", 7645f9996aaSopenharmony_ci ] 7655f9996aaSopenharmony_ci } 7665f9996aaSopenharmony_ci 7675f9996aaSopenharmony_ci if (is_ohos && is_clang && target_cpu == "arm64") { 7685f9996aaSopenharmony_ci default_compiler_configs += 7695f9996aaSopenharmony_ci [ "//build/config/security:stack_protector_ret_strong_config" ] 7705f9996aaSopenharmony_ci } 7715f9996aaSopenharmony_ci 7725f9996aaSopenharmony_ci # Debug/release-related defines. 7735f9996aaSopenharmony_ci if (is_debug) { 7745f9996aaSopenharmony_ci default_compiler_configs += [ "//build/config:debug" ] 7755f9996aaSopenharmony_ci } else { 7765f9996aaSopenharmony_ci default_compiler_configs += [ "//build/config:release" ] 7775f9996aaSopenharmony_ci } 7785f9996aaSopenharmony_ci 7795f9996aaSopenharmony_ci if (is_android) { 7805f9996aaSopenharmony_ci default_compiler_configs += [ 7815f9996aaSopenharmony_ci "//build_plugins/config/aosp:default_orderfile_instrumentation", 7825f9996aaSopenharmony_ci "//build_plugins/config/aosp:lld_pack_relocations", 7835f9996aaSopenharmony_ci "//build/config/gcc:symbol_visibility_inline_hidden", 7845f9996aaSopenharmony_ci ] 7855f9996aaSopenharmony_ci } 7865f9996aaSopenharmony_ci 7875f9996aaSopenharmony_ci # Static libraries and source sets use only the compiler ones. 7885f9996aaSopenharmony_ci default_static_library_configs = default_compiler_configs 7895f9996aaSopenharmony_ci default_source_set_configs = default_compiler_configs 7905f9996aaSopenharmony_ci 7915f9996aaSopenharmony_ci # Executable defaults. 7925f9996aaSopenharmony_ci default_executable_configs = default_compiler_configs + [ 7935f9996aaSopenharmony_ci "//build/config:default_libs", 7945f9996aaSopenharmony_ci "//build/config:executable_config", 7955f9996aaSopenharmony_ci ] 7965f9996aaSopenharmony_ci if (is_android) { 7975f9996aaSopenharmony_ci default_executable_configs += [ "//build_plugins/config/aosp:default_libs" ] 7985f9996aaSopenharmony_ci } 7995f9996aaSopenharmony_ci 8005f9996aaSopenharmony_ci # Shared library and loadable module defaults (also for components in component 8015f9996aaSopenharmony_ci # mode). 8025f9996aaSopenharmony_ci default_shared_library_configs = default_compiler_configs + [ 8035f9996aaSopenharmony_ci "//build/config:default_libs", 8045f9996aaSopenharmony_ci "//build/config:shared_library_config", 8055f9996aaSopenharmony_ci ] 8065f9996aaSopenharmony_ci if (is_android) { 8075f9996aaSopenharmony_ci default_shared_library_configs += 8085f9996aaSopenharmony_ci [ "//build_plugins/config/aosp:default_libs" ] 8095f9996aaSopenharmony_ci } 8105f9996aaSopenharmony_ci} 8115f9996aaSopenharmony_ci 8125f9996aaSopenharmony_ci# Lite OS use different buildconfig.gn 8135f9996aaSopenharmony_ciif (is_lite_system) { 8145f9996aaSopenharmony_ci import("//build/lite/ohos_var.gni") 8155f9996aaSopenharmony_ci import("${device_config_path}/config.gni") 8165f9996aaSopenharmony_ci target_arch_cflags = board_cflags 8175f9996aaSopenharmony_ci if (board_arch != "") { 8185f9996aaSopenharmony_ci target_arch_cflags += [ "-march=$board_arch" ] 8195f9996aaSopenharmony_ci } 8205f9996aaSopenharmony_ci if (board_cpu != "") { 8215f9996aaSopenharmony_ci target_arch_cflags += [ "-mcpu=$board_cpu" ] 8225f9996aaSopenharmony_ci } 8235f9996aaSopenharmony_ci 8245f9996aaSopenharmony_ci arch = "arm" 8255f9996aaSopenharmony_ci if (current_cpu == "arm64") { 8265f9996aaSopenharmony_ci arch = "aarch64" 8275f9996aaSopenharmony_ci } 8285f9996aaSopenharmony_ci 8295f9996aaSopenharmony_ci if (current_cpu == "loongarch64") { 8305f9996aaSopenharmony_ci arch = "loongarch64" 8315f9996aaSopenharmony_ci } 8325f9996aaSopenharmony_ci 8335f9996aaSopenharmony_ci if (ohos_kernel_type == "liteos_a") { 8345f9996aaSopenharmony_ci target_triple = "$arch-liteos-ohos" 8355f9996aaSopenharmony_ci } else if (ohos_kernel_type == "linux") { 8365f9996aaSopenharmony_ci target_triple = "$arch-linux-ohos" 8375f9996aaSopenharmony_ci } 8385f9996aaSopenharmony_ci 8395f9996aaSopenharmony_ci if (defined(board_configed_sysroot) && board_configed_sysroot != "") { 8405f9996aaSopenharmony_ci ohos_current_sysroot = board_configed_sysroot 8415f9996aaSopenharmony_ci } 8425f9996aaSopenharmony_ci 8435f9996aaSopenharmony_ci # Only gcc available for liteos_m. 8445f9996aaSopenharmony_ci if (ohos_kernel_type == "liteos_m" || ohos_kernel_type == "linux") { 8455f9996aaSopenharmony_ci use_board_toolchain = true 8465f9996aaSopenharmony_ci } 8475f9996aaSopenharmony_ci 8485f9996aaSopenharmony_ci toolchain_cmd_suffix = "" 8495f9996aaSopenharmony_ci if (host_os == "win") { 8505f9996aaSopenharmony_ci toolchain_cmd_suffix = ".exe" 8515f9996aaSopenharmony_ci } 8525f9996aaSopenharmony_ci 8535f9996aaSopenharmony_ci # enable ccache if ccache is installed, 8545f9996aaSopenharmony_ci # or enable xcache if xcache is installed. 8555f9996aaSopenharmony_ci if (ohos_build_enable_ccache) { 8565f9996aaSopenharmony_ci compile_prefix = "ccache " 8575f9996aaSopenharmony_ci } else if (ohos_build_enable_xcache) { 8585f9996aaSopenharmony_ci compile_prefix = "/opt/buildtools/nextbuild/xcache " 8595f9996aaSopenharmony_ci } else { 8605f9996aaSopenharmony_ci compile_prefix = "" 8615f9996aaSopenharmony_ci } 8625f9996aaSopenharmony_ci 8635f9996aaSopenharmony_ci # Load board adapter dir from board config. 8645f9996aaSopenharmony_ci if (board_adapter_dir != "") { 8655f9996aaSopenharmony_ci ohos_board_adapter_dir = board_adapter_dir 8665f9996aaSopenharmony_ci ohos_vendor_adapter_dir = board_adapter_dir 8675f9996aaSopenharmony_ci } 8685f9996aaSopenharmony_ci 8695f9996aaSopenharmony_ci # Set current toolchain with to board configuration. 8705f9996aaSopenharmony_ci if (board_toolchain != "" && use_board_toolchain) { 8715f9996aaSopenharmony_ci ohos_build_compiler = board_toolchain_type 8725f9996aaSopenharmony_ci if (board_toolchain_path != "") { 8735f9996aaSopenharmony_ci compile_prefix += "${board_toolchain_path}/${board_toolchain_prefix}" 8745f9996aaSopenharmony_ci } else { 8755f9996aaSopenharmony_ci compile_prefix += "${board_toolchain_prefix}" 8765f9996aaSopenharmony_ci } 8775f9996aaSopenharmony_ci set_default_toolchain("//build/lite/toolchain:${board_toolchain}") 8785f9996aaSopenharmony_ci if (board_toolchain_type == "gcc") { 8795f9996aaSopenharmony_ci default_compiler_configs = [] 8805f9996aaSopenharmony_ci ohos_current_cc_command = "${compile_prefix}gcc$toolchain_cmd_suffix" 8815f9996aaSopenharmony_ci ohos_current_cxx_command = "${compile_prefix}g++$toolchain_cmd_suffix" 8825f9996aaSopenharmony_ci ohos_current_ar_command = "${compile_prefix}ar$toolchain_cmd_suffix" 8835f9996aaSopenharmony_ci ohos_current_ld_command = ohos_current_cc_command 8845f9996aaSopenharmony_ci ohos_current_strip_command = 8855f9996aaSopenharmony_ci "${compile_prefix}strip$toolchain_cmd_suffix --strip-unneeded" 8865f9996aaSopenharmony_ci default_compiler_configs += [ "//build/lite/config:gcc_opt" ] 8875f9996aaSopenharmony_ci } else if (board_toolchain_type == "clang") { 8885f9996aaSopenharmony_ci default_compiler_configs = [] 8895f9996aaSopenharmony_ci ohos_current_cc_command = "${compile_prefix}clang$toolchain_cmd_suffix" 8905f9996aaSopenharmony_ci ohos_current_cxx_command = "${compile_prefix}clang++$toolchain_cmd_suffix" 8915f9996aaSopenharmony_ci compile_prefix += "llvm-" 8925f9996aaSopenharmony_ci ohos_current_ar_command = "${compile_prefix}ar$toolchain_cmd_suffix" 8935f9996aaSopenharmony_ci ohos_current_ld_command = ohos_current_cc_command 8945f9996aaSopenharmony_ci ohos_current_strip_command = 8955f9996aaSopenharmony_ci "${compile_prefix}strip$toolchain_cmd_suffix --strip-unneeded" 8965f9996aaSopenharmony_ci default_compiler_configs += [ "//build/lite/config:clang_opt" ] 8975f9996aaSopenharmony_ci } else if (board_toolchain_type == "iccarm") { 8985f9996aaSopenharmony_ci import("//build/config/compiler/lite/iccarm/iccarm.gni") 8995f9996aaSopenharmony_ci ohos_current_cc_command = "${compile_prefix}iccarm$toolchain_cmd_suffix" 9005f9996aaSopenharmony_ci ohos_current_cxx_command = "${compile_prefix}iccarm$toolchain_cmd_suffix" 9015f9996aaSopenharmony_ci ohos_current_ar_command = "${compile_prefix}iarchive$toolchain_cmd_suffix" 9025f9996aaSopenharmony_ci ohos_current_as_command = "${compile_prefix}iasmarm$toolchain_cmd_suffix" 9035f9996aaSopenharmony_ci ohos_current_ld_command = "${compile_prefix}ilinkarm$toolchain_cmd_suffix" 9045f9996aaSopenharmony_ci ohos_current_strip_command = 9055f9996aaSopenharmony_ci "${compile_prefix}ielftool$toolchain_cmd_suffix --strip" 9065f9996aaSopenharmony_ci } else { 9075f9996aaSopenharmony_ci default_compiler_configs = [] 9085f9996aaSopenharmony_ci } 9095f9996aaSopenharmony_ci 9105f9996aaSopenharmony_ci # Overwrite ld cmd by customed cmd. 9115f9996aaSopenharmony_ci if (defined(board_customed_ld_cmd) && board_customed_ld_cmd != "") { 9125f9996aaSopenharmony_ci ohos_current_ld_command = board_customed_ld_cmd 9135f9996aaSopenharmony_ci } 9145f9996aaSopenharmony_ci } else { 9155f9996aaSopenharmony_ci # OHOS default toolchain 9165f9996aaSopenharmony_ci default_compiler_configs = [] 9175f9996aaSopenharmony_ci ohos_build_compiler = "clang" 9185f9996aaSopenharmony_ci ohos_clang_toolchain_dir = rebase_path("${ohos_build_compiler_dir}/bin") 9195f9996aaSopenharmony_ci compile_prefix += "$ohos_clang_toolchain_dir/" 9205f9996aaSopenharmony_ci ohos_current_cc_command = "${compile_prefix}clang$toolchain_cmd_suffix" 9215f9996aaSopenharmony_ci ohos_current_cxx_command = "${compile_prefix}clang++$toolchain_cmd_suffix" 9225f9996aaSopenharmony_ci compile_prefix += "llvm-" 9235f9996aaSopenharmony_ci ohos_current_ar_command = "${compile_prefix}ar$toolchain_cmd_suffix" 9245f9996aaSopenharmony_ci ohos_current_ld_command = ohos_current_cxx_command 9255f9996aaSopenharmony_ci ohos_current_strip_command = 9265f9996aaSopenharmony_ci "${compile_prefix}strip$toolchain_cmd_suffix --strip-unneeded" 9275f9996aaSopenharmony_ci if (current_os == "ohos") { 9285f9996aaSopenharmony_ci set_default_toolchain("//build/lite/toolchain:linux_x86_64_ohos_clang") 9295f9996aaSopenharmony_ci default_compiler_configs += [ 9305f9996aaSopenharmony_ci "//build/lite/config:ohos_clang", 9315f9996aaSopenharmony_ci "//build/lite/config:clang_opt", 9325f9996aaSopenharmony_ci ] 9335f9996aaSopenharmony_ci } else { 9345f9996aaSopenharmony_ci set_default_toolchain("//build/toolchain/linux:clang_$target_cpu") 9355f9996aaSopenharmony_ci default_compiler_configs += [ 9365f9996aaSopenharmony_ci "//build/config:default_libs", 9375f9996aaSopenharmony_ci "//build/config:executable_config", 9385f9996aaSopenharmony_ci "//build/config/compiler:default_include_dirs", 9395f9996aaSopenharmony_ci "//build/config/compiler:compiler", 9405f9996aaSopenharmony_ci ] 9415f9996aaSopenharmony_ci } 9425f9996aaSopenharmony_ci } 9435f9996aaSopenharmony_ci if (board_toolchain_type != "iccarm") { 9445f9996aaSopenharmony_ci if (current_os == "ohos") { 9455f9996aaSopenharmony_ci default_compiler_configs += [ 9465f9996aaSopenharmony_ci "//build/lite/config:board_config", 9475f9996aaSopenharmony_ci "//build/lite/config:cpu_arch", 9485f9996aaSopenharmony_ci "//build/lite/config:common", 9495f9996aaSopenharmony_ci "//build/lite/config:default_link_path", 9505f9996aaSopenharmony_ci ] 9515f9996aaSopenharmony_ci } 9525f9996aaSopenharmony_ci 9535f9996aaSopenharmony_ci if (ohos_build_type == "debug") { 9545f9996aaSopenharmony_ci default_compiler_configs += [ "//build/lite/config:debug" ] 9555f9996aaSopenharmony_ci } else if (ohos_build_type == "release") { 9565f9996aaSopenharmony_ci default_compiler_configs += [ "//build/lite/config:release" ] 9575f9996aaSopenharmony_ci } 9585f9996aaSopenharmony_ci 9595f9996aaSopenharmony_ci if (ohos_kernel_type == "liteos_a" && current_os == "ohos") { 9605f9996aaSopenharmony_ci default_compiler_configs += 9615f9996aaSopenharmony_ci [ "//build/lite/config/kernel/liteos/cortex_a:default" ] 9625f9996aaSopenharmony_ci } 9635f9996aaSopenharmony_ci 9645f9996aaSopenharmony_ci if (ohos_kernel_type == "liteos_a" || ohos_kernel_type == "linux") { 9655f9996aaSopenharmony_ci default_compiler_configs += [ 9665f9996aaSopenharmony_ci "//build/lite/config:security", 9675f9996aaSopenharmony_ci "//build/lite/config:exceptions", 9685f9996aaSopenharmony_ci ] 9695f9996aaSopenharmony_ci } else if (ohos_kernel_type == "liteos_m") { 9705f9996aaSopenharmony_ci default_compiler_configs += [ "//build/lite/config:stack_protector" ] 9715f9996aaSopenharmony_ci } 9725f9996aaSopenharmony_ci 9735f9996aaSopenharmony_ci default_compiler_configs += [ 9745f9996aaSopenharmony_ci "//build/lite/config:language_c", 9755f9996aaSopenharmony_ci "//build/lite/config:language_cpp", 9765f9996aaSopenharmony_ci "//build/config/sanitizers:default_sanitizer_flags", 9775f9996aaSopenharmony_ci ] 9785f9996aaSopenharmony_ci 9795f9996aaSopenharmony_ci if (current_os == "ohos") { 9805f9996aaSopenharmony_ci default_compiler_configs += [ "//build/lite/config:kernel_macros" ] 9815f9996aaSopenharmony_ci } 9825f9996aaSopenharmony_ci 9835f9996aaSopenharmony_ci default_shared_library_configs = 9845f9996aaSopenharmony_ci default_compiler_configs + 9855f9996aaSopenharmony_ci [ "//build/lite/config:shared_library_config" ] 9865f9996aaSopenharmony_ci default_static_library_configs = default_compiler_configs 9875f9996aaSopenharmony_ci default_executable_configs = default_compiler_configs 9885f9996aaSopenharmony_ci if (ohos_kernel_type != "liteos_m") { 9895f9996aaSopenharmony_ci default_static_library_configs += 9905f9996aaSopenharmony_ci [ "//build/lite/config:static_pie_config" ] 9915f9996aaSopenharmony_ci default_executable_configs += [ "//build/lite/config:static_pie_config" ] 9925f9996aaSopenharmony_ci default_executable_configs += 9935f9996aaSopenharmony_ci [ "//build/lite/config:pie_executable_config" ] 9945f9996aaSopenharmony_ci } 9955f9996aaSopenharmony_ci default_executable_configs += [ "//build/lite/config:board_exe_ld_flags" ] 9965f9996aaSopenharmony_ci } 9975f9996aaSopenharmony_ci} 9985f9996aaSopenharmony_ci 9995f9996aaSopenharmony_ciset_defaults("executable") { 10005f9996aaSopenharmony_ci configs = default_executable_configs 10015f9996aaSopenharmony_ci} 10025f9996aaSopenharmony_ci 10035f9996aaSopenharmony_ciset_defaults("static_library") { 10045f9996aaSopenharmony_ci configs = default_static_library_configs 10055f9996aaSopenharmony_ci} 10065f9996aaSopenharmony_ci 10075f9996aaSopenharmony_ciset_defaults("shared_library") { 10085f9996aaSopenharmony_ci configs = default_shared_library_configs 10095f9996aaSopenharmony_ci} 10105f9996aaSopenharmony_ci 10115f9996aaSopenharmony_ciset_defaults("rust_library") { 10125f9996aaSopenharmony_ci configs = default_compiler_configs 10135f9996aaSopenharmony_ci} 10145f9996aaSopenharmony_ci 10155f9996aaSopenharmony_ciset_defaults("rust_proc_macro") { 10165f9996aaSopenharmony_ci configs = default_compiler_configs 10175f9996aaSopenharmony_ci} 10185f9996aaSopenharmony_ci 10195f9996aaSopenharmony_ciset_defaults("source_set") { 10205f9996aaSopenharmony_ci configs = default_compiler_configs 10215f9996aaSopenharmony_ci} 10225f9996aaSopenharmony_ci 10235f9996aaSopenharmony_ci# Sets default dependencies for executable and shared_library targets. 10245f9996aaSopenharmony_ci# 10255f9996aaSopenharmony_ci# Variables 10265f9996aaSopenharmony_ci# no_default_deps: If true, no standard dependencies will be added. 10275f9996aaSopenharmony_citarget_type_list = [ 10285f9996aaSopenharmony_ci "executable", 10295f9996aaSopenharmony_ci "loadable_module", 10305f9996aaSopenharmony_ci "shared_library", 10315f9996aaSopenharmony_ci "static_library", 10325f9996aaSopenharmony_ci "rust_library", 10335f9996aaSopenharmony_ci "source_set", 10345f9996aaSopenharmony_ci "rust_proc_macro", 10355f9996aaSopenharmony_ci] 10365f9996aaSopenharmony_ci 10375f9996aaSopenharmony_ciforeach(_target_type, target_type_list) { 10385f9996aaSopenharmony_ci template(_target_type) { 10395f9996aaSopenharmony_ci target(_target_type, target_name) { 10405f9996aaSopenharmony_ci forward_variables_from(invoker, "*", [ "no_default_deps" ]) 10415f9996aaSopenharmony_ci if (!defined(deps)) { 10425f9996aaSopenharmony_ci deps = [] 10435f9996aaSopenharmony_ci } 10445f9996aaSopenharmony_ci if (!defined(invoker.no_default_deps) || !invoker.no_default_deps) { 10455f9996aaSopenharmony_ci if (is_lite_system && current_os == "ohos") { 10465f9996aaSopenharmony_ci deps += [ "//third_party/musl:sysroot_lite" ] 10475f9996aaSopenharmony_ci } else { 10485f9996aaSopenharmony_ci deps += [ "//build/config:${_target_type}_deps" ] 10495f9996aaSopenharmony_ci } 10505f9996aaSopenharmony_ci } 10515f9996aaSopenharmony_ci } 10525f9996aaSopenharmony_ci } 10535f9996aaSopenharmony_ci} 10545f9996aaSopenharmony_ci 10555f9996aaSopenharmony_ciif (is_lite_system && current_os == "ohos") { 10565f9996aaSopenharmony_ci _target_type_list = [ 10575f9996aaSopenharmony_ci "action", 10585f9996aaSopenharmony_ci "action_foreach", 10595f9996aaSopenharmony_ci ] 10605f9996aaSopenharmony_ci 10615f9996aaSopenharmony_ci foreach(_target_type, _target_type_list) { 10625f9996aaSopenharmony_ci template(_target_type) { 10635f9996aaSopenharmony_ci target(_target_type, target_name) { 10645f9996aaSopenharmony_ci forward_variables_from(invoker, "*", [ "no_default_deps" ]) 10655f9996aaSopenharmony_ci if (!defined(deps)) { 10665f9996aaSopenharmony_ci deps = [] 10675f9996aaSopenharmony_ci } 10685f9996aaSopenharmony_ci if (!defined(invoker.no_default_deps) || !invoker.no_default_deps) { 10695f9996aaSopenharmony_ci deps += [ "//third_party/musl:sysroot_lite" ] 10705f9996aaSopenharmony_ci } 10715f9996aaSopenharmony_ci } 10725f9996aaSopenharmony_ci } 10735f9996aaSopenharmony_ci } 10745f9996aaSopenharmony_ci} 1075