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

if (!defined(is_skia_standalone)) {
  is_skia_standalone = false
}

is_skia_dev_build = is_skia_standalone && !is_official_build

declare_args() {
  skia_android_serial = ""
  skia_compile_modules = false
  skia_compile_sksl_tests = false
  skia_enable_api_available_macro = true
  skia_enable_android_utils = is_skia_dev_build
  skia_enable_discrete_gpu = true
  skia_enable_flutter_defines = false
  skia_enable_fontmgr_empty = false
  skia_enable_fontmgr_fuchsia = is_fuchsia
  skia_enable_fontmgr_win = is_win
  skia_enable_optimize_size = false
  skia_enable_pdf = !is_wasm
  skia_enable_skottie = !(is_win && is_component_build) ||
                        (is_wasm && skia_canvaskit_enable_skottie)
  skia_enable_precompile = true
  skia_enable_sksl = true
  skia_enable_sksl_tracing = is_skia_dev_build
  skia_enable_skvm_jit_when_possible = is_skia_dev_build
  skia_enable_svg = !is_component_build
  skia_enable_tools = is_skia_dev_build
  skia_enable_gpu_debug_layers = is_skia_dev_build && is_debug
  skia_disable_vma_stl_shared_mutex = false
  skia_enable_winuwp = false
  skia_generate_workarounds = false
  skia_include_multiframe_procs = false
  skia_lex = false
  skia_tools_require_resources = false
  skia_update_fuchsia_sdk = false
  skia_use_angle = false
  skia_use_client_icu = false
  skia_use_dawn = false
  skia_use_direct3d = false
  skia_use_egl = false
  skia_use_expat = !is_wasm
  skia_use_ffmpeg = false
  skia_use_fixed_gamma_text = is_android
  skia_use_fontconfig = is_linux
  skia_use_fonthost_mac = is_mac || is_ios
  skia_use_freetype = is_android || is_fuchsia || is_linux || is_wasm
  skia_use_harfbuzz = true
  skia_use_gl = !is_fuchsia
  skia_use_icu = !is_fuchsia
  skia_use_libavif = false
  skia_use_libheif = is_skia_dev_build
  skia_use_jpegr = false
  skia_use_jpeg_gainmaps = false
  skia_use_libjpeg_turbo_decode = true
  skia_use_libjpeg_turbo_encode = true
  skia_use_libjxl_decode = false
  skia_use_libpng_decode = true
  skia_use_libpng_encode = true
  skia_use_libwebp_decode = true
  skia_use_libwebp_encode = !is_wasm
  skia_use_lua = is_skia_dev_build && !is_ios
  skia_use_metal = false
  skia_use_ndk_images = is_android && defined(ndk_api) && ndk_api >= 30
  skia_use_perfetto = is_linux || is_mac || is_android

  # Currently only supported in Android framework
  skia_android_framework_use_perfetto = false
  skia_use_piet = false
  skia_use_piex = !is_win && !is_wasm
  skia_use_sfml = false
  skia_use_webgl = is_wasm
  skia_use_webgpu = is_wasm
  skia_use_wuffs = true
  skia_use_x11 = is_linux
  skia_use_xps = true
  skia_enable_gpu = true
  skia_enable_graphite = false
  skia_enable_ganesh = true
  skia_use_zlib = true

  if (is_ios) {
    skia_ios_identity = ".*Google.*"
    skia_ios_profile = "Google Development"
  }

  skia_compare_vm_vs_rp = false

  # Temporary GN arg for flutter to control updating their unit tests synchronously with new alg.
  skia_use_legacy_layer_bounds = false
}

declare_args() {
  if (is_mac) {
    skia_gl_standard = "gl"
  } else if (is_ios) {
    skia_gl_standard = "gles"
  } else if (is_wasm && skia_enable_gpu) {
    skia_gl_standard = "webgl"
  } else {
    skia_gl_standard = ""
  }

  if (is_android) {
    skia_use_vulkan = defined(ndk_api) && ndk_api >= 24
  } else if (is_fuchsia) {
    skia_use_vulkan = true
  } else {
    skia_use_vulkan = false
  }

  skia_build_fuzzers = is_clang && is_linux && target_cpu == "x64"
  skia_use_libfuzzer_defaults = true
}

declare_args() {
  skia_enable_skunicode = skia_use_icu || skia_use_client_icu
}

if (skia_use_angle && skia_gl_standard != "gles") {
  skia_gl_standard = ""
}

declare_args() {
  skia_pdf_subset_harfbuzz = skia_use_harfbuzz
}

