# Copyright (c) 2021 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import("//build/common.gni")
import("//build/version.gni")

declare_args() {
  # test label
  test_label_type = ""
}

declare_args() {
  # build ohos version
  build_public_version = true
}

declare_args() {
  enable_java = is_large_system
}

declare_args() {
  build_version_alpha = true
}

declare_args() {
  # Whether to enable LSE Tuned, which is an optimization for ARMv8.1+
  # platforms that enables the always beneficial instructions from the LSE
  # instruction extension.
  armv8_1_lse_tuning_optimization = false
}

declare_args() {
  sdk_build_public = false
  sdk_build_arkts = false
  sdk_build_check_level = 0
  sdk_build_cangjie = false
  use_current_sdk = false
  interface_sdk_path = "${root_out_dir}/sdk-interface"
  interface_sdk_path_ets1 = "${root_out_dir}/sdk-interface/dynamic/sdk-js"
  interface_sdk_path_ets2 = "${root_out_dir}/sdk-interface/static/sdk-js"
  interface_sdk_path_ets1_interop =
      "${root_out_dir}/sdk-interface/dynamic-interop"
  interface_sdk_path_ets2_interop =
      "${root_out_dir}/sdk-interface/static-interop"
}

declare_args() {
  # Whether build the qemu images, this image is usd to run on emulator device.
  build_qemu_image = false

  # system package dir
  system_base_dir = "system"

  # ramdisk package dir
  ramdisk_base_dir = "ramdisk"

  # vendor package dir
  vendor_base_dir = "vendor"

  # chipset package dir
  chipset_base_dir = "vendor"

  # updater package dir
  updater_base_dir = "updater"

  # updater_vendor package dir
  updater_vendor_base_dir = "updater_vendor"

  # sys_prod package dir
  sys_prod_base_dir = "sys_prod"

  # eng_system package dir
  eng_system_base_dir = "eng_system"

  # eng_chipset package dir
  eng_chipset_base_dir = "eng_chipset"

  # chip_prod package dir
  chip_prod_base_dir = "chip_prod"

  # cloud_rom package dir
  cloud_rom_base_dir = "cloud_rom"

  # chipset passthrough libraries dir
  chipset_passthrough_dir = "chipsetsdk"
  passthrough_dir = "passthrough"
  passthrough_indirect_dir = "passthrough/indirect"

  ndk_dir = "ndk"
  llndk_dir = ""
  platformsdk_dir = "platformsdk"

  chipset_sdk_dir = "chipset-sdk"

  chipset_sdk_sp_dir = "chipset-sdk-sp"

  # arm64e toolchain
  arm64e_toolchain = "//build/toolchain/ohos:ohos_clang_arm64e"

  # check sdk interface
  sdk_interface_check = true

  # is use sdk
  is_use_sdk = false

  # build test example
  build_example = false

  # check intersdk interface
  check_innersdk_interface = true
  gen_innersdk_interface_signature = false

  # sdk check
  check_sdk_interface = true
  gen_sdk_interface_signature = false

  # Whether to collect the ebpf testcase.
  ebpf_enable = false

  # Info files of test targets will remove source file paths when setting true.
  release_test_suite = false

  # Whether to enable scalable build.
  scalable_build = false

  # Whether to enable pycache or not.
  pycache_enable = true

  # Whether to build js bundle to ark bytecode
  build_ark = true

  # Whether to make Code_OpenSource.tar.gz
  make_osp = false

  # sepcify opensource scan dir, separated by a colon
  osp_scan_dirs = "third_party:kernel:device:drivers"

  # sepcify opensource scan license, separated by a colon
  osp_scan_licenses = "GPL:LGPL:MPL:EPL:CDDL"

  # Collecting but not pacaking open-source packages for post processing
  osp_only_collect_file = false

  # Enables EMMA Java code coverage. Instruments classes during build to
  # produce .ec files during runtime
  emma_coverage = false
}

declare_args() {
  build_platform = ""

  sparse_image = false
}

declare_args() {
  target_app_dir = ""
}

declare_args() {
  system_kits_package = false

  kits_api_statistics = false

  # ohos sdk
  build_ohos_sdk = false
  enable_enhanced_opt = true

  # Build ohos sdk compatibility jar
  build_bc_sdk = false

  # Which OS the generated SDK works on. possible values: 'win/mac/linux/default'
  sdk_platform = "default"
}

