# 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 utils 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" ])

gypi_skia_opts =
    exec_script("//build/gypi_to_gn.py",
                [
                  rebase_path("//third_party/skia/gyp/opts.gypi"),
                  "--replace=<(skia_include_path)=//third_party/skia/include",
                  "--replace=<(skia_src_path)=//third_party/skia/src",
                ],
                "scope",
                [ "//third_party/skia/gyp/opts.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",
  ]

  # 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/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 = gypi_skia_opts.sse2_sources + gypi_skia_opts.ssse3_sources +
              gypi_skia_opts.sse41_sources +
              [
                # Chrome-specific.
                "ext/convolver_SSE2.cc",
              ]

    if (is_linux || is_mac) {
      cflags += [ "-msse4.1" ]
    }
  } else if (cpu_arch == "arm") {
    # 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) {
      sources = gypi_skia_opts.armv7_sources
      if (arm_use_neon || arm_optionally_use_neon) {
        sources += gypi_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 = gypi_skia_opts.none_sourcees
    }
  } else if (cpu_arch == "mipsel") {
    cflags += [ "-fomit-frame-pointer" ]
    sources = gypi_skia_opts.none_sources
  } 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",
  ]

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