# 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/config/components/multimodalinput/cursor_config.gni")
declare_args() {
  graphic_2d_feature_product = "default"
  graphic_2d_feature_enable_pgo = false
  graphic_2d_feature_enable_codemerge = false
  graphic_2d_feature_enable_func_arg_specialization = false
  graphic_2d_feature_pgo_path = ""
  graphic_2d_feature_bootanimation_enable = true
  graphic_2d_feature_ace_enable_gpu = true
  graphic_2d_feature_color_gamut_enable = false
  graphic_2d_feature_rs_enable_eglimage = false
  graphic_2d_feature_rs_enable_profiler = true
  graphic_2d_feature_use_texgine = false
  graphic_2d_feature_rs_enable_uni_render = false
  graphic_2d_feature_wuji_enable = false
  graphic_2d_feature_enable_afbc = false
  graphic_2d_feature_freemem_enable = false
  graphic_2d_feature_parallel_render_enable = true
  graphic_2d_feature_enable_vulkan = false
  graphic_2d_feature_enable_opengl = true
  graphic_2d_feature_enable_sdf = false
  graphic_2d_feature_enable_opinc = false
  graphic_2d_feature_enable_filter_cache = true
  enable_text_gine = true
  use_skia_txt = true
  use_video_processing_engine = false
  logger_enable_scope = false
  player_framework_enable = true
  graphic_2d_feature_drivers_interface_display_enable = true
  graphic_2d_feature_tp_switch_enbale = false
  graphic_2d_feature_use_igraphics_extend_hooks = false
  graphic_2d_feature_enable_chipset_vsync = false
  graphic_2d_feature_enable_rspipeline = true
  graphic_2d_feature_enable_prefetch = true
  graphic_2d_feature_bootanimation_ext_enable = "default"
  graphic_2d_support_access_token = true
  graphic_2d_feature_overlay_display_enable = false
  enable_full_screen_recongnize = false
  graphic_2d_feature_enable_opengl_to_vulkan = false
  graphic_2d_feature_screenless_enable = false
  graphic_2d_feature_tv_metadata_enable = false
  graphic_2d_feature_upgrade_skia = true
  graphic_2d_feature_enable_rdo = false
  graphic_2d_feature_enable_memory_info_manager = false
  graphic_2d_feature_enable_dvsync = false
  graphic_2d_feature_enable_drm = false
  graphic_2d_feature_enable_mediacommon = false
  graphic_2d_feature_enable_image_detail_enhancer = false
  graphic_2d_feature_rs_modifiers_draw_enable = false

  if (defined(is_arkui_x) && is_arkui_x) {
    is_cross_platform = true
  } else {
    is_cross_platform = false
  }

  graphic_2d_feature_subtree_parallel_enable = false
  graphic_2d_feature_hetero_hdr_enable = false
  graphic_2d_feature_mhc_enable = false
  graphic_2d_feature_enable_primitive = false
}

declare_args() {
  graphic_2d_feature_enable_stack_culling = false
}

if (graphic_2d_feature_product == "phone" ||
    graphic_2d_feature_product == "pc" ||
    graphic_2d_feature_product == "tablet" ||
    graphic_2d_feature_product == "wearable") {
  graphic_2d_feature_enable_vulkan = true
  graphic_2d_feature_enable_stack_culling = true
}

if (graphic_2d_feature_product == "phone" ||
    graphic_2d_feature_product == "pc" ||
    graphic_2d_feature_product == "tablet" ||
    graphic_2d_feature_product == "wearable") {
  graphic_2d_feature_enable_opinc = true
}

if (graphic_2d_feature_product == "tablet") {
  enable_full_screen_recongnize = true
}

gpu_defines = []
accessibility_defines = []

if (graphic_2d_feature_screenless_enable) {
  gpu_defines += ["SCREENLESS_DEVICE"]
}

if (graphic_2d_feature_ace_enable_gpu) {
  if (graphic_2d_feature_enable_vulkan) {
    gpu_defines += [
      "ACE_ENABLE_VK",
      "RS_ENABLE_VK",
    ]
  }
  if (graphic_2d_feature_enable_opengl) {
    gpu_defines += [
      "ACE_ENABLE_GL",
      "RS_ENABLE_GL",
    ]
  }

  if (graphic_2d_feature_enable_opinc) {
    gpu_defines += [ "DDGR_ENABLE_FEATURE_OPINC" ]
  }

  if (graphic_2d_feature_rs_enable_profiler) {
    gpu_defines += [ "SKP_RECORDING_ENABLED" ]
  }

  ace_enable_gpu = true
  rs_enable_gpu = true
  surface_enable_gpu = true
} else {
  gpu_defines += [ "ACE_DISABLE_GL" ]
  ace_enable_gpu = false
  rs_enable_gpu = false
  surface_enable_gpu = false
}

