# Copyright (c) 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config/compiler/compiler.gni")
import("//build/config/features.gni")
import("//build/config/freetype/freetype.gni")
import("//build/config/sanitizers/sanitizers.gni")
import("//gpu/vulkan/features.gni")
import("//printing/buildflags/buildflags.gni")
import("//testing/test.gni")
import("//third_party/skia/gn/shared_sources.gni")
import("//third_party/skia/third_party/skcms/skcms.gni")

if (current_cpu == "arm") {
  import("//build/config/arm.gni")
}
if (current_cpu == "mipsel" || current_cpu == "mips64el") {
  import("//build/config/mips.gni")
}

skia_support_gpu = !is_ios
skia_support_pdf = !is_ios && enable_basic_printing
skia_support_skottie = true

declare_args() {
  skia_whitelist_serialized_typefaces = false
}

# External-facing config for dependent code.
config("skia_config") {
  include_dirs = [
    "config",
    "ext",
    "//third_party/skia/include/c",
    "//third_party/skia/include/config",
    "//third_party/skia/include/core",
    "//third_party/skia/include/docs",
    "//third_party/skia/include/effects",
    "//third_party/skia/include/encode",
    "//third_party/skia/include/gpu",
    "//third_party/skia/include/pathops",
    "//third_party/skia/include/ports",
    "//third_party/skia/include/utils",
  ]
  if (enable_vulkan) {
    include_dirs += [
      "//third_party/vulkan/include",
      "//third_party/skia/third_party/vulkanmemoryallocator",
    ]
    configs = [ "//third_party/vulkan:vulkan_config" ]
  }

  defines = skia_for_chromium_defines
  defines += [
    "SK_HAS_PNG_LIBRARY",
    "SK_HAS_WEBP_LIBRARY",
  ]

  if (!is_ios) {
    include_dirs += [ "//third_party/skia/include/codec" ]
    defines += [ "SK_HAS_JPEG_LIBRARY" ]
  }
  if (enable_vulkan) {
    defines += [
      "SK_VULKAN_HEADER=\"../../skia/config/SkVulkanConfig.h\"",
      "SK_VULKAN=1",
    ]
  }

  if (is_component_build) {
    defines += [
      "SKIA_DLL",
      "GR_GL_IGNORE_ES3_MSAA=0",
    ]
    if (is_win) {
      defines += [ "SKCMS_API=__declspec(dllexport)" ]
    } else {
      defines += [ "SKCMS_API=__attribute__((visibility(\"default\")))" ]
    }
  }

  if (skia_support_gpu) {
    include_dirs += [
      "//third_party/skia/src/gpu",
      "//third_party/skia/src/sksl",
    ]
    workaround_header = "gpu/config/gpu_driver_bug_workaround_autogen.h"
    defines += [
      "SK_SUPPORT_GPU=1",
      "SK_GPU_WORKAROUNDS_HEADER=\"$workaround_header\"",
    ]
  } else {
    defines += [ "SK_SUPPORT_GPU=0" ]
  }

  if (is_android) {
    defines += [
      "SK_BUILD_FOR_ANDROID",
      "USE_CHROMIUM_SKIA",
    ]
  }

  if (is_mac) {
    defines += [ "SK_BUILD_FOR_MAC" ]
  }

  if (is_win) {
    defines += [ "GR_GL_FUNCTION_TYPE=__stdcall" ]
  }

  if (skia_whitelist_serialized_typefaces) {
    defines += [ "SK_WHITELIST_SERIALIZED_TYPEFACES" ]
  }

  if (skia_support_skottie) {
    include_dirs += [ "//third_party/skia/modules/skottie/include" ]
  }
}

