|  | # 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 (current_cpu == "arm" || current_cpu == "arm64") { | 
|  | import("//build/config/arm.gni") | 
|  | } | 
|  | if (current_cpu == "mipsel" || current_cpu == "mips64el") { | 
|  | import("//build/config/mips.gni") | 
|  | } | 
|  |  | 
|  | # 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 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", | 
|  | ] | 
|  |  | 
|  | defines = gypi_skia_defines.skia_for_chromium_defines | 
|  |  | 
|  | defines += [ "SK_SUPPORT_LEGACY_SHADERBITMAPTYPE" ] | 
|  |  | 
|  | if (component_mode == "shared_library") { | 
|  | defines += [ | 
|  | "SKIA_DLL", | 
|  | "GR_GL_IGNORE_ES3_MSAA=0", | 
|  | ] | 
|  | } | 
|  |  | 
|  | include_dirs += [ | 
|  | "//third_party/skia/include/gpu", | 
|  | "//third_party/skia/src/gpu", | 
|  | ] | 
|  | defines += [ "SK_SUPPORT_GPU=1" ] | 
|  |  | 
|  | if (is_android) { | 
|  | defines += [ | 
|  | "SK_BUILD_FOR_ANDROID", | 
|  | "USE_CHROMIUM_SKIA", | 
|  | ] | 
|  | } | 
|  |  | 
|  | if (is_mac) { | 
|  | defines += [ "SK_BUILD_FOR_MAC" ] | 
|  | } | 
|  |  | 
|  | if (is_ios) { | 
|  | defines += [ "SK_BUILD_FOR_IOS" ] | 
|  | } | 
|  | } | 
|  |  | 
|  | # 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 = [ | 
|  | "//third_party/skia/include/private", | 
|  | "//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", | 
|  | ] | 
|  | 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 = [] | 
|  |  | 
|  | if (component_mode == "shared_library") { | 
|  | defines += [ "SKIA_IMPLEMENTATION=1" ] | 
|  | } | 
|  |  | 
|  | if (current_cpu == "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 += [ | 
|  | # 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 (is_ios) { | 
|  | cflags = [ | 
|  | # Skia uses routines deprecated in iOS 7 and above | 
|  | "-Wno-deprecated-declarations", | 
|  | ] | 
|  |  | 
|  | libs = [ "ImageIO.framework" ] | 
|  | } | 
|  | } | 
|  |  | 
|  | component("skia") { | 
|  | sources = [ | 
|  | # Chrome sources. | 
|  | "config/SkUserConfig.h", | 
|  | "ext/SkDiscardableMemory_chrome.cc", | 
|  | "ext/SkDiscardableMemory_chrome.h", | 
|  | "ext/SkMemory_new_handler.cpp", | 
|  | "ext/analysis_canvas.cc", | 
|  | "ext/analysis_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/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", | 
|  | ] | 
|  |  | 
|  | # 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 | 
|  |  | 
|  | # This and skia_opts are really the same conceptual target so share headers. | 
|  | allow_circular_includes_from = [ ":skia_opts" ] | 
|  |  | 
|  | if (current_cpu == "arm") { | 
|  | sources += [ | 
|  | "//third_party/skia/src/core/SkUtilsArm.cpp", | 
|  | "//third_party/skia/src/core/SkUtilsArm.h", | 
|  | ] | 
|  | } | 
|  |  | 
|  | # 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/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/SkFrontBufferedStream.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/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/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/SkFrontBufferedStream.cpp", | 
|  | "//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/SkParsePath.cpp", | 
|  | "//third_party/skia/src/utils/SkSHA1.cpp", | 
|  | "//third_party/skia/src/utils/SkSHA1.h", | 
|  | "//third_party/skia/src/utils/SkTFitsIn.h", | 
|  |  | 
|  | #testing | 
|  | "//third_party/skia/src/fonts/SkGScalerContext.cpp", | 
|  | "//third_party/skia/src/fonts/SkGScalerContext.h", | 
|  | ] | 
|  |  | 
|  | if (is_ios || is_mac || is_android) { | 
|  | sources -= [ | 
|  | "//third_party/skia/src/gpu/gl/GrGLCreateNativeInterface_none.cpp" | 
|  | ] | 
|  |  | 
|  | set_sources_assignment_filter([]) | 
|  |  | 
|  | if (is_ios) { | 
|  | sources += [ | 
|  | "//third_party/skia/src/gpu/gl/iOS/GrGLCreateNativeInterface_iOS.cpp" | 
|  | ] | 
|  | } else if (is_mac) { | 
|  | sources += [ | 
|  | "//third_party/skia/src/gpu/gl/mac/GrGLCreateNativeInterface_mac.cpp" | 
|  | ] | 
|  | } else if (is_android) { | 
|  | sources += [ | 
|  | "//third_party/skia/src/gpu/gl/android/GrGLCreateNativeInterface_android.cpp" | 
|  | ] | 
|  | } | 
|  |  | 
|  | set_sources_assignment_filter(sources_assignment_filter) | 
|  | } | 
|  |  | 
|  | 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_ios) { | 
|  | set_sources_assignment_filter([]) | 
|  |  | 
|  | sources += [ | 
|  | "//third_party/skia/src/utils/mac/SkCreateCGImageRef.cpp", | 
|  | "//third_party/skia/src/utils/mac/SkStream_mac.cpp", | 
|  | ] | 
|  |  | 
|  | set_sources_assignment_filter(sources_assignment_filter) | 
|  | } | 
|  |  | 
|  | 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/SkTLS_pthread.cpp", | 
|  | "//third_party/skia/src/ports/SkTime_Unix.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/SkFontMgr_android.cpp", | 
|  | "//third_party/skia/src/ports/SkFontMgr_android_factory.cpp", | 
|  | "//third_party/skia/src/ports/SkFontMgr_android_parser.cpp", | 
|  | ] | 
|  | } | 
|  | if (!is_mac && !is_ios) { | 
|  | sources -= [ "//third_party/skia/src/ports/SkFontHost_mac.cpp" ] | 
|  | } | 
|  |  | 
|  | if (!is_linux) { | 
|  | sources -= [ | 
|  | "//third_party/skia/src/fonts/SkFontMgr_fontconfig.cpp", | 
|  | "//third_party/skia/src/ports/SkFontConfigInterface_direct.cpp", | 
|  | "//third_party/skia/src/ports/SkFontHost_fontconfig.cpp", | 
|  | ] | 
|  | } | 
|  |  | 
|  | if (!is_linux && !is_android) { | 
|  | sources -= [ | 
|  | "//third_party/skia/src/ports/SkFontHost_FreeType.cpp", | 
|  | "//third_party/skia/src/ports/SkFontHost_FreeType_common.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 || is_ios) { | 
|  | 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_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-android:freetype", | 
|  | "//third_party/android_tools:cpu_features", | 
|  | ] | 
|  | } | 
|  |  | 
|  | 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 (current_cpu == "x86" || current_cpu == "x64") { | 
|  | sources = gypi_skia_opts.sse2_sources + gypi_skia_opts.ssse3_sources + | 
|  | gypi_skia_opts.sse41_sources + | 
|  | [ | 
|  | # Chrome-specific. | 
|  | "ext/convolver_SSE2.cc", | 
|  | "ext/convolver_SSE2.h", | 
|  | ] | 
|  |  | 
|  | if (is_linux || is_mac) { | 
|  | cflags += [ "-msse4.1" ] | 
|  | } | 
|  | } else if (current_cpu == "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 && (arm_use_neon || arm_optionally_use_neon)) { | 
|  | 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_sources | 
|  | } | 
|  | } else if (current_cpu == "arm64") { | 
|  | # TODO(1841): NEON sources are not currently used on arm64. | 
|  | sources = gypi_skia_opts.none_sources | 
|  | } else if (current_cpu == "mipsel") { | 
|  | cflags += [ "-fomit-frame-pointer" ] | 
|  |  | 
|  | if (mips_dsp_rev >= 1) { | 
|  | sources = gypi_skia_opts.mips_dsp_sources | 
|  | if (mips_dsp_rev >= 2) { | 
|  | sources += [ | 
|  | # Chrome-specific. | 
|  | "ext/convolver_mips_dspr2.cc", | 
|  | "ext/convolver_mips_dspr2.h", | 
|  | ] | 
|  | } | 
|  | } else { | 
|  | 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", | 
|  | ] | 
|  | } | 
|  |  | 
|  | if (is_linux) { | 
|  | # TODO(GYP): Figure out which of these work and are needed on other platforms. | 
|  | executable("image_operations_bench") { | 
|  | sources = [ | 
|  | "ext/image_operations_bench.cc", | 
|  | ] | 
|  |  | 
|  | deps = [ | 
|  | ":skia", | 
|  | "//base", | 
|  | ] | 
|  | } | 
|  |  | 
|  | executable("filter_fuzz_stub") { | 
|  | sources = [ | 
|  | "tools/filter_fuzz_stub/filter_fuzz_stub.cc", | 
|  | ] | 
|  |  | 
|  | deps = [ | 
|  | ":skia", | 
|  | "//base", | 
|  | ] | 
|  | } | 
|  | } |