# 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/features.gni")
import("//build/config/ui.gni")
import("//testing/test.gni")
if (cpu_arch == "arm") {
  import("//build/config/arm.gni")
}

skia_support_gpu = !is_ios
skia_support_pdf = !is_ios && (enable_basic_printing || enable_print_preview)

# The list of Skia defines that are to be set for chromium.
gypi_skia_defines =
    exec_script("//build/gypi_to_gn.py",
                [
                  rebase_path(
                      "//third_party/skia/gyp/skia_for_chromium_defines.gypi"),
                  "--replace=<(skia_include_path)=//third_party/skia/include",
                  "--replace=<(skia_src_path)=//third_party/skia/src",
                ],
                "scope",
                [ "//third_party/skia/gyp/skia_for_chromium_defines.gypi" ])

# The list of Skia core sources that are to be set for chromium.
gypi_skia_core =
    exec_script("//build/gypi_to_gn.py",
                [
                  rebase_path("//third_party/skia/gyp/core.gypi"),
                  "--replace=<(skia_include_path)=//third_party/skia/include",
                  "--replace=<(skia_src_path)=//third_party/skia/src",
                ],
                "scope",
                [ "//third_party/skia/gyp/core.gypi" ])

# The list of Skia gpu sources that are to be set for chromium.
gypi_skia_gpu =
    exec_script("//build/gypi_to_gn.py",
                [
                  rebase_path("//third_party/skia/gyp/gpu.gypi"),
                  "--replace=<(skia_include_path)=//third_party/skia/include",
                  "--replace=<(skia_src_path)=//third_party/skia/src",
                ],
                "scope",
                [ "//third_party/skia/gyp/gpu.gypi" ])

# The list of Skia pdf sources that are to be set for chromium.
gypi_skia_pdf =
    exec_script("//build/gypi_to_gn.py",
                [
                  rebase_path("//third_party/skia/gyp/pdf.gypi"),
                  "--replace=<(skia_include_path)=//third_party/skia/include",
                  "--replace=<(skia_src_path)=//third_party/skia/src",
                ],
                "scope",
                [ "//third_party/skia/gyp/pdf.gypi" ])

# The list of Skia effects that are to be set for chromium.
gypi_skia_effects =
    exec_script("//build/gypi_to_gn.py",
                [
                  rebase_path("//third_party/skia/gyp/effects.gypi"),
                  "--replace=<(skia_include_path)=//third_party/skia/include",
                  "--replace=<(skia_src_path)=//third_party/skia/src",
                ],
                "scope",
                [ "//third_party/skia/gyp/effects.gypi" ])

# The list of Skia utilss that are to be set for chromium.
gypi_skia_utils =
    exec_script("//build/gypi_to_gn.py",
                [
                  rebase_path("//third_party/skia/gyp/utils.gypi"),
                  "--replace=<(skia_include_path)=//third_party/skia/include",
                  "--replace=<(skia_src_path)=//third_party/skia/src",
                ],
                "scope",
                [ "//third_party/skia/gyp/utils.gypi" ])

# The list of Skia files is kept in skia_gn_files.gypi. Read it.
gypi_values =
    exec_script("//build/gypi_to_gn.py",
                [
                  rebase_path("skia_gn_files.gypi"),
                  "--replace=<(skia_include_path)=//third_party/skia/include",
                  "--replace=<(skia_src_path)=//third_party/skia/src",
                ],
                "scope",
                [ "skia_gn_files.gypi" ])