# Internal-facing config for Skia library code.
config("skia_library_config") {
  defines = []

  # These include directories are only included for Skia code and are not
  # exported to dependents.
  include_dirs = [
    "//third_party/skia/include/codec",
    "//third_party/skia/include/private",
    "//third_party/skia/include/client/android",
    "//third_party/skia/src/codec",
    "//third_party/skia/src/core",
    "//third_party/skia/src/image",
    "//third_party/skia/src/images",
    "//third_party/skia/src/opts",
    "//third_party/skia/src/pdf",
    "//third_party/skia/src/ports",
    "//third_party/skia/src/shaders",
    "//third_party/skia/src/shaders/gradients",
    "//third_party/skia/src/sfnt",
    "//third_party/skia/src/utils",
    "//third_party/skia/src/lazy",
    "//third_party/skia/third_party/gif",
  ]

  if (is_mac || is_ios) {
    include_dirs += [ "//third_party/skia/include/utils/mac" ]
  }
  if (is_mac) {
    include_dirs += [ "//third_party/skia/include/utils/ios" ]
  }

  # TODO: remove after Skia shader relocation (https://skia-review.googlesource.com/c/17927)
  include_dirs += [ "//third_party/skia/src/effects/gradients" ]

  if (!is_ios && !use_system_freetype) {
    defines += [ "SK_FREETYPE_MINIMUM_RUNTIME_VERSION=(((FREETYPE_MAJOR) * 0x01000000) | ((FREETYPE_MINOR) * 0x00010000) | ((FREETYPE_PATCH) * 0x00000100))" ]
  }

  if (is_component_build) {
    defines += [ "SKIA_IMPLEMENTATION=1" ]
  }

  if (current_cpu == "arm") {
    if (arm_use_neon) {
      defines += [ "SK_ARM_HAS_NEON" ]
    } else if (arm_optionally_use_neon) {
      defines += [ "SK_ARM_HAS_OPTIONAL_NEON" ]
    }
  }

  # Settings for text blitting, chosen to approximate the system browser.
  if (is_linux) {
    defines += [
      "SK_GAMMA_EXPONENT=1.2",
      "SK_GAMMA_CONTRAST=0.2",
    ]
  } else if (is_android) {
    defines += [
      "SK_GAMMA_APPLY_TO_A8",
      "SK_GAMMA_EXPONENT=1.4",
      "SK_GAMMA_CONTRAST=0.0",
    ]
  } else if (is_win) {
    defines += [
      "SK_GAMMA_SRGB",
      "SK_GAMMA_CONTRAST=0.5",
    ]
  } else if (is_mac) {
    defines += [
      "SK_GAMMA_SRGB",
      "SK_GAMMA_CONTRAST=0.0",
    ]
  }

  if (is_android) {
    defines += [
      # Android devices are typically more memory constrained, so default to a
      # smaller glyph cache (it may be overriden at runtime when the renderer
      # starts up, depending on the actual device memory).
      "SK_DEFAULT_FONT_CACHE_LIMIT=1048576",  # 1024 * 1024
    ]
  } else {
    defines += [ "SK_DEFAULT_FONT_CACHE_LIMIT=20971520" ]  # 20 * 1024 * 1024
  }

  if (is_win) {
    include_dirs += [
      "//third_party/skia/include/utils/win",
      "//third_party/skia/src/utils/win",
    ]

    defines += [
      # On windows, GDI handles are a scarse system-wide resource so we have to
      # keep the glyph cache, which holds up to 4 GDI handles per entry, to a
      # fairly small size. http://crbug.com/314387
      "SK_DEFAULT_FONT_CACHE_COUNT_LIMIT=256",
    ]

    cflags = [
      "/wd4244",  # conversion from 'type1( __int64)' to 'type2 (unsigned int)'
      "/wd4267",  # conversion from 'size_t' (64 bit) to 'type'(32 bit).
      "/wd4341",  # signed value is out of range for enum constant.
      "/wd4345",  # Object is default-initialized if initialization is omitted.
      "/wd4390",  # ';'empty statement found in looping;is it what was intended?
      "/wd4554",  # 'operator' : check operator precedence for possible error
      "/wd4748",  # compiler will disable optimizations if a function has inline
                  # assembly code contains flow control(jmp or jcc) statements.

      "/wd4800",  # forcing value to bool 'true/false'(assigning int to bool).
    ]
  }

  if (skia_support_skottie) {
    include_dirs += [ "//third_party/skia/modules/sksg/include" ]
  }
}

