# Copyright (C) 2023-2026 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/ohos.gni")
import("//foundation/multimedia/image_framework/ide/image_decode_config.gni")

image_native_ios_cflags = [
  "-DIMAGE_DEBUG_FLAG",
  "-DIMAGE_COLORSPACE_FLAG",
]

image_native_ios_sources = [
  # Native C API wrappers used by ArkUI-X ace_ndk.
  "//foundation/multimedia/image_framework/frameworks/kits/js/common/ndk/image_packer_native.cpp",
  "//foundation/multimedia/image_framework/frameworks/kits/js/common/ndk/image_packer_native_impl.cpp",
  "//foundation/multimedia/image_framework/frameworks/kits/js/common/pixelmap_ndk/pixelmap_native.cpp",
  "//foundation/multimedia/image_framework/frameworks/kits/js/common/pixelmap_ndk/pixelmap_native_impl.cpp",

  # plugin_manager
  "//foundation/multimedia/image_framework/plugins/manager/src/common/attr_data.cpp",
  "//foundation/multimedia/image_framework/plugins/manager/src/common/platform_adp.cpp",
  "//foundation/multimedia/image_framework/plugins/manager/src/framework/capability.cpp",
  "//foundation/multimedia/image_framework/plugins/manager/src/framework/impl_class.cpp",
  "//foundation/multimedia/image_framework/plugins/manager/src/framework/impl_class_key.cpp",
  "//foundation/multimedia/image_framework/plugins/manager/src/framework/impl_class_mgr.cpp",
  "//foundation/multimedia/image_framework/plugins/manager/src/framework/json_helper.cpp",
  "//foundation/multimedia/image_framework/plugins/manager/src/framework/plugin.cpp",
  "//foundation/multimedia/image_framework/plugins/manager/src/framework/plugin_export.cpp",
  "//foundation/multimedia/image_framework/plugins/manager/src/framework/plugin_fw.cpp",
  "//foundation/multimedia/image_framework/plugins/manager/src/framework/plugin_info_lock.cpp",
  "//foundation/multimedia/image_framework/plugins/manager/src/framework/plugin_mgr.cpp",
  "//foundation/multimedia/image_framework/plugins/manager/src/plugin_server.cpp",
  "//foundation/multimedia/image_framework/plugins/manager/src/pluginbase/plugin_class_base.cpp",
  "//foundation/multimedia/image_framework/plugins/manager/src/thirdpartyadp/gstreamer/gst_plugin_fw.cpp",

  # webp
  "$third_party_skia_root/third_party/externals/libjpeg-turbo/jdicc.c",

  # image_native
  "${image_subsystem}/frameworks/innerkitsimpl/common/src/memory_manager.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/codec/src/image_packer.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/codec/src/image_packer_ex.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/codec/src/image_source.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/codec/src/image_source_astc.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/common/src/incremental_pixel_map.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/common/src/pixel_map.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/common/src/pixel_map_parcel.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/common/src/pixel_yuv.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/converter/src/basic_transformer.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/converter/src/image_format_convert.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/converter/src/image_format_convert_utils.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/converter/src/matrix.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/converter/src/pixel_convert.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/converter/src/post_proc.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/converter/src/post_proc_slr.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/converter/src/scan_line_filter.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/creator/src/image_creator.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/creator/src/image_creator_manager.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/receiver/src/image_receiver.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/receiver/src/image_receiver_manager.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/stream/src/buffer_packer_stream.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/stream/src/buffer_source_stream.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/stream/src/file_packer_stream.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/stream/src/file_source_stream.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/stream/src/incremental_source_stream.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/stream/src/istream_source_stream.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/stream/src/ostream_packer_stream.cpp",

  # accessor
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/accessor/src/abstract_exif_metadata_accessor.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/accessor/src/buffer_metadata_stream.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/accessor/src/data_buf.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/accessor/src/dng_exif_metadata_accessor.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/accessor/src/exif_metadata.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/accessor/src/exif_metadata_formatter.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/accessor/src/file_metadata_stream.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/accessor/src/heif_exif_metadata_accessor.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/accessor/src/jpeg_exif_metadata_accessor.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/accessor/src/kv_metadata.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/accessor/src/metadata.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/accessor/src/metadata_accessor_factory.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/accessor/src/png_exif_metadata_accessor.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/accessor/src/png_image_chunk_utils.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/accessor/src/tiff_parser.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/accessor/src/webp_exif_metadata_accessor.cpp",

  # image_napi
  "//foundation/multimedia/image_framework/frameworks/kits/js/common/image_error_convert.cpp",
  "//foundation/multimedia/image_framework/frameworks/kits/js/common/image_napi_utils.cpp",
  "//foundation/multimedia/image_framework/frameworks/kits/js/common/image_packer_napi.cpp",
  "//foundation/multimedia/image_framework/frameworks/kits/js/common/image_source_napi.cpp",
  "//foundation/multimedia/image_framework/frameworks/kits/js/common/native_module_ohos_image.cpp",
  "//foundation/multimedia/image_framework/frameworks/kits/js/common/pixel_map_napi.cpp",

  # formatagent
  "//foundation/multimedia/image_framework/plugins/common/libs/image/formatagentplugin/src/bmp_format_agent.cpp",
  "//foundation/multimedia/image_framework/plugins/common/libs/image/formatagentplugin/src/cr3_format_agent.cpp",
  "//foundation/multimedia/image_framework/plugins/common/libs/image/formatagentplugin/src/gif_format_agent.cpp",
  "//foundation/multimedia/image_framework/plugins/common/libs/image/formatagentplugin/src/heif_format_agent.cpp",
  "//foundation/multimedia/image_framework/plugins/common/libs/image/formatagentplugin/src/jpeg_format_agent.cpp",
  "//foundation/multimedia/image_framework/plugins/common/libs/image/formatagentplugin/src/png_format_agent.cpp",
  "//foundation/multimedia/image_framework/plugins/common/libs/image/formatagentplugin/src/raw_format_agent.cpp",
  "//foundation/multimedia/image_framework/plugins/common/libs/image/formatagentplugin/src/svg_format_agent.cpp",
  "//foundation/multimedia/image_framework/plugins/common/libs/image/formatagentplugin/src/wbmp_format_agent.cpp",
  "//foundation/multimedia/image_framework/plugins/common/libs/image/formatagentplugin/src/webp_format_agent.cpp",

  # gif
  "//foundation/multimedia/image_framework/plugins/common/libs/image/libgifplugin/src/gif_encoder.cpp",

  # jpeg
  "//foundation/multimedia/image_framework/plugins/common/libs/image/libjpegplugin/src/icc_profile_info.cpp",
  "//foundation/multimedia/image_framework/plugins/common/libs/image/libjpegplugin/src/jpeg_decoder.cpp",
  "//foundation/multimedia/image_framework/plugins/common/libs/image/libjpegplugin/src/jpeg_utils.cpp",

  # png
  "//foundation/multimedia/image_framework/plugins/common/libs/image/libpngplugin/src/nine_patch_listener.cpp",
  "//foundation/multimedia/image_framework/plugins/common/libs/image/libpngplugin/src/png_decoder.cpp",
  "//foundation/multimedia/image_framework/plugins/common/libs/image/libpngplugin/src/png_ninepatch_res.cpp",

  # raw
  "//foundation/multimedia/image_framework/plugins/common/libs/image/librawplugin/src/raw_decoder.cpp",
  "//foundation/multimedia/image_framework/plugins/common/libs/image/librawplugin/src/raw_stream.cpp",

  # svg
  "//foundation/multimedia/image_framework/plugins/common/libs/image/libsvgplugin/src/svg_decoder.cpp",
  "//foundation/multimedia/image_framework/plugins/common/libs/image/libwebpplugin/src/webp_decoder.cpp",
  "//foundation/multimedia/image_framework/plugins/common/libs/image/libwebpplugin/src/webp_encoder.cpp",

  # ext
  "//foundation/multimedia/image_framework/plugins/common/libs/image/libextplugin/src/ext_decoder.cpp",
  "//foundation/multimedia/image_framework/plugins/common/libs/image/libextplugin/src/ext_encoder.cpp",
  "//foundation/multimedia/image_framework/plugins/common/libs/image/libextplugin/src/ext_pixel_convert.cpp",
  "//foundation/multimedia/image_framework/plugins/common/libs/image/libextplugin/src/ext_stream.cpp",
  "//foundation/multimedia/image_framework/plugins/common/libs/image/libextplugin/src/ext_wstream.cpp",
  "${image_subsystem}/plugins/common/libs/image/libextplugin/src/bandjpeg/fast_manager.cpp",
  "${image_subsystem}/plugins/common/libs/image/libextplugin/src/bandjpeg/progressive_jpeg_decoder.cpp",
]

