# Copyright (c) 2021-2025 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/ets_frontend/es2abc_config.gni")
import("//build/config/components/memory_utils/purgeable_mem_config.gni")
import("//build/ohos.gni")
import("//build/templates/abc/ohos_abc.gni")
import("//foundation/ability/ability_runtime/ability_runtime.gni")

ohos_abc("delegator_mgmt") {
  sources = [ "${ability_runtime_native_path}/appkit/ability_delegator/runner_runtime/delegator_mgmt.js" ]
  output_name = "delegator_mgmt"
  install_images = [ "system" ]
  module_install_dir = "etc/abc/ability"
  subsystem_name = "ability"
  part_name = "ability_runtime"
}

config("appkit_exception_config") {
  cflags_cc = [ "-fexceptions" ]
}

config("appkit_config") {
  defines = [ "AMS_LOG_TAG = \"Appkit\"" ]
  defines += [ "AMS_LOG_DOMAIN = 0xD001305" ]
  if (target_cpu == "arm64") {
    defines += [ "_ARM64_" ]
  }
  if (target_cpu == "arm64") {
    defines += [ "APP_USE_ARM64" ]
  } else if (target_cpu == "arm") {
    defines += [ "APP_USE_ARM" ]
  } else if (target_cpu == "x86_64") {
    defines += [ "APP_USE_X86_64" ]
  }

  include_dirs = [
    "${ability_runtime_path}/interfaces/kits/native/appkit/app",
    "${ability_runtime_path}/interfaces/kits/native/appkit/dfr",
    "${ability_runtime_path}/interfaces/kits/native/ability/native",
  ]
}

config("appkit_public_config") {
  visibility = [ ":*" ]
  include_dirs = [
    "${ability_runtime_path}/interfaces/kits/native/appkit/ability_delegator",
    "${ability_runtime_path}/interfaces/kits/native/appkit/ability_runtime/app",
    "${ability_runtime_path}/interfaces/kits/native/appkit/ability_runtime/context",
    "${ability_runtime_path}/interfaces/kits/native/appkit/app",
    "${ability_runtime_path}/interfaces/kits/native/appkit/app_startup",
    "${ability_runtime_path}/interfaces/kits/native/appkit/dfr",
    "${ability_runtime_path}/interfaces/kits/native/appkit/ability_bundle_manager_helper",
    "${ability_runtime_path}/interfaces/kits/native/ability/native",
  ]

  if (ability_runtime_graphics) {
    defines = [
      "SUPPORT_GRAPHICS",
      "SUPPORT_SCREEN",
      "SUPPORT_APP_PREFERRED_LANGUAGE",
    ]
  }
}