declare_args() {
  # Build ohos NDK
  build_ohos_ndk = false

  # Which OS the generated NDK works on. possible values: 'win/mac/linux/default'
  ndk_platform = "default"

  # Whether to archive or not, set to false in debug to save ndk build time.
  archive_ndk = true

  # Check ndk header signature, set false to generate header signature
  check_ndk_signature = false
}

declare_args() {
  archive_component = false
}

declare_args() {
  build_asan_clean = false
}

declare_args() {
  check_deps = false
}

declare_args() {
  enable_iccarm_sp = false
}

declare_args() {
  enforce_selinux = false
}

declare_args() {
  enable_notice_collection = true
}

declare_args() {
  skip_generate_module_list_file = true
}

declare_args() {
  ohos_skip_parse_external_deps = false
}

declare_args() {
  load_test_config = true
}

declare_args() {
  # Skip module_info generation when the packaging image is not needed
  skip_gen_module_info = false
}

declare_args() {
  enable_archive_sdk = true
  enable_process_notice = true
}

declare_args() {
  is_use_check_deps = true
}

if (ohos_indep_compiler_enable) {
  is_use_check_deps = false
}

declare_args() {
  if (is_mac || is_ios) {
    enable_bitcode = false
    if (defined(product_build_config.enable_bitcode)) {
      enable_bitcode = product_build_config.enable_bitcode
    }
  }
}

declare_args() {
  bitcode_marker = false
}

declare_args() {
  is_opensource = true
}

# Upgrade Skia version
use_new_skia = false

if (defined(build_cross_platform_version) && build_cross_platform_version) {
  use_rosen_drawing = false
} else {
  use_rosen_drawing = true
}

# support changing the ohpm registry and using hvigor cache
declare_args() {
  ohpm_registry = ""
  use_hvigor_cache = false
  hvigor_obfuscation = true
  ohos_app_enable_ubsan = false
  ohos_app_enable_asan = false
  ohos_app_enable_tsan = false
}

# enhance some optimizations
declare_args() {
  enhanced_opt = true
  build_framework_enable_global_reordering = false
  build_framework_enable_rcpc = false
  build_framework_enable_thinlto_nca = false
}

# build target type
target_type = "${target_os}-${target_cpu}"

is_system_component =
    exec_script(rebase_path("//build/scripts/dir_exists.py"),
                [ rebase_path("//foundation/arkui", root_build_dir) ],
                "string") == "True"

parts_src_flag_file = "$root_build_dir/build_configs/parts_src_flag.json"

declare_args() {
  innersdk_dir_name = "sdk/${target_type}"
}
declare_args() {
  innersdk_base_dir = "//${innersdk_dir_name}"
}

declare_args() {
  ability_runtime_graphics = true
}

declare_args() {
  window_manager_use_sceneboard = false
}

declare_args() {
  target_platform_triple = ""
  if (target_cpu == "arm") {
    target_platform_triple = "arm-linux-ohos"
  } else if (target_cpu == "arm64") {
    target_platform_triple = "aarch64-linux-ohos"
  } else if (target_cpu == "x86_64") {
    target_platform_triple = "x86_64-linux-ohos"
  }
}

declare_args() {
  remove_unstripped_exe = false
}

# Compile and generate output directory
innersdk_build_out_dir = "innerkits/${target_type}"

dist_dir_name = "component_dist/${target_type}"
dist_build_out_dir = "${root_build_dir}/component_dist/${target_type}"
dist_subsystem_info_filename = "dist_parts_info.json"

# install packages archive dir define
dist_install_packages_dir = "${dist_dir_name}/packages_to_install"
dist_subsystem_info_file =
    "//${dist_install_packages_dir}/${dist_subsystem_info_filename}"
dist_build_install_packages_dir = "${dist_build_out_dir}/packages_to_install"
dist_subsystem_info_output_file =
    "${dist_build_install_packages_dir}/${dist_subsystem_info_filename}"

current_sdk_home = "//prebuilts/ohos-sdk/linux/${api_version}"
prebuilts_sdk_dir = "//prebuilts/ohos-sdk/linux/${api_version}"

ramdisk_dir_list = []