# 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/effects",
    "//third_party/skia/include/images",
    "//third_party/skia/include/lazy",
    "//third_party/skia/include/pathops",
    "//third_party/skia/include/pdf",
    "//third_party/skia/include/pipe",
    "//third_party/skia/include/ports",
    "//third_party/skia/include/utils",
    "//third_party/skia/src/core",
    "//third_party/skia/src/image",
    "//third_party/skia/src/opts",
    "//third_party/skia/src/pdf",
    "//third_party/skia/src/ports",
    "//third_party/skia/src/sfnt",
    "//third_party/skia/src/utils",
    "//third_party/skia/src/lazy",
  ]

  defines = gypi_skia_defines.skia_for_chromium_defines

  defines += [
    "SK_ENABLE_INST_COUNT=0",
    "GR_GL_CUSTOM_SETUP_HEADER=\"GrGLConfig_chrome.h\"",
    "SK_ENABLE_LEGACY_API_ALIASING=1",
    "SK_ATTR_DEPRECATED=SK_NOTHING_ARG1",
    "GR_GL_IGNORE_ES3_MSAA=0",
    "SK_WILL_NEVER_DRAW_PERSPECTIVE_TEXT",
    "SK_SUPPORT_LEGACY_GETTOTALCLIP",
  ]

  if (component_mode == "shared_library") {
    defines += [ "SKIA_DLL" ]
  }

  if (skia_support_gpu) {
    include_dirs += [
      "//third_party/skia/include/gpu",
      "//third_party/skia/src/gpu",
    ]
    defines += [ "SK_SUPPORT_GPU=1" ]
  } else {
    defines += [ "SK_SUPPORT_GPU=0" ]
  }

  # For POSIX platforms, prefer the Mutex implementation provided by Skia
  # since it does not generate static initializers.
  if (is_posix) {
    defines += [ "SK_USE_POSIX_THREADS" ]
  }

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

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

# Internal-facing config for Skia library code.
config("skia_library_config") {
  # These include directories are only included for Skia code and are not
  # exported to dependents. It's not clear if this is on purpose, but this
  # matches the GYP build.
  include_dirs = []
  if (is_mac || is_ios) {
    include_dirs += [ "//third_party/skia/include/utils/mac" ]
  }
  if (is_mac) {
    include_dirs += [ "//third_party/skia/include/utils/ios" ]
  }

  defines = [
    #skia_export_defines ???) TODO

    # skia uses static initializers to initialize the serialization logic
    # of its "pictures" library. This is currently not used in chrome; if
    # it ever gets used the processes that use it need to call
    # SkGraphics::Init().
    "SK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0",

    # Forcing the unoptimized path for the offset image filter in skia until
    # all filters used in Blink support the optimized path properly
    "SK_DISABLE_OFFSETIMAGEFILTER_OPTIMIZATION",
    "IGNORE_ROT_AA_RECT_OPT",
    "SK_IGNORE_BLURRED_RRECT_OPT",

    # this flag forces Skia not to use typographic metrics with GDI.
    "SK_GDI_ALWAYS_USE_TEXTMETRICS_FOR_FONT_METRICS",
    "SK_USE_DISCARDABLE_SCALEDIMAGECACHE",
  ]

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

  if (cpu_arch == "arm") {
    if (arm_use_neon) {
      defines += [ "SK_ARM_HAS_NEON" ]
    }
    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",
      "SK_HIGH_QUALITY_IS_LANCZOS",
    ]
  } 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",
      "SK_HIGH_QUALITY_IS_LANCZOS",
    ]
  } else if (is_mac) {
    defines += [
      "SK_GAMMA_SRGB",
      "SK_GAMMA_CONTRAST=0.0",
      "SK_HIGH_QUALITY_IS_LANCZOS",
    ]
  }

  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 += [ "SK_FONTHOST_USES_FONTMGR" ]

    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).
    ]
  }
}

