# Copyright 2016 Google Inc.
#
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/ohos.gni")
import("build_overrides/skia.gni")

import("m133/gn/codec.gni")
import("m133/gn/fuchsia_defines.gni")
import("m133/gn/shared_sources.gni")
import("m133/gn/skia.gni")
import("m133/gn/toolchain/wasm.gni")
if (is_arkui_x) {
  import("//foundation/arkui/ace_engine/ace_config.gni")
}

# skia_feature_upgrade
  if (defined(is_mingw) && is_mingw == true) {
    is_win = true
  }

  skia_component("skia") {
  }
  import("${skia_modules_dir}/skcms/skcms.gni")
  skia_source_set("skcms") {
    cflags = []
    if (!is_win || is_clang) {
      cflags += [ "-std=c11" ]
    }
    if (target_cpu != "x64" || target_os == "android") {
      defines = [
        "SKCMS_DISABLE_HSW",
        "SKCMS_DISABLE_SKX",
      ]
    }
    public = skcms_public_headers
    sources = skcms_public + skcms_TransformBaseline
    deps = [
      "${skia_modules_dir}/skcms:skcms_TransformHsw",
      "${skia_modules_dir}/skcms:skcms_TransformSkx",
    ]
  }
  if (is_arkui_x) {
    skia_effective_defines = skia_common_defines
    if (!skia_use_gl) {
      skia_effective_defines -= [ "SK_GL" ]
    }
    if (!skia_enable_svg) {
      skia_effective_defines -= [ "SK_ENABLE_SVG" ]
    }
    if (!defined(skia_enable_skshaper) || !skia_enable_skshaper) {
      skia_effective_defines -= [ "SKSHAPER_IMPLEMENTATION=1" ]
    }
    if (!skia_use_harfbuzz) {
      skia_effective_defines -= [ "SK_SHAPER_HARFBUZZ_AVAILABLE" ]
    }
    if (!skia_enable_skunicode) {
      skia_effective_defines -= [
        "SK_UNICODE_AVAILABLE",
        "SKUNICODE_IMPLEMENTATION=1",
      ]
    }
    if (!skia_use_libjpeg_turbo_decode) {
      skia_effective_defines -= [ "SK_CODEC_DECODES_JPEG" ]
    }
    if (!skia_use_libpng_decode) {
      skia_effective_defines -= [ "SK_CODEC_DECODES_PNG" ]
    }
    if (!skia_use_libwebp_decode) {
      skia_effective_defines -= [ "SK_CODEC_DECODES_WEBP" ]
    }
  }

  config("skia_config") {
    include_dirs = [
      "${skia_root_dir}",
      "${skia_root_dir}/include/core",
      "${skia_root_dir}/src/core",
    ]

    if (is_arkui_x) {
      defines = skia_effective_defines
    } else {
      defines = skia_common_defines
    }
  }

  config("oboe_config") {
    include_dirs = [ "//third_party/skia/third_party/externals/oboe" ]
  }

  config("piex_config") {
    include_dirs = [ "${skia_third_party_dir}/externals/piex" ]
  }

  template("make_skia_deps") {
    forward_variables_from(invoker, "*")
    ohos_source_set("skia_$platform") {
      branch_protector_ret = "pac_ret"
      part_name = "skia"
      subsystem_name = "thirdparty"
      license_file = "${skia_root_dir}/LICENSE"
      public_configs = [
        ":skia_config",
        #":harfbuzz_config",
        #":icu_config",
      ]

      if (is_arkui_x) {
        public_configs += [
          "${skia_root_dir}:harfbuzz_config",
          "${skia_root_dir}:icu_config",
        ]
        public_deps = [ ":skia_canvaskit_static" ]
      } else {
        public_deps = [ ":skia_canvaskit" ]
      }
    }
  }

  if (is_arkui_x) {
    foreach(item, ace_platforms) {
      make_skia_deps(item.name) {
        platform = item.name
        config = {
        }

        if (defined(item.config)) {
          config = item.config
        }
      }
    }
  }

  skia_library_configs = [
    "${skia_root_dir}:skia_public",
    "${skia_root_dir}:skia_private",
    "${skia_root_dir}:skia_library",
  ]

  config("skia_canvaskit_link_config") {
    if (is_ohos && is_clang && (target_cpu == "arm" || target_cpu == "arm64")) {
      ldflags = [
        "-Wl,--lto-O2",
        "-Wl,-mllvm",
        "-Wl,-wholeprogramdevirt-check=fallback",
        "-Wl,-Bsymbolic",
      ]

      if (skia_feature_enable_pgo && enable_enhanced_opt) {
        ldflags += [
          "-Wl,-mllvm,-vectorization-bonus-factor=4",
          "-Wl,-mllvm,-vectorizer-min-trip-count=4",
          "-Wl,--aarch64-inline-plt",
          "-Wl,-mllvm,-enable-partial-inlining",
          "-Wl,-mllvm,-tail-dup-profile-hot-percentile-override=999990",
        ]
      }
    }
  }

  ohos_shared_library("skia_canvaskit") {
    branch_protector_ret = "pac_ret"
    part_name = "skia"
    subsystem_name = "thirdparty"

    public_external_deps = []

    if (skia_use_vulkan && !is_arkui_x) {
      public_external_deps += [ "vulkan-headers:vulkan_headers" ]
    }

    if (is_ohos) {
      public_external_deps += [ 
        "hitrace:hitrace_meter",
        "hilog:libhilog",
       ]
    }

    public_configs = [
      "${skia_root_dir}:skia_public",
      ":skia_config",
      "${skia_root_dir}:harfbuzz_config",
      "${skia_root_dir}:icu_config",
      ":oboe_config",
      ":piex_config",
    ]
    configs = skia_library_configs
    if (enhanced_opt) {
      configs += [ ":skia_canvaskit_link_config" ]
    }
    deps = [
      "${skia_root_dir}:fontmgr_FontConfigInterface",
      "${skia_root_dir}:fontmgr_android",
      "${skia_root_dir}:fontmgr_android_ndk",
      "${skia_root_dir}:fontmgr_custom_directory",
      "${skia_root_dir}:fontmgr_custom_embedded",
      "${skia_root_dir}:fontmgr_custom_empty",
      "${skia_root_dir}:fontmgr_fontations_empty",
      "${skia_root_dir}:fontmgr_fontconfig",
      "${skia_root_dir}:fontmgr_fuchsia",
      "${skia_root_dir}:fontmgr_mac_ct",
      "${skia_root_dir}:fontmgr_ohos",
      "${skia_root_dir}:fontmgr_win",
      "${skia_root_dir}:fontmgr_win_gdi",
      "${skia_root_dir}:gpu",
      "${skia_root_dir}:graphite",
      "${skia_root_dir}:jpeg_encode",
      "${skia_root_dir}:pdf",
      "${skia_root_dir}:png_encode",
      "${skia_root_dir}:webp_encode",
      "${skia_root_dir}:xps",
    ]
    deps += [
      "${skia_modules_dir}/skcms",
      "${skia_modules_dir}/skresources",
      "${skia_modules_dir}/skshaper",
      "${skia_modules_dir}/skunicode",
      "${skia_modules_dir}/svg",
      "${skia_root_dir}:android_utils",
      "${skia_root_dir}:avif",
      "${skia_root_dir}:crabbyavif",
      "${skia_root_dir}:fontmgr_factory",
      "${skia_root_dir}:heif",
      "${skia_root_dir}:hsw",
      "${skia_root_dir}:jpeg_decode",
      "${skia_root_dir}:jpegxl_decode",
      "${skia_root_dir}:lasx",
      "${skia_root_dir}:minify_sksl",
      "${skia_root_dir}:ndk_images",
      "${skia_root_dir}:png_decode_libpng",
      "${skia_root_dir}:png_decode_rust",
      "${skia_root_dir}:raw",
      "${skia_root_dir}:skx",
      "${skia_root_dir}:typeface_fontations",
      "${skia_root_dir}:vello",
      "${skia_root_dir}:webp_decode",
      "${skia_root_dir}:wuffs",
      "${skia_root_dir}:xml",
    ]

    if (is_arkui_x) {
      deps -= [ "${skia_root_dir}:fontmgr_ohos" ]

      deps += [ "//third_party/bounds_checking_function:libsec_static" ]
    }
    if (!use_oh_skia) {
      deps -= [ "${skia_root_dir}:fontmgr_ohos" ]
    }

    public = skia_core_public
    public += skia_codec_public
    public += skia_utils_public
    public += skia_effects_public
    public += skia_effects_imagefilter_public

    sources = []
    sources += skia_core_sources
    sources += skia_utils_private
    sources += skia_utils_chromium
    sources += skia_effects_sources
    sources += skia_colorfilters_sources
    sources += skia_effects_imagefilter_sources
    sources += skia_codec_shared
    sources += skia_codec_decode_bmp
    sources += skia_encode_srcs
    sources += skia_sksl_core_sources
    sources += skia_sksl_core_module_sources
    sources += skia_sksl_tracing_sources
    sources += skia_ports_sources
    sources += [
      "${skia_root_dir}/src/android/SkAndroidFrameworkUtils.cpp",
      "${skia_root_dir}/src/android/SkAnimatedImage.cpp",
      "${skia_root_dir}/src/codec/SkAndroidCodec.cpp",
      "${skia_root_dir}/src/codec/SkAndroidCodecAdapter.cpp",
      "${skia_root_dir}/src/codec/SkSampledCodec.cpp",
      "${skia_root_dir}/src/ports/SkDiscardableMemory_none.cpp",
      "${skia_root_dir}/src/ports/SkMemory_malloc.cpp",
      "${skia_root_dir}/src/sfnt/SkOTTable_name.cpp",
      "${skia_root_dir}/src/sfnt/SkOTUtils.cpp",
    ]

    libs = []

    if (is_arkui_x) {
      defines = skia_effective_defines
    } else {
      defines = skia_common_defines
    }
    cflags = skia_common_cflags
    inputs = skia_common_inputs

    cflags += [
      "-Wno-ignored-attributes",
      "-ffunction-sections",
      "-fdata-sections",
      "-fvisibility=hidden",
      "-fno-unwind-tables",
      "-fno-asynchronous-unwind-tables",
    ]

    cflags_cc = [
      "-fvisibility-inlines-hidden",
      "-fno-rtti",
    ]

    if (!is_mac && !is_asan) {
      ldflags = [
        "-Wl,--gc-sections",
        "-Wl,--icf=safe",
      ]
    }

    if (skia_build_for_debugger) {
      defines += [ "SK_BUILD_FOR_DEBUGGER" ]
    }

    if (skia_use_no_jpeg_encode) {
      sources += skia_no_encode_jpeg_srcs
    }
    if (skia_use_no_png_encode) {
      sources += skia_no_encode_png_srcs
    }
    if (skia_use_no_webp_encode) {
      sources += skia_no_encode_webp_srcs
    }
    if (is_ohos && skia_feature_hispeed_plugin) {
      sources += [ "${skia_root_dir}/src/utils/SkHispeedPluginManager.cpp" ]
      defines += [ "SK_USE_HISPEED_PLUGIN" ]
    }

    if (is_arkui_x) {
      defines += [ "CROSS_PLATFORM" ]
    }

    if (is_win) {
      sources += skia_ports_windows_sources + [
                   "${skia_root_dir}/src/ports/SkDebug_win.cpp",
                   "${skia_root_dir}/src/ports/SkImageGeneratorWIC.cpp",
                 ]
      libs += [
        # "Ole32.lib",
        # "OleAut32.lib",
      ]

      if (!skia_enable_winuwp) {
        libs += [
          # "FontSub.lib",
          # "User32.lib",
          # "Usp10.lib",
        ]
      }
      libs += [
        "kernel32",
        "gdi32",
        "fontsub",
        "ole32",
        "oleaut32",
        "psapi",
        "user32",
        "usp10",
        "uuid",
        "windowscodecs",
      ]
      if (is_component_build) {
        if (defined(external_deps)) {
          external_deps += [ "bounds_checking_function:libsec_shared" ]
        } else {
          external_deps = [ "bounds_checking_function:libsec_shared" ]
        }
      } else {
        if (defined(external_deps)) {
          external_deps += [ "bounds_checking_function:libsec_static" ]
        } else {
          external_deps = [ "bounds_checking_function:libsec_static" ]
        }
      }
    } else {
      sources += [
        "${skia_root_dir}/src/ports/SkOSFile_posix.cpp",
        "${skia_root_dir}/tools/library/LoadDynamicLibrary_posix.cpp",
      ]
      if (is_ios) {
        sources += [ "${skia_root_dir}/src/ports/SkOSFile_ios.h" ]
      }
      libs += [ "dl" ]
    }

    if (is_ohos) {
      sources += [ "${skia_root_dir}/src/ports/SkDebug_ohos.cpp" ]
      external_deps = [
        "bounds_checking_function:libsec_shared",
        "faultloggerd:libbacktrace_local",
        "hilog:libhilog",
        "hitrace:hitrace_meter",
        "init:libbegetutil",
      ]
      defines += [ "SK_ENABLE_SDF_BLUR_SWITCH" ]
      defines += [ "SK_ENABLE_PATH_COMPLEXITY_DFX" ]
      defines += [ "SK_ENABLE_OHOS_CODEC" ]
    }

    if (is_android) {
      if (skia_feature_upgrade) {
        deps += [ "//third_party/expat:expat_static" ]
      } else {
        deps += [ "${skia_third_party_dir}/expat" ]
      }
      if (defined(ndk) && ndk != "") {
        deps += [ "${skia_third_party_dir}/cpu-features" ]
      }
      sources += [ "${skia_root_dir}/src/ports/SkDebug_android.cpp" ]
      libs += [
        "EGL",
        "GLESv2",
        "log",
      ]
    }

    if (is_linux || is_wasm) {
      sources += [ "${skia_root_dir}/src/ports/SkDebug_stdio.cpp" ]
      if (skia_use_egl) {
        libs += [ "GLESv2" ]
      }
      if (is_component_build) {
        if (defined(external_deps)) {
          external_deps += [ "bounds_checking_function:libsec_shared" ]
        } else {
          external_deps = [ "bounds_checking_function:libsec_shared" ]
        }
      } else {
        if (defined(external_deps)) {
          external_deps += [ "bounds_checking_function:libsec_static" ]
        } else {
          external_deps = [ "bounds_checking_function:libsec_static" ]
        }
      }
    }

    if (is_mac) {
      public += [ "${skia_root_dir}/include/ports/SkCFObject.h" ]
      sources += [
        "${skia_root_dir}/src/ports/SkDebug_stdio.cpp",
        "${skia_root_dir}/src/ports/SkImageGeneratorCG.cpp",
      ]
      frameworks = [
        "ApplicationServices.framework",
        "OpenGL.framework",
      ]
      if (is_component_build) {
        if (defined(external_deps)) {
          external_deps += [ "bounds_checking_function:libsec_shared" ]
        } else {
          external_deps = [ "bounds_checking_function:libsec_shared" ]
        }
      } else {
        if (defined(external_deps)) {
          external_deps += [ "bounds_checking_function:libsec_static" ]
        } else {
          external_deps = [ "bounds_checking_function:libsec_static" ]
        }
      }
    }

    if (is_ios) {
      public += [ "${skia_root_dir}/include/ports/SkCFObject.h" ]
      sources += [
        "${skia_root_dir}/src/ports/SkDebug_stdio.cpp",
        "${skia_root_dir}/src/ports/SkImageGeneratorCG.cpp",
      ]
      frameworks = [
        "CoreFoundation.framework",
        "ImageIO.framework",
        "MobileCoreServices.framework",
      ]
    }

    if (is_fuchsia) {
      sources += [ "${skia_root_dir}/src/ports/SkDebug_stdio.cpp" ]
    }

    #if (skia_enable_spirv_validation) {
    #  deps += [ "${skia_third_party_dir}/externals/spirv-tools:spvtools_val" ]
    #  defines += [ "SK_ENABLE_SPIRV_VALIDATION" ]
    #}

    if (skia_include_multiframe_procs) {
      sources += [ "${skia_root_dir}/tools/SkSharingProc.cpp" ]
    }

    # Overrides TRACE_EVENT0..2 macros (etc) to map to Perfetto's tracing macros.
    # Currently only supported in Android framework.
    if (skia_android_framework_use_perfetto) {
      defines += [ "SK_ANDROID_FRAMEWORK_USE_PERFETTO" ]
      sources += [ "${skia_root_dir}/src/android/SkAndroidFrameworkPerfettoStaticStorage.cpp" ]
    }

    if (!skia_enable_ganesh && !skia_enable_graphite) {
      sources += skia_no_slug_srcs
    }
  }
  ohos_static_library("sksl_ext_static") {
    branch_protector_ret = "pac_ret"
    part_name = "skia"
    subsystem_name = "thirdparty"

    public_configs = [ ":skia_config" ]
    defines = [
      "SKSL_STANDALONE",
      "SK_DISABLE_TRACING",
      "SK_COMPILE_WITH_GN",
      "SKSL_EXT",
    ]
    sources = []
    if (is_ohos) {
      sources += [ "${skia_root_dir}/src/ports/SkDebug_ohos.cpp" ]
      external_deps = [ "hilog:libhilog" ]
    } else if (is_android) {
      sources += [ "${skia_root_dir}/src/ports/SkDebug_android.cpp" ]
    } else if (is_win) {
      sources += [ "${skia_root_dir}/src/ports/SkDebug_win.cpp" ]
    } else {
      sources += [ "${skia_root_dir}/src/ports/SkDebug_stdio.cpp" ]
    }
    sources += skslc_deps
    sources += skia_sksl_codegen_sources
    sources += skia_sksl_core_sources
    sources += skia_sksl_pipeline_sources
    libs = []
    if (is_win) {
      sources += [ "${skia_root_dir}/src/utils/SkGetExecutablePath_win.cpp" ]
    } else if (is_mac || is_ios) {
      sources += [ "${skia_root_dir}/src/utils/SkGetExecutablePath_mac.cpp" ]
    } else if (is_linux || is_android) {
      sources += [ "${skia_root_dir}/src/utils/SkGetExecutablePath_linux.cpp" ]
    }
    if (is_win) {
      sources += skia_ports_windows_sources
    } else {
      sources += [ "${skia_root_dir}/src/ports/SkOSFile_posix.cpp" ]
      libs += [ "dl" ]
    }
    include_dirs = [ "${skia_root_dir}" ]
  }
  ohos_static_library("skia_canvaskit_static") {
    branch_protector_ret = "pac_ret"
    part_name = "skia"
    subsystem_name = "thirdparty"

    public_external_deps = []

    if (skia_use_vulkan && !is_arkui_x) {
      public_external_deps += [ "vulkan-headers:vulkan_headers" ]
    }

    if (is_ohos) {
      public_external_deps += [ 
        "hitrace:hitrace_meter",
        "hilog:libhilog",
       ]
    }

    public_configs = [
      "${skia_root_dir}:skia_public",
      ":skia_config",
    ]

    configs = skia_library_configs
    deps = [
      "${skia_root_dir}:fontmgr_FontConfigInterface",
      "${skia_root_dir}:fontmgr_android",
      "${skia_root_dir}:fontmgr_android_ndk",
      "${skia_root_dir}:fontmgr_custom_directory",
      "${skia_root_dir}:fontmgr_custom_embedded",
      "${skia_root_dir}:fontmgr_custom_empty",
      "${skia_root_dir}:fontmgr_fontations_empty",
      "${skia_root_dir}:fontmgr_fontconfig",
      "${skia_root_dir}:fontmgr_fuchsia",
      "${skia_root_dir}:gpu",
      "${skia_root_dir}:graphite",
      "${skia_root_dir}:jpeg_encode",
      "${skia_root_dir}:png_encode",
      "${skia_root_dir}:webp_encode",
      "${skia_root_dir}:xps",
    ]
    deps += [
      "${skia_modules_dir}/skresources",
      "${skia_modules_dir}/skshaper",
      "${skia_modules_dir}/skunicode",
      "${skia_modules_dir}/svg",
      "${skia_root_dir}:android_utils",
      "${skia_root_dir}:avif",
      "${skia_root_dir}:crabbyavif",
      "${skia_root_dir}:fontmgr_factory",
      "${skia_root_dir}:heif",
      "${skia_root_dir}:hsw",
      "${skia_root_dir}:jpeg_decode",
      "${skia_root_dir}:jpegxl_decode",
      "${skia_root_dir}:lasx",
      "${skia_root_dir}:minify_sksl",
      "${skia_root_dir}:ndk_images",
      "${skia_root_dir}:png_decode_libpng",
      "${skia_root_dir}:png_decode_rust",
      "${skia_root_dir}:raw",
      "${skia_root_dir}:skx",
      "${skia_root_dir}:typeface_fontations",
      "${skia_root_dir}:vello",
      "${skia_root_dir}:webp_decode",
      "${skia_root_dir}:wuffs",
      "${skia_root_dir}:xml",
      "//third_party/skia:skcms",
    ]

    if (is_arkui_x) {
      deps -= [
        "${skia_root_dir}:graphite",
        "${skia_root_dir}:jpegxl_decode",
        "${skia_root_dir}:raw",
        "${skia_root_dir}:vello",
      ]

      deps -= [
        "${skia_root_dir}:fontmgr_FontConfigInterface",
        "${skia_root_dir}:fontmgr_custom_directory",
        "${skia_root_dir}:fontmgr_custom_embedded",
        "${skia_root_dir}:fontmgr_custom_empty",
        "${skia_root_dir}:fontmgr_fontations_empty",
        "${skia_root_dir}:fontmgr_fontconfig",
        "${skia_root_dir}:fontmgr_fuchsia",
      ]

      deps -= [
        "${skia_root_dir}:avif",
        "${skia_root_dir}:crabbyavif",
        "${skia_root_dir}:heif",
      ]

      deps -= [
        "${skia_root_dir}:xps",
      ]

      deps -= [
        "${skia_root_dir}:typeface_fontations",
        "${skia_root_dir}:xml",
        "${skia_root_dir}:minify_sksl",
      ]

      deps -= [
        "${skia_root_dir}:jpeg_encode",
        "${skia_root_dir}:webp_encode",
      ]

      deps -= [
        "${skia_root_dir}:android_utils",
        "${skia_root_dir}:ndk_images",
      ]
    }
    public = skia_core_public
    public += skia_codec_public
    public += skia_utils_public
    public += skia_effects_public
    public += skia_effects_imagefilter_public

    sources = []
    sources += skia_core_sources
    sources += skia_utils_private
    sources += skia_utils_chromium
    sources += skia_effects_sources
    sources += skia_colorfilters_sources
    sources += skia_effects_imagefilter_sources
    sources += skia_codec_shared
    sources += skia_codec_decode_bmp
    sources += skia_encode_srcs
    sources += skia_sksl_core_sources
    sources += skia_sksl_core_module_sources
    sources += skia_sksl_tracing_sources
    sources += skia_ports_sources
    sources += [
      "${skia_root_dir}/src/android/SkAndroidFrameworkUtils.cpp",
      "${skia_root_dir}/src/android/SkAnimatedImage.cpp",
      "${skia_root_dir}/src/codec/SkAndroidCodec.cpp",
      "${skia_root_dir}/src/codec/SkAndroidCodecAdapter.cpp",
      "${skia_root_dir}/src/codec/SkSampledCodec.cpp",
      "${skia_root_dir}/src/ports/SkDiscardableMemory_none.cpp",
      "${skia_root_dir}/src/ports/SkMemory_malloc.cpp",
      "${skia_root_dir}/src/sfnt/SkOTTable_name.cpp",
      "${skia_root_dir}/src/sfnt/SkOTUtils.cpp",
    ]

    libs = []

    if (is_arkui_x) {
      defines = skia_effective_defines
      defines += [ "CROSS_PLATFORM" ]
    } else {
      defines = skia_common_defines
    }

    cflags = skia_common_cflags
    inputs = skia_common_inputs

    if (skia_build_for_debugger) {
      defines += [ "SK_BUILD_FOR_DEBUGGER" ]
    }

    if (skia_use_no_jpeg_encode) {
      sources += skia_no_encode_jpeg_srcs
    }
    if (skia_use_no_png_encode) {
      sources += skia_no_encode_png_srcs
    }
    if (skia_use_no_webp_encode) {
      sources += skia_no_encode_webp_srcs
    }
    if (is_ohos && skia_feature_hispeed_plugin) {
      sources += [ "${skia_root_dir}/src/utils/SkHispeedPluginManager.cpp" ]
      defines += [ "SK_USE_HISPEED_PLUGIN" ]
    }

    sources += [ "${skia_root_dir}/src/ports/SkOSFile_posix.cpp" ]
    if (is_ios) {
      sources += [ "${skia_root_dir}/src/ports/SkOSFile_ios.h" ]
      deps += [
        "${skia_root_dir}:fontmgr_mac_ct",
        "${skia_root_dir}:fontmgr_mac_ct_factory",
      ]
    }

    if (is_ohos) {
      external_deps = [
        "bounds_checking_function:libsec_shared",
        "hitrace:hitrace_meter",
      ]
      if (!build_ohos_sdk && !is_arkui_x) {
        external_deps += [ "init:libbegetutil" ]
      }
    }

    if (is_android) {
      if (skia_feature_upgrade) {
        deps += [ "//third_party/expat:expat_static" ]
      } else {
        deps += [ "${skia_third_party_dir}/expat" ]
      }
      if (defined(ndk) && ndk != "") {
        deps += [ "${skia_third_party_dir}/cpu-features" ]
      }
      sources += [ "${skia_root_dir}/src/ports/SkDebug_android.cpp" ]
      deps += [
        "${skia_root_dir}:fontmgr_android",
        "${skia_root_dir}:fontmgr_android_factory",
      ]
      libs += [
        "EGL",
        "GLESv2",
        "log",
      ]
    }

    if (is_ios) {
      public += [ "${skia_root_dir}/include/ports/SkCFObject.h" ]
      sources += [
        "${skia_root_dir}/src/ports/SkDebug_stdio.cpp",
        "${skia_root_dir}/src/ports/SkImageGeneratorCG.cpp",
      ]
      frameworks = [
        "CoreFoundation.framework",
        "ImageIO.framework",
        "MobileCoreServices.framework",
      ]
    }

    if (skia_include_multiframe_procs) {
      sources += [ "${skia_root_dir}/tools/SkSharingProc.cpp" ]
    }

    # Overrides TRACE_EVENT0..2 macros (etc) to map to Perfetto's tracing macros.
    # Currently only supported in Android framework.
    if (skia_android_framework_use_perfetto) {
      defines += [ "SK_ANDROID_FRAMEWORK_USE_PERFETTO" ]
      sources += [ "${skia_root_dir}/src/android/SkAndroidFrameworkPerfettoStaticStorage.cpp" ]
    }

    if (!skia_enable_ganesh && !skia_enable_graphite) {
      sources += skia_no_slug_srcs
    }
  }