declare_args() {
  skia_enable_fontmgr_android = skia_use_expat && skia_use_freetype
  skia_enable_fontmgr_custom_directory =
      skia_use_freetype && !is_fuchsia && !is_wasm
  skia_enable_fontmgr_custom_embedded = skia_use_freetype && !is_fuchsia
  skia_enable_fontmgr_custom_empty = skia_use_freetype && !is_wasm
  skia_enable_fontmgr_fontconfig = skia_use_freetype && skia_use_fontconfig
  skia_enable_fontmgr_win_gdi = is_win && !skia_enable_winuwp
  skia_enable_fontmgr_FontConfigInterface =
      skia_use_freetype && skia_use_fontconfig
  skia_enable_spirv_validation = is_skia_dev_build && is_debug && !skia_use_dawn
  skia_use_dng_sdk =
      !is_fuchsia && !is_wasm && skia_use_libjpeg_turbo_decode && skia_use_zlib
  skia_use_sfntly = skia_use_icu
  skia_enable_vulkan_debug_layers = skia_enable_gpu_debug_layers
  skia_enable_direct3d_debug_layer = skia_enable_gpu_debug_layers
  skia_enable_metal_debug_info = skia_enable_gpu_debug_layers
  skia_use_vma = skia_use_vulkan
  skia_vulkan_memory_allocator_dir =
      "//third_party/externals/vulkanmemoryallocator"
  skia_build_for_debugger = false

  # icu_bidi sources
  skia_icu_bidi_third_party_dir = "//third_party/icu_bidi"
}

declare_args() {
  # skia_fontmgr_factory should define SkFontMgr::Factory()
  if (skia_enable_fontmgr_empty) {
    skia_fontmgr_factory = ":fontmgr_empty_factory"
  } else if (is_android && skia_enable_fontmgr_android) {
    skia_fontmgr_factory = ":fontmgr_android_factory"
  } else if (is_win && skia_enable_fontmgr_win) {
    skia_fontmgr_factory = ":fontmgr_win_factory"
  } else if ((is_mac || is_ios) && skia_use_fonthost_mac) {
    skia_fontmgr_factory = ":fontmgr_mac_ct_factory"
  } else if (skia_enable_fontmgr_fontconfig) {
    skia_fontmgr_factory = ":fontmgr_fontconfig_factory"
  } else if (skia_enable_fontmgr_custom_directory) {
    skia_fontmgr_factory = ":fontmgr_custom_directory_factory"
  } else if (skia_enable_fontmgr_custom_embedded) {
    skia_fontmgr_factory = ":fontmgr_custom_embedded_factory"
  } else if (skia_enable_fontmgr_custom_empty) {
    skia_fontmgr_factory = ":fontmgr_custom_empty_factory"
  } else {
    #"src/ports/SkFontMgr_FontConfigInterface_factory.cpp" #WontFix
    #"src/ports/SkFontMgr_win_gdi_factory.cpp" # WontFix
    skia_fontmgr_factory = ":fontmgr_empty_factory"
  }
}

# Our tools require static linking (they use non-exported symbols), and the GPU backend.
skia_enable_tools = skia_enable_tools && !is_component_build && skia_enable_gpu

# The GPU build requires SkSL
skia_enable_sksl = skia_enable_sksl || skia_enable_gpu

if (skia_enable_optimize_size) {
  assert(
      !is_debug,
      "Must set is_debug to false for skia_enable_optimize_size to do anything. If you want to build with debug mode and the correct define, add extra_cflags=['-DSK_ENABLE_OPTIMIZE_SIZE'] to your GN args.")
}

# Current Perfetto integrations are mutually exclusive
assert(!skia_use_perfetto || !skia_android_framework_use_perfetto)

# Skia's targets may be built inside other gn build systems.
# Skia builds other project's build targets inside its build.
# This is easier if the built-in target types remain generic.
# Place Skia target specific configs in skia_target_default_configs.
# These will be applied by the 'skia_*' templates.
# In the Skia build these configs apply many warnings as errors.
# Other projects may optionally set these configs as they see fit.
template("skia_target") {
  target(invoker._skia_target_type, target_name) {
    # set_defaults(invoker._skia_target_type) might not exist or set configs
    if (!defined(configs)) {
      configs = []
    }

    # Explicit configs instead of set_defaults("skia_target")
    # Allows template("skia_*") below to avoid the configs dance.
    if (defined(skia_target_default_configs)) {
      configs += skia_target_default_configs
    }

    # "*" clobbers the current scope; append to existing configs
    forward_variables_from(invoker, "*", [ "configs" ])
    if (defined(invoker.configs)) {
      configs += invoker.configs
    }
  }
}

template("skia_executable") {
  skia_target(target_name) {
    assert(!defined(configs), "No set_defaults(skia_target)")
    _skia_target_type = "executable"
    forward_variables_from(invoker, "*")
  }
}
template("skia_source_set") {
  skia_target(target_name) {
    assert(!defined(configs), "No set_defaults(skia_target)")
    _skia_target_type = "source_set"
    forward_variables_from(invoker, "*")
  }
}
template("skia_static_library") {
  skia_target(target_name) {
    assert(!defined(configs), "No set_defaults(skia_target)")
    _skia_target_type = "static_library"
    forward_variables_from(invoker, "*")
  }
}
template("skia_shared_library") {
  skia_target(target_name) {
    assert(!defined(configs), "No set_defaults(skia_target)")
    _skia_target_type = "shared_library"
    forward_variables_from(invoker, "*")
  }
}
template("skia_component") {
  skia_target(target_name) {
    assert(!defined(configs), "No set_defaults(skia_target)")
    _skia_target_type = "component"
    forward_variables_from(invoker, "*")
  }
}