# image_native: not support
image_native_ios_sources -= [
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/common/src/pixel_map_parcel.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/creator/src/image_creator.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/creator/src/image_creator_manager.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/receiver/src/image_receiver.cpp",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/receiver/src/image_receiver_manager.cpp",
]

image_native_ios_include_dirs = [
  # manager
  "//foundation/multimedia/image_framework/plugins/manager/include/utils",
  "//foundation/multimedia/image_framework/plugins/manager/src/common",
  "//foundation/multimedia/image_framework/plugins/manager/src/framework",
  "//foundation/multimedia/image_framework/plugins/manager/src/pluginbase",
  "//foundation/multimedia/image_framework/plugins/manager/src/thirdpartyadp/gstreamer",
  "//third_party/json/single_include/nlohmann",

  # common
  "//foundation/multimedia/utils/include",
  "//foundation/multimedia/image_framework/interfaces/innerkits/include",
  "//foundation/multimedia/image_framework/plugins/manager/include",
  "//foundation/multimedia/image_framework/plugins/manager/include/image",
  "//foundation/multimedia/image_framework/plugins/manager/include/pluginbase",
  "//foundation/multimedia/image_framework/plugins/common/libs/image/libjpegplugin/include",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/utils/include",
  "//foundation/graphic/graphic_2d/utils/color_manager/export",
  "$third_party_skia_root/third_party/externals/libjpeg-turbo",
  "$third_party_skia_root/include/codec",
  "$third_party_skia_root",
  "$third_party_skia_root/include/core",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/converter/include",
  "//foundation/multimedia/image_framework/mock/native/include/log",
  "//commonlibrary/c_utils/base/include",
  "//foundation/multimedia/image_framework/mock/native/include/secure",
  "//base/hiviewdfx/hilog/interfaces/native/innerkits/include",
  "$third_party_skia_root/third_party/skcms",

  # webp
  "//foundation/multimedia/image_framework/plugins/common/libs/image/libwebpplugin/include",
  "$third_party_skia_root/third_party/externals/libwebp/src",
  "$third_party_skia_root/include/encode",
  "$third_party_skia_root/src/ports/skia_ohos",
  "$third_party_skia_root/src/ports",
  "$third_party_skia_root/src/images",
  "$third_party_skia_root/include/private",
  "$third_party_skia_root/third_party/externals/freetype/include/freetype",

  # svg
  "//foundation/multimedia/image_framework/plugins/common/libs/image/libsvgplugin/include",

  # raw
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/stream/include",
  "//foundation/multimedia/image_framework/plugins/common/libs/image/librawplugin/include",
  "$third_party_skia_root",

  # png
  "//foundation/multimedia/image_framework/plugins/common/libs/image/libpngplugin/include",
  "//third_party/zlib",
  "//third_party/libpng",

  # formatagent
  "//foundation/multimedia/image_framework/plugins/common/libs/image/formatagentplugin/include",
  "//foundation/multimedia/image_framework/plugins/manager/include/utils",

  # gif
  "//foundation/multimedia/image_framework/plugins/common/libs/image/libgifplugin/include",
  "//third_party/giflib",

  # jpeg
  "$third_party_skia_root/third_party/libjpeg-turbo",
  "//third_party/libexif",

  # image_native
  "//utils/system/safwk/native/include",
  "//foundation/ability/ability_runtime/interfaces/inner_api/runtime/include/",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/receiver/include",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/creator/include",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/pixelconverter/include",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/codec/include",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/common/include",
  "//foundation/multimedia/image_framework/frameworks/kits/js/common/include",
  "//foundation/multimedia/image_framework/interfaces/kits/js/common/include",
  "//foundation/multimedia/image_framework/plugins/common/libs/image/libjpegplugin",
  "//foundation/multimedia/image_framework/interfaces/kits/native/include",
  "//foundation/multimedia/image_framework/interfaces/kits/native/include/image",
  "//base/global/resource_management/interfaces/native/resource/include",
  "//utils/jni/jnikit/include",
  "//foundation/graphic/graphic_surface/interfaces/inner_api/surface",
  "//foundation/graphic/graphic_surface/interfaces/inner_api/utils",
  "//foundation/graphic/graphic_2d/interfaces/inner_api/common",
  "//foundation/graphic/graphic_2d/interfaces/kits/napi/graphic/color_manager/color_space_object_convertor",
  "//foundation/communication/ipc/interfaces/innerkits/ipc_core/include",
  "//drivers/peripheral/display/interfaces/include",
  "//drivers/peripheral/base",
  "$third_party_skia_root/third_party/externals/libjpeg-turbo",

  # ext
  "//foundation/multimedia/image_framework/plugins/common/libs/image/libextplugin/include",
  "//foundation/multimedia/image_framework/plugins/common/libs/image/libextplugin/include/hdr",
  "//foundation/multimedia/image_framework/plugins/common/libs/image/libextplugin/include/jpeg_yuv_decoder",
  "//foundation/graphic/graphic_2d/interfaces/inner_api/surface",
]