# build so
ohos_shared_library("appkit_native") {
  branch_protector_ret = "pac_ret"

  include_dirs = [
    "native",
    "${ability_runtime_path}/ets_environment/interfaces/inner_api",
    "${ability_runtime_path}/interfaces/inner_api/error_utils/include",
    "${ability_runtime_path}/interfaces/kits/native/appkit",
    "${ability_runtime_path}/interfaces/kits/native/appkit/ability_bundle_manager_helper",
    "${ability_runtime_path}/interfaces/kits/native/appkit/ability_runtime/context",
    "${ability_runtime_path}/interfaces/kits/native/appkit/app",
    "${ability_runtime_path}/interfaces/kits/native/appkit/dfr",
    "${ability_runtime_path}/interfaces/kits/native/appkit/app/task",
    "${ability_runtime_path}/interfaces/kits/native/appkit/app_startup",
    "${ability_runtime_innerkits_path}/deps_wrapper/include",
    "${ability_runtime_services_path}/common/include",
    "${ability_runtime_path}/interfaces/kits/native/ability/native",
    "${ability_runtime_path}/interfaces/kits/native/ability/native/recovery",
    "${ability_runtime_path}/utils/global/time/include",
    "${ability_runtime_services_path}/abilitymgr/include/utils",
    "${ability_runtime_services_path}/abilitymgr/include",
    "${ability_runtime_napi_path}/inner/napi_common",
    "${ability_runtime_napi_path}/inner/napi_common/ani_common",
    "${ability_runtime_utils_path}/global/constant",
    "${ability_runtime_path}/interfaces/inner_api/app_manager",
    "${ability_runtime_path}/interfaces/kits/c/ability_runtime",
  ]

  configs = [
    ":appkit_config",
    ":appkit_exception_config",
    "${ability_runtime_services_path}/common:optimize_config",
  ]

  public_configs = [ ":appkit_public_config" ]

  sources = [
    "${ability_runtime_native_path}/appkit/ability_runtime/app/ability_stage.cpp",
    "${ability_runtime_native_path}/appkit/ability_runtime/app/ets_ability_stage_instance.cpp",
    "${ability_runtime_native_path}/appkit/ability_runtime/app/js_ability_stage.cpp",
    "${ability_runtime_native_path}/appkit/ability_runtime/app/js_ability_stage_context.cpp",
    "${ability_runtime_native_path}/appkit/app/ability_record_mgr.cpp",
    "${ability_runtime_native_path}/appkit/app/app_loader.cpp",
    "${ability_runtime_native_path}/appkit/app/application_cleaner.cpp",
    "${ability_runtime_native_path}/appkit/app/application_data_manager.cpp",
    "${ability_runtime_native_path}/appkit/app/application_env.cpp",
    "${ability_runtime_native_path}/appkit/app/application_env_impl.cpp",
    "${ability_runtime_native_path}/appkit/app/application_impl.cpp",
    "${ability_runtime_native_path}/appkit/app/assert_fault_callback.cpp",
    "${ability_runtime_native_path}/appkit/app/assert_fault_task_thread.cpp",
    "${ability_runtime_native_path}/appkit/app/dump_arkweb_helper.cpp",
    "${ability_runtime_native_path}/appkit/app/dump_ffrt_helper.cpp",
    "${ability_runtime_native_path}/appkit/app/dump_ipc_helper.cpp",
    "${ability_runtime_native_path}/appkit/app/dump_runtime_helper.cpp",
    "${ability_runtime_native_path}/appkit/app/extension_plugin_info.cpp",
    "${ability_runtime_native_path}/appkit/app/forkall_helper.cpp",
    "${ability_runtime_native_path}/appkit/app/idle_time.cpp",
    "${ability_runtime_native_path}/appkit/app/main_thread.cpp",
    "${ability_runtime_native_path}/appkit/app/native_lib_util.cpp",
    "${ability_runtime_native_path}/appkit/app/ohos_application.cpp",
    "${ability_runtime_native_path}/appkit/app_startup/app_startup_task.cpp",
    "${ability_runtime_native_path}/appkit/app_startup/app_startup_task_matcher.cpp",
    "${ability_runtime_native_path}/appkit/app_startup/ext_native_startup_manager.cpp",
    "${ability_runtime_native_path}/appkit/app_startup/ext_native_startup_task.cpp",
    "${ability_runtime_native_path}/appkit/app_startup/js_startup_config.cpp",
    "${ability_runtime_native_path}/appkit/app_startup/js_startup_task.cpp",
    "${ability_runtime_native_path}/appkit/app_startup/js_startup_task_executor.cpp",
    "${ability_runtime_native_path}/appkit/app_startup/js_startup_task_result.cpp",
    "${ability_runtime_native_path}/appkit/app_startup/native_startup_task.cpp",
    "${ability_runtime_native_path}/appkit/app_startup/preload_so_startup_task.cpp",
    "${ability_runtime_native_path}/appkit/app_startup/preload_system_so_startup_task.cpp",
    "${ability_runtime_native_path}/appkit/app_startup/startup_config.cpp",
    "${ability_runtime_native_path}/appkit/app_startup/startup_config_instance.cpp",
    "${ability_runtime_native_path}/appkit/app_startup/startup_listener.cpp",
    "${ability_runtime_native_path}/appkit/app_startup/startup_manager.cpp",
    "${ability_runtime_native_path}/appkit/app_startup/startup_task.cpp",
    "${ability_runtime_native_path}/appkit/app_startup/startup_task_dispatcher.cpp",
    "${ability_runtime_native_path}/appkit/app_startup/startup_task_instance.cpp",
    "${ability_runtime_native_path}/appkit/app_startup/startup_task_manager.cpp",
    "${ability_runtime_native_path}/appkit/app_startup/startup_task_result.cpp",
    "${ability_runtime_native_path}/appkit/app_startup/startup_topologysort.cpp",
    "${ability_runtime_native_path}/appkit/app_startup/startup_utils.cpp",
    "${ability_runtime_native_path}/appkit/dfr/appfreeze_inner.cpp",
    "${ability_runtime_native_path}/appkit/dfr/appfreeze_state.cpp",
    "${ability_runtime_native_path}/appkit/dfr/dump_process_helper.cpp",
    "${ability_runtime_native_path}/appkit/dfr/sleep_clean.cpp",
    "${ability_runtime_native_path}/appkit/dfr/watchdog.cpp",
  ]
  cflags = []
  if (target_cpu == "arm") {
    cflags += [ "-DBINDER_IPC_32BIT" ]
  }
  deps = [
    ":appkit_delegator",
    "${ability_runtime_abilitymgr_path}/:abilityms",
    "${ability_runtime_innerkits_path}/ability_manager:ability_manager",
    "${ability_runtime_innerkits_path}/ability_manager:ability_start_options",
    "${ability_runtime_innerkits_path}/app_manager:app_manager",
    "${ability_runtime_innerkits_path}/deps_wrapper:ability_deps_wrapper",
    "${ability_runtime_innerkits_path}/runtime:runtime",
    "${ability_runtime_napi_path}/inner/napi_common:napi_common",
    "${ability_runtime_native_path}/ability/native:ability_thread",
    "${ability_runtime_native_path}/ability/native:abilitykit_native",
    "${ability_runtime_native_path}/ability/native:abilitykit_utils",
    "${ability_runtime_native_path}/ability/native:configuration_helper",
    "${ability_runtime_native_path}/ability/native:extensionkit_native",
    "${ability_runtime_native_path}/ability/native:uiabilitykit_native",
    "${ability_runtime_native_path}/appkit:app_context",
    "${ability_runtime_native_path}/appkit:app_context_utils",
    "${ability_runtime_native_path}/appkit:appkit_manager_helper",
    "${ability_runtime_native_path}/appkit:application_image_observer_manager",
    "${ability_runtime_path}/js_environment/frameworks/js_environment:js_environment",
    "${ability_runtime_path}/utils/global/common:runtime_utils",
    "${ability_runtime_path}/utils/global/freeze:freeze_util",
    "${ability_runtime_path}/utils/server/startup:startup_util",
    "${ability_runtime_services_path}/common:app_util",
    "${ability_runtime_services_path}/common:hisysevent_report",
    "${ability_runtime_services_path}/common:task_handler_wrap",
  ]

  external_deps = [
    "ability_base:base",
    "ability_base:extractortool",
    "ability_base:extractresourcemanager",
    "ability_base:string_utils",
    "ability_base:want",
    "access_token:libaccesstoken_sdk",
    "bundle_framework:appexecfwk_base",
    "bundle_framework:appexecfwk_core",
    "c_utils:utils",
    "common_event_service:cesfwk_innerkits",
    "config_policy:configpolicy_util",
    "ets_runtime:libark_jsruntime",
    "eventhandler:libeventhandler",
    "faultloggerd:dfx_signalhandler",
    "faultloggerd:libbacktrace_local",
    "faultloggerd:libdfx_procinfo",
    "faultloggerd:libfaultloggerd",
    "ffrt:libffrt",
    "graphic_2d:2d_graphics",
    "graphic_2d:EGL",
    "graphic_2d:libcomposer",
    "graphic_2d:librender_service_base",
    "hichecker:libhichecker",
    "hicollie:libhicollie",
    "hilog:libhilog",
    "hiprofiler:hidebug_dump",
    "hisysevent:libhisysevent",
    "hitrace:hitrace_meter",
    "i18n:preferred_language",
    "init:libbegetutil",
    "input:libmmi-client",
    "ipc:ipc_capi",
    "ipc:ipc_core",
    "ipc:ipc_napi",
    "ipc:ipc_single",
    "json:nlohmann_json_static",
    "libxml2:libxml2",
    "napi:ace_napi",
    "preferences:native_preferences",
    "resource_management:global_resmgr",
    "safwk:system_ability_fwk",
    "samgr:samgr_proxy",
    "storage_service:storage_manager_acl",
    "libuv:uv",
    "node:node_header_notice",
  ]
  public_external_deps = [ "ability_base:configuration" ]

  defines = []
  if (ability_runtime_child_process) {
    defines += [ "SUPPORT_CHILD_PROCESS" ]
    sources +=
        [ "${ability_runtime_native_path}/appkit/app/child_main_thread.cpp" ]
    deps += [ "${ability_runtime_innerkits_path}/child_process_manager:child_process_manager" ]
  }

  if (ability_runtime_hiperf_enable) {
    defines += [ "SUPPORT_HIPERF" ]
    sources +=
        [ "${ability_runtime_native_path}/appkit/dfr/appcapture_perf.cpp" ]
    external_deps += [
      "faultloggerd:libstack_printer",
      "faultloggerd:libunwinder",
      "hiperf:hiperf_local",
    ]
  }

  if (ability_runtime_graphics) {
    external_deps += [
      "ace_engine:ace_forward_compatibility",
      "graphic_2d:librender_service_client",
      "i18n:intl_util",
      "icu:shared_icuuc",
      "window_manager:libdm",
      "window_manager:libwm",
      "window_manager:libwsutils",
    ]

    defines += [ "NWEB_GRAPHIC" ]
  }

  if (ability_runtime_upms) {
    defines += [ "SUPPORT_UPMS" ]
    deps += [
      "${ability_runtime_innerkits_path}/uri_permission:uri_permission_mgr",
    ]
  }

  if (is_asan || asan_detector) {
    defines += [ "SUPPORT_ASAN" ]
  }

  if (defined(global_parts_info.web_webview)) {
    external_deps += [
      "webview:libnweb",
      "webview:nweb_ohos_adapter",
    ]

    defines += [ "NWEB" ]
  }

  if (memory_utils_purgeable_ashmem_enable && defined(global_parts_info) &&
      defined(global_parts_info.resourceschedule_memmgr_override)) {
    defines += [ "IMAGE_PURGEABLE_PIXELMAP" ]
    external_deps += [ 
      "memmgr:libpurgeablemem_plugin",
      "memory_utils:libpurgeablemem"
    ]
  }

  if (cj_frontend) {
    sources += [
      "${ability_runtime_native_path}/appkit/ability_runtime/app/cj_ability_stage.cpp",
      "${ability_runtime_native_path}/appkit/ability_runtime/app/cj_ability_stage_context.cpp",
      "${ability_runtime_native_path}/appkit/ability_runtime/app/cj_ability_stage_object.cpp",
    ]

    include_dirs += [
      "${ability_runtime_path}/cj_environment/interfaces/inner_api",
      "${ability_runtime_path}/frameworks/cj/ffi",
      "${ability_runtime_path}/frameworks/cj/ffi/application_context/include",
    ]

    defines += [ "CJ_FRONTEND" ]

    deps +=
        [ "${ability_runtime_path}/frameworks/cj/ffi/context:cj_context_ffi" ]

    external_deps += [
      "bundle_framework:appexecfwk_base",
      "napi:cj_bind_ffi",
      "napi:cj_bind_native",
    ]
  }

  if (ability_runtime_app_no_response_dialog) {
    defines += [ "APP_NO_RESPONSE_DIALOG" ]
  }

  if (ability_runtime_app_no_response_dialog_wearable) {
    defines += [ "APP_NO_RESPONSE_DIALOG_WEARABLE" ]
  }

  if (ability_runtime_hitrace_enable) {
    external_deps += [ "hitrace:libhitracechain" ]
    defines += [ "ABILITY_RUNTIME_HITRACE_ENABLE" ]
  }

  cflags_cc = []
  if (os_dlp_part_enabled) {
    cflags_cc += [ "-DWITH_DLP" ]
  }

  innerapi_tags = [ "platformsdk" ]
  version_script = "libappkit_native.map"
  subsystem_name = "ability"
  part_name = "ability_runtime"
}

