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

skia_support_gpu = !is_ios
skia_support_pdf = !is_ios && printing_mode != 0

# 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/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/lazy_pixel_ref.cc",
    "ext/lazy_pixel_ref.h",
    "ext/SkThread_chrome.cc",
    "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_trace_shim.h",
    "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",
    "ext/vector_platform_device_skia.cc",
    "ext/vector_platform_device_skia.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_skia_pdf.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/include/utils/SkWGL.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",
    ]
  }

  # Fixup Chrome sources.
  if (is_posix) {
    sources -= [ "ext/SkThread_chrome.cc" ]
  }
  if (is_ios) {
    sources -= [ "ext/vector_platform_device_skia.cc" ]
  }
  if (is_win) {
    sources -= [ "ext/SkThread_chrome.cc" ]
  }
  if (is_android && printing_mode == 0) {
    sources -= [
      "ext/skia_utils_base.cc",
      "ext/vector_platform_device_skia.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",
      "//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" ]
  }

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