source_set("skcms") {
  cflags = []
  if (!is_win || is_clang) {
    cflags += [
      "-w",
      "-std=c11",
    ]
  }

  # LLVM automatically sets the equivalent of GCC's -mfp16-format=ieee on ARM
  # builds by default, while GCC itself does not. We need it to enable support
  # for half-precision floating point data types used by SKCMS on ARM.
  if (is_linux && !is_clang && current_cpu == "arm") {
    cflags += [ "-mfp16-format=ieee" ]
  }

  public = [
    "//third_party/skia/third_party/skcms/skcms.h",
  ]
  sources =
      rebase_path(skcms_sources, ".", "//third_party/skia/third_party/skcms")
}

component("skia") {
  deps = []
  sources = [
    # Chrome sources.
    "config/SkUserConfig.h",
    "config/sk_ref_cnt_ext_debug.h",
    "config/sk_ref_cnt_ext_release.h",
    "ext/SkDiscardableMemory_chrome.cc",
    "ext/SkDiscardableMemory_chrome.h",
    "ext/SkMemory_new_handler.cpp",
    "ext/benchmarking_canvas.cc",
    "ext/benchmarking_canvas.h",
    "ext/convolver.cc",
    "ext/convolver.h",
    "ext/event_tracer_impl.cc",
    "ext/event_tracer_impl.h",
    "ext/fontmgr_default_android.cc",
    "ext/fontmgr_default_android.h",
    "ext/fontmgr_default_linux.cc",
    "ext/fontmgr_default_linux.h",
    "ext/fontmgr_default_win.cc",
    "ext/fontmgr_default_win.h",
    "ext/google_logging.cc",
    "ext/image_operations.cc",
    "ext/image_operations.h",
    "ext/opacity_filter_canvas.cc",
    "ext/opacity_filter_canvas.h",
    "ext/recursive_gaussian_convolution.cc",
    "ext/recursive_gaussian_convolution.h",
    "ext/skia_histogram.cc",
    "ext/skia_histogram.h",
    "ext/skia_memory_dump_provider.cc",
    "ext/skia_memory_dump_provider.h",
    "ext/skia_trace_memory_dump_impl.cc",
    "ext/skia_trace_memory_dump_impl.h",
    "ext/skia_utils_base.cc",
    "ext/skia_utils_base.h",
    "ext/skia_utils_ios.h",
    "ext/skia_utils_ios.mm",
    "ext/skia_utils_mac.h",
    "ext/skia_utils_mac.mm",
    "ext/skia_utils_win.cc",
    "ext/skia_utils_win.h",
  ]

  if (!is_ios) {
    sources += [
      "ext/platform_canvas.cc",
      "ext/platform_canvas.h",
    ]
  }
  if (!is_ios && (current_cpu == "x86" || current_cpu == "x64")) {
    sources += [
      "ext/convolver_SSE2.cc",
      "ext/convolver_SSE2.h",
    ]
  } else if (current_cpu == "mipsel" && mips_dsp_rev >= 2) {
    sources += [
      "ext/convolver_mips_dspr2.cc",
      "ext/convolver_mips_dspr2.h",
    ]
  } else if (current_cpu == "arm" || current_cpu == "arm64") {
    if (arm_use_neon) {
      sources += [
        "ext/convolver_neon.cc",
        "ext/convolver_neon.h",
      ]
    }
  }

  if (is_win) {
    sources += [
      # Select the right BitmapPlatformDevice.
      "ext/raster_handle_allocator_win.cc",
    ]
  }

  # The imported Skia gni source paths are made absolute by gn.
  defines = skia_core_defines
  sources += skia_utils_sources
  sources += skia_xps_sources
  sources += [
    "//third_party/skia/src/fonts/SkFontMgr_indirect.cpp",
    "//third_party/skia/src/fonts/SkRemotableFontMgr.cpp",
    "//third_party/skia/src/images/SkImageEncoder.cpp",
    "//third_party/skia/src/images/SkPngEncoder.cpp",
    "//third_party/skia/src/images/SkWebpEncoder.cpp",
    "//third_party/skia/src/ports/SkGlobalInitialization_default.cpp",
    "//third_party/skia/src/ports/SkImageGenerator_none.cpp",
    "//third_party/skia/src/ports/SkOSFile_stdio.cpp",
    "//third_party/skia/src/sfnt/SkOTTable_name.cpp",
    "//third_party/skia/src/sfnt/SkOTUtils.cpp",
  ]
  if (!is_ios) {
    sources -= [ "//third_party/skia/src/ports/SkImageGenerator_none.cpp" ]
    sources += [
      "//third_party/skia/src/codec/SkBmpBaseCodec.cpp",
      "//third_party/skia/src/codec/SkBmpCodec.cpp",
      "//third_party/skia/src/codec/SkBmpMaskCodec.cpp",
      "//third_party/skia/src/codec/SkBmpRLECodec.cpp",
      "//third_party/skia/src/codec/SkBmpStandardCodec.cpp",
      "//third_party/skia/src/codec/SkCodec.cpp",
      "//third_party/skia/src/codec/SkCodecImageGenerator.cpp",
      "//third_party/skia/src/codec/SkColorTable.cpp",
      "//third_party/skia/src/codec/SkEncodedInfo.cpp",
      "//third_party/skia/src/codec/SkGifCodec.cpp",
      "//third_party/skia/src/codec/SkIcoCodec.cpp",
      "//third_party/skia/src/codec/SkJpegCodec.cpp",
      "//third_party/skia/src/codec/SkJpegDecoderMgr.cpp",
      "//third_party/skia/src/codec/SkJpegUtility.cpp",
      "//third_party/skia/src/codec/SkMaskSwizzler.cpp",
      "//third_party/skia/src/codec/SkMasks.cpp",
      "//third_party/skia/src/codec/SkPngCodec.cpp",
      "//third_party/skia/src/codec/SkSampler.cpp",
      "//third_party/skia/src/codec/SkStreamBuffer.cpp",
      "//third_party/skia/src/codec/SkSwizzler.cpp",
      "//third_party/skia/src/codec/SkWbmpCodec.cpp",
      "//third_party/skia/src/codec/SkWebpCodec.cpp",
      "//third_party/skia/src/images/SkJPEGWriteUtility.cpp",
      "//third_party/skia/src/images/SkJpegEncoder.cpp",
      "//third_party/skia/src/ports/SkImageGenerator_skia.cpp",
      "//third_party/skia/third_party/gif/SkGifImageReader.cpp",
    ]
  }

  if (current_cpu == "arm") {
    sources += [ "//third_party/skia/src/core/SkUtilsArm.cpp" ]
  }

  # Remove unused util sources.
  sources -= [
    "//third_party/skia/src/utils/SkCamera.cpp",
    "//third_party/skia/src/utils/SkFrontBufferedStream.cpp",
    "//third_party/skia/src/utils/SkInterpolator.cpp",
    "//third_party/skia/src/utils/SkParsePath.cpp",
  ]

  if (is_win) {
    sources -= [
      # Keeping _win.cpp
      "//third_party/skia/src/utils/SkThreadUtils_pthread.cpp",
    ]
    libs = [ "fontsub.lib" ]
  } else {
    sources -= [
      # Keeping _pthread.cpp
      "//third_party/skia/src/utils/SkThreadUtils_win.cpp",
    ]
  }

  # need separate win section to handle chromes auto gn filter
  # (build/config/BUILDCONFIG.gn)
  if (is_win) {
    sources -= [
      #windows
      "//third_party/skia/src/utils/win/SkWGL_win.cpp",
    ]
  }

  # Select Skia ports.

  # FreeType is needed everywhere (except on iOS), on Linux and Android as main
  # font backend, on Windows and Mac as fallback backend for Variations.
  if (!is_ios) {
    sources += [
      "//third_party/skia/src/ports/SkFontHost_FreeType.cpp",
      "//third_party/skia/src/ports/SkFontHost_FreeType_common.cpp",
    ]
  }

  if (is_win) {
    sources += [
      "//third_party/skia/src/ports/SkFontHost_win.cpp",
      "//third_party/skia/src/ports/SkFontMgr_win_dw.cpp",
      "//third_party/skia/src/ports/SkOSFile_win.cpp",
      "//third_party/skia/src/ports/SkRemotableFontMgr_win_dw.cpp",
      "//third_party/skia/src/ports/SkScalerContext_win_dw.cpp",
      "//third_party/skia/src/ports/SkTLS_win.cpp",
      "//third_party/skia/src/ports/SkTypeface_win_dw.cpp",
    ]
  } else {
    sources += [
      "//third_party/skia/src/ports/SkOSFile_posix.cpp",
      "//third_party/skia/src/ports/SkTLS_pthread.cpp",
    ]
  }

  if (is_mac || is_ios) {
    set_sources_assignment_filter([])
    sources += [
      "//third_party/skia/src/ports/SkFontHost_mac.cpp",
      "//third_party/skia/src/utils/mac/SkStream_mac.cpp",
    ]
    set_sources_assignment_filter(sources_assignment_filter)
  }

  if (is_linux) {
    sources += [
      "//third_party/skia/src/ports/SkFontConfigInterface.cpp",
      "//third_party/skia/src/ports/SkFontConfigInterface_direct.cpp",
      "//third_party/skia/src/ports/SkFontConfigInterface_direct_factory.cpp",
      "//third_party/skia/src/ports/SkFontMgr_FontConfigInterface.cpp",
    ]
  }

  if (is_linux || is_android || is_fuchsia) {
    sources += [
      # Retain the files for the SkFontMgr_Android on linux to emulate android
      # fonts. See content/zygote/zygote_main_linux.cc
      # Note that this requires expat.
      "//third_party/skia/src/ports/SkFontMgr_android.cpp",
      "//third_party/skia/src/ports/SkFontMgr_android_parser.cpp",
    ]
  }

  if (is_win || is_mac) {
    sources += [
      # Add the FreeType custom font manager as a fallback backend for variable fonts.
      "//third_party/skia/src/ports/SkFontMgr_custom.cpp",
      "//third_party/skia/src/ports/SkFontMgr_custom_empty.cpp",
    ]
  }

  if (is_fuchsia) {
    sources += [
      "//third_party/skia/src/ports/SkFontMgr_custom.cpp",
      "ext/fontmgr_default_fuchsia.cc",
      "ext/fontmgr_default_fuchsia.h",
      "ext/fontmgr_fuchsia.cc",
      "ext/fontmgr_fuchsia.h",
    ]
    deps += [
      "//third_party/fuchsia-sdk/sdk:fonts",
      "//third_party/icu:icuuc",
    ]
  }

  if (is_clang && !is_nacl) {
    # Skia won't compile with some of the more strict clang warnings.
    # e.g. it does:
    #  SkASSERT(!"sk_out_of_memory");
    configs -= [ "//build/config/clang:extra_warnings" ]
  }

  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [
    ":skia_config",
    ":skia_library_config",
    "//build/config/compiler:no_chromium_code",
  ]
  public_configs = [ ":skia_config" ]

  deps += [
    ":skcms",
    ":skia_opts",
    "//base",
    "//base/third_party/dynamic_annotations",
    "//third_party/libpng",
    "//third_party/libwebp",
    "//third_party/libwebp:libwebp_webp",
  ]
  public_deps = [
    ":skia_core_and_effects",
  ]

  if (!is_ios) {
    deps += [
      "//build/config/freetype",
      "//third_party:jpeg",
    ]
  }

  if (is_linux) {
    deps += [
      "//third_party/expat",
      "//third_party/fontconfig",
      "//third_party/icu:icuuc",
    ]
  }

  if (is_android) {
    deps += [
      "//third_party/android_tools:cpu_features",
      "//third_party/expat",
    ]
  }

  if (!is_debug) {
    configs -= [ "//build/config/compiler:default_optimization" ]
    configs += [ "//build/config/compiler:optimize_max" ]
  }

  if (is_mac) {
    libs = [
      "AppKit.framework",
      "CoreFoundation.framework",
      "CoreGraphics.framework",
      "CoreText.framework",
      "Foundation.framework",
    ]
  }

  if (is_ios) {
    libs = [ "ImageIO.framework" ]
    set_sources_assignment_filter([])
    sources += [ "//third_party/skia/src/utils/mac/SkCreateCGImageRef.cpp" ]
    set_sources_assignment_filter(sources_assignment_filter)
  }

  if (is_fuchsia) {
    deps += [ "//third_party/expat" ]
  }

  if (skia_support_gpu) {
    sources += skia_gpu_sources
    sources += skia_null_gpu_sources
    sources += skia_sksl_sources
    if (enable_vulkan) {
      sources += skia_vk_sources
      sources += [
        "//third_party/skia/third_party/vulkanmemoryallocator/GrVulkanMemoryAllocator.cpp",
        "//third_party/skia/third_party/vulkanmemoryallocator/GrVulkanMemoryAllocator.h",
      ]
    }
    deps += [ "//gpu/config:workaround_list" ]
  }

  if (skia_support_pdf) {
    deps += [
      "//third_party/sfntly",
      "//third_party/sfntly:sfntly_chromium",
      "//third_party/zlib",
    ]
    sources += skia_pdf_sources
  } else {
    sources += [ "//third_party/skia/src/pdf/SkDocument_PDF_None.cpp" ]
  }

  if (skia_support_skottie) {
    import("//third_party/skia/modules/skottie/skottie.gni")
    import("//third_party/skia/modules/sksg/sksg.gni")
    sources += skia_skottie_sources + skia_skottie_public + skia_sksg_sources
  }
}