ohos_shared_library("ability_stage_ani") {
  branch_protector_ret = "pac_ret"

  sanitize = {
    cfi = true
    cfi_cross_dso = true
    cfi_vcall_icall_only = true
    cfi_policy = "adaptive"
    debug = false
  }

  include_dirs = [
    "native",
    "${ability_runtime_path}/frameworks/ets/ani/ani_common/include",
    "${ability_runtime_path}/interfaces/inner_api/error_utils/include",
    "${ability_runtime_path}/interfaces/kits/native/appkit",
    "${ability_runtime_path}/interfaces/kits/native/appkit/ability_bundle_manager_helper",
    "${ability_runtime_path}/interfaces/kits/native/appkit/ability_runtime/context",
    "${ability_runtime_path}/interfaces/kits/native/appkit/app",
    "${ability_runtime_path}/interfaces/kits/native/appkit/dfr",
    "${ability_runtime_path}/interfaces/kits/native/appkit/app/task",
    "${ability_runtime_path}/interfaces/kits/native/appkit/app_startup",
    "${ability_runtime_innerkits_path}/deps_wrapper/include",
    "${ability_runtime_services_path}/common/include",
    "${ability_runtime_path}/interfaces/kits/native/ability/native",
    "${ability_runtime_path}/interfaces/kits/native/ability/native/recovery",
    "${ability_runtime_path}/utils/global/time/include",
    "${ability_runtime_services_path}/abilitymgr/include/utils",
    "${ability_runtime_services_path}/abilitymgr/include",
    "${ability_runtime_utils_path}/global/constant",
    "${ability_runtime_path}/frameworks/ets/ani/enum_convert",
  ]

  configs = [ "${ability_runtime_services_path}/common:optimize_config" ]

  public_configs = [ ":appkit_public_config" ]

  sources = [
    "${ability_runtime_native_path}/appkit/ability_runtime/app/ets_ability_stage.cpp",
    "${ability_runtime_native_path}/appkit/ability_runtime/app/ets_ability_stage_context.cpp",
    "${ability_runtime_native_path}/appkit/ability_runtime/app/stage_context_transfer.cpp",
    "${ability_runtime_native_path}/appkit/ability_runtime/app/startup_task_utils.cpp",
    "${ability_runtime_native_path}/appkit/app_startup/ets_startup_config.cpp",
    "${ability_runtime_native_path}/appkit/app_startup/ets_startup_task.cpp",
    "${ability_runtime_native_path}/appkit/app_startup/ets_startup_task_executor.cpp",
    "${ability_runtime_native_path}/appkit/app_startup/ets_startup_task_result.cpp",
  ]
  cflags = []

  deps = [
    ":appkit_delegator",
    ":appkit_native",
    "${ability_runtime_abilitymgr_path}/:abilityms",
    "${ability_runtime_innerkits_path}/ability_manager:ability_manager",
    "${ability_runtime_innerkits_path}/ability_manager:ability_start_options",
    "${ability_runtime_innerkits_path}/ani_base_context:ani_base_context",
    "${ability_runtime_innerkits_path}/app_manager:app_manager",
    "${ability_runtime_innerkits_path}/deps_wrapper:ability_deps_wrapper",
    "${ability_runtime_innerkits_path}/napi_base_context:napi_base_context",
    "${ability_runtime_innerkits_path}/runtime:runtime",
    "${ability_runtime_native_path}/ability/native:ability_business_error",
    "${ability_runtime_native_path}/ability/native:ability_thread",
    "${ability_runtime_native_path}/ability/native:abilitykit_native",
    "${ability_runtime_native_path}/ability/native:configuration_helper",
    "${ability_runtime_native_path}/ability/native:extensionkit_native",
    "${ability_runtime_native_path}/ability/native:uiabilitykit_native",
    "${ability_runtime_native_path}/appkit:app_context",
    "${ability_runtime_native_path}/appkit:app_context_utils",
    "${ability_runtime_native_path}/appkit:appkit_manager_helper",
    "${ability_runtime_path}/frameworks/ets/ani/ani_common:ani_common",
    "${ability_runtime_path}/utils/global/freeze:freeze_util",
    "${ability_runtime_services_path}/common:app_util",
  ]

  external_deps = [
    "ability_base:base",
    "ability_base:string_utils",
    "ability_base:want",
    "bundle_framework:appexecfwk_base",
    "bundle_framework:appexecfwk_core",
    "bundle_framework:bms_ani_common",
    "c_utils:utils",
    "common_event_service:cesfwk_innerkits",
    "ets_runtime:libark_jsruntime",
    "eventhandler:libeventhandler",
    "faultloggerd:libbacktrace_local",
    "faultloggerd:libdfx_procinfo",
    "faultloggerd:libfaultloggerd",
    "ffrt:libffrt",
    "hilog:libhilog",
    "hisysevent:libhisysevent",
    "hitrace:hitrace_meter",
    "ipc:ipc_capi",
    "ipc:ipc_core",
    "ipc:ipc_napi",
    "ipc:ipc_single",
    "resource_management:global_resmgr",
    "runtime_core:ani",
    "runtime_core:ani_helpers",
    "safwk:system_ability_fwk",
    "samgr:samgr_proxy",
  ]

  defines = []

  subsystem_name = "ability"
  innerapi_tags = [ "platformsdk" ]
  part_name = "ability_runtime"
}