component("skia") {
  sources = [
    # Chrome sources.
    "config/SkUserConfig.h",
    "ext/analysis_canvas.cc",
    "ext/analysis_canvas.h",
    "ext/benchmarking_canvas.cc",
    "ext/benchmarking_canvas.h",
    "ext/bitmap_platform_device.h",
    "ext/convolver.cc",
    "ext/convolver.h",
    "ext/event_tracer_impl.cc",
    "ext/event_tracer_impl.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_draw_filter.cc",
    "ext/opacity_draw_filter.h",
    "ext/pixel_ref_utils.cc",
    "ext/pixel_ref_utils.h",
    "ext/platform_canvas.cc",
    "ext/platform_canvas.h",
    "ext/platform_device.cc",
    "ext/platform_device.h",
    "ext/platform_device_linux.cc",
    "ext/platform_device_mac.cc",
    "ext/platform_device_win.cc",
    "ext/recursive_gaussian_convolution.cc",
    "ext/recursive_gaussian_convolution.h",
    "ext/refptr.h",
    "ext/SkDiscardableMemory_chrome.h",
    "ext/SkDiscardableMemory_chrome.cc",
    "ext/SkMemory_new_handler.cpp",
    "ext/skia_utils_base.cc",
    "ext/skia_utils_base.h",
    "ext/skia_utils_ios.mm",
    "ext/skia_utils_ios.h",
    "ext/skia_utils_mac.mm",
    "ext/skia_utils_mac.h",
    "ext/skia_utils_win.cc",
    "ext/skia_utils_win.h",
    "ext/vector_canvas.h",
    "ext/vector_platform_device_emf_win.cc",
    "ext/vector_platform_device_emf_win.h",
  ]

  # The skia gypi values are relative to the skia_dir, so we need to rebase.
  sources += gypi_skia_core.sources
  sources += gypi_skia_effects.sources
  sources += gypi_skia_utils.sources
  sources += gypi_values.skia_library_sources

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

  # GPU
  if (skia_support_gpu) {
    sources += gypi_skia_gpu.skgpu_sources
    sources += gypi_skia_gpu.skgpu_null_gl_sources
  }

  # Remove unused util files include in utils.gypi
  sources -= [
    "//third_party/skia/include/utils/SkBoundaryPatch.h",
    "//third_party/skia/include/utils/SkFrontBufferedStream.h",
    "//third_party/skia/include/utils/SkCamera.h",
    "//third_party/skia/include/utils/SkCanvasStateUtils.h",
    "//third_party/skia/include/utils/SkCubicInterval.h",
    "//third_party/skia/include/utils/SkCullPoints.h",
    "//third_party/skia/include/utils/SkDebugUtils.h",
    "//third_party/skia/include/utils/SkDumpCanvas.h",
    "//third_party/skia/include/utils/SkEventTracer.h",
    "//third_party/skia/include/utils/SkInterpolator.h",
    "//third_party/skia/include/utils/SkLayer.h",
    "//third_party/skia/include/utils/SkMeshUtils.h",
    "//third_party/skia/include/utils/SkNinePatch.h",
    "//third_party/skia/include/utils/SkParse.h",
    "//third_party/skia/include/utils/SkParsePaint.h",
    "//third_party/skia/include/utils/SkParsePath.h",
    "//third_party/skia/include/utils/SkRandom.h",
    "//third_party/skia/src/utils/SkBitmapHasher.cpp",
    "//third_party/skia/src/utils/SkBitmapHasher.h",
    "//third_party/skia/src/utils/SkBoundaryPatch.cpp",
    "//third_party/skia/src/utils/SkFrontBufferedStream.cpp",
    "//third_party/skia/src/utils/SkCamera.cpp",
    "//third_party/skia/src/utils/SkCanvasStack.h",
    "//third_party/skia/src/utils/SkCubicInterval.cpp",
    "//third_party/skia/src/utils/SkCullPoints.cpp",
    "//third_party/skia/src/utils/SkDumpCanvas.cpp",
    "//third_party/skia/src/utils/SkFloatUtils.h",
    "//third_party/skia/src/utils/SkGatherPixelRefsAndRects.cpp",
    "//third_party/skia/src/utils/SkGatherPixelRefsAndRects.h",
    "//third_party/skia/src/utils/SkInterpolator.cpp",
    "//third_party/skia/src/utils/SkLayer.cpp",
    "//third_party/skia/src/utils/SkMD5.cpp",
    "//third_party/skia/src/utils/SkMD5.h",
    "//third_party/skia/src/utils/SkMeshUtils.cpp",
    "//third_party/skia/src/utils/SkNinePatch.cpp",
    "//third_party/skia/src/utils/SkOSFile.cpp",
    "//third_party/skia/src/utils/SkParse.cpp",
    "//third_party/skia/src/utils/SkParseColor.cpp",
    "//third_party/skia/src/utils/SkParsePath.cpp",
    "//third_party/skia/src/utils/SkPathUtils.cpp",
    "//third_party/skia/src/utils/SkSHA1.cpp",
    "//third_party/skia/src/utils/SkSHA1.h",
    "//third_party/skia/src/utils/SkTFitsIn.h",
    "//third_party/skia/src/utils/SkTLogic.h",

    # We don't currently need to change thread affinity, so leave out this complexity for now.
    "//third_party/skia/src/utils/SkThreadUtils_pthread_mach.cpp",
    "//third_party/skia/src/utils/SkThreadUtils_pthread_linux.cpp",

    #testing
    "//third_party/skia/src/fonts/SkGScalerContext.cpp",
    "//third_party/skia/src/fonts/SkGScalerContext.h",
  ]

  if (is_win) {
    sources -= [
      # Keeping _win.cpp
      "//third_party/skia/src/utils/SkThreadUtils_pthread.cpp",
      "//third_party/skia/src/utils/SkThreadUtils_pthread_other.cpp",
    ]
  } else {
    sources -= [
      # Keeping _pthread.cpp and _pthread_other.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/include/utils/win/SkAutoCoInitialize.h",
      "//third_party/skia/include/utils/win/SkHRESULT.h",
      "//third_party/skia/include/utils/win/SkIStream.h",
      "//third_party/skia/include/utils/win/SkTScopedComPtr.h",
      "//third_party/skia/src/utils/win/SkAutoCoInitialize.cpp",
      "//third_party/skia/src/utils/win/SkIStream.cpp",
      "//third_party/skia/src/utils/win/SkWGL_win.cpp",
    ]
  }

  if (is_android && (!enable_basic_printing && !enable_print_preview)) {
    sources -= [ "ext/skia_utils_base.cc" ]
  }

  # Fixup skia library sources.
  if (is_win) {
    sources -= [
      "//third_party/skia/src/ports/SkOSFile_posix.cpp",
      "//third_party/skia/src/ports/SkTime_Unix.cpp",
      "//third_party/skia/src/ports/SkTLS_pthread.cpp",
    ]
  } else {
    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/SkScalerContext_win_dw.h",
      "//third_party/skia/src/ports/SkTLS_win.cpp",
      "//third_party/skia/src/ports/SkTypeface_win_dw.cpp",
      "//third_party/skia/src/ports/SkTypeface_win_dw.h",
    ]
  }
  if (!is_android) {
    sources -= [
      "//third_party/skia/src/ports/SkFontConfigParser_android.cpp",
      "//third_party/skia/src/ports/SkFontMgr_android.cpp",
    ]
  }
  if (!is_mac) {
    sources -= [ "//third_party/skia/src/ports/SkFontHost_mac.cpp" ]
  }

  if (!is_linux) {
    sources -= [
      "//third_party/skia/src/ports/SkFontHost_fontconfig.cpp",
      "//third_party/skia/src/fonts/SkFontMgr_fontconfig.cpp",
      "//third_party/skia/src/ports/SkFontConfigInterface_direct.cpp",
    ]
  }

  if (!is_linux && !is_android) {
    sources -= [
      "//third_party/skia/src/ports/SkFontHost_FreeType_common.cpp",
      "//third_party/skia/src/ports/SkFontHost_FreeType.cpp",
    ]
  }

  # Select the right BitmapPlatformDevice.
  if (is_win) {
    sources += [
      "ext/bitmap_platform_device_win.cc",
      "ext/bitmap_platform_device_win.h",
    ]
  } else if (is_mac) {
    sources += [
      "ext/bitmap_platform_device_mac.cc",
      "ext/bitmap_platform_device_mac.h",
    ]
  } else if (use_cairo) {
    sources += [
      "ext/bitmap_platform_device_cairo.cc",
      "ext/bitmap_platform_device_cairo.h",
    ]
  } else {
    sources += [
      "ext/bitmap_platform_device_skia.cc",
      "ext/bitmap_platform_device_skia.h",
    ]
  }

  if (is_clang) {
    # 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_library_config",
    "//build/config/compiler:no_chromium_code",
  ]
  public_configs = [ ":skia_config" ]

  deps = [
    ":skia_opts",
    "//base",
    "//base/third_party/dynamic_annotations",
    "//third_party/zlib",
  ]

  if (is_win) {
    configs -= [
      # Some files define WIN32_LEAN_AND_MEAN and we want to avoid a duplicate
      # definition warning.
      "//build/config/win:lean_and_mean",
    ]
  }

  if (is_linux) {
    configs += [
      "//build/config/linux:fontconfig",
      "//build/config/linux:freetype2",
    ]
    if (use_pango) {
      configs += [ "//build/config/linux:pangocairo" ]
    }
    deps += [ "//third_party/icu:icuuc" ]
  }

  if (is_android) {
    set_sources_assignment_filter([])
    sources += [ "ext/platform_device_linux.cc" ]
    set_sources_assignment_filter(sources_assignment_filter)
    deps += [
      "//third_party/expat",
      "//third_party/freetype",
      "//third_party/android_tools:cpu_features",
    ]
  }

  if (skia_support_pdf) {
    deps += [ "//third_party/sfntly" ]
    sources += gypi_skia_pdf.sources
  }

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