# Template for things that are logically part of :skia, but need to be split out
# so custom compile flags can be applied.
#
# These are all opted out of check_includes, due to (logically) being part of
# skia.
template("skia_source_set") {
  source_set(target_name) {
    forward_variables_from(invoker, "*")

    check_includes = false

    if (!is_debug) {
      configs -= [ "//build/config/compiler:default_optimization" ]
      configs += [ "//build/config/compiler:optimize_max" ]
    }

    configs -= [ "//build/config/compiler:chromium_code" ]
    configs += [
      ":skia_config",
      ":skia_library_config",
      "//build/config/compiler:no_chromium_code",
    ]
    public_configs = [ ":skia_config" ]

    # Android, the only user of mismatched sample files (for now), gets a small
    # binary size decrease by using AFDO to optimize for size in these
    # source_sets. However, that also comes at a relatively big performance
    # cost.
    if (using_mismatched_sample_profile) {
      configs -= [ "//build/config/compiler:afdo_optimize_size" ]
    }
  }
}

# Split out for targeted removal of the afdo_optimize_size config on Android.
skia_source_set("skia_core_and_effects") {
  defines = skia_core_defines
  sources = skia_core_sources
  sources += skia_effects_sources
  sources += skia_effects_imagefilter_sources
  if (skia_support_gpu) {
    deps = [
      "//gpu/config:workaround_list",
    ]
  }

  visibility = [ ":skia" ]
}