# build so
ohos_shared_library("app_context") {
  branch_protector_ret = "pac_ret"

  include_dirs = [
    "${ability_runtime_path}/ets_environment/interfaces/inner_api",
    "${ability_runtime_path}/interfaces/kits/native/appkit/ability_runtime/context",
    "${ability_runtime_path}/interfaces/kits/native/appkit/app",
    "${ability_runtime_path}/interfaces/kits/native/appkit/ability_bundle_manager_helper",
  ]

  configs = [
    ":appkit_config",
    ":appkit_exception_config",
    "${ability_runtime_services_path}/common:optimize_config",
  ]

  public_configs = [ ":appkit_public_config" ]

  sources = [
    "${ability_runtime_native_path}/appkit/ability_runtime/context/ability_stage_context.cpp",
    "${ability_runtime_native_path}/appkit/ability_runtime/context/application_context.cpp",
    "${ability_runtime_native_path}/appkit/ability_runtime/context/application_state_change_callback.cpp",
    "${ability_runtime_native_path}/appkit/ability_runtime/context/bindable_sub_thread.cpp",
    "${ability_runtime_native_path}/appkit/ability_runtime/context/context_impl.cpp",
    "${ability_runtime_native_path}/appkit/ability_runtime/context/environment_callback.cpp",
    "${ability_runtime_native_path}/appkit/ability_runtime/context/interop_object_instance.cpp",
    "${ability_runtime_native_path}/appkit/ability_runtime/context/js_ability_lifecycle_callback.cpp",
    "${ability_runtime_native_path}/appkit/ability_runtime/context/js_system_configuration_updated_callback.cpp",
    "${ability_runtime_native_path}/appkit/ability_runtime/context/ability_native_thread.cpp",
    "${ability_runtime_native_path}/appkit/app/overlay_event_subscriber.cpp",
    "${ability_runtime_native_path}/appkit/app/sys_mgr_client.cpp",
  ]
  cflags = []
  if (target_cpu == "arm") {
    cflags += [ "-DBINDER_IPC_32BIT" ]
  }
  deps = [
    "${ability_runtime_innerkits_path}/ability_manager:ability_manager",
    "${ability_runtime_innerkits_path}/ability_manager:ability_start_options",
    "${ability_runtime_innerkits_path}/app_manager:app_manager",
    "${ability_runtime_innerkits_path}/deps_wrapper:ability_deps_wrapper",
    "${ability_runtime_innerkits_path}/runtime:runtime",
    "${ability_runtime_native_path}/appkit:appkit_manager_helper",
    "${ability_runtime_native_path}/appkit:application_image_observer_manager",
  ]

  external_deps = [
    "ability_base:extractortool",
    "c_utils:utils",
    "common_event_service:cesfwk_innerkits",
    "hilog:libhilog",
    "hitrace:hitrace_meter",
    "init:libbegetutil",
    "ipc:ipc_core",
    "ipc:ipc_napi",
    "json:nlohmann_json_static",
    "napi:ace_napi",
    "resource_management:global_resmgr",
    "samgr:samgr_proxy",
    "icu:shared_icuuc",
    "libuv:uv",
    "node:node_header_notice",
  ]
  public_external_deps = [
    "ability_base:configuration",
    "ability_base:session_info",
    "ability_base:want",
    "bundle_framework:appexecfwk_base",
  ]

  if (ability_runtime_graphics) {
    external_deps += [
      "i18n:intl_util",
      "icu:shared_icuuc",
    ]
  }

  innerapi_tags = [ "platformsdk" ]
  subsystem_name = "ability"
  part_name = "ability_runtime"
}