image_native_ios_deps = [
  # image_native
  "//foundation/arkui/napi:ace_napi",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/pixelconverter:pixelconvertadapter_static",
  "//foundation/multimedia/image_framework/frameworks/innerkitsimpl/utils:image_utils_static",
  "//foundation/multimedia/image_framework/mock/native:log_mock_static",

  #"//third_party/libpng:png_static",
  # gif
  # png
  "//third_party/libexif:exif_static",

  # heif
  "${image_subsystem}/plugins/common/libs/image/libextplugin:heifparser",
]

if (image_use_new_skia) {
  image_native_ios_deps += [
    "${third_party_skia_root}/third_party/libjpeg-turbo:libjpegm133",
    "${third_party_skia_root}/third_party/libpng:libpng",
    "${third_party_skia_root}/third_party/piex:piexm133",
  ]
} else {
  image_native_ios_deps += [
    "${third_party_skia_root}/third_party/libjpeg-turbo:libjpeg",
    "${third_party_skia_root}/third_party/libpng:libpng",
    "${third_party_skia_root}/third_party/piex:piex",
  ]
}

image_native_ios_deps += skia_skcms
image_native_ios_deps += skia_platform
if (!defined(is_arkui_x) || !is_arkui_x) {
  image_native_ios_deps += [ "//third_party/ffmpeg:libohosffmpeg" ]
}

image_native_ios_external_deps = [
  # common
  "c_utils:utilsbase",

  # png
  "//third_party/zlib:shared_libz",
]

if (has_libtiff) {
    image_native_ios_sources += [
        # tiff
        "${image_subsystem}/plugins/common/libs/image/libtiffplugin/src/tiff_decoder.cpp",
        "${image_subsystem}/plugins/common/libs/image/libtiffplugin/src/tiff_encoder.cpp",
        "${image_subsystem}/plugins/common/libs/image/libtiffplugin/src/tiff_utils.cpp",
        "${image_subsystem}/plugins/common/libs/image/formatagentplugin/src/tiff_format_agent.cpp",
    ]

    image_native_ios_include_dirs += [
        # tiff
        "$image_subsystem/plugins/common/libs/image/libtiffplugin/include",
    ]
}