123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038 |
- # 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/buildflag_header.gni")
- import("//build/config/compiler/compiler.gni")
- import("//build/config/features.gni")
- import("//build/config/freetype/freetype.gni")
- import("//build/config/sanitizers/sanitizers.gni")
- import("//gpu/vulkan/features.gni")
- import("//printing/buildflags/buildflags.gni")
- import("//testing/test.gni")
- import("//third_party/libgifcodec/libgifcodec.gni")
- import("//third_party/skia/gn/shared_sources.gni")
- import("//third_party/skia/modules/skcms/skcms.gni")
- import("//tools/grit/grit_rule.gni")
- import("features.gni")
- if (current_cpu == "arm") {
- import("//build/config/arm.gni")
- }
- if (current_cpu == "mipsel" || current_cpu == "mips64el") {
- import("//build/config/mips.gni")
- }
- skia_support_gpu = !is_ios
- skia_support_pdf = !is_ios && enable_basic_printing
- declare_args() {
- enable_skia_wuffs_gif = true
- }
- buildflag_header("buildflags") {
- header = "buildflags.h"
- flags = [
- "SKIA_SUPPORT_SKOTTIE=$skia_support_skottie",
- "SKIA_USE_DAWN=$skia_use_dawn",
- ]
- }
- # External-facing config for dependent code.
- config("skia_config") {
- defines = [
- "SK_CODEC_DECODES_PNG",
- "SK_CODEC_DECODES_WEBP",
- "SK_ENCODE_PNG",
- "SK_ENCODE_WEBP",
- "SK_ENABLE_SKSL",
- "SK_UNTIL_CRBUG_1187654_IS_FIXED",
- "SK_USER_CONFIG_HEADER=\"../../skia/config/SkUserConfig.h\"",
- "SK_WIN_FONTMGR_NO_SIMULATIONS",
- ]
- include_dirs = [ "//third_party/skia" ]
- if (!is_ios) {
- if (enable_skia_wuffs_gif) {
- include_dirs += [ "//third_party/wuffs/src/release/c" ]
- } else {
- include_dirs += [ "//third_party/libgifcodec" ]
- }
- }
- if (enable_vulkan) {
- include_dirs += [ "//third_party/vulkan/include" ]
- configs =
- [ "//third_party/vulkan-deps/vulkan-headers/src:vulkan_headers_config" ]
- }
- if (skia_use_gl) {
- defines += [ "SK_GL" ]
- }
- if (!is_ios) {
- defines += [
- "SK_CODEC_DECODES_JPEG",
- "SK_ENCODE_JPEG",
- ]
- if (enable_skia_wuffs_gif) {
- defines += [ "SK_HAS_WUFFS_LIBRARY" ]
- } else {
- defines += [ "SK_USE_LIBGIFCODEC" ]
- }
- }
- if (enable_vulkan) {
- defines += [ "SK_VULKAN=1" ]
- }
- if (skia_use_dawn) {
- defines += [ "SK_DAWN" ]
- }
- if (is_component_build) {
- defines += [ "SKIA_DLL" ]
- if (is_win) {
- defines += [ "SKCMS_API=__declspec(dllexport)" ]
- } else {
- defines += [ "SKCMS_API=__attribute__((visibility(\"default\")))" ]
- }
- }
- if (skia_support_gpu) {
- workaround_header = "gpu/config/gpu_driver_bug_workaround_autogen.h"
- defines += [
- "SK_SUPPORT_GPU=1",
- "SK_GPU_WORKAROUNDS_HEADER=\"$workaround_header\"",
- ]
- } else {
- defines += [ "SK_SUPPORT_GPU=0" ]
- }
- if (is_android) {
- defines += [
- "SK_BUILD_FOR_ANDROID",
- "USE_CHROMIUM_SKIA",
- ]
- }
- if (is_mac) {
- defines += [
- "SK_BUILD_FOR_MAC",
- "SK_METAL",
- ]
- }
- if (is_win) {
- defines += [ "GR_GL_FUNCTION_TYPE=__stdcall" ]
- }
- }
- # Internal-facing config for Skia library code.
- config("skia_library_config") {
- defines = []
- # Skia uses C++17 language features in its internal code. Previously Skia was built with
- # "-std=c++17". See http://crbug.com/1257145 for why this was a bad idea.
- cflags_cc = [ "-Wno-c++17-extensions" ]
- cflags_objcc = [ "-Wno-c++17-extensions" ]
- if (!is_ios && !use_system_freetype) {
- defines += [ "SK_FREETYPE_MINIMUM_RUNTIME_VERSION=(((FREETYPE_MAJOR) * 0x01000000) | ((FREETYPE_MINOR) * 0x00010000) | ((FREETYPE_PATCH) * 0x00000100))" ]
- }
- defines += [ "SKIA_IMPLEMENTATION=1" ]
- if (current_cpu == "arm") {
- if (arm_use_neon) {
- defines += [ "SK_ARM_HAS_NEON" ]
- } else if (arm_optionally_use_neon) {
- defines += [ "SK_ARM_HAS_OPTIONAL_NEON" ]
- }
- }
- # Settings for text blitting, chosen to approximate the system browser.
- if (is_linux || is_chromeos) {
- 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) {
- 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",
- ]
- }
- }
- source_set("skcms") {
- cflags = []
- if (!is_win || is_clang) {
- cflags += [
- "-w",
- "-std=c11",
- ]
- }
- # LLVM automatically sets the equivalent of GCC's -mfp16-format=ieee on ARM
- # builds by default, while GCC itself does not. We need it to enable support
- # for half-precision floating point data types used by SKCMS on ARM.
- if ((is_linux || is_chromeos) && !is_clang && current_cpu == "arm") {
- cflags += [ "-mfp16-format=ieee" ]
- }
- public = [ "//third_party/skia/modules/skcms/skcms.h" ]
- include_dirs = [ "//third_party/skia/modules/skcms" ]
- sources =
- rebase_path(skcms_sources, ".", "//third_party/skia/modules/skcms")
- }
- component("skia") {
- deps = []
- sources = [
- # Chrome sources.
- "config/SkUserConfig.h",
- "config/sk_ref_cnt_ext_debug.h",
- "config/sk_ref_cnt_ext_release.h",
- "ext/SkDiscardableMemory_chrome.cc",
- "ext/SkDiscardableMemory_chrome.h",
- "ext/SkMemory_new_handler.cpp",
- "ext/benchmarking_canvas.cc",
- "ext/benchmarking_canvas.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/legacy_display_globals.cc",
- "ext/legacy_display_globals.h",
- "ext/opacity_filter_canvas.cc",
- "ext/opacity_filter_canvas.h",
- "ext/recursive_gaussian_convolution.cc",
- "ext/recursive_gaussian_convolution.h",
- "ext/rgba_to_yuva.cc",
- "ext/rgba_to_yuva.h",
- "ext/skia_histogram.cc",
- "ext/skia_histogram.h",
- "ext/skia_memory_dump_provider.cc",
- "ext/skia_memory_dump_provider.h",
- "ext/skia_trace_memory_dump_impl.cc",
- "ext/skia_trace_memory_dump_impl.h",
- "ext/skia_utils_base.cc",
- "ext/skia_utils_base.h",
- ]
- if (!is_apple) {
- sources += [
- "ext/fontmgr_default.cc",
- "ext/fontmgr_default.h",
- ]
- }
- if (is_android) {
- sources += [ "ext/fontmgr_default_android.cc" ]
- }
- if (is_linux || is_chromeos) {
- sources += [ "ext/fontmgr_default_linux.cc" ]
- }
- if (is_ios) {
- sources += [
- "ext/skia_utils_ios.h",
- "ext/skia_utils_ios.mm",
- ]
- }
- if (is_mac) {
- sources += [
- "ext/skia_utils_mac.h",
- "ext/skia_utils_mac.mm",
- ]
- }
- if (is_win) {
- sources += [
- "ext/fontmgr_default_win.cc",
- "ext/skia_utils_win.cc",
- "ext/skia_utils_win.h",
- ]
- }
- if (!is_ios) {
- sources += [
- "ext/platform_canvas.cc",
- "ext/platform_canvas.h",
- ]
- }
- if (!is_ios && (current_cpu == "x86" || current_cpu == "x64")) {
- sources += [
- "ext/convolver_SSE2.cc",
- "ext/convolver_SSE2.h",
- ]
- } else if (current_cpu == "mipsel" && mips_dsp_rev >= 2) {
- sources += [
- "ext/convolver_mips_dspr2.cc",
- "ext/convolver_mips_dspr2.h",
- ]
- } else if (current_cpu == "arm" || current_cpu == "arm64") {
- if (arm_use_neon) {
- sources += [
- "ext/convolver_neon.cc",
- "ext/convolver_neon.h",
- ]
- }
- }
- if (is_win) {
- sources += [
- # Select the right BitmapPlatformDevice.
- "ext/raster_handle_allocator_win.cc",
- ]
- }
- # The *_public variables should be added to 'public' not 'sources'.
- # However, Skia does not export enough *_public variables to make Chromium
- # 'gn check' clean. Until that can be done add the *_public variables to
- # 'sources' so that the buildbot 'analyze' step is aware of their existence.
- sources += skia_core_public
- sources += skia_utils_public
- sources += skia_effects_public
- sources += skia_effects_imagefilter_public
- # The imported Skia gni source paths are made absolute by gn.
- defines = []
- sources += skia_sksl_sources
- sources += skia_utils_sources
- sources += skia_xps_sources
- sources += [
- "//third_party/skia/src/fonts/SkFontMgr_indirect.cpp",
- "//third_party/skia/src/fonts/SkRemotableFontMgr.cpp",
- "//third_party/skia/src/images/SkImageEncoder.cpp",
- "//third_party/skia/src/images/SkPngEncoder.cpp",
- "//third_party/skia/src/images/SkWebpEncoder.cpp",
- "//third_party/skia/src/ports/SkGlobalInitialization_default.cpp",
- "//third_party/skia/src/ports/SkImageGenerator_none.cpp",
- "//third_party/skia/src/ports/SkOSFile_stdio.cpp",
- "//third_party/skia/src/sfnt/SkOTTable_name.cpp",
- "//third_party/skia/src/sfnt/SkOTUtils.cpp",
- ]
- if (!is_ios) {
- sources -= [ "//third_party/skia/src/ports/SkImageGenerator_none.cpp" ]
- sources += [
- "//third_party/skia/src/codec/SkBmpBaseCodec.cpp",
- "//third_party/skia/src/codec/SkBmpCodec.cpp",
- "//third_party/skia/src/codec/SkBmpMaskCodec.cpp",
- "//third_party/skia/src/codec/SkBmpRLECodec.cpp",
- "//third_party/skia/src/codec/SkBmpStandardCodec.cpp",
- "//third_party/skia/src/codec/SkCodec.cpp",
- "//third_party/skia/src/codec/SkCodecImageGenerator.cpp",
- "//third_party/skia/src/codec/SkColorTable.cpp",
- "//third_party/skia/src/codec/SkEncodedInfo.cpp",
- "//third_party/skia/src/codec/SkIcoCodec.cpp",
- "//third_party/skia/src/codec/SkJpegCodec.cpp",
- "//third_party/skia/src/codec/SkJpegDecoderMgr.cpp",
- "//third_party/skia/src/codec/SkJpegUtility.cpp",
- "//third_party/skia/src/codec/SkMaskSwizzler.cpp",
- "//third_party/skia/src/codec/SkMasks.cpp",
- "//third_party/skia/src/codec/SkParseEncodedOrigin.cpp",
- "//third_party/skia/src/codec/SkPngCodec.cpp",
- "//third_party/skia/src/codec/SkSampler.cpp",
- "//third_party/skia/src/codec/SkStreamBuffer.cpp",
- "//third_party/skia/src/codec/SkSwizzler.cpp",
- "//third_party/skia/src/codec/SkWbmpCodec.cpp",
- "//third_party/skia/src/codec/SkWebpCodec.cpp",
- "//third_party/skia/src/images/SkJPEGWriteUtility.cpp",
- "//third_party/skia/src/images/SkJpegEncoder.cpp",
- "//third_party/skia/src/ports/SkImageGenerator_skia.cpp",
- ]
- if (enable_skia_wuffs_gif) {
- deps += [ "//third_party/wuffs" ]
- sources += [ "//third_party/skia/src/codec/SkWuffsCodec.cpp" ]
- } else {
- sources += rebase_path(libgifcodec_sources + libgifcodec_public,
- ".",
- "//third_party/libgifcodec")
- }
- }
- if (current_cpu == "arm") {
- sources += [ "//third_party/skia/src/core/SkUtilsArm.cpp" ]
- }
- # Remove unused util sources.
- sources -= [ "//third_party/skia/src/utils/SkParsePath.cpp" ]
- if (is_win) {
- sources -= [
- # Keeping _win.cpp
- "//third_party/skia/src/utils/SkThreadUtils_pthread.cpp",
- ]
- libs = [ "fontsub.lib" ]
- } else {
- sources -= [
- # Keeping _pthread.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/src/utils/win/SkWGL_win.cpp",
- ]
- }
- # Select Skia ports.
- # FreeType is needed everywhere (except on iOS), on Linux and Android as main
- # font backend, on Windows and Mac as fallback backend for Variations.
- if (!is_ios) {
- sources += [
- "//third_party/skia/src/ports/SkFontHost_FreeType.cpp",
- "//third_party/skia/src/ports/SkFontHost_FreeType_common.cpp",
- ]
- }
- if (is_win) {
- 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/SkTLS_win.cpp",
- "//third_party/skia/src/ports/SkTypeface_win_dw.cpp",
- ]
- } else {
- sources += [
- "//third_party/skia/src/ports/SkOSFile_posix.cpp",
- "//third_party/skia/src/ports/SkTLS_pthread.cpp",
- ]
- }
- if (is_apple) {
- sources += [
- "//third_party/skia/include/ports/SkFontMgr_mac_ct.h",
- "//third_party/skia/src/ports/SkFontMgr_mac_ct.cpp",
- "//third_party/skia/src/ports/SkFontMgr_mac_ct_factory.cpp",
- "//third_party/skia/src/ports/SkScalerContext_mac_ct.cpp",
- "//third_party/skia/src/ports/SkScalerContext_mac_ct.h",
- "//third_party/skia/src/ports/SkTypeface_mac_ct.cpp",
- "//third_party/skia/src/ports/SkTypeface_mac_ct.h",
- ]
- }
- if (is_linux || is_chromeos) {
- sources += [
- "//third_party/skia/src/ports/SkFontConfigInterface.cpp",
- "//third_party/skia/src/ports/SkFontConfigInterface_direct.cpp",
- "//third_party/skia/src/ports/SkFontConfigInterface_direct_factory.cpp",
- "//third_party/skia/src/ports/SkFontMgr_FontConfigInterface.cpp",
- ]
- }
- if (is_linux || is_chromeos || is_android) {
- sources += [
- # Retain the files for the SkFontMgr_Android on linux to emulate android
- # fonts. See content/zygote/zygote_main_linux.cc
- # Note that this requires expat.
- "//third_party/skia/src/ports/SkFontMgr_android.cpp",
- "//third_party/skia/src/ports/SkFontMgr_android_parser.cpp",
- ]
- }
- if (is_win || is_mac) {
- sources += [
- # Add the FreeType custom font manager as a fallback backend for variable fonts.
- "//third_party/skia/src/ports/SkFontMgr_custom.cpp",
- "//third_party/skia/src/ports/SkFontMgr_custom_empty.cpp",
- ]
- }
- if (is_fuchsia) {
- sources += [
- "//third_party/skia/src/ports/SkFontMgr_custom.cpp",
- "//third_party/skia/src/ports/SkFontMgr_fuchsia.cpp",
- "ext/fontmgr_default_fuchsia.cc",
- ]
- deps += [
- "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.fonts",
- "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.io",
- "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.sys",
- "//third_party/fuchsia-sdk/sdk/pkg/sys_cpp",
- "//third_party/fuchsia-sdk/sdk/pkg/zx",
- "//third_party/icu:icuuc",
- ]
- }
- if (is_clang && !is_nacl) {
- # 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_config",
- ":skia_library_config",
- "//build/config/compiler:no_chromium_code",
- ]
- public_configs = [ ":skia_config" ]
- deps += [
- ":skcms",
- ":skia_opts",
- "//base",
- "//base/third_party/dynamic_annotations",
- "//third_party/libpng",
- "//third_party/libwebp",
- "//third_party/libwebp:libwebp_webp",
- ]
- public_deps = [
- ":buildflags",
- ":skia_core_and_effects",
- ]
- if (skia_use_dawn) {
- public_deps += [ "//third_party/dawn/include/dawn:cpp_headers" ]
- deps += [
- "//third_party/dawn/src/dawn:cpp",
- "//third_party/dawn/src/dawn:proc",
- "//third_party/dawn/src/dawn/native",
- ]
- }
- if (!is_ios) {
- deps += [
- "//build/config/freetype",
- "//third_party:jpeg",
- ]
- }
- if (is_linux || is_chromeos) {
- deps += [
- "//third_party/expat",
- "//third_party/fontconfig",
- "//third_party/icu:icuuc",
- ]
- }
- if (is_android) {
- deps += [
- "//third_party/android_ndk:cpu_features",
- "//third_party/expat",
- ]
- }
- if (!is_debug) {
- configs -= [ "//build/config/compiler:default_optimization" ]
- configs += [ "//build/config/compiler:optimize_max" ]
- }
- if (is_mac) {
- deps += [ ":skia_metal" ]
- defines += [ "SK_METAL" ]
- frameworks = [
- "AppKit.framework",
- "CoreFoundation.framework",
- "CoreGraphics.framework",
- "CoreText.framework",
- "Metal.framework",
- "Foundation.framework",
- ]
- }
- if (skia_use_dawn) {
- sources += skia_dawn_sources
- }
- if (is_ios) {
- frameworks = [ "ImageIO.framework" ]
- }
- if (is_fuchsia) {
- deps += [ "//third_party/expat" ]
- }
- if (skia_support_gpu) {
- sources += skia_gpu_sources
- sources += skia_null_gpu_sources
- sources += skia_sksl_gpu_sources
- sources += skia_shared_gpu_sources
- if (skia_use_gl) {
- sources += skia_gl_gpu_sources
- }
- if (enable_vulkan) {
- sources += skia_vk_sources
- }
- deps += [ "//gpu/config:workaround_list" ]
- }
- if (skia_support_pdf) {
- deps += [
- "//third_party:freetype_harfbuzz",
- "//third_party/zlib",
- ]
- sources += skia_pdf_sources
- } else {
- sources += [ "//third_party/skia/src/pdf/SkDocument_PDF_None.cpp" ]
- }
- if (skia_support_skottie) {
- import("//third_party/skia/modules/skottie/skottie.gni")
- import("//third_party/skia/modules/skresources/skresources.gni")
- import("//third_party/skia/modules/sksg/sksg.gni")
- import("//third_party/skia/modules/skshaper/skshaper.gni")
- sources += skia_skottie_sources + skia_skottie_public
- sources += skia_skresources_sources
- sources += skia_sksg_sources
- sources += skia_shaper_primitive_sources
- }
- }
- # Template for things that are logically part of :skia, but need to be split out
- # so custom compile flags can be applied.
- #
- # These are all opted out of check_includes, due to (logically) being part of
- # skia.
- template("skia_source_set") {
- source_set(target_name) {
- forward_variables_from(invoker, "*")
- check_includes = false
- if (!is_debug) {
- configs -= [ "//build/config/compiler:default_optimization" ]
- configs += [ "//build/config/compiler:optimize_max" ]
- }
- configs -= [ "//build/config/compiler:chromium_code" ]
- configs += [
- ":skia_config",
- ":skia_library_config",
- "//build/config/compiler:no_chromium_code",
- ]
- public_configs = [ ":skia_config" ]
- # Android, the only user of mismatched sample files (for now), gets a small
- # binary size decrease by using AFDO to optimize for size in these
- # source_sets. However, that also comes at a relatively big performance
- # cost.
- if (using_mismatched_sample_profile) {
- configs -= [ "//build/config/compiler:afdo_optimize_size" ]
- }
- if (is_win) {
- cflags_cc = [
- "/std:c++17",
- "/wd5041", # out-of-line definition for constexpr static data member is
- # not needed and is deprecated in C++17
- ]
- } else {
- cflags_cc = [ "-std=c++17" ]
- }
- }
- }
- # Split out for targeted removal of the afdo_optimize_size config on Android.
- skia_source_set("skia_core_and_effects") {
- defines = []
- sources = skia_core_sources
- sources += skia_effects_sources
- sources += skia_effects_imagefilter_sources
- if (skia_support_gpu) {
- deps = [ "//gpu/config:workaround_list" ]
- }
- if (skia_use_dawn) {
- deps += [ "//third_party/dawn/include/dawn:cpp_headers" ]
- }
- visibility = [ ":skia" ]
- }
- # Bits that involve special vector-y hardware.
- if (current_cpu == "arm64") {
- skia_source_set("skia_opts_crc32") {
- sources = skia_opts.crc32_sources
- cflags = [ "-march=armv8-a+crc" ]
- visibility = [ ":skia_opts" ]
- }
- }
- if (current_cpu == "x86" || current_cpu == "x64") {
- skia_source_set("skia_opts_sse3") {
- sources = skia_opts.ssse3_sources
- if (!is_win || is_clang) {
- cflags = [ "-mssse3" ]
- }
- if (is_win) {
- defines = [ "SK_CPU_SSE_LEVEL=31" ]
- }
- visibility = [ ":skia_opts" ]
- }
- skia_source_set("skia_opts_sse41") {
- sources = skia_opts.sse41_sources
- if (!is_win || is_clang) {
- cflags = [ "-msse4.1" ]
- }
- if (is_win) {
- defines = [ "SK_CPU_SSE_LEVEL=41" ]
- }
- visibility = [ ":skia_opts" ]
- }
- skia_source_set("skia_opts_sse42") {
- sources = skia_opts.sse42_sources
- if (!is_win || is_clang) {
- cflags = [ "-msse4.2" ]
- }
- if (is_win) {
- defines = [ "SK_CPU_SSE_LEVEL=42" ]
- }
- visibility = [ ":skia_opts" ]
- }
- skia_source_set("skia_opts_avx") {
- sources = skia_opts.avx_sources
- if (!is_win) {
- cflags = [ "-mavx" ]
- }
- if (is_win) {
- cflags = [ "/arch:AVX" ]
- }
- visibility = [ ":skia_opts" ]
- }
- skia_source_set("skia_opts_hsw") {
- sources = skia_opts.hsw_sources
- if (!is_win) {
- cflags = [
- "-mavx2",
- "-mbmi",
- "-mbmi2",
- "-mf16c",
- "-mfma",
- ]
- }
- if (is_win) {
- cflags = [ "/arch:AVX2" ]
- }
- visibility = [ ":skia_opts" ]
- }
- skia_source_set("skia_opts_skx") {
- sources = skia_opts.skx_sources
- if (!is_win) {
- cflags = [ "-march=skylake-avx512" ]
- }
- if (is_win) {
- cflags = [ "/arch:AVX512" ]
- }
- visibility = [ ":skia_opts" ]
- }
- }
- skia_source_set("skia_opts") {
- cflags = []
- defines = []
- deps = [ "//base" ]
- if (current_cpu == "x86" || current_cpu == "x64") {
- sources = skia_opts.sse2_sources
- deps += [
- ":skia_opts_avx",
- ":skia_opts_hsw",
- ":skia_opts_skx",
- ":skia_opts_sse3",
- ":skia_opts_sse41",
- ":skia_opts_sse42",
- ]
- } else if (current_cpu == "arm") {
- # The assembly uses the frame pointer register (r7 in Thumb/r11 in
- # ARM), the compiler doesn't like that.
- if (!is_ios) {
- cflags += [ "-fomit-frame-pointer" ]
- }
- if (arm_version >= 7) {
- sources = skia_opts.armv7_sources
- if (arm_use_neon || arm_optionally_use_neon) {
- sources += 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 = skia_opts.none_sources
- }
- } else if (current_cpu == "arm64") {
- sources = skia_opts.arm64_sources
- deps += [ ":skia_opts_crc32" ]
- } else if (current_cpu == "mipsel") {
- cflags += [ "-fomit-frame-pointer" ]
- if (mips_dsp_rev >= 1) {
- sources = skia_opts.mips_dsp_sources
- } else {
- sources = skia_opts.none_sources
- }
- } else if (current_cpu == "mips64el") {
- cflags += [ "-fomit-frame-pointer" ]
- sources = skia_opts.none_sources
- } else if (current_cpu == "ppc64") {
- sources = skia_opts.none_sources
- } else if (current_cpu == "s390x") {
- sources = skia_opts.none_sources
- } else if (current_cpu == "riscv64") {
- sources = skia_opts.none_sources
- } else {
- assert(false, "Need to port cpu specific stuff from skia_library_opts.gyp")
- }
- visibility = [ ":skia" ]
- }
- # Split out metal sources, because they require ARC.
- if (is_mac) {
- skia_source_set("skia_metal") {
- defines = [ "SK_METAL" ]
- sources = skia_metal_sources
- cflags_objcc = [
- "-Wno-unguarded-availability",
- "-fobjc-arc",
- ]
- deps = [ "//gpu/config:workaround_list" ]
- if (skia_use_dawn) {
- deps += [ "//third_party/dawn/include/dawn:cpp_headers" ]
- }
- }
- }
- # Font copies.
- if (is_fuchsia) {
- copy("copy_fuchsia_fonts_manifest") {
- sources = [ "ext/data/test_fonts/fuchsia_test_fonts_manifest.json" ]
- outputs = [ "$root_out_dir/test_fonts/all.font_manifest.json" ]
- }
- }
- if (is_apple) {
- bundle_data("test_fonts_bundle_data") {
- public_deps = [ "//third_party/test_fonts" ]
- sources = [
- "$root_out_dir/test_fonts/Ahem.ttf",
- "ext/data/test_fonts/ChromiumAATTest.ttf",
- ]
- outputs = [ "{{bundle_resources_dir}}/{{source_file_part}}" ]
- }
- }
- group("test_fonts_resources") {
- testonly = true
- deps = []
- data_deps = []
- if (is_apple) {
- deps += [ ":test_fonts_bundle_data" ]
- data_deps += [ ":test_fonts_bundle_data" ]
- } else {
- deps += [ "//third_party/test_fonts" ]
- data_deps += [ "//third_party/test_fonts" ]
- }
- if (is_fuchsia) {
- deps += [ ":copy_fuchsia_fonts_manifest" ]
- data_deps += [ ":copy_fuchsia_fonts_manifest" ]
- }
- }
- source_set("test_fonts") {
- testonly = true
- deps = [ ":test_fonts_resources" ]
- if (is_fuchsia) {
- public = [
- "ext/test_fonts.h",
- "ext/test_fonts_fuchsia.h",
- ]
- sources = [
- "ext/test_fonts_fuchsia.cc",
- "ext/test_fonts_fuchsia_cfv1.cc",
- ]
- public_deps = [ "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.fonts" ]
- deps += [
- "//base",
- "//skia",
- "//third_party/abseil-cpp:absl",
- "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.io",
- "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.sys",
- "//third_party/fuchsia-sdk/sdk/pkg/fidl_cpp_base",
- "//third_party/fuchsia-sdk/sdk/pkg/sys_cpp",
- ]
- }
- if (is_mac) {
- public = [ "ext/test_fonts.h" ]
- sources = [ "ext/test_fonts_mac.mm" ]
- deps += [ "//base" ]
- }
- }
- # Fuchsia components that use the test fonts must include
- # "//build/config/fuchsia/test/test_fonts.shard.test-cml" in their
- # `additional_manifest_fragments`.
- # TODO(https://crbug.com/1287051): Once all consumers are migrated to CFv2,
- # move the `is_fuchsia` section below up into `test_fonts` above and remove this
- # target.
- source_set("test_fonts_cfv2") {
- testonly = true
- deps = [ ":test_fonts_resources" ]
- if (is_fuchsia) {
- public = [
- "ext/test_fonts.h",
- "ext/test_fonts_fuchsia.h",
- ]
- sources = [
- "ext/test_fonts_fuchsia.cc",
- "ext/test_fonts_fuchsia_cfv2.cc",
- ]
- public_deps = [ "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.fonts" ]
- deps += [
- "//base",
- "//skia",
- "//third_party/fuchsia-sdk/sdk/pkg/sys_cpp",
- ]
- }
- }
- test("skia_unittests") {
- sources = [
- "ext/convolver_unittest.cc",
- "ext/image_operations_unittest.cc",
- "ext/platform_canvas_unittest.cc",
- "ext/recursive_gaussian_convolution_unittest.cc",
- "ext/skia_memory_dump_provider_unittest.cc",
- "ext/skia_utils_base_unittest.cc",
- ]
- if (is_ios) {
- sources += [ "ext/skia_utils_ios_unittest.mm" ]
- }
- if (is_mac) {
- sources += [ "ext/skia_utils_mac_unittest.mm" ]
- }
- if (!is_win) {
- sources -= [ "ext/platform_canvas_unittest.cc" ]
- }
- deps = [
- ":skia",
- "//base",
- "//base/test:test_support",
- "//mojo/core/test:run_all_unittests",
- "//testing/gtest",
- "//ui/gfx",
- "//ui/gfx/geometry",
- ]
- data_deps = [ "//testing/buildbot/filters:skia_unittests_filters" ]
- if (!is_ios) {
- sources += [ "public/mojom/test/mojom_traits_unittest.cc" ]
- deps += [
- "//mojo/public/cpp/bindings",
- "//mojo/public/cpp/test_support:test_utils",
- "//skia/public/mojom",
- ]
- }
- if (is_fuchsia) {
- use_cfv1 = false
- sources += [ "ext/fontmgr_fuchsia_unittest.cc" ]
- deps += [
- ":test_fonts_cfv2",
- "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.fonts",
- ]
- additional_manifest_fragments =
- [ "//build/config/fuchsia/test/test_fonts.shard.test-cml" ]
- } else {
- deps += [ ":test_fonts" ]
- }
- if (skia_support_skottie) {
- sources += [ "ext/skottie_unittest.cc" ]
- }
- }
- if (!is_ios) {
- executable("image_operations_bench") {
- sources = [ "ext/image_operations_bench.cc" ]
- deps = [
- ":skia",
- "//base",
- "//build/win:default_exe_manifest",
- ]
- }
- executable("filter_fuzz_stub") {
- testonly = true
- sources = [ "tools/filter_fuzz_stub/filter_fuzz_stub.cc" ]
- deps = [
- ":skia",
- "//base",
- "//base/test:test_support",
- "//build/win:default_exe_manifest",
- ]
- }
- }
- group("fuzzers") {
- deps = [ "//skia/tools/fuzzers" ]
- }
- grit("skia_resources") {
- source = "skia_resources.grd"
- outputs = [
- "grit/skia_resources.h",
- "grit/skia_resources_map.cc",
- "grit/skia_resources_map.h",
- "skia_resources.pak",
- ]
- deps = [
- "//skia/public/mojom:mojom_js",
- "//skia/public/mojom:mojom_webui_js",
- ]
- }
|