Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Unified Diff: skia/BUILD.gn

Issue 214883005: Add Skia to the GN build. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: sync Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: skia/BUILD.gn
diff --git a/skia/BUILD.gn b/skia/BUILD.gn
new file mode 100644
index 0000000000000000000000000000000000000000..7dc5f22bd4cb0aadcfbe9ab81ea0842aaa09fdb6
--- /dev/null
+++ b/skia/BUILD.gn
@@ -0,0 +1,368 @@
+# 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")
+if (cpu_arch == "arm") {
+ import("//build/config/arm.gni")
+}
+
+skia_support_gpu = !is_ios
+skia_support_pdf = !is_ios && enable_printing != 0
+
+# 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") ],
+ "scope",
+ [ "skia_gn_files.gypi" ])
+
+# This files in the skia gypi file are relative to this directory.
+skia_dir = "//third_party/skia"
+
+# Same as skia_dir but relative to the current directory. This is what all
+# files will be prefixed to once we rebase them to be relative to our file. If
+# you need to filter out a file, prefix it with $skia_rel_dir.
+skia_rel_dir = rebase_path(".", ".", skia_dir)
+
+# External-facing config for dependent code.
+config("skia_config") {
+ include_dirs = [
+ "config",
+ "ext",
+ "//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_values.skia_feature_defines
+
+ 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",
+ ]
+ }
+}
+
+config("skia_dependent_config") {
+}
+
+# Internal-facing config for Skia library code.
+config("skia_library_config") {
+ 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",
+
+ # Disable this check because it is too strict for some Chromium-specific
+ # subclasses of SkPixelRef. See bug: crbug.com/171776.
+ "SK_DISABLE_PIXELREF_LOCKCOUNT_BALANCE_CHECK",
+
+ "IGNORE_ROT_AA_RECT_OPT",
+
+ # Forces Skia not to use typographic metrics with GDI.
+ "SK_GDI_ALWAYS_USE_TEXTMETRICS_FOR_FONT_METRICS",
+ ]
+
+ # Settings for text blitting, chosen to approximate the system browser.
+ if (is_linux) {
+ defines += [
+ "SK_GAMMA_EXPONENT=1.2",
+ "SK_GAMMA_CONTRAST=0.2",
+ ]
+ } else if (is_android) {
+ defines += [
+ "SK_GAMMA_APPLY_TO_A8",
+ "SK_GAMMA_EXPONENT=1.4",
+ "SK_GAMMA_CONTRAST=0.0",
+ ]
+ } else if (is_win) {
+ defines += [
+ "SK_GAMMA_SRGB",
+ "SK_GAMMA_CONTRAST=0.5",
+ ]
+ } else if (is_mac) {
+ defines += [
+ "SK_GAMMA_SRGB",
+ "SK_GAMMA_CONTRAST=0.0",
+ ]
+ }
+
+ if (is_android) {
+ defines += [
+ # Android devices are typically more memory constrained, so default to a
+ # smaller glyph cache (it may be overriden at runtime when the renderer
+ # starts up, depending on the actual device memory).
+ "SK_DEFAULT_FONT_CACHE_LIMIT=1048576" # 1024 * 1024
+ ]
+ } else {
+ defines += [ "SK_DEFAULT_FONT_CACHE_LIMIT=20971520" ] # 20 * 1024 * 1024
+ }
+
+ if (is_win) {
+ include_dirs = [
+ "//third_party/skia/include/utils/win",
+ "//third_party/skia/src/utils/win",
+ ]
+
+ defines += [ "SK_FONTHOST_USES_FONTMGR" ]
+
+ cflags = [
+ # TODO(brettw) comment what these are.
+ "/wd4244",
+ "/wd4267",
+ "/wd4341",
+ "/wd4345",
+ "/wd4390",
+ "/wd4554",
+ "/wd4748",
+ "/wd4800",
+ ]
+ }
+}
+
+component("skia") {
+ sources = [
+ # Chrome sources.
+ "ext/analysis_canvas.cc",
+ "ext/analysis_canvas.h",
+ "ext/benchmarking_canvas.cc",
+ "ext/benchmarking_canvas.h",
+ "ext/bitmap_platform_device.h",
+ "ext/bitmap_platform_device_cairo.cc",
+ "ext/bitmap_platform_device_cairo.h",
+ "ext/bitmap_platform_device_mac.cc",
+ "ext/bitmap_platform_device_mac.h",
+ #"ext/bitmap_platform_device_skia.cc",
+ #"ext/bitmap_platform_device_skia.h",
+ "ext/bitmap_platform_device_win.cc",
+ "ext/bitmap_platform_device_win.h",
+ "ext/convolver.cc",
+ "ext/convolver.h",
+ "ext/event_tracer_impl.cc",
+ "ext/event_tracer_impl.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/paint_simplifier.cc",
+ "ext/paint_simplifier.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 += rebase_path(gypi_values.skia_core_sources, ".", skia_dir)
+ sources += rebase_path(gypi_values.skia_effects_sources, ".", skia_dir)
+ sources += rebase_path(gypi_values.skia_pdf_sources, ".", skia_dir)
+ sources += rebase_path(gypi_values.skia_library_sources, ".", skia_dir)
+
+ # GPU
+ if (skia_support_gpu) {
+ sources += rebase_path(gypi_values.skia_gpu_sources, ".", skia_dir)
+ }
+
+ # 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 && enable_printing == 0) {
+ sources -= [
+ "ext/skia_utils_base.cc",
+ "ext/vector_platform_device_skia.cc"
+ ]
+ }
+
+ # Fixup skia library sources.
+ if (is_win) {
+ sources -= [
+ "$skia_rel_dir/src/ports/SkOSFile_posix.cpp",
+ "$skia_rel_dir/src/ports/SkTime_Unix.cpp",
+ "$skia_rel_dir/src/ports/SkTLS_pthread.cpp",
+ "$skia_rel_dir/src/ports/SkFontConfigInterface_direct.cpp",
+ "$skia_rel_dir/src/fonts/SkFontMgr_fontconfig.cpp",
+ ]
+ } else {
+ sources -= [
+ "$skia_rel_dir/src/ports/SkFontHost_win.cpp",
+ "$skia_rel_dir/src/ports/SkFontHost_win_dw.cpp",
+ "$skia_rel_dir/src/ports/SkFontMgr_default_gdi.cpp",
+ "$skia_rel_dir/src/ports/SkOSFile_win.cpp",
+ "$skia_rel_dir/src/ports/SkThread_win.cpp",
+ "$skia_rel_dir/src/ports/SkTLS_win.cpp",
+ "$skia_rel_dir/src/utils/SkThreadUtils_win.cpp",
+ ]
+ }
+ if (!is_android) {
+ sources -= [
+ "$skia_rel_dir/src/ports/SkFontConfigInterface_android.cpp",
+ "$skia_rel_dir/src/ports/SkFontConfigParser_android.cpp",
+ ]
+ }
+ if (!is_mac) {
+ sources -= [
+ "$skia_rel_dir/src/ports/SkFontHost_mac.cpp",
+ "$skia_rel_dir/src/utils/SkThreadUtils_pthread_mach.cpp",
+ ]
+ }
+ if (!is_linux) {
+ sources -= [
+ "$skia_rel_dir/src/ports/SkFontHost_FreeType.cpp",
+ "$skia_rel_dir/src/ports/SkFontHost_FreeType_common.cpp",
+ "$skia_rel_dir/src/ports/SkFontHost_fontconfig.cpp",
+ "$skia_rel_dir/src/ports/SkFontHost_linux.cpp",
+ ]
+ } else if (!is_android) {
+ sources -= [
+ "$skia_rel_dir/src/ports/SkFontConfigInterface_direct.cpp",
+ "$skia_rel_dir/src/fonts/SkFontMgr_fontconfig.cpp",
+ ]
+ }
+
+ configs -= [ "//build/config/compiler:chromium_code" ]
+ configs += [
+ ":skia_library_config",
+ "//build/config/compiler:no_chromium_code"
+ ]
+ direct_dependent_configs = [ ":skia_config" ]
+
+ deps = [
+ ":skia_opts",
+ "//base",
+ "//base/third_party/dynamic_annotations",
+ "//third_party/zlib",
+ ]
+
+ if (component_mode == "shared_library") {
+ defines = [ "SKIA_IMPLEMENTATION=1" ]
+ }
+
+ if (is_linux) {
+ configs += [
+ "//build/config/linux:fontconfig",
+ "//build/config/linux:freetype2",
+ "//build/config/linux:pangocairo",
+ ]
+ deps += [
+ "//third_party/icu:icuuc",
+ ]
+ }
+
+ if (skia_support_pdf) {
+ deps += [ "//third_party/sfntly" ]
+ }
+}
+
+# Separated out so it can be compiled with different flags for SSE.
+source_set("skia_opts") {
+ if (cpu_arch == "x86" || cpu_arch == "x64") {
+ sources = [
+ # SSE 2
+ "//third_party/skia/src/opts/opts_check_SSE2.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_none.cpp",
+
+ # SSE 3
+ "//third_party/skia/src/opts/SkBitmapProcState_opts_SSSE3.cpp",
+
+ # Chrome-specific.
+ "ext/convolver_SSE2.cc",
+ ]
+
+ if (is_linux || is_mac) {
+ cflags = [ "-mssse3" ] # Note third 's'.
+ }
+ } else {
+ assert(false, "Need to port ARM/MIPS stuff from skia_library_opts.gyp")
+ }
+
+ configs -= [ "//build/config/compiler:chromium_code" ]
+ configs += [
+ ":skia_config",
+ "//build/config/compiler:no_chromium_code"
+ ]
+
+ # TODO(brettw) uncomment when visibility is supported.
+ #visibility = ":skia"
+}

Powered by Google App Engine
This is Rietveld 408576698