if (graphic_2d_feature_subtree_parallel_enable) {
  gpu_defines += [ "SUBTREE_PARALLEL_ENABLE" ]
}

if (graphic_2d_feature_hetero_hdr_enable) {
  gpu_defines += [ "HETERO_HDR_ENABLE" ]
}

if (graphic_2d_feature_mhc_enable) {
  gpu_defines += [ "MHC_ENABLE" ]
}

if (graphic_2d_feature_rs_enable_eglimage || current_os == "android") {
  gpu_defines += [
    "RS_ENABLE_EGLIMAGE",
    "RS_ENABLE_EGLQUERYSURFACE",
  ]
  rs_enable_eglimage = true
} else {
  gpu_defines += [ "RS_DISABLE_EGLIMAGE" ]
  rs_enable_eglimage = false
}

if (graphic_2d_feature_rs_enable_uni_render) {
  graphic_2d_feature_enable_sdf = false
  if (graphic_2d_feature_product == "phone" ||
    graphic_2d_feature_product == "tablet") {
    graphic_2d_feature_enable_chipset_vsync = true
  }
  gpu_defines += [ "RS_ENABLE_UNI_RENDER" ]
} else {
  graphic_2d_feature_enable_sdf = false
  graphic_2d_feature_enable_chipset_vsync = false
}

if (graphic_2d_feature_enable_afbc) {
  gpu_defines += [ "RS_ENABLE_AFBC" ]
}

if (graphic_2d_feature_parallel_render_enable) {
  rs_enable_parallel_render = true
  gpu_defines += [ "RS_ENABLE_PARALLEL_RENDER" ]
}

if (graphic_2d_feature_enable_chipset_vsync) {
  gpu_defines += [ "RS_ENABLE_CHIPSET_VSYNC" ]
}

tp_defines = []
tp_feature_enable = false
if (graphic_2d_feature_tp_switch_enbale) {
  tp_feature_enable = true
  tp_defines = [ "TP_FEATURE_ENABLE" ]
}

if (graphic_2d_feature_overlay_display_enable) {
  gpu_defines += [ "RS_ENABLE_OVERLAY_DISPLAY" ]
}

if (graphic_2d_feature_tv_metadata_enable) {
  gpu_defines += [ "RS_ENABLE_TV_PQ_METADATA" ]
}

check_graphic_ext_file_script = "//build/ohos/file_exists.py"

check_ddgr_ext_file_args = [
  "--filename",
  rebase_path("//foundation/graphic/graphic_2d_ext/ddgr/config.gni"),
]
check_delegator_ext_file_args = [
  "--filename",
  rebase_path("//foundation/graphic/graphic_2d_ext/delegator/config.gni"),
]
check_broker_ext_file_args = [
  "--filename",
  rebase_path(
      "//foundation/graphic/graphic_2d_ext/ohcore/build/broker_config.gni"),
]
check_dynamic_layer_skip_args = [
  "--filename",
  rebase_path(
      "//foundation/graphic/graphic_2d_ext/dynamic_layer_skip/build/dynamic_layer_skip.gni"),
]
check_math_tools_ext_file_args = [
  "--filename",
  rebase_path(
      "//foundation/graphic/graphic_2d_ext/math_tools/build/math_tools_config.gni"),
]
check_frame_stability_ext_file_args = [
  "--filename",
  rebase_path(
      "//foundation/graphic/graphic_2d_ext/frame_stability/build/frame_stability_config.gni"),
]
check_hgm_ext_file_args = [
  "--filename",
  rebase_path(
      "//foundation/graphic/graphic_2d_ext/hgm_manager/build/hgm_config.gni"),
]
check_modifiers_draw_ext_file_args = [
  "--filename",
  rebase_path(
      "//foundation/graphic/graphic_2d_ext/modifiers_draw/build/modifiers_draw_config.gni"),
]

check_subtree_ext_file_args = [
  "--filename",
  rebase_path(
    "//foundation/graphic/graphic_2d_ext/subtree/build/subtree_config.gni"),
]
check_hetero_hdr_ext_file_args = [
  "--filename",
  rebase_path(
    "//foundation/graphic/graphic_2d_ext/hetero_hdr/build/hetero_hdr_config.gni"),
]

check_mhc_ext_file_args = [
  "--filename",
  rebase_path(
    "//foundation/graphic/graphic_2d_ext/mhc/build/mhc_config.gni"),
]