app_target_allowlist = [
  "*:*_res",
  "*:*_resources",
  "*:*_resource",
  "*:*_assets",
  "*:*_asset",
  "*:*_profile",
]
app_target_types = [
  "hap",
  "resources",
  "js_assets",
  "ets_assets",
  "assets",
  "app_profile",
]

ohos_package_names = [
  "ohos.*",
  "ark.*",
]

openjdk_package_names = [
  "java.*",
  "javax.*",
]
if (ohos_indep_compiler_enable) {
  hapsigner = "${prebuilts_sdk_dir}/toolchains/lib/hap-sign-tool.jar"
  hap_packing_tool = "${prebuilts_sdk_dir}/toolchains/lib/app_packing_tool.jar"
} else {
  hapsigner = "//developtools/hapsigner/dist/hap-sign-tool.jar"
  hap_packing_tool =
      "${root_out_dir}/obj/developtools/packing_tool/jar/app_packing_tool.jar"
}
default_hvigor_nodejs_version = "v18.20.1"
nodejs = "//prebuilts/build-tools/common/nodejs/current/bin/node"
npm = "//prebuilts/build-tools/common/nodejs/current/bin/npm"

default_key_alias = "OpenHarmony Application Release"
default_signature_algorithm = "SHA256withECDSA"
default_hap_private_key_path = "123456"
default_keystore_password = "123456"
if (ohos_indep_compiler_enable) {
  default_keystore_path = "${prebuilts_sdk_dir}/toolchains/lib/OpenHarmony.p12"
  default_hap_certificate_file =
      "//prebuilts/ohos-sdk/OpenHarmonyApplication.pem"
} else {
  default_keystore_path = "//developtools/hapsigner/dist/OpenHarmony.p12"
  default_hap_certificate_file =
      "//developtools/hapsigner/dist/OpenHarmonyApplication.pem"
}

declare_args() {
  build_default_sdk_target = false
  build_mac_sdk_target = false
  build_linux_sdk_target = false
  build_linux_arm64_sdk_target = false
  build_windows_sdk_target = false
  build_ohos_sdk_target = false
}

declare_args() {
  build_default_ndk_target = false
  build_mac_ndk_target = false
  build_linux_ndk_target = false
  build_linux_arm64_ndk_target = false
  build_windows_ndk_target = false
  build_ohos_ndk_target = false
}

declare_args() {
  make_pac_format_image = false
}

python_script = "//build/scripts/is_substring.py"

if (exec_script(python_script,
                [
                  sdk_platform,
                  "default",
                ],
                "string") == "True") {
  build_default_sdk_target = true
}

if (exec_script(python_script,
                [
                  sdk_platform,
                  "mac",
                ],
                "string") == "True") {
  build_mac_sdk_target = true
}

if (exec_script(python_script,
                [
                  sdk_platform,
                  "win",
                ],
                "string") == "True") {
  build_windows_sdk_target = true
}

if (exec_script(python_script,
                [
                  sdk_platform,
                  "linux",
                ],
                "string") == "True") {
  build_linux_sdk_target = true
}

if (exec_script(python_script,
                [
                  sdk_platform,
                  "arm64",
                ],
                "string") == "True") {
  build_linux_arm64_sdk_target = true
}

if (exec_script(python_script,
                [
                  sdk_platform,
                  "ohos",
                ],
                "string") == "True") {
  build_ohos_sdk_target = true
}

if (exec_script(python_script,
                [
                  ndk_platform,
                  "default",
                ],
                "string") == "True") {
  build_default_ndk_target = true
}

if (exec_script(python_script,
                [
                  ndk_platform,
                  "mac",
                ],
                "string") == "True") {
  build_mac_ndk_target = true
}

if (exec_script(python_script,
                [
                  ndk_platform,
                  "win",
                ],
                "string") == "True") {
  build_windows_ndk_target = true
}

if (exec_script(python_script,
                [
                  ndk_platform,
                  "linux",
                ],
                "string") == "True") {
  build_linux_ndk_target = true
}

if (exec_script(python_script,
                [
                  ndk_platform,
                  "arm64",
                ],
                "string") == "True") {
  build_linux_arm64_ndk_target = true
}

if (exec_script(python_script,
                [
                  ndk_platform,
                  "ohos",
                ],
                "string") == "True") {
  build_ohos_ndk_target = true
}