# build so
ohos_shared_library("app_context_utils") {
  branch_protector_ret = "pac_ret"

  include_dirs = [
    "${ability_runtime_napi_path}/ability_auto_startup_callback",
    "${ability_runtime_path}/interfaces/kits/native/appkit/ability_runtime/context",
    "${ability_runtime_path}/interfaces/kits/native/appkit/ability_runtime/app",
  ]

  configs = [
    ":appkit_config",
    "${ability_runtime_services_path}/common:optimize_config",
  ]

  public_configs = [ ":appkit_public_config" ]

  sources = [
    "ability_runtime/context/js_application_context_utils.cpp",
    "ability_runtime/context/js_context_utils.cpp",
    "ability_runtime/context/js_resource_manager_utils.cpp",
  ]
  cflags = []
  if (target_cpu == "arm") {
    cflags += [ "-DBINDER_IPC_32BIT" ]
  }
  deps = [
    "${ability_runtime_innerkits_path}/ability_manager:ability_manager",
    "${ability_runtime_innerkits_path}/ability_manager:ability_start_options",
    "${ability_runtime_innerkits_path}/app_manager:app_manager",
    "${ability_runtime_innerkits_path}/error_utils:ability_runtime_error_util",
    "${ability_runtime_innerkits_path}/runtime:runtime",
    "${ability_runtime_napi_path}/inner/napi_common:napi_common",
    "${ability_runtime_native_path}/ability/native:ability_business_error",
    "${ability_runtime_native_path}/ability/native:auto_startup_callback",
    "${ability_runtime_native_path}/appkit:app_context",
    "${ability_runtime_native_path}/appkit:application_context_manager",
  ]

  external_deps = [
    "ability_base:session_info",
    "ability_base:want",
    "access_token:libtokenid_sdk",
    "bundle_framework:appexecfwk_base",
    "bundle_framework:appexecfwk_core",
    "bundle_framework:libappexecfwk_common",
    "c_utils:utils",
    "hilog:libhilog",
    "hitrace:hitrace_meter",
    "ipc:ipc_core",
    "ipc:ipc_napi",
    "json:nlohmann_json_static",
    "napi:ace_napi",
    "resource_management:global_resmgr",
    "resource_management:resmgr_napi_core",
    "libuv:uv",
    "node:node_header_notice",
  ]

  public_external_deps = [ "ability_base:configuration" ]
  if (ability_runtime_graphics) {
    external_deps += [
      "i18n:intl_util",
      "icu:shared_icuuc",
    ]
  }

  innerapi_tags = [ "platformsdk" ]
  subsystem_name = "ability"
  part_name = "ability_runtime"
}