# Bits that involve special vector-y hardware.
if (current_cpu == "arm64") {
  skia_source_set("skia_opts_crc32") {
    sources = skia_opts.crc32_sources
    cflags = [ "-march=armv8-a+crc" ]
    visibility = [ ":skia_opts" ]
  }
}
if (current_cpu == "x86" || current_cpu == "x64") {
  skia_source_set("skia_opts_sse3") {
    sources = skia_opts.ssse3_sources
    if (!is_win || is_clang) {
      cflags = [ "-mssse3" ]
    }
    if (is_win) {
      defines = [ "SK_CPU_SSE_LEVEL=31" ]
    }
    visibility = [ ":skia_opts" ]
  }
  skia_source_set("skia_opts_sse41") {
    sources = skia_opts.sse41_sources
    if (!is_win || is_clang) {
      cflags = [ "-msse4.1" ]
    }
    if (is_win) {
      defines = [ "SK_CPU_SSE_LEVEL=41" ]
    }
    visibility = [ ":skia_opts" ]
  }
  skia_source_set("skia_opts_sse42") {
    sources = skia_opts.sse42_sources
    if (!is_win || is_clang) {
      cflags = [ "-msse4.2" ]
    }
    if (is_win) {
      defines = [ "SK_CPU_SSE_LEVEL=42" ]
    }
    visibility = [ ":skia_opts" ]
  }
  skia_source_set("skia_opts_avx") {
    sources = skia_opts.avx_sources
    if (!is_win) {
      cflags = [ "-mavx" ]
    }
    if (is_win) {
      cflags = [ "/arch:AVX" ]
    }
    visibility = [ ":skia_opts" ]
  }
  skia_source_set("skia_opts_hsw") {
    sources = skia_opts.hsw_sources
    if (!is_win) {
      cflags = [
        "-mavx2",
        "-mbmi",
        "-mbmi2",
        "-mf16c",
        "-mfma",
      ]
    }
    if (is_win) {
      cflags = [ "/arch:AVX2" ]
    }
    visibility = [ ":skia_opts" ]
  }
}

