xref: /aosp_15_r20/external/pdfium/skia/BUILD.gn (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1*3ac0a46fSAndroid Build Coastguard Worker# Copyright 2013 The PDFium Authors
2*3ac0a46fSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
3*3ac0a46fSAndroid Build Coastguard Worker# found in the LICENSE file.
4*3ac0a46fSAndroid Build Coastguard Worker
5*3ac0a46fSAndroid Build Coastguard Workerimport("//build/config/features.gni")
6*3ac0a46fSAndroid Build Coastguard Workerimport("//build/config/ui.gni")
7*3ac0a46fSAndroid Build Coastguard Workerimport("//testing/test.gni")
8*3ac0a46fSAndroid Build Coastguard Workerimport("//third_party/skia/gn/codec.gni")
9*3ac0a46fSAndroid Build Coastguard Workerimport("//third_party/skia/gn/shared_sources.gni")
10*3ac0a46fSAndroid Build Coastguard Workerimport("//third_party/skia/modules/skcms/skcms.gni")
11*3ac0a46fSAndroid Build Coastguard Workerimport("features.gni")
12*3ac0a46fSAndroid Build Coastguard Worker
13*3ac0a46fSAndroid Build Coastguard Workerif (current_cpu == "arm") {
14*3ac0a46fSAndroid Build Coastguard Worker  import("//build/config/arm.gni")
15*3ac0a46fSAndroid Build Coastguard Worker}
16*3ac0a46fSAndroid Build Coastguard Workerif (current_cpu == "mipsel" || current_cpu == "mips64el") {
17*3ac0a46fSAndroid Build Coastguard Worker  import("//build/config/mips.gni")
18*3ac0a46fSAndroid Build Coastguard Worker}
19*3ac0a46fSAndroid Build Coastguard Worker
20*3ac0a46fSAndroid Build Coastguard Workerskia_use_ganesh_backend = !is_ios
21*3ac0a46fSAndroid Build Coastguard Workerskia_support_pdf = false
22*3ac0a46fSAndroid Build Coastguard Worker
23*3ac0a46fSAndroid Build Coastguard Worker# External-facing config for dependent code.
24*3ac0a46fSAndroid Build Coastguard Workerconfig("skia_config") {
25*3ac0a46fSAndroid Build Coastguard Worker  include_dirs = [ "//third_party/skia" ]
26*3ac0a46fSAndroid Build Coastguard Worker
27*3ac0a46fSAndroid Build Coastguard Worker  defines = [
28*3ac0a46fSAndroid Build Coastguard Worker    "SK_ENCODE_PNG",
29*3ac0a46fSAndroid Build Coastguard Worker    "SK_USER_CONFIG_HEADER=\"../../skia/config/SkPdfiumUserConfig.h\"",
30*3ac0a46fSAndroid Build Coastguard Worker  ]
31*3ac0a46fSAndroid Build Coastguard Worker
32*3ac0a46fSAndroid Build Coastguard Worker  if (is_win) {
33*3ac0a46fSAndroid Build Coastguard Worker    defines += [ "SK_FREETYPE_MINIMUM_RUNTIME_VERSION=(((FREETYPE_MAJOR) * 0x01000000) | ((FREETYPE_MINOR) * 0x00010000) | ((FREETYPE_PATCH) * 0x00000100))" ]
34*3ac0a46fSAndroid Build Coastguard Worker  }
35*3ac0a46fSAndroid Build Coastguard Worker
36*3ac0a46fSAndroid Build Coastguard Worker  if (is_component_build) {
37*3ac0a46fSAndroid Build Coastguard Worker    defines += [
38*3ac0a46fSAndroid Build Coastguard Worker      "SKIA_DLL",
39*3ac0a46fSAndroid Build Coastguard Worker      "GR_GL_IGNORE_ES3_MSAA=0",
40*3ac0a46fSAndroid Build Coastguard Worker    ]
41*3ac0a46fSAndroid Build Coastguard Worker  }
42*3ac0a46fSAndroid Build Coastguard Worker
43*3ac0a46fSAndroid Build Coastguard Worker  if (skia_use_ganesh_backend) {
44*3ac0a46fSAndroid Build Coastguard Worker    defines += [ "SK_GANESH" ]
45*3ac0a46fSAndroid Build Coastguard Worker  }
46*3ac0a46fSAndroid Build Coastguard Worker
47*3ac0a46fSAndroid Build Coastguard Worker  if (skia_use_gl) {
48*3ac0a46fSAndroid Build Coastguard Worker    defines += [ "SK_GL" ]
49*3ac0a46fSAndroid Build Coastguard Worker  }
50*3ac0a46fSAndroid Build Coastguard Worker
51*3ac0a46fSAndroid Build Coastguard Worker  if (is_android) {
52*3ac0a46fSAndroid Build Coastguard Worker    defines += [
53*3ac0a46fSAndroid Build Coastguard Worker      "SK_BUILD_FOR_ANDROID",
54*3ac0a46fSAndroid Build Coastguard Worker      "USE_CHROMIUM_SKIA",
55*3ac0a46fSAndroid Build Coastguard Worker    ]
56*3ac0a46fSAndroid Build Coastguard Worker  }
57*3ac0a46fSAndroid Build Coastguard Worker
58*3ac0a46fSAndroid Build Coastguard Worker  if (is_mac) {
59*3ac0a46fSAndroid Build Coastguard Worker    defines += [ "SK_BUILD_FOR_MAC" ]
60*3ac0a46fSAndroid Build Coastguard Worker  }
61*3ac0a46fSAndroid Build Coastguard Worker
62*3ac0a46fSAndroid Build Coastguard Worker  if (is_win) {
63*3ac0a46fSAndroid Build Coastguard Worker    defines += [ "GR_GL_FUNCTION_TYPE=__stdcall" ]
64*3ac0a46fSAndroid Build Coastguard Worker  }
65*3ac0a46fSAndroid Build Coastguard Worker}
66*3ac0a46fSAndroid Build Coastguard Worker
67*3ac0a46fSAndroid Build Coastguard Worker# Internal-facing config for Skia library code.
68*3ac0a46fSAndroid Build Coastguard Workerconfig("skia_library_config") {
69*3ac0a46fSAndroid Build Coastguard Worker  # Turn on SK_API to export Skia's public API
70*3ac0a46fSAndroid Build Coastguard Worker  defines = [
71*3ac0a46fSAndroid Build Coastguard Worker    "IS_SKIA_IMPL=1",
72*3ac0a46fSAndroid Build Coastguard Worker    "SKIA_IMPLEMENTATION=1",
73*3ac0a46fSAndroid Build Coastguard Worker  ]
74*3ac0a46fSAndroid Build Coastguard Worker
75*3ac0a46fSAndroid Build Coastguard Worker  if (current_cpu == "arm") {
76*3ac0a46fSAndroid Build Coastguard Worker    if (arm_use_neon) {
77*3ac0a46fSAndroid Build Coastguard Worker      defines += [ "SK_ARM_HAS_NEON" ]
78*3ac0a46fSAndroid Build Coastguard Worker    } else if (arm_optionally_use_neon) {
79*3ac0a46fSAndroid Build Coastguard Worker      defines += [ "SK_ARM_HAS_OPTIONAL_NEON" ]
80*3ac0a46fSAndroid Build Coastguard Worker    }
81*3ac0a46fSAndroid Build Coastguard Worker  }
82*3ac0a46fSAndroid Build Coastguard Worker
83*3ac0a46fSAndroid Build Coastguard Worker  # Settings for text blitting, chosen to approximate the system browser.
84*3ac0a46fSAndroid Build Coastguard Worker  if (is_linux || is_chromeos) {
85*3ac0a46fSAndroid Build Coastguard Worker    defines += [
86*3ac0a46fSAndroid Build Coastguard Worker      "SK_GAMMA_EXPONENT=1.2",
87*3ac0a46fSAndroid Build Coastguard Worker      "SK_GAMMA_CONTRAST=0.2",
88*3ac0a46fSAndroid Build Coastguard Worker    ]
89*3ac0a46fSAndroid Build Coastguard Worker  } else if (is_android) {
90*3ac0a46fSAndroid Build Coastguard Worker    defines += [
91*3ac0a46fSAndroid Build Coastguard Worker      "SK_GAMMA_APPLY_TO_A8",
92*3ac0a46fSAndroid Build Coastguard Worker      "SK_GAMMA_EXPONENT=1.4",
93*3ac0a46fSAndroid Build Coastguard Worker      "SK_GAMMA_CONTRAST=0.0",
94*3ac0a46fSAndroid Build Coastguard Worker    ]
95*3ac0a46fSAndroid Build Coastguard Worker  } else if (is_win) {
96*3ac0a46fSAndroid Build Coastguard Worker    defines += [
97*3ac0a46fSAndroid Build Coastguard Worker      "SK_GAMMA_SRGB",
98*3ac0a46fSAndroid Build Coastguard Worker      "SK_GAMMA_CONTRAST=0.5",
99*3ac0a46fSAndroid Build Coastguard Worker    ]
100*3ac0a46fSAndroid Build Coastguard Worker  } else if (is_mac) {
101*3ac0a46fSAndroid Build Coastguard Worker    defines += [
102*3ac0a46fSAndroid Build Coastguard Worker      "SK_GAMMA_SRGB",
103*3ac0a46fSAndroid Build Coastguard Worker      "SK_GAMMA_CONTRAST=0.0",
104*3ac0a46fSAndroid Build Coastguard Worker    ]
105*3ac0a46fSAndroid Build Coastguard Worker  }
106*3ac0a46fSAndroid Build Coastguard Worker
107*3ac0a46fSAndroid Build Coastguard Worker  if (is_android) {
108*3ac0a46fSAndroid Build Coastguard Worker    defines += [
109*3ac0a46fSAndroid Build Coastguard Worker      # Android devices are typically more memory constrained, so default to a
110*3ac0a46fSAndroid Build Coastguard Worker      # smaller glyph cache (it may be overriden at runtime when the renderer
111*3ac0a46fSAndroid Build Coastguard Worker      # starts up, depending on the actual device memory).
112*3ac0a46fSAndroid Build Coastguard Worker      "SK_DEFAULT_FONT_CACHE_LIMIT=1048576",  # 1024 * 1024
113*3ac0a46fSAndroid Build Coastguard Worker    ]
114*3ac0a46fSAndroid Build Coastguard Worker  } else {
115*3ac0a46fSAndroid Build Coastguard Worker    defines += [ "SK_DEFAULT_FONT_CACHE_LIMIT=20971520" ]  # 20 * 1024 * 1024
116*3ac0a46fSAndroid Build Coastguard Worker  }
117*3ac0a46fSAndroid Build Coastguard Worker
118*3ac0a46fSAndroid Build Coastguard Worker  if (is_win) {
119*3ac0a46fSAndroid Build Coastguard Worker    defines += [
120*3ac0a46fSAndroid Build Coastguard Worker      # On windows, GDI handles are a scarse system-wide resource so we have to
121*3ac0a46fSAndroid Build Coastguard Worker      # keep the glyph cache, which holds up to 4 GDI handles per entry, to a
122*3ac0a46fSAndroid Build Coastguard Worker      # fairly small size. http://crbug.com/314387
123*3ac0a46fSAndroid Build Coastguard Worker      "SK_DEFAULT_FONT_CACHE_COUNT_LIMIT=256",
124*3ac0a46fSAndroid Build Coastguard Worker    ]
125*3ac0a46fSAndroid Build Coastguard Worker
126*3ac0a46fSAndroid Build Coastguard Worker    cflags = [
127*3ac0a46fSAndroid Build Coastguard Worker      "/wd4244",  # conversion from 'type1( __int64)' to 'type2 (unsigned int)'
128*3ac0a46fSAndroid Build Coastguard Worker      "/wd4341",  # signed value is out of range for enum constant.
129*3ac0a46fSAndroid Build Coastguard Worker      "/wd4345",  # Object is default-initialized if initialization is omitted.
130*3ac0a46fSAndroid Build Coastguard Worker      "/wd4390",  # ';'empty statement found in looping;is it what was intended?
131*3ac0a46fSAndroid Build Coastguard Worker      "/wd4554",  # 'operator' : check operator precedence for possible error
132*3ac0a46fSAndroid Build Coastguard Worker      "/wd4748",  # compiler will disable optimizations if a function has inline
133*3ac0a46fSAndroid Build Coastguard Worker                  # assembly code contains flow control(jmp or jcc) statements.
134*3ac0a46fSAndroid Build Coastguard Worker
135*3ac0a46fSAndroid Build Coastguard Worker      "/wd4800",  # forcing value to bool 'true/false'(assigning int to bool).
136*3ac0a46fSAndroid Build Coastguard Worker      "/wd5041",  # out-of-line definition for constexpr static data member is
137*3ac0a46fSAndroid Build Coastguard Worker                  # not needed and is deprecated in C++17
138*3ac0a46fSAndroid Build Coastguard Worker    ]
139*3ac0a46fSAndroid Build Coastguard Worker  }
140*3ac0a46fSAndroid Build Coastguard Worker}
141*3ac0a46fSAndroid Build Coastguard Worker
142*3ac0a46fSAndroid Build Coastguard Workersource_set("skcms") {
143*3ac0a46fSAndroid Build Coastguard Worker  cflags = []
144*3ac0a46fSAndroid Build Coastguard Worker  if (!is_win || is_clang) {
145*3ac0a46fSAndroid Build Coastguard Worker    cflags += [
146*3ac0a46fSAndroid Build Coastguard Worker      "-w",
147*3ac0a46fSAndroid Build Coastguard Worker      "-std=c11",
148*3ac0a46fSAndroid Build Coastguard Worker    ]
149*3ac0a46fSAndroid Build Coastguard Worker  }
150*3ac0a46fSAndroid Build Coastguard Worker
151*3ac0a46fSAndroid Build Coastguard Worker  # LLVM automatically sets the equivalent of GCC's -mfp16-format=ieee on ARM
152*3ac0a46fSAndroid Build Coastguard Worker  # builds by default, while GCC itself does not. We need it to enable support
153*3ac0a46fSAndroid Build Coastguard Worker  # for half-precision floating point data types used by SKCMS on ARM.
154*3ac0a46fSAndroid Build Coastguard Worker  if ((is_linux || is_chromeos) && !is_clang && current_cpu == "arm") {
155*3ac0a46fSAndroid Build Coastguard Worker    cflags += [ "-mfp16-format=ieee" ]
156*3ac0a46fSAndroid Build Coastguard Worker  }
157*3ac0a46fSAndroid Build Coastguard Worker
158*3ac0a46fSAndroid Build Coastguard Worker  public =
159*3ac0a46fSAndroid Build Coastguard Worker      rebase_path(skcms_public_headers, ".", "//third_party/skia/modules/skcms")
160*3ac0a46fSAndroid Build Coastguard Worker  sources = rebase_path(skcms_sources, ".", "//third_party/skia/modules/skcms")
161*3ac0a46fSAndroid Build Coastguard Worker}
162*3ac0a46fSAndroid Build Coastguard Worker
163*3ac0a46fSAndroid Build Coastguard Workercomponent("skia") {
164*3ac0a46fSAndroid Build Coastguard Worker  deps = []
165*3ac0a46fSAndroid Build Coastguard Worker
166*3ac0a46fSAndroid Build Coastguard Worker  sources = [
167*3ac0a46fSAndroid Build Coastguard Worker    # PDFium sources.
168*3ac0a46fSAndroid Build Coastguard Worker    "config/SkPdfiumUserConfig.h",
169*3ac0a46fSAndroid Build Coastguard Worker    "ext/google_logging.cc",
170*3ac0a46fSAndroid Build Coastguard Worker  ]
171*3ac0a46fSAndroid Build Coastguard Worker
172*3ac0a46fSAndroid Build Coastguard Worker  # The skia sources values are relative to the skia_dir, so we need to rebase.
173*3ac0a46fSAndroid Build Coastguard Worker  sources += skia_core_public
174*3ac0a46fSAndroid Build Coastguard Worker  sources += skia_sksl_gpu_sources
175*3ac0a46fSAndroid Build Coastguard Worker  sources += skia_sksl_sources
176*3ac0a46fSAndroid Build Coastguard Worker  sources += skia_utils_private
177*3ac0a46fSAndroid Build Coastguard Worker  sources += skia_xps_sources
178*3ac0a46fSAndroid Build Coastguard Worker  sources += skia_needs_sksl_sources
179*3ac0a46fSAndroid Build Coastguard Worker  sources += skia_codec_core
180*3ac0a46fSAndroid Build Coastguard Worker  sources += skia_codec_decode_bmp
181*3ac0a46fSAndroid Build Coastguard Worker  sources += skia_encode_srcs
182*3ac0a46fSAndroid Build Coastguard Worker  sources += skia_encode_png_srcs
183*3ac0a46fSAndroid Build Coastguard Worker  sources += [
184*3ac0a46fSAndroid Build Coastguard Worker    "//third_party/skia/src/fonts/SkFontMgr_indirect.cpp",
185*3ac0a46fSAndroid Build Coastguard Worker    "//third_party/skia/src/fonts/SkRemotableFontMgr.cpp",
186*3ac0a46fSAndroid Build Coastguard Worker    "//third_party/skia/src/ports/SkGlobalInitialization_default.cpp",
187*3ac0a46fSAndroid Build Coastguard Worker    "//third_party/skia/src/ports/SkImageGenerator_none.cpp",
188*3ac0a46fSAndroid Build Coastguard Worker    "//third_party/skia/src/ports/SkOSFile_stdio.cpp",
189*3ac0a46fSAndroid Build Coastguard Worker    "//third_party/skia/src/sfnt/SkOTTable_name.cpp",
190*3ac0a46fSAndroid Build Coastguard Worker    "//third_party/skia/src/sfnt/SkOTUtils.cpp",
191*3ac0a46fSAndroid Build Coastguard Worker
192*3ac0a46fSAndroid Build Coastguard Worker    #pdfium
193*3ac0a46fSAndroid Build Coastguard Worker    "//third_party/skia/src/ports/SkDiscardableMemory_none.cpp",
194*3ac0a46fSAndroid Build Coastguard Worker    "//third_party/skia/src/ports/SkMemory_malloc.cpp",
195*3ac0a46fSAndroid Build Coastguard Worker  ]
196*3ac0a46fSAndroid Build Coastguard Worker
197*3ac0a46fSAndroid Build Coastguard Worker  # This and skia_opts are really the same conceptual target so share headers.
198*3ac0a46fSAndroid Build Coastguard Worker  allow_circular_includes_from = [ ":skia_opts" ]
199*3ac0a46fSAndroid Build Coastguard Worker
200*3ac0a46fSAndroid Build Coastguard Worker  # GPU
201*3ac0a46fSAndroid Build Coastguard Worker  if (skia_use_ganesh_backend) {
202*3ac0a46fSAndroid Build Coastguard Worker    sources += skia_gpu_public
203*3ac0a46fSAndroid Build Coastguard Worker    sources += skia_ganesh_private
204*3ac0a46fSAndroid Build Coastguard Worker    sources += skia_null_gpu_sources
205*3ac0a46fSAndroid Build Coastguard Worker    sources += skia_shared_gpu_sources
206*3ac0a46fSAndroid Build Coastguard Worker    if (skia_use_gl) {
207*3ac0a46fSAndroid Build Coastguard Worker      sources += skia_gpu_gl_public
208*3ac0a46fSAndroid Build Coastguard Worker      sources += skia_gpu_gl_private
209*3ac0a46fSAndroid Build Coastguard Worker    }
210*3ac0a46fSAndroid Build Coastguard Worker  }
211*3ac0a46fSAndroid Build Coastguard Worker
212*3ac0a46fSAndroid Build Coastguard Worker  # Remove unused util files include in utils.gni
213*3ac0a46fSAndroid Build Coastguard Worker  sources -= [
214*3ac0a46fSAndroid Build Coastguard Worker    "//third_party/skia/src/utils/SkCamera.cpp",
215*3ac0a46fSAndroid Build Coastguard Worker    "//third_party/skia/src/utils/SkParsePath.cpp",
216*3ac0a46fSAndroid Build Coastguard Worker  ]
217*3ac0a46fSAndroid Build Coastguard Worker
218*3ac0a46fSAndroid Build Coastguard Worker  if (is_win) {
219*3ac0a46fSAndroid Build Coastguard Worker    libs = [ "fontsub.lib" ]
220*3ac0a46fSAndroid Build Coastguard Worker  }
221*3ac0a46fSAndroid Build Coastguard Worker
222*3ac0a46fSAndroid Build Coastguard Worker  # need separate win section to handle chromes auto gn filter
223*3ac0a46fSAndroid Build Coastguard Worker  # (build/config/BUILDCONFIG.gn)
224*3ac0a46fSAndroid Build Coastguard Worker  if (is_win) {
225*3ac0a46fSAndroid Build Coastguard Worker    sources -= [
226*3ac0a46fSAndroid Build Coastguard Worker      #windows
227*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/utils/win/SkWGL_win.cpp",
228*3ac0a46fSAndroid Build Coastguard Worker    ]
229*3ac0a46fSAndroid Build Coastguard Worker  }
230*3ac0a46fSAndroid Build Coastguard Worker
231*3ac0a46fSAndroid Build Coastguard Worker  # Select Skia ports.
232*3ac0a46fSAndroid Build Coastguard Worker
233*3ac0a46fSAndroid Build Coastguard Worker  # FreeType is needed everywhere (except on iOS), on Linux and Android as main
234*3ac0a46fSAndroid Build Coastguard Worker  # font backend, on Windows and Mac as fallback backend for Variations.
235*3ac0a46fSAndroid Build Coastguard Worker  if (!is_ios) {
236*3ac0a46fSAndroid Build Coastguard Worker    sources += [
237*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkFontHost_FreeType.cpp",
238*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkFontHost_FreeType_common.cpp",
239*3ac0a46fSAndroid Build Coastguard Worker    ]
240*3ac0a46fSAndroid Build Coastguard Worker  }
241*3ac0a46fSAndroid Build Coastguard Worker
242*3ac0a46fSAndroid Build Coastguard Worker  if (is_win) {
243*3ac0a46fSAndroid Build Coastguard Worker    sources += [
244*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkFontHost_win.cpp",
245*3ac0a46fSAndroid Build Coastguard Worker
246*3ac0a46fSAndroid Build Coastguard Worker      # TODO(crbug.com/pdfium/1830)  Consider using SkFontMgr_win_dw_factory
247*3ac0a46fSAndroid Build Coastguard Worker      # instead of SkFontMgr_custom_empty (which is what the embedder test
248*3ac0a46fSAndroid Build Coastguard Worker      # hashes are based upon).
249*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkFontMgr_custom.cpp",
250*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkFontMgr_custom_empty.cpp",
251*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkFontMgr_custom_empty_factory.cpp",
252*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkFontMgr_win_dw.cpp",
253*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkOSFile_win.cpp",
254*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkRemotableFontMgr_win_dw.cpp",
255*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkScalerContext_win_dw.cpp",
256*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkTypeface_win_dw.cpp",
257*3ac0a46fSAndroid Build Coastguard Worker    ]
258*3ac0a46fSAndroid Build Coastguard Worker  } else {
259*3ac0a46fSAndroid Build Coastguard Worker    sources += [ "//third_party/skia/src/ports/SkOSFile_posix.cpp" ]
260*3ac0a46fSAndroid Build Coastguard Worker  }
261*3ac0a46fSAndroid Build Coastguard Worker
262*3ac0a46fSAndroid Build Coastguard Worker  frameworks = []
263*3ac0a46fSAndroid Build Coastguard Worker  if (is_apple) {
264*3ac0a46fSAndroid Build Coastguard Worker    sources += [
265*3ac0a46fSAndroid Build Coastguard Worker      # TODO(crbug.com/pdfium/1830)  Consider using SkFontMgr_mac_ct instead of
266*3ac0a46fSAndroid Build Coastguard Worker      # SkFontMgr_custom_empty (which is what the embedder test hashes are
267*3ac0a46fSAndroid Build Coastguard Worker      # based upon).
268*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkFontMgr_custom.cpp",
269*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkFontMgr_custom_empty.cpp",
270*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkFontMgr_custom_empty_factory.cpp",
271*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkScalerContext_mac_ct.cpp",
272*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkScalerContext_mac_ct.h",
273*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkTypeface_mac_ct.cpp",
274*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkTypeface_mac_ct.h",
275*3ac0a46fSAndroid Build Coastguard Worker    ]
276*3ac0a46fSAndroid Build Coastguard Worker    frameworks += [
277*3ac0a46fSAndroid Build Coastguard Worker      "CoreFoundation.framework",
278*3ac0a46fSAndroid Build Coastguard Worker      "CoreGraphics.framework",
279*3ac0a46fSAndroid Build Coastguard Worker      "CoreText.framework",
280*3ac0a46fSAndroid Build Coastguard Worker    ]
281*3ac0a46fSAndroid Build Coastguard Worker  }
282*3ac0a46fSAndroid Build Coastguard Worker
283*3ac0a46fSAndroid Build Coastguard Worker  if (is_linux || is_chromeos) {
284*3ac0a46fSAndroid Build Coastguard Worker    sources += [
285*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkFontConfigInterface.cpp",
286*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkFontConfigInterface_direct.cpp",
287*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkFontConfigInterface_direct_factory.cpp",
288*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkFontMgr_FontConfigInterface.cpp",
289*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkFontMgr_custom.cpp",
290*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkFontMgr_custom_empty.cpp",
291*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkFontMgr_custom_empty_factory.cpp",
292*3ac0a46fSAndroid Build Coastguard Worker    ]
293*3ac0a46fSAndroid Build Coastguard Worker  }
294*3ac0a46fSAndroid Build Coastguard Worker
295*3ac0a46fSAndroid Build Coastguard Worker  if (is_android) {
296*3ac0a46fSAndroid Build Coastguard Worker    sources += [
297*3ac0a46fSAndroid Build Coastguard Worker      # Unlike Chromium, standalone PDFium on Linux and Chrome OS does not
298*3ac0a46fSAndroid Build Coastguard Worker      # require these files, since PDFium does not perform Android emulation.
299*3ac0a46fSAndroid Build Coastguard Worker      # Note that this requires expat.
300*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkFontMgr_android.cpp",
301*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkFontMgr_android_factory.cpp",
302*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkFontMgr_android_parser.cpp",
303*3ac0a46fSAndroid Build Coastguard Worker    ]
304*3ac0a46fSAndroid Build Coastguard Worker  }
305*3ac0a46fSAndroid Build Coastguard Worker
306*3ac0a46fSAndroid Build Coastguard Worker  if (is_fuchsia) {
307*3ac0a46fSAndroid Build Coastguard Worker    sources += [
308*3ac0a46fSAndroid Build Coastguard Worker      # TODO(crbug.com/pdfium/2019): Consider using SkFontMgr_fuchsia.cpp
309*3ac0a46fSAndroid Build Coastguard Worker      # instead of SkFontMgr_custom_empty.cpp.
310*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkFontMgr_custom.cpp",
311*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkFontMgr_custom_empty.cpp",
312*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/skia/src/ports/SkFontMgr_custom_empty_factory.cpp",
313*3ac0a46fSAndroid Build Coastguard Worker    ]
314*3ac0a46fSAndroid Build Coastguard Worker    deps += [
315*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.fonts:fuchsia.fonts_hlcpp",
316*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.io:fuchsia.io_hlcpp",
317*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.sys:fuchsia.sys_hlcpp",
318*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/fuchsia-sdk/sdk/pkg/sys_cpp",
319*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/fuchsia-sdk/sdk/pkg/zx",
320*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/icu:icuuc",
321*3ac0a46fSAndroid Build Coastguard Worker    ]
322*3ac0a46fSAndroid Build Coastguard Worker  }
323*3ac0a46fSAndroid Build Coastguard Worker
324*3ac0a46fSAndroid Build Coastguard Worker  if (is_clang && !is_nacl) {
325*3ac0a46fSAndroid Build Coastguard Worker    # Skia won't compile with some of the more strict clang warnings.
326*3ac0a46fSAndroid Build Coastguard Worker    # e.g. it does:
327*3ac0a46fSAndroid Build Coastguard Worker    #  SkASSERT(!"sk_out_of_memory");
328*3ac0a46fSAndroid Build Coastguard Worker    configs -= [ "//build/config/clang:extra_warnings" ]
329*3ac0a46fSAndroid Build Coastguard Worker  }
330*3ac0a46fSAndroid Build Coastguard Worker
331*3ac0a46fSAndroid Build Coastguard Worker  configs -= [ "//build/config/compiler:chromium_code" ]
332*3ac0a46fSAndroid Build Coastguard Worker  configs += [
333*3ac0a46fSAndroid Build Coastguard Worker    ":skia_config",
334*3ac0a46fSAndroid Build Coastguard Worker    ":skia_library_config",
335*3ac0a46fSAndroid Build Coastguard Worker    "//build/config/compiler:no_chromium_code",
336*3ac0a46fSAndroid Build Coastguard Worker  ]
337*3ac0a46fSAndroid Build Coastguard Worker  public_configs = [ ":skia_config" ]
338*3ac0a46fSAndroid Build Coastguard Worker
339*3ac0a46fSAndroid Build Coastguard Worker  deps += [
340*3ac0a46fSAndroid Build Coastguard Worker    ":skcms",
341*3ac0a46fSAndroid Build Coastguard Worker    ":skia_opts",
342*3ac0a46fSAndroid Build Coastguard Worker    "../third_party:png",
343*3ac0a46fSAndroid Build Coastguard Worker    "../third_party:zlib",
344*3ac0a46fSAndroid Build Coastguard Worker    "//:freetype_common",
345*3ac0a46fSAndroid Build Coastguard Worker  ]
346*3ac0a46fSAndroid Build Coastguard Worker  public_deps = [ ":skia_core_and_effects" ]
347*3ac0a46fSAndroid Build Coastguard Worker
348*3ac0a46fSAndroid Build Coastguard Worker  if (is_linux || is_chromeos) {
349*3ac0a46fSAndroid Build Coastguard Worker    deps += [
350*3ac0a46fSAndroid Build Coastguard Worker      "//third_party:fontconfig",
351*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/icu:icuuc",
352*3ac0a46fSAndroid Build Coastguard Worker    ]
353*3ac0a46fSAndroid Build Coastguard Worker  }
354*3ac0a46fSAndroid Build Coastguard Worker
355*3ac0a46fSAndroid Build Coastguard Worker  if (is_android) {
356*3ac0a46fSAndroid Build Coastguard Worker    deps += [
357*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/cpu_features:ndk_compat",
358*3ac0a46fSAndroid Build Coastguard Worker      "//third_party/expat",
359*3ac0a46fSAndroid Build Coastguard Worker    ]
360*3ac0a46fSAndroid Build Coastguard Worker  }
361*3ac0a46fSAndroid Build Coastguard Worker
362*3ac0a46fSAndroid Build Coastguard Worker  if (is_android && !is_debug) {
363*3ac0a46fSAndroid Build Coastguard Worker    configs -= [ "//build/config/compiler:default_optimization" ]
364*3ac0a46fSAndroid Build Coastguard Worker    configs += [ "//build/config/compiler:optimize_max" ]
365*3ac0a46fSAndroid Build Coastguard Worker  }
366*3ac0a46fSAndroid Build Coastguard Worker
367*3ac0a46fSAndroid Build Coastguard Worker  if (is_ios) {
368*3ac0a46fSAndroid Build Coastguard Worker    frameworks += [ "ImageIO.framework" ]
369*3ac0a46fSAndroid Build Coastguard Worker  }
370*3ac0a46fSAndroid Build Coastguard Worker
371*3ac0a46fSAndroid Build Coastguard Worker  if (skia_support_pdf) {
372*3ac0a46fSAndroid Build Coastguard Worker    deps += [ "//third_party/sfntly" ]
373*3ac0a46fSAndroid Build Coastguard Worker    sources += skia_pdf_sources
374*3ac0a46fSAndroid Build Coastguard Worker  } else {
375*3ac0a46fSAndroid Build Coastguard Worker    sources += [ "//third_party/skia/src/pdf/SkDocument_PDF_None.cpp" ]
376*3ac0a46fSAndroid Build Coastguard Worker  }
377*3ac0a46fSAndroid Build Coastguard Worker}
378*3ac0a46fSAndroid Build Coastguard Worker
379*3ac0a46fSAndroid Build Coastguard Worker# Template for things that are logically part of :skia, but need to be split out
380*3ac0a46fSAndroid Build Coastguard Worker# so custom compile flags can be applied.
381*3ac0a46fSAndroid Build Coastguard Worker#
382*3ac0a46fSAndroid Build Coastguard Worker# These are all opted out of check_includes, due to (logically) being part of
383*3ac0a46fSAndroid Build Coastguard Worker# skia.
384*3ac0a46fSAndroid Build Coastguard Workertemplate("skia_source_set") {
385*3ac0a46fSAndroid Build Coastguard Worker  source_set(target_name) {
386*3ac0a46fSAndroid Build Coastguard Worker    forward_variables_from(invoker, "*")
387*3ac0a46fSAndroid Build Coastguard Worker
388*3ac0a46fSAndroid Build Coastguard Worker    check_includes = false
389*3ac0a46fSAndroid Build Coastguard Worker
390*3ac0a46fSAndroid Build Coastguard Worker    if (!is_debug) {
391*3ac0a46fSAndroid Build Coastguard Worker      configs -= [ "//build/config/compiler:default_optimization" ]
392*3ac0a46fSAndroid Build Coastguard Worker      configs += [ "//build/config/compiler:optimize_max" ]
393*3ac0a46fSAndroid Build Coastguard Worker    }
394*3ac0a46fSAndroid Build Coastguard Worker
395*3ac0a46fSAndroid Build Coastguard Worker    configs -= [ "//build/config/compiler:chromium_code" ]
396*3ac0a46fSAndroid Build Coastguard Worker    configs += [
397*3ac0a46fSAndroid Build Coastguard Worker      ":skia_config",
398*3ac0a46fSAndroid Build Coastguard Worker      ":skia_library_config",
399*3ac0a46fSAndroid Build Coastguard Worker      "//build/config/compiler:no_chromium_code",
400*3ac0a46fSAndroid Build Coastguard Worker    ]
401*3ac0a46fSAndroid Build Coastguard Worker    public_configs = [ ":skia_config" ]
402*3ac0a46fSAndroid Build Coastguard Worker
403*3ac0a46fSAndroid Build Coastguard Worker    if (is_win) {
404*3ac0a46fSAndroid Build Coastguard Worker      cflags_cc = [
405*3ac0a46fSAndroid Build Coastguard Worker        "/wd5041",  # out-of-line definition for constexpr static data member is
406*3ac0a46fSAndroid Build Coastguard Worker                    # not needed and is deprecated in C++17
407*3ac0a46fSAndroid Build Coastguard Worker      ]
408*3ac0a46fSAndroid Build Coastguard Worker    }
409*3ac0a46fSAndroid Build Coastguard Worker  }
410*3ac0a46fSAndroid Build Coastguard Worker}
411*3ac0a46fSAndroid Build Coastguard Worker
412*3ac0a46fSAndroid Build Coastguard Workerskia_source_set("skia_core_and_effects") {
413*3ac0a46fSAndroid Build Coastguard Worker  defines = []
414*3ac0a46fSAndroid Build Coastguard Worker  sources = skia_core_sources
415*3ac0a46fSAndroid Build Coastguard Worker  sources += skia_effects_sources
416*3ac0a46fSAndroid Build Coastguard Worker  sources += skia_colorfilters_sources
417*3ac0a46fSAndroid Build Coastguard Worker  sources += skia_colorfilters_sksl_sources
418*3ac0a46fSAndroid Build Coastguard Worker  sources += skia_effects_imagefilter_sources
419*3ac0a46fSAndroid Build Coastguard Worker
420*3ac0a46fSAndroid Build Coastguard Worker  visibility = [ ":skia" ]
421*3ac0a46fSAndroid Build Coastguard Worker}
422*3ac0a46fSAndroid Build Coastguard Worker
423*3ac0a46fSAndroid Build Coastguard Worker# Bits that involve special vector-y hardware.
424*3ac0a46fSAndroid Build Coastguard Workerif (current_cpu == "x86" || current_cpu == "x64") {
425*3ac0a46fSAndroid Build Coastguard Worker  skia_source_set("skia_opts_sse3") {
426*3ac0a46fSAndroid Build Coastguard Worker    sources = skia_opts.ssse3_sources
427*3ac0a46fSAndroid Build Coastguard Worker    if (!is_win || is_clang) {
428*3ac0a46fSAndroid Build Coastguard Worker      cflags = [ "-mssse3" ]
429*3ac0a46fSAndroid Build Coastguard Worker    }
430*3ac0a46fSAndroid Build Coastguard Worker    if (is_win) {
431*3ac0a46fSAndroid Build Coastguard Worker      defines = [ "SK_CPU_SSE_LEVEL=31" ]
432*3ac0a46fSAndroid Build Coastguard Worker    }
433*3ac0a46fSAndroid Build Coastguard Worker    visibility = [ ":skia_opts" ]
434*3ac0a46fSAndroid Build Coastguard Worker  }
435*3ac0a46fSAndroid Build Coastguard Worker  skia_source_set("skia_opts_avx") {
436*3ac0a46fSAndroid Build Coastguard Worker    sources = skia_opts.avx_sources
437*3ac0a46fSAndroid Build Coastguard Worker    if (!is_win) {
438*3ac0a46fSAndroid Build Coastguard Worker      cflags = [ "-mavx" ]
439*3ac0a46fSAndroid Build Coastguard Worker    }
440*3ac0a46fSAndroid Build Coastguard Worker    if (is_win) {
441*3ac0a46fSAndroid Build Coastguard Worker      cflags = [ "/arch:AVX" ]
442*3ac0a46fSAndroid Build Coastguard Worker    }
443*3ac0a46fSAndroid Build Coastguard Worker    visibility = [ ":skia_opts" ]
444*3ac0a46fSAndroid Build Coastguard Worker  }
445*3ac0a46fSAndroid Build Coastguard Worker  skia_source_set("skia_opts_hsw") {
446*3ac0a46fSAndroid Build Coastguard Worker    sources = skia_opts.hsw_sources
447*3ac0a46fSAndroid Build Coastguard Worker    if (!is_win) {
448*3ac0a46fSAndroid Build Coastguard Worker      cflags = [
449*3ac0a46fSAndroid Build Coastguard Worker        "-mavx2",
450*3ac0a46fSAndroid Build Coastguard Worker        "-mbmi",
451*3ac0a46fSAndroid Build Coastguard Worker        "-mbmi2",
452*3ac0a46fSAndroid Build Coastguard Worker        "-mf16c",
453*3ac0a46fSAndroid Build Coastguard Worker        "-mfma",
454*3ac0a46fSAndroid Build Coastguard Worker      ]
455*3ac0a46fSAndroid Build Coastguard Worker    }
456*3ac0a46fSAndroid Build Coastguard Worker    if (is_win) {
457*3ac0a46fSAndroid Build Coastguard Worker      cflags = [ "/arch:AVX2" ]
458*3ac0a46fSAndroid Build Coastguard Worker    }
459*3ac0a46fSAndroid Build Coastguard Worker    visibility = [ ":skia_opts" ]
460*3ac0a46fSAndroid Build Coastguard Worker  }
461*3ac0a46fSAndroid Build Coastguard Worker}
462*3ac0a46fSAndroid Build Coastguard Worker
463*3ac0a46fSAndroid Build Coastguard Workerskia_source_set("skia_opts") {
464*3ac0a46fSAndroid Build Coastguard Worker  cflags = []
465*3ac0a46fSAndroid Build Coastguard Worker  defines = []
466*3ac0a46fSAndroid Build Coastguard Worker
467*3ac0a46fSAndroid Build Coastguard Worker  if (current_cpu == "x86" || current_cpu == "x64") {
468*3ac0a46fSAndroid Build Coastguard Worker    deps = [
469*3ac0a46fSAndroid Build Coastguard Worker      ":skia_opts_avx",
470*3ac0a46fSAndroid Build Coastguard Worker      ":skia_opts_hsw",
471*3ac0a46fSAndroid Build Coastguard Worker      ":skia_opts_sse3",
472*3ac0a46fSAndroid Build Coastguard Worker    ]
473*3ac0a46fSAndroid Build Coastguard Worker  } else if (current_cpu == "arm") {
474*3ac0a46fSAndroid Build Coastguard Worker    # The assembly uses the frame pointer register (r7 in Thumb/r11 in
475*3ac0a46fSAndroid Build Coastguard Worker    # ARM), the compiler doesn't like that.
476*3ac0a46fSAndroid Build Coastguard Worker    cflags += [ "-fomit-frame-pointer" ]
477*3ac0a46fSAndroid Build Coastguard Worker
478*3ac0a46fSAndroid Build Coastguard Worker    if (arm_version >= 7) {
479*3ac0a46fSAndroid Build Coastguard Worker      if (arm_use_neon || arm_optionally_use_neon) {
480*3ac0a46fSAndroid Build Coastguard Worker        # Root build config sets -mfpu=$arm_fpu, which we expect to be neon
481*3ac0a46fSAndroid Build Coastguard Worker        # when running this.
482*3ac0a46fSAndroid Build Coastguard Worker        if (!arm_use_neon) {
483*3ac0a46fSAndroid Build Coastguard Worker          configs -= [ "//build/config/compiler:compiler_arm_fpu" ]
484*3ac0a46fSAndroid Build Coastguard Worker          cflags += [ "-mfpu=neon" ]
485*3ac0a46fSAndroid Build Coastguard Worker        }
486*3ac0a46fSAndroid Build Coastguard Worker      }
487*3ac0a46fSAndroid Build Coastguard Worker    }
488*3ac0a46fSAndroid Build Coastguard Worker  } else if (current_cpu == "arm64") {
489*3ac0a46fSAndroid Build Coastguard Worker    # Conditional and empty body needed to avoid assert below
490*3ac0a46fSAndroid Build Coastguard Worker  } else if (current_cpu == "mipsel" || current_cpu == "mips64el") {
491*3ac0a46fSAndroid Build Coastguard Worker    cflags += [ "-fomit-frame-pointer" ]
492*3ac0a46fSAndroid Build Coastguard Worker  } else {
493*3ac0a46fSAndroid Build Coastguard Worker    assert(false, "Unsupported target CPU " + current_cpu)
494*3ac0a46fSAndroid Build Coastguard Worker  }
495*3ac0a46fSAndroid Build Coastguard Worker
496*3ac0a46fSAndroid Build Coastguard Worker  if (is_android && !is_debug) {
497*3ac0a46fSAndroid Build Coastguard Worker    configs -= [ "//build/config/compiler:default_optimization" ]
498*3ac0a46fSAndroid Build Coastguard Worker    configs += [ "//build/config/compiler:optimize_max" ]
499*3ac0a46fSAndroid Build Coastguard Worker  }
500*3ac0a46fSAndroid Build Coastguard Worker
501*3ac0a46fSAndroid Build Coastguard Worker  visibility = [ ":skia" ]
502*3ac0a46fSAndroid Build Coastguard Worker}
503