# build so
ohos_shared_library("appkit_delegator") {
  branch_protector_ret = "pac_ret"

  include_dirs = [
    "native",
    "${ability_runtime_path}/interfaces/kits/native/appkit/ability_runtime/app",
    "${ability_runtime_path}/interfaces/kits/native/appkit/ability_runtime/context",
    "${ability_runtime_path}/interfaces/kits/native/appkit/ability_runtime/ability_delegator/include",
    "${ability_runtime_services_path}/common/include",
    "${ability_runtime_path}/interfaces/kits/native/ability/native",
  ]

  configs = [
    ":appkit_config",
    "${ability_runtime_services_path}/common:optimize_config",
  ]

  public_configs = [ ":appkit_public_config" ]

  sources = [
    "${ability_runtime_native_path}/appkit/ability_delegator/ability_delegator.cpp",
    "${ability_runtime_native_path}/appkit/ability_delegator/ability_delegator_args.cpp",
    "${ability_runtime_native_path}/appkit/ability_delegator/ability_delegator_registry.cpp",
    "${ability_runtime_native_path}/appkit/ability_delegator/delegator_thread.cpp",
    "${ability_runtime_native_path}/appkit/ability_delegator/iability_delegator.cpp",
    "${ability_runtime_native_path}/appkit/ability_delegator/iability_monitor.cpp",
    "${ability_runtime_native_path}/appkit/ability_delegator/iinterop_ability_monitor.cpp",
    "${ability_runtime_native_path}/appkit/ability_delegator/iability_stage_monitor.cpp",
    "${ability_runtime_native_path}/appkit/ability_delegator/runner_runtime/ets_test_runner_instance.cpp",
    "${ability_runtime_native_path}/appkit/ability_delegator/runner_runtime/js_test_runner.cpp",
    "${ability_runtime_native_path}/appkit/ability_delegator/shell_cmd_result.cpp",
    "${ability_runtime_native_path}/appkit/ability_delegator/test_runner.cpp",
    "${ability_runtime_path}/tools/aa/src/shell_command_result.cpp",
    "${ability_runtime_path}/tools/aa/src/test_observer_proxy.cpp",
  ]

  cflags = []
  if (target_cpu == "arm") {
    cflags += [ "-DBINDER_IPC_32BIT" ]
  }

  deps = [
    "${ability_runtime_innerkits_path}/ability_manager:ability_manager",
    "${ability_runtime_innerkits_path}/ability_manager:ability_start_options",
    "${ability_runtime_innerkits_path}/runtime:runtime",
    "${ability_runtime_native_path}/appkit:app_context",
    "${ability_runtime_native_path}/appkit:delegator_mgmt",
  ]

  external_deps = [
    "ability_base:session_info",
    "ability_base:want",
    "bundle_framework:appexecfwk_base",
    "c_utils:utils",
    "common_event_service:cesfwk_innerkits",
    "eventhandler:libeventhandler",
    "hilog:libhilog",
    "ipc:ipc_core",
    "json:nlohmann_json_static",
    "napi:ace_napi",
    "samgr:samgr_proxy",
    "libuv:uv",
    "node:node_header_notice",
  ]

  public_external_deps = [ "ability_base:configuration" ]

  if (cj_frontend) {
    sources += [
      "${ability_runtime_native_path}/appkit/ability_delegator/cj_ability_delegator_impl.cpp",
      "${ability_runtime_native_path}/appkit/ability_delegator/cj_iability_monitor.cpp",
      "${ability_runtime_native_path}/appkit/ability_delegator/cj_iability_stage_monitor.cpp",
      "${ability_runtime_native_path}/appkit/ability_delegator/runner_runtime/cj_test_runner.cpp",
      "${ability_runtime_native_path}/appkit/ability_delegator/runner_runtime/cj_test_runner_object.cpp",
    ]

    include_dirs +=
        [ "${ability_runtime_path}/cj_environment/interfaces/inner_api" ]

    defines = [ "CJ_FRONTEND" ]
  }
  if (ability_runtime_graphics) {
    external_deps += [ "icu:shared_icuuc" ]
  }

  innerapi_tags = [ "platformsdk" ]
  subsystem_name = "ability"
  part_name = "ability_runtime"
}