skia_source_set("skia_opts") {
  cflags = []
  defines = []

  deps = [
    "//base",
  ]

  if (current_cpu == "x86" || current_cpu == "x64") {
    sources = skia_opts.sse2_sources
    deps += [
      ":skia_opts_avx",
      ":skia_opts_hsw",
      ":skia_opts_sse3",
      ":skia_opts_sse41",
      ":skia_opts_sse42",
    ]
  } else if (current_cpu == "arm") {
    # The assembly uses the frame pointer register (r7 in Thumb/r11 in
    # ARM), the compiler doesn't like that.
    if (!is_ios) {
      cflags += [ "-fomit-frame-pointer" ]
    }

    if (arm_version >= 7) {
      sources = skia_opts.armv7_sources
      if (arm_use_neon || arm_optionally_use_neon) {
        sources += skia_opts.neon_sources

        # Root build config sets -mfpu=$arm_fpu, which we expect to be neon
        # when running this.
        if (!arm_use_neon) {
          configs -= [ "//build/config/compiler:compiler_arm_fpu" ]
          cflags += [ "-mfpu=neon" ]
        }
      }
    } else {
      sources = skia_opts.none_sources
    }
  } else if (current_cpu == "arm64") {
    sources = skia_opts.arm64_sources
    deps += [ ":skia_opts_crc32" ]
  } else if (current_cpu == "mipsel") {
    cflags += [ "-fomit-frame-pointer" ]

    if (mips_dsp_rev >= 1) {
      sources = skia_opts.mips_dsp_sources
    } else {
      sources = skia_opts.none_sources
    }
  } else if (current_cpu == "mips64el") {
    cflags += [ "-fomit-frame-pointer" ]
    sources = skia_opts.none_sources
  } else if (current_cpu == "ppc64") {
    sources = skia_opts.none_sources
  } else if (current_cpu == "s390x") {
    sources = skia_opts.none_sources
  } else {
    assert(false, "Need to port cpu specific stuff from skia_library_opts.gyp")
  }

  visibility = [ ":skia" ]
}