# Separated out so it can be compiled with different flags for SSE.
source_set("skia_opts") {
  cflags = []
  defines = []

  if (cpu_arch == "x86" || cpu_arch == "x64") {
    sources = [
      "//third_party/skia/src/opts/SkTextureCompression_opts_none.cpp",

      # SSE 2
      "//third_party/skia/src/opts/opts_check_x86.cpp",
      "//third_party/skia/src/opts/SkBitmapFilter_opts_SSE2.cpp",
      "//third_party/skia/src/opts/SkBitmapProcState_opts_SSE2.cpp",
      "//third_party/skia/src/opts/SkBlitRect_opts_SSE2.cpp",
      "//third_party/skia/src/opts/SkBlitRow_opts_SSE2.cpp",
      "//third_party/skia/src/opts/SkBlurImage_opts_SSE2.cpp",
      "//third_party/skia/src/opts/SkMorphology_opts_SSE2.cpp",
      "//third_party/skia/src/opts/SkUtils_opts_SSE2.cpp",
      "//third_party/skia/src/opts/SkXfermode_opts_SSE2.cpp",

      # SSSE 3
      "//third_party/skia/src/opts/SkBitmapProcState_opts_SSSE3.cpp",

      # SSE 4
      "//third_party/skia/src/opts/SkBlurImage_opts_SSE4.cpp",

      # Chrome-specific.
      "ext/convolver_SSE2.cc",

      # These are header files used by this target from the skia one above.
      "ext/convolver.h",
      "//third_party/skia/include/core/SkTypes.h",
    ]

    if (!is_win) {
      # SSE 4
      if (cpu_arch == "x86") {
        sources += [ "//third_party/skia/src/opts/SkBlitRow_opts_SSE4_asm.S" ]
      } else {  # x64
        sources +=
            [ "//third_party/skia/src/opts/SkBlitRow_opts_SSE4_x64_asm.S" ]
      }
    }

    if (is_linux || is_mac) {
      cflags += [ "-msse4.1" ]
    }
  } else if (cpu_arch == "arm") {
    sources = [
      "//third_party/skia/src/opts/SkBitmapProcState_opts_arm.cpp",
    ]

    # The assembly uses the frame pointer register (r7 in Thumb/r11 in
    # ARM), the compiler doesn't like that.
    cflags += [ "-fomit-frame-pointer" ]

    if (arm_version >= 7) {
      if (arm_use_neon || arm_optionally_use_neon) {
        sources += [
          "//third_party/skia/src/opts/SkBitmapProcState_arm_neon.cpp",
          "//third_party/skia/src/opts/SkBitmapProcState_matrixProcs_neon.cpp",
          "//third_party/skia/src/opts/SkBitmapProcState_matrix_clamp_neon.h",
          "//third_party/skia/src/opts/SkBitmapProcState_matrix_repeat_neon.h",
          "//third_party/skia/src/opts/SkBlitMask_opts_arm_neon.cpp",
          "//third_party/skia/src/opts/SkBlitRow_opts_arm_neon.cpp",
          "//third_party/skia/src/opts/SkBlurImage_opts_neon.cpp",
          "//third_party/skia/src/opts/SkMorphology_opts_neon.cpp",
          "//third_party/skia/src/opts/SkTextureCompression_opts_neon.cpp",
          "//third_party/skia/src/opts/SkXfermode_opts_arm_neon.cpp",
          "//third_party/skia/src/opts/memset16_neon.S",
          "//third_party/skia/src/opts/memset32_neon.S",
        ]

        # 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" ]
        }

        #ldflags = [
        #  "-march=armv7-a",
        #  "-Wl,--fix-cortex-a8",
        #]
      }
    }

    # Non-Neon ARM code.
    if (arm_version < 7 || !arm_use_neon) {
      sources += [ "//third_party/skia/src/opts/memset.arm.S" ]
    }

    if (arm_version < 6) {
      sources += [
        "//third_party/skia/src/opts/SkBlitMask_opts_none.cpp",
        "//third_party/skia/src/opts/SkBlitRow_opts_none.cpp",
        "//third_party/skia/src/opts/SkBlurImage_opts_none.cpp",
        "//third_party/skia/src/opts/SkMorphology_opts_none.cpp",
        "//third_party/skia/src/opts/SkTextureCompression_opts_none.cpp",
        "//third_party/skia/src/opts/SkUtils_opts_none.cpp",
        "//third_party/skia/src/opts/SkXfermode_opts_none.cpp",
      ]
    } else {
      # arm version >= 6.
      sources += [
        "//third_party/skia/src/opts/SkBlitMask_opts_arm.cpp",
        "//third_party/skia/src/opts/SkBlitRow_opts_arm.cpp",
        "//third_party/skia/src/opts/SkBlitRow_opts_arm.h",
        "//third_party/skia/src/opts/SkBlurImage_opts_arm.cpp",
        "//third_party/skia/src/opts/SkMorphology_opts_arm.cpp",
        "//third_party/skia/src/opts/SkTextureCompression_opts_arm.cpp",
        "//third_party/skia/src/opts/SkUtils_opts_arm.cpp",
        "//third_party/skia/src/opts/SkXfermode_opts_none.cpp",
      ]
    }
  } else if (cpu_arch == "mipsel") {
    cflags += [ "-fomit-frame-pointer" ]
    sources = [
      "//third_party/skia/src/opts/SkBitmapProcState_opts_none.cpp",
      "//third_party/skia/src/opts/SkBlitMask_opts_none.cpp",
      "//third_party/skia/src/opts/SkBlitRow_opts_none.cpp",
      "//third_party/skia/src/opts/SkBlurImage_opts_none.cpp",
      "//third_party/skia/src/opts/SkMorphology_opts_none.cpp",
      "//third_party/skia/src/opts/SkTextureCompression_opts_none.cpp",
      "//third_party/skia/src/opts/SkUtils_opts_none.cpp",
      "//third_party/skia/src/opts/SkXfermode_opts_none.cpp",
    ]
  } else {
    assert(false, "Need to port cpu specific stuff from skia_library_opts.gyp")
  }

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

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

  deps = [
    "//base",
  ]

  visibility = [ ":skia" ]
}

test("skia_unittests") {
  sources = [
    "ext/analysis_canvas_unittest.cc",
    "ext/bitmap_platform_device_mac_unittest.cc",
    "ext/convolver_unittest.cc",
    "ext/image_operations_unittest.cc",
    "ext/pixel_ref_utils_unittest.cc",
    "ext/platform_canvas_unittest.cc",
    "ext/recursive_gaussian_convolution_unittest.cc",
    "ext/refptr_unittest.cc",
    "ext/skia_utils_ios_unittest.mm",
    "ext/skia_utils_mac_unittest.mm",
    "ext/vector_canvas_unittest.cc",
  ]

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

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

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