ohos_shared_library("test_runner_ani") {
  branch_protector_ret = "pac_ret"

  sanitize = {
    cfi = true
    cfi_cross_dso = true
    cfi_vcall_icall_only = true
    cfi_policy = "adaptive"
    debug = false
  }

  include_dirs = [
    "native",
    "${ability_runtime_path}/frameworks/ets/ani/ani_common/include",
    "${ability_runtime_path}/interfaces/kits/native/appkit/ability_runtime/app",
    "${ability_runtime_path}/interfaces/kits/native/appkit/ability_runtime/context",
    "${ability_runtime_path}/interfaces/kits/native/appkit/ability_runtime/ability_delegator/include",
    "${ability_runtime_services_path}/common/include",
    "${ability_runtime_path}/interfaces/kits/native/ability/native",
  ]

  configs = [
    ":appkit_config",
    "${ability_runtime_services_path}/common:optimize_config",
  ]

  public_configs = [ ":appkit_public_config" ]

  sources = [ "${ability_runtime_native_path}/appkit/ability_delegator/runner_runtime/ets_test_runner.cpp" ]

  cflags = []
  if (target_cpu == "arm") {
    cflags += [ "-DBINDER_IPC_32BIT" ]
  }

  deps = [
    ":appkit_delegator",
    "${ability_runtime_innerkits_path}/ability_manager:ability_manager",
    "${ability_runtime_innerkits_path}/ability_manager:ability_start_options",
    "${ability_runtime_innerkits_path}/runtime:runtime",
    "${ability_runtime_native_path}/appkit:app_context",
    "${ability_runtime_native_path}/appkit:delegator_mgmt",
    "${ability_runtime_path}/frameworks/ets/ani/ani_common:ani_common",
  ]

  external_deps = [
    "ability_base:session_info",
    "ability_base:want",
    "bundle_framework:appexecfwk_base",
    "c_utils:utils",
    "common_event_service:cesfwk_innerkits",
    "eventhandler:libeventhandler",
    "hilog:libhilog",
    "ipc:ipc_core",
    "napi:ace_napi",
    "runtime_core:ani",
    "samgr:samgr_proxy",
    "libuv:uv",
    "node:node_header_notice",
  ]

  public_external_deps = [ "ability_base:configuration" ]

  innerapi_tags = [ "platformsdk" ]
  subsystem_name = "ability"
  part_name = "ability_runtime"
}

config("application_context_manager_config") {
  include_dirs = [
    "${ability_runtime_path}/interfaces/kits/native/appkit/ability_runtime/context",
    "${ability_runtime_services_path}/common/include",
  ]
}

ohos_shared_library("appkit_manager_helper") {
  branch_protector_ret = "pac_ret"

  sanitize = {
    cfi = true
    cfi_cross_dso = true
    debug = false
  }

  include_dirs = [
    "native",
    "${ability_runtime_path}/interfaces/kits/native/appkit/ability_runtime/app",
    "${ability_runtime_path}/interfaces/kits/native/appkit/ability_runtime/context",
    "${ability_runtime_path}/interfaces/kits/native/appkit/ability_bundle_manager_helper",
    "${ability_runtime_services_path}/common/include",
    "${ability_runtime_path}/interfaces/kits/native/ability/native",
    "${ability_runtime_utils_path}/global/constant",
  ]

  configs = [
    ":appkit_config",
    "${ability_runtime_services_path}/common:optimize_config",
  ]

  sources = [ "${ability_runtime_native_path}/appkit/ability_bundle_manager_helper/bundle_mgr_helper.cpp" ]

  cflags = []
  if (target_cpu == "arm") {
    cflags += [ "-DBINDER_IPC_32BIT" ]
  }

  deps = [ "${ability_runtime_services_path}/common:app_util" ]

  external_deps = [
    "ability_base:want",
    "bundle_framework:appexecfwk_base",
    "bundle_framework:appexecfwk_core",
    "bundle_framework:libappexecfwk_common",
    "c_utils:utils",
    "hilog:libhilog",
    "hitrace:hitrace_meter",
    "ipc:ipc_core",
    "json:nlohmann_json_static",
    "samgr:samgr_proxy",
  ]

  if (ability_runtime_graphics) {
    external_deps += [ "icu:shared_icuuc" ]
  }

  innerapi_tags = [ "platformsdk" ]
  subsystem_name = "ability"
  part_name = "ability_runtime"
}