test("skia_unittests") {
  sources = [
    "ext/convolver_unittest.cc",
    "ext/image_operations_unittest.cc",
    "ext/platform_canvas_unittest.cc",
    "ext/recursive_gaussian_convolution_unittest.cc",
    "ext/skia_memory_dump_provider_unittest.cc",
    "ext/skia_utils_ios_unittest.mm",
    "ext/skia_utils_mac_unittest.mm",
  ]

  if (!is_win) {
    sources -= [ "ext/platform_canvas_unittest.cc" ]
  }

  deps = [
    ":skia",
    "//base",
    "//base/test:test_support",
    "//mojo/core/test:run_all_unittests",
    "//testing/gtest",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]

  if (!is_ios) {
    sources += [ "public/interfaces/test/struct_traits_unittest.cc" ]
    deps += [
      # TODO: Fix this test to not depend on cc.
      "//cc:test_support",
      "//mojo/public/cpp/bindings",
      "//skia/public/interfaces:test_interfaces",
    ]
  }

  if (is_fuchsia) {
    sources += [ "ext/fontmgr_fuchsia_unittest.cc" ]
    deps += [
      "//third_party/fuchsia-sdk/sdk:fonts",
      "//third_party/test_fonts",
    ]
    data_deps = [
      "//third_party/test_fonts",
    ]
  }

  if (skia_support_skottie) {
    sources += [ "ext/skottie_unittest.cc" ]
  }
}

if (!is_ios) {
  executable("image_operations_bench") {
    sources = [
      "ext/image_operations_bench.cc",
    ]

    deps = [
      ":skia",
      "//base",
      "//build/win:default_exe_manifest",
    ]
  }

  executable("filter_fuzz_stub") {
    testonly = true
    sources = [
      "tools/filter_fuzz_stub/filter_fuzz_stub.cc",
    ]

    deps = [
      ":skia",
      "//base",
      "//base/test:test_support",
      "//build/win:default_exe_manifest",
    ]
  }
}

group("fuzzers") {
  deps = [
    "//skia/tools/fuzzers",
  ]
}