if (path_exists("//foundation/graphic/graphic_2d_ext/dvsync/BUILD.gn")) {
  graphic_2d_feature_enable_dvsync = true
}

if (path_exists("//foundation/graphic/graphic_2d_ext/ddgr/config.gni")) {
  ddgr_ext_configs = {
    import("//foundation/graphic/graphic_2d_ext/ddgr/config.gni")
  }
  import("//foundation/graphic/graphic_2d_ext/ddgr/config.gni")
  if (graphic_2d_feature_ace_enable_gpu && graphic_2d_feature_enable_vulkan) {
    if (defined(graphic_2d_ext_feature_enable_ddgr) &&
        graphic_2d_ext_feature_enable_ddgr) {
      gpu_defines += [ "ENABLE_DDGR_OPTIMIZE" ]
    }
  }
}

graphic_2d_delegator_configs = {
}
if (path_exists("//foundation/graphic/graphic_2d_ext/delegator/config.gni")) {
  graphic_2d_delegator_configs = {
    import("//foundation/graphic/graphic_2d_ext/delegator/config.gni")
  }
}

graphic_2d_broker_configs = {
}
if (path_exists("//foundation/graphic/graphic_2d_ext/ohcore/build/broker_config.gni")) {
  graphic_2d_broker_configs = {
    import("//foundation/graphic/graphic_2d_ext/ohcore/build/broker_config.gni")
  }
}

graphic_2d_hgm_configs = {
}
if (path_exists("//foundation/graphic/graphic_2d_ext/hgm_manager/build/hgm_config.gni")) {
  graphic_2d_hgm_configs = {
    import(
        "//foundation/graphic/graphic_2d_ext/hgm_manager/build/hgm_config.gni")
  }
}

graphic_2d_math_tools_configs = {
}
if (path_exists("//foundation/graphic/graphic_2d_ext/math_tools/build/math_tools_config.gni")) {
  graphic_2d_math_tools_configs = {
    import(
        "//foundation/graphic/graphic_2d_ext/math_tools/build/math_tools_config.gni")
  }
}

graphic_2d_frame_stability_configs = {
}
if (path_exists("//foundation/graphic/graphic_2d_ext/frame_stability/build/frame_stability_config.gni")) {
  graphic_2d_frame_stability_configs = {
    import(
        "//foundation/graphic/graphic_2d_ext/frame_stability/build/frame_stability_config.gni")
  }
}

graphic_2d_dynamic_layer_skip_configs = {
}
if (path_exists("//foundation/graphic/graphic_2d_ext/dynamic_layer_skip/build/dynamic_layer_skip.gni")) {
  graphic_2d_dynamic_layer_skip_configs = {
    import(
      "//foundation/graphic/graphic_2d_ext/dynamic_layer_skip/build/dynamic_layer_skip.gni")
  }
}

check_platform_ext_file_args = [
  "--filename",
  rebase_path("//foundation/graphic/graphic_2d_ext/platform/config.gni"),
]
graphic_2d_platform_configs = {
}
if (path_exists("//foundation/graphic/graphic_2d_ext/platform/config.gni")) {
  graphic_2d_platform_configs = {
    import("//foundation/graphic/graphic_2d_ext/platform/config.gni")
  }
}

graphic_2d_modifiers_draw_configs = {
}
if (path_exists("//foundation/graphic/graphic_2d_ext/modifiers_draw/build/modifiers_draw_config.gni")) {
  graphic_2d_modifiers_draw_configs = {
    import(
        "//foundation/graphic/graphic_2d_ext/modifiers_draw/build/modifiers_draw_config.gni")
  }
}

graphic_2d_subtree_config = {}

if (path_exists("//foundation/graphic/graphic_2d_ext/subtree/build/subtree_config.gni")) {
  graphic_2d_subtree_config = {
    import(
      "//foundation/graphic/graphic_2d_ext/subtree/build/subtree_config/gni")
  }
}

graphic_2d_hetero_hdr_configs = {}

if (exec_script(check_graphic_ext_file_script,
                check_hetero_hdr_ext_file_args,
                "string") == "True") {

  graphic_2d_hetero_hdr_configs = {
    import(
      "//foundation/graphic/graphic_2d_ext/hetero_hdr/build/hetero_hdr_config.gni")
  }
}


graphic_2d_mhc_configs = {}

if (path_exists("//foundation/graphic/graphic_2d_ext/mhc/build/mhc_config.gni")) {
  graphic_2d_mhc_configs = {
    import(
      "//foundation/graphic/graphic_2d_ext/mhc/build/mhc_config.gni")
  }
}

graphic_2d_car_features_configs = {}
if (path_exists("//foundation/graphic/graphic_2d_ext/car_features/build/car_features_config.gni")) {
  graphic_2d_car_features_configs = {
    import(
      "//foundation/graphic/graphic_2d_ext/car_features/build/car_features_config.gni")
  }
}

flutter_root = "//third_party/flutter"
ace_flutter_engine_root = "$flutter_root/build"
graphic_2d_root = "//foundation/graphic/graphic_2d"
graphic_2d_ext_root = "//foundation/graphic/graphic_2d_ext"
hilog_root = "//base/hiviewdfx/hilog"
window_base_path = "//foundation/window/window_manager"
safwk_base = "//foundation/systemabilitymgr/safwk"
if (graphic_2d_feature_upgrade_skia) {
  if (!defined(skia_root_new)) {
    skia_root_new = "//third_party/skia/m133"
  }
} else {
    if (!defined(skia_root_new)) {
    skia_root_new = "//third_party/skia"
  }
}
graphic_surface_root = "//foundation/graphic/graphic_surface"
fuzz_test_output_path = "graphic_2d/graphic_2d"
video_processing_engine_root = "//foundation/multimedia/video_processing_engine"
arkui_root = "//foundation/arkui"
ace_root = "//foundation/arkui/ace_engine"
bundlefwk_path = "//foundation/bundlemanager/bundle_framework"
bundlefwk_inner_api_path = "${bundlefwk_path}/interfaces/inner_api"
mindspore_root = "//third_party/mindspore"
rosen_root = "//foundation/graphic/graphic_2d/rosen"
multimedia_root = "//foundation/multimedia"
platform_root = "$rosen_root/modules/platform"
drivers_display_interface = "//drivers/peripheral/display/interfaces"

accessibility_enable = false
if (defined(global_parts_info) &&
    defined(global_parts_info.barrierfree_accessibility)) {
  accessibility_enable = true
  accessibility_defines = [ "ACCESSIBILITY_ENABLE" ]
}

if (defined(global_parts_info) &&
    !defined(global_parts_info.multimedia_player_framework)) {
  player_framework_enable = false
}

if (defined(global_parts_info) &&
    defined(global_parts_info.multimedia_video_processing_engine) &&
    defined(global_parts_info.multimedia_video_processing_engine_ext)) {
  use_video_processing_engine = true
}

if (defined(global_parts_info) &&
    !defined(global_parts_info.hdf_drivers_interface_display)) {
  graphic_2d_feature_drivers_interface_display_enable = false
}

use_memmgr_plugin = false
if (defined(global_parts_info.resourceschedule_memmgr_override)) {
  use_memmgr_plugin = true
}
use_memmgr = false
if (defined(global_parts_info.resourceschedule_memmgr)) {
  use_memmgr = true
}

_ace_adapter_dir = rebase_path("$ace_root/adapter", root_build_dir)
_graphic_2d_adapter_dir =
    rebase_path("$graphic_2d_root/adapter", root_build_dir)

if (!ohos_indep_compiler_enable) {
  if (defined(is_arkui_x) && is_arkui_x) {
    # In case of arkui-x compilation, copy android and ios adapters from ace_engine
    exec_script("$graphic_2d_root/utils/build/copy_arkui_adapters.py",
                [
                  _ace_adapter_dir,
                  _graphic_2d_adapter_dir,
                ])
  }
  adapters = exec_script("$ace_root/build/search.py",
                        [ _graphic_2d_adapter_dir ],
                        "list lines")
} else {
  adapters = ["preview", "ohos"]
}

if (defined(use_clang_coverage) && use_clang_coverage) {
  graphic_2d_feature_rs_enable_profiler = false
}

if (defined(input_ext_feature_magiccursor) && input_ext_feature_magiccursor) {
  gpu_defines += [ "OHOS_BUILD_ENABLE_MAGICCURSOR" ]
}

if (defined(graphic_2d_feature_enable_prefetch)) {
  gpu_defines += [ "RS_ENABLE_PREFETCH" ]
}

if (defined(global_parts_info) &&
    !defined(global_parts_info.security_access_token)) {
  graphic_2d_support_access_token = false
}

if (defined(graphic_2d_feature_enable_primitive) && graphic_2d_feature_enable_primitive) {
  graphic_2d_enable_primitive_profiler = false
  gpu_defines += [
    "USE_PRIMITIVE",
  ]
  if (graphic_2d_enable_primitive_profiler) {
    gpu_defines += [
      "PRIMITIVE_PROFILER",
    ]
  }
}