ohos_shared_library("application_context_manager") {
  branch_protector_ret = "pac_ret"

  include_dirs = [
    "${ability_runtime_path}/interfaces/inner_api/runtime/include",
    "${ability_runtime_path}/interfaces/kits/native/ability/native",
  ]

  sources = [ "${ability_runtime_native_path}/appkit/ability_runtime/context/application_context_manager.cpp" ]

  cflags = []
  if (target_cpu == "arm") {
    cflags += [ "-DBINDER_IPC_32BIT" ]
  }

  external_deps = [
    "hilog:libhilog",
    "napi:ace_napi",
    "libuv:uv",
    "node:node_header_notice",
  ]

  public_configs = [ ":application_context_manager_config" ]

  subsystem_name = "ability"
  part_name = "ability_runtime"
}

config("image_observer_manager_public_config") {
  visibility = [ ":*" ]

  include_dirs = [
    "${ability_runtime_path}/interfaces/kits/native/appkit/ability_runtime/context",
    "${ability_runtime_path}/interfaces/kits/native/appkit/app",
  ]
}

ohos_shared_library("application_image_observer_manager") {
  branch_protector_ret = "pac_ret"

  sanitize = {
    cfi = true
    cfi_cross_dso = true
    cfi_vcall_icall_only = true
    debug = false
  }

  include_dirs = [
    "${ability_runtime_path}/interfaces/kits/native/appkit/app",
    "${ability_runtime_path}/interfaces/kits/native/appkit/ability_runtime/context",
    "${ability_runtime_services_path}/common/include",
  ]

  public_configs = [ ":image_observer_manager_public_config" ]

  sources = [
    "${ability_runtime_native_path}/appkit/app/app_image_observer_manager.cpp",
  ]

  cflags = []
  if (target_cpu == "arm") {
    cflags += [ "-DBINDER_IPC_32BIT" ]
  }

  external_deps = [ "hilog:libhilog" ]

  innerapi_tags = [ "platformsdk" ]
  subsystem_name = "ability"
  part_name = "ability_runtime"
}

# Build appkit_child.so - child process thread library
ohos_shared_library("appkit_child") {
  branch_protector_ret = "pac_ret"

  sanitize = {
    cfi = true
    cfi_cross_dso = true
    cfi_vcall_icall_only = true
    debug = false
  }

  include_dirs = [
    "${ability_runtime_path}/interfaces/kits/c/ability_runtime",
    "${ability_runtime_path}/interfaces/inner_api/connect_server_manager/include",
  ]

  configs = [
    ":appkit_config",
    ":appkit_exception_config",
    "${ability_runtime_services_path}/common:optimize_config",
  ]

  public_configs = [ ":appkit_public_config" ]

  sources = [
    "${ability_runtime_native_path}/appkit/app/child_main_thread.cpp",
    "${ability_runtime_native_path}/appkit/app/native_lib_util.cpp",
  ]

  cflags = []
  if (target_cpu == "arm") {
    cflags += [ "-DBINDER_IPC_32BIT" ]
  }

  deps = [
    "${ability_runtime_innerkits_path}/ability_manager:ability_manager",
    "${ability_runtime_innerkits_path}/app_manager:app_manager",
    "${ability_runtime_innerkits_path}/child_process_manager:child_process_manager",
    "${ability_runtime_innerkits_path}/runtime:runtime",
    "${ability_runtime_native_path}/appkit:app_context",
  ]

  external_deps = [
    "ability_base:extractortool",
    "c_utils:utils",
    "eventhandler:libeventhandler",
    "ffrt:libffrt",
    "hilog:libhilog",
    "ipc:ipc_capi",
    "ipc:ipc_single",
    "napi:ace_napi",
    "libuv:uv",
    "node:node_header_notice",
  ]

  defines = [ "SUPPORT_CHILD_PROCESS" ]

  version_script = "libappkit_child.map"

  innerapi_tags = [ "platformsdk" ]
  subsystem_name = "ability"
  part_name = "ability_runtime"
}

# Build appkit_child_entry.so - child process entry API library
ohos_shared_library("appkit_child_entry") {
  branch_protector_ret = "pac_ret"

  sanitize = {
    cfi = true
    cfi_cross_dso = true
    cfi_vcall_icall_only = true
    debug = false
  }

  include_dirs = []

  configs = [
    ":appkit_config",
    ":appkit_exception_config",
    "${ability_runtime_services_path}/common:optimize_config",
  ]

  public_configs = [ ":appkit_public_config" ]

  sources =
      [ "${ability_runtime_native_path}/appkit/app/child_process_api.cpp" ]

  cflags = []
  if (target_cpu == "arm") {
    cflags += [ "-DBINDER_IPC_32BIT" ]
  }

  deps = [ "${ability_runtime_innerkits_path}/runtime:runtime" ]

  external_deps = [ "hilog:libhilog" ]

  defines = [ "SUPPORT_CHILD_PROCESS" ]

  version_script = "libappkit_child_entry.map"

  innerapi_tags = [ "platformsdk" ]
  subsystem_name = "ability"
  part_name = "ability_runtime"
}