blob: 657208f0292058c5dfa5ac85ff50f2d8575bf4b5 [file] [log] [blame]
mtkleinc04ff472016-06-23 10:29:30 -07001# Copyright 2016 Google Inc.
2#
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
Brian Osmanf2c90142017-07-13 15:50:03 -04006import("gn/flutter_defines.gni")
Mike Reed025f7832018-11-12 09:27:05 -05007import("gn/fuchsia_defines.gni")
mikejurka8c24f4f2016-09-12 16:51:58 -07008import("gn/shared_sources.gni")
Hal Canary32498f02019-02-04 15:36:31 -05009import("gn/skia.gni")
brettwb9447282016-09-01 14:24:39 -070010
Forrest Reiling30229ac2017-04-17 13:36:39 -070011if (is_fuchsia) {
12 import("//build/vulkan/config.gni")
13}
14
mtkleinc04ff472016-06-23 10:29:30 -070015declare_args() {
Mike Klein26a60492018-10-15 10:38:25 -040016 skia_enable_flutter_defines = false
17}
18
19declare_args() {
Mike Kleinc168a3a2016-11-14 14:53:13 +000020 skia_use_angle = false
Kevin Lubick4a24e102017-03-29 11:19:01 -040021 skia_use_egl = false
mtklein63213812016-08-24 09:55:56 -070022 skia_use_expat = true
mtklein3cc22182016-08-29 13:26:14 -070023 skia_use_fontconfig = is_linux
Leon Scroggins III85e22fc2018-11-28 08:58:47 -050024 skia_use_fonthost_mac = is_mac
mtkleincdedd0e2016-09-12 15:15:44 -070025 skia_use_freetype = is_android || is_fuchsia || is_linux
Leon Scroggins IIIc41a5f52018-11-15 15:54:59 -050026 skia_use_fixed_gamma_text = is_android
mtklein63213812016-08-24 09:55:56 -070027 skia_use_libjpeg_turbo = true
28 skia_use_libpng = true
mtkleineb3c4252016-08-23 07:38:09 -070029 skia_use_libwebp = !is_fuchsia
Mike Kleinfae86b72018-01-08 15:49:09 -050030 skia_use_lua = is_skia_dev_build && !is_ios
Mike Kleinf9ae6702018-06-20 14:05:05 -040031 skia_use_opencl = false
Mike Klein10d665d2016-11-01 11:46:10 -040032 skia_use_piex = !is_win
Leon Scroggins IIIe93ec682018-10-26 09:25:51 -040033 skia_use_wuffs = false
mtklein63213812016-08-24 09:55:56 -070034 skia_use_zlib = true
Greg Daniele5ddff52017-07-05 16:49:36 -040035 skia_use_metal = false
Mike Klein36f182f2017-10-20 12:33:53 -040036 skia_use_libheif = is_skia_dev_build
Chinmay Garded92d0352018-09-17 10:23:28 -070037 skia_use_x11 = is_linux
Leon Scroggins IIIee0e5d02019-02-27 10:59:11 -050038 skia_use_xps = true
mtklein1bd72ba2016-09-16 07:45:52 -070039
Mike Klein7d921032017-01-05 12:20:41 -050040 skia_android_serial = ""
Kevin Lubick93faa672018-10-10 15:54:53 -040041 skia_enable_ccpr = true
Kevin Lubickca7c2972018-10-17 13:52:24 +000042 skia_enable_nvpr = !skia_enable_flutter_defines
Brian Osman3f375d02016-12-28 11:19:22 -050043 skia_enable_discrete_gpu = true
Kevin Lubick134be1d2018-10-30 15:05:04 -040044 skia_enable_nima = false
Hal Canary43fb7a02016-12-30 13:09:03 -050045 skia_enable_pdf = true
Ethan Nicholasa6ae1f72017-03-16 09:56:54 -040046 skia_enable_spirv_validation = is_skia_dev_build && is_debug
Kevin Lubick32dfdbe2018-10-18 09:47:01 -040047 skia_enable_skpicture = true
Mike Klein3669a822017-03-03 10:55:02 -050048 skia_enable_vulkan_debug_layers = is_skia_dev_build && is_debug
Robert Phillipsa6d2d702017-09-01 12:17:03 -040049 skia_qt_path = getenv("QT_PATH")
Ethan Nicholas762466e2017-06-29 10:03:38 -040050 skia_compile_processors = false
Adrienne Walker1df7cd82018-04-18 13:46:25 -070051 skia_generate_workarounds = false
Ethan Nicholas5b5f0962017-09-11 13:50:14 -070052 skia_lex = false
Mike Kleinc55a6cb2017-06-28 13:21:47 -040053
Hal Canary2331c822018-02-01 14:06:13 -050054 skia_skqp_global_error_tolerance = 0
Ethan Nicholas26a9aad2018-03-27 14:10:52 -040055
56 skia_llvm_path = ""
57 skia_llvm_lib = "LLVM"
Hal Canaryfd9bcab2018-04-24 11:47:23 -040058
59 skia_tools_require_resources = false
mtkleinc04ff472016-06-23 10:29:30 -070060}
Brian Salomon23d73ea2016-10-27 13:31:37 -040061declare_args() {
Matt Sarett189491c2017-03-20 18:09:30 -040062 skia_use_dng_sdk = !is_fuchsia && skia_use_libjpeg_turbo && skia_use_zlib
Mike Klein10d665d2016-11-01 11:46:10 -040063 skia_use_sfntly = skia_use_icu
Brian Salomoncbcb0a12017-11-19 13:20:13 -050064 skia_enable_atlas_text = is_skia_dev_build && skia_enable_gpu
Leon Scroggins IIIbe85c192018-11-13 13:50:12 -050065 skia_enable_fontmgr_empty = false
Kevin Lubickddd0a332018-12-12 10:35:13 -050066 skia_enable_fontmgr_custom =
67 is_linux && skia_use_freetype && !skia_use_fontconfig
Leon Scroggins IIIbe85c192018-11-13 13:50:12 -050068 skia_enable_fontmgr_custom_empty = is_fuchsia && skia_use_freetype
69 skia_enable_fontmgr_android = skia_use_expat && skia_use_freetype
Sergey Ulanovf3babcd2018-11-30 17:42:00 -080070 skia_enable_fontmgr_fuchsia = is_fuchsia
Leon Scroggins III631dbc82019-03-04 13:54:02 -050071 skia_enable_fontmgr_win = is_win
72 skia_enable_fontmgr_win_gdi = is_win
Mike Klein10d665d2016-11-01 11:46:10 -040073
Kevin Lubick27ba7032019-03-21 08:13:54 -040074 if (is_mac) {
75 skia_gl_standard = "gl"
76 } else if (is_ios) {
77 skia_gl_standard = "gles"
78 } else {
79 skia_gl_standard = ""
80 }
81
Mike Klein4d598a32016-10-31 13:44:49 -040082 if (is_android) {
83 skia_use_vulkan = defined(ndk_api) && ndk_api >= 24
Forrest Reiling30229ac2017-04-17 13:36:39 -070084 } else if (is_fuchsia) {
85 skia_use_vulkan = fuchsia_use_vulkan
Mike Klein4d598a32016-10-31 13:44:49 -040086 } else {
Mike Klein98dea7b2019-01-15 11:26:43 -050087 skia_use_vulkan = defined(skia_moltenvk_path) && skia_moltenvk_path != ""
Mike Klein4d598a32016-10-31 13:44:49 -040088 }
Jim Van Verth4e502972017-12-07 15:16:10 -050089
90 if (is_ios) {
91 skia_ios_identity = ".*Google.*"
92 skia_ios_profile = "Google Development"
93 }
Brian Salomon23d73ea2016-10-27 13:31:37 -040094}
Brian Salomon789e25e2016-09-30 13:41:03 -040095
Adam Barth54ef74a2017-10-13 10:59:38 -070096if (defined(skia_settings)) {
97 import(skia_settings)
98}
99
mtklein1211e0c2016-07-26 13:55:45 -0700100skia_public_includes = [
mtklein25c81d42016-07-27 13:55:26 -0700101 "include/android",
Mike Klein1f4c2bd2019-04-23 12:06:25 -0500102 "include/atlastext",
mtkleinfa84d942016-07-28 09:45:14 -0700103 "include/c",
mtklein1211e0c2016-07-26 13:55:45 -0700104 "include/codec",
105 "include/config",
106 "include/core",
Hal Canary23564b92018-09-07 14:33:14 -0400107 "include/docs",
mtklein1211e0c2016-07-26 13:55:45 -0700108 "include/effects",
Matt Sarett94fd06f2017-05-08 17:31:00 -0400109 "include/encode",
mtklein1211e0c2016-07-26 13:55:45 -0700110 "include/gpu",
mtklein1211e0c2016-07-26 13:55:45 -0700111 "include/pathops",
112 "include/ports",
mtklein25c81d42016-07-27 13:55:26 -0700113 "include/svg",
mtklein1211e0c2016-07-26 13:55:45 -0700114 "include/utils",
115 "include/utils/mac",
Brian Osmanc3186302019-04-22 14:24:54 -0400116 "third_party/skcms",
mtklein1211e0c2016-07-26 13:55:45 -0700117]
118
mtkleinc04ff472016-06-23 10:29:30 -0700119# Skia public API, generally provided by :skia.
120config("skia_public") {
mtklein1211e0c2016-07-26 13:55:45 -0700121 include_dirs = skia_public_includes
Mike Kleinae7e6712016-10-11 17:49:33 -0400122 defines = []
123 if (is_component_build) {
124 defines += [ "SKIA_DLL" ]
125 }
Mike Kleinc4cbd742016-09-26 21:37:09 -0400126 if (is_fuchsia || is_linux) {
jcgregorio5561e3d2016-08-25 09:25:11 -0700127 defines += [ "SK_SAMPLES_FOR_X" ]
128 }
Brian Osmanf2c90142017-07-13 15:50:03 -0400129 if (skia_enable_flutter_defines) {
130 defines += flutter_defines
131 }
mtklein06c35c02016-09-20 12:28:12 -0700132 if (!skia_enable_gpu) {
133 defines += [ "SK_SUPPORT_GPU=0" ]
134 }
Brian Salomoncbcb0a12017-11-19 13:20:13 -0500135 if (skia_enable_atlas_text) {
136 defines += [ "SK_SUPPORT_ATLAS_TEXT=1" ]
137 }
Mike Reed025f7832018-11-12 09:27:05 -0500138 if (is_fuchsia) {
139 defines += fuchsia_defines
140 }
Kevin Lubick27ba7032019-03-21 08:13:54 -0400141 if (skia_gl_standard == "gles") {
142 defines += [ "SK_ASSUME_GL_ES=1" ]
143 } else if (skia_gl_standard == "gl") {
144 defines += [ "SK_ASSUME_GL=1" ]
Kevin Lubick39026282019-03-28 12:46:40 -0400145 } else if (skia_gl_standard == "webgl") {
146 defines += [ "SK_ASSUME_WEBGL=1" ]
Kevin Lubick27ba7032019-03-21 08:13:54 -0400147 }
mtkleinc04ff472016-06-23 10:29:30 -0700148}
149
150# Skia internal APIs, used by Skia itself and a few test tools.
151config("skia_private") {
152 visibility = [ ":*" ]
153
154 include_dirs = [
155 "include/private",
156 "src/c",
mtklein1211e0c2016-07-26 13:55:45 -0700157 "src/codec",
mtkleinc04ff472016-06-23 10:29:30 -0700158 "src/core",
159 "src/effects",
mtklein25c81d42016-07-27 13:55:26 -0700160 "src/fonts",
mtkleinc04ff472016-06-23 10:29:30 -0700161 "src/image",
162 "src/images",
163 "src/lazy",
164 "src/opts",
165 "src/pathops",
mtklein2b6870c2016-07-28 14:17:33 -0700166 "src/pdf",
mtkleinc04ff472016-06-23 10:29:30 -0700167 "src/ports",
168 "src/sfnt",
Florin Malita5edba452017-05-30 16:39:47 -0400169 "src/shaders",
170 "src/shaders/gradients",
mtklein9e0d9dd2016-08-30 10:37:19 -0700171 "src/sksl",
mtkleinc04ff472016-06-23 10:29:30 -0700172 "src/utils",
mtklein7a1f45f2016-08-04 06:19:33 -0700173 "src/utils/win",
Herb Derby5a8fe972017-02-14 14:42:30 -0500174 "src/xml",
Jim Van Verth1676cb92019-01-15 13:24:45 -0500175 "third_party/etc1",
scroggo19b91532016-10-24 09:03:26 -0700176 "third_party/gif",
mtkleinc04ff472016-06-23 10:29:30 -0700177 ]
mtklein150d1132016-08-01 06:56:40 -0700178
Mike Reeda9e241d2017-05-03 10:52:00 -0400179 defines = [ "SK_GAMMA_APPLY_TO_A8" ]
Leon Scroggins IIIc41a5f52018-11-15 15:54:59 -0500180 if (skia_use_fixed_gamma_text) {
mtkleinb37c0342016-09-09 11:07:45 -0700181 defines += [
182 "SK_GAMMA_EXPONENT=1.4",
183 "SK_GAMMA_CONTRAST=0.0",
184 ]
185 }
mtklein88a7ac02016-09-14 11:16:49 -0700186 if (is_official_build || is_android) {
187 # TODO(bsalomon): it'd be nice to make Android normal.
188 defines += [ "SK_ALLOW_STATIC_GLOBAL_INITIALIZERS=0" ]
189 }
Brian Salomon789e25e2016-09-30 13:41:03 -0400190 libs = []
191 lib_dirs = []
Brian Salomon03e05842017-02-23 12:23:47 -0500192 if (skia_enable_gpu) {
193 include_dirs += [ "src/gpu" ]
Greg Danielafb7ec72017-12-07 12:48:30 -0500194 if (is_skia_dev_build && skia_use_vulkan) {
195 include_dirs += [ "tools/gpu/vk" ]
196 }
Brian Salomon03e05842017-02-23 12:23:47 -0500197 }
Brian Osman34755e22016-12-05 09:46:02 -0500198 if (skia_use_angle) {
199 defines += [ "SK_ANGLE" ]
200 }
Brian Salomon0c26a9d2017-07-06 10:09:38 -0400201 if (!is_official_build) {
202 defines += [ "GR_TEST_UTILS=1" ]
203 }
Ethan Nicholas26a9aad2018-03-27 14:10:52 -0400204 if (skia_llvm_path != "") {
205 defines += [ "SK_LLVM_AVAILABLE" ]
206 include_dirs += [ "$skia_llvm_path/include" ]
207 libs += [ skia_llvm_lib ]
208 lib_dirs += [ "$skia_llvm_path/lib/" ]
209 }
mtkleinc04ff472016-06-23 10:29:30 -0700210}
211
212# Any code that's linked into Skia-the-library should use this config via += skia_library_configs.
213config("skia_library") {
214 visibility = [ ":*" ]
mtkleinc04ff472016-06-23 10:29:30 -0700215 defines = [ "SKIA_IMPLEMENTATION=1" ]
216}
217
218skia_library_configs = [
219 ":skia_public",
220 ":skia_private",
221 ":skia_library",
222]
223
mtklein9b8583d2016-08-24 17:32:30 -0700224# Use for CPU-specific Skia code that needs particular compiler flags.
225template("opts") {
Mike Klein6d1df6d2018-11-07 15:03:58 -0500226 visibility = [ ":*" ]
mtklein9b8583d2016-08-24 17:32:30 -0700227 if (invoker.enabled) {
228 source_set(target_name) {
Hal Canaryc25f4e92019-02-26 11:54:25 -0500229 check_includes = false
mtklein9b8583d2016-08-24 17:32:30 -0700230 forward_variables_from(invoker, "*")
231 configs += skia_library_configs
232 }
233 } else {
234 # If not enabled, a phony empty target that swallows all otherwise unused variables.
235 source_set(target_name) {
Hal Canaryc25f4e92019-02-26 11:54:25 -0500236 check_includes = false
mtklein9b8583d2016-08-24 17:32:30 -0700237 forward_variables_from(invoker,
238 "*",
239 [
240 "sources",
241 "cflags",
242 ])
243 }
244 }
anmittala7eaf2e2016-08-17 13:57:26 -0700245}
246
mtklein422310d2016-08-16 18:28:43 -0700247is_x86 = current_cpu == "x64" || current_cpu == "x86"
mtkleinc04ff472016-06-23 10:29:30 -0700248
mtklein7d6fb2c2016-08-25 14:50:44 -0700249opts("none") {
250 enabled = !is_x86 && current_cpu != "arm" && current_cpu != "arm64"
brettwb9447282016-09-01 14:24:39 -0700251 sources = skia_opts.none_sources
anmittalb8b3f712016-08-25 04:55:19 -0700252 cflags = []
253}
254
mtklein7d6fb2c2016-08-25 14:50:44 -0700255opts("armv7") {
anmittalb8b3f712016-08-25 04:55:19 -0700256 enabled = current_cpu == "arm"
brettwb9447282016-09-01 14:24:39 -0700257 sources = skia_opts.armv7_sources + skia_opts.neon_sources
mtklein7d6fb2c2016-08-25 14:50:44 -0700258 cflags = []
anmittalb8b3f712016-08-25 04:55:19 -0700259}
260
261opts("arm64") {
262 enabled = current_cpu == "arm64"
brettwb9447282016-09-01 14:24:39 -0700263 sources = skia_opts.arm64_sources
anmittalb8b3f712016-08-25 04:55:19 -0700264 cflags = []
265}
266
267opts("crc32") {
268 enabled = current_cpu == "arm64"
brettwb9447282016-09-01 14:24:39 -0700269 sources = skia_opts.crc32_sources
anmittalb8b3f712016-08-25 04:55:19 -0700270 cflags = [ "-march=armv8-a+crc" ]
271}
272
mtklein9b8583d2016-08-24 17:32:30 -0700273opts("sse2") {
274 enabled = is_x86
brettwb9447282016-09-01 14:24:39 -0700275 sources = skia_opts.sse2_sources
Mike Kleinc722f792017-07-31 11:57:21 -0400276 if (!is_clang && is_win) {
Mike Kleind8765e32016-10-19 13:39:13 -0400277 defines = [ "SK_CPU_SSE_LEVEL=SK_CPU_SSE_LEVEL_SSE2" ]
278 } else {
Mike Klein3eb71212016-10-11 17:08:53 -0400279 cflags = [ "-msse2" ]
280 }
mtklein9b8583d2016-08-24 17:32:30 -0700281}
mtkleinc04ff472016-06-23 10:29:30 -0700282
mtklein9b8583d2016-08-24 17:32:30 -0700283opts("ssse3") {
284 enabled = is_x86
brettwb9447282016-09-01 14:24:39 -0700285 sources = skia_opts.ssse3_sources
Mike Kleinc722f792017-07-31 11:57:21 -0400286 if (!is_clang && is_win) {
Mike Kleind8765e32016-10-19 13:39:13 -0400287 defines = [ "SK_CPU_SSE_LEVEL=SK_CPU_SSE_LEVEL_SSSE3" ]
288 } else {
Mike Klein3eb71212016-10-11 17:08:53 -0400289 cflags = [ "-mssse3" ]
290 }
mtklein9b8583d2016-08-24 17:32:30 -0700291}
mtkleinc04ff472016-06-23 10:29:30 -0700292
mtklein9b8583d2016-08-24 17:32:30 -0700293opts("sse41") {
294 enabled = is_x86
brettwb9447282016-09-01 14:24:39 -0700295 sources = skia_opts.sse41_sources
Mike Kleinc722f792017-07-31 11:57:21 -0400296 if (!is_clang && is_win) {
Mike Kleind8765e32016-10-19 13:39:13 -0400297 defines = [ "SK_CPU_SSE_LEVEL=SK_CPU_SSE_LEVEL_SSE41" ]
298 } else {
Mike Klein3eb71212016-10-11 17:08:53 -0400299 cflags = [ "-msse4.1" ]
300 }
mtklein9b8583d2016-08-24 17:32:30 -0700301}
mtklein4e976072016-08-08 09:06:27 -0700302
mtklein9b8583d2016-08-24 17:32:30 -0700303opts("sse42") {
304 enabled = is_x86
brettwb9447282016-09-01 14:24:39 -0700305 sources = skia_opts.sse42_sources
Mike Kleinc722f792017-07-31 11:57:21 -0400306 if (!is_clang && is_win) {
Mike Kleind8765e32016-10-19 13:39:13 -0400307 defines = [ "SK_CPU_SSE_LEVEL=SK_CPU_SSE_LEVEL_SSE42" ]
308 } else {
Mike Klein3eb71212016-10-11 17:08:53 -0400309 cflags = [ "-msse4.2" ]
310 }
mtklein9b8583d2016-08-24 17:32:30 -0700311}
312
313opts("avx") {
314 enabled = is_x86
brettwb9447282016-09-01 14:24:39 -0700315 sources = skia_opts.avx_sources
Mike Klein4d4b3aa2018-03-21 13:07:35 -0400316 if (is_win) {
Mike Klein17b6e482016-11-18 22:11:41 +0000317 cflags = [ "/arch:AVX" ]
Mike Klein3eb71212016-10-11 17:08:53 -0400318 } else {
319 cflags = [ "-mavx" ]
320 }
mtkleinc04ff472016-06-23 10:29:30 -0700321}
322
Mike Klein1b9b7d52018-02-27 10:37:40 -0500323opts("hsw") {
324 enabled = is_x86
325 sources = skia_opts.hsw_sources
Mike Klein4d4b3aa2018-03-21 13:07:35 -0400326 if (is_win) {
Mike Klein1b9b7d52018-02-27 10:37:40 -0500327 cflags = [ "/arch:AVX2" ]
328 } else {
Mike Kleine87c4862018-03-23 00:13:58 +0000329 cflags = [ "-march=haswell" ]
Mike Klein1b9b7d52018-02-27 10:37:40 -0500330 }
331
332 # Oddly, clang-cl doesn't recognize this as a valid flag.
333 # If it ever does, it'd nice to move this up with -mavx2 and co.
334 if (is_clang && !is_win) {
335 # This flag lets Clang generate FMAs when it sees a mul-then-add. It's optional,
336 # but nice to have, generating slightly better code for paths without explicit FMAs.
337 cflags += [ "-ffp-contract=fast" ]
338 }
339}
340
mtkleinc095df52016-08-24 12:23:52 -0700341# Any feature of Skia that requires third-party code should be optional and use this template.
mtklein457b42a2016-08-23 13:56:37 -0700342template("optional") {
Mike Klein6d1df6d2018-11-07 15:03:58 -0500343 visibility = [ ":*" ]
mtklein457b42a2016-08-23 13:56:37 -0700344 if (invoker.enabled) {
345 config(target_name + "_public") {
mtkleincd01b032016-08-31 04:58:19 -0700346 if (defined(invoker.public_defines)) {
347 defines = invoker.public_defines
348 }
Chris Dalton3a67b8e2018-05-03 09:30:29 -0600349 if (defined(invoker.public_configs)) {
350 configs = invoker.public_configs
351 }
mtklein457b42a2016-08-23 13:56:37 -0700352 }
353 source_set(target_name) {
Hal Canaryc25f4e92019-02-26 11:54:25 -0500354 check_includes = false
mtkleincd01b032016-08-31 04:58:19 -0700355 forward_variables_from(invoker,
356 "*",
357 [
358 "public_defines",
359 "sources_when_disabled",
scroggof84ad642016-10-31 09:02:57 -0700360 "configs_to_remove",
mtkleincd01b032016-08-31 04:58:19 -0700361 ])
mtklein457b42a2016-08-23 13:56:37 -0700362 all_dependent_configs = [ ":" + target_name + "_public" ]
mtklein9b8583d2016-08-24 17:32:30 -0700363 configs += skia_library_configs
scroggof84ad642016-10-31 09:02:57 -0700364 if (defined(invoker.configs_to_remove)) {
365 configs -= invoker.configs_to_remove
366 }
mtklein457b42a2016-08-23 13:56:37 -0700367 }
368 } else {
mtklein457b42a2016-08-23 13:56:37 -0700369 source_set(target_name) {
370 forward_variables_from(invoker,
371 "*",
372 [
373 "public_defines",
Greg Daniel91dfa3b2018-05-22 13:25:15 -0400374 "public_deps",
mtklein457b42a2016-08-23 13:56:37 -0700375 "deps",
mtklein6ef69992016-09-14 06:12:09 -0700376 "libs",
mtklein457b42a2016-08-23 13:56:37 -0700377 "sources",
mtkleincd01b032016-08-31 04:58:19 -0700378 "sources_when_disabled",
scroggof84ad642016-10-31 09:02:57 -0700379 "configs_to_remove",
mtklein457b42a2016-08-23 13:56:37 -0700380 ])
mtkleincd01b032016-08-31 04:58:19 -0700381 if (defined(invoker.sources_when_disabled)) {
382 sources = invoker.sources_when_disabled
383 }
384 configs += skia_library_configs
mtklein457b42a2016-08-23 13:56:37 -0700385 }
mtkleineb3c4252016-08-23 07:38:09 -0700386 }
mtklein457b42a2016-08-23 13:56:37 -0700387}
mtklein457b42a2016-08-23 13:56:37 -0700388
mtkleina45be612016-08-29 15:22:10 -0700389optional("fontmgr_android") {
Leon Scroggins IIIbe85c192018-11-13 13:50:12 -0500390 enabled = skia_enable_fontmgr_android
mtkleina45be612016-08-29 15:22:10 -0700391
392 deps = [
Ben Wagnerfc497342017-02-24 11:15:26 -0500393 ":typeface_freetype",
mtkleina45be612016-08-29 15:22:10 -0700394 "//third_party/expat",
mtkleina45be612016-08-29 15:22:10 -0700395 ]
396 sources = [
397 "src/ports/SkFontMgr_android.cpp",
398 "src/ports/SkFontMgr_android_factory.cpp",
399 "src/ports/SkFontMgr_android_parser.cpp",
400 ]
401}
402
mtkleind2e39db2016-09-07 07:52:55 -0700403optional("fontmgr_custom") {
Leon Scroggins IIIbe85c192018-11-13 13:50:12 -0500404 enabled = skia_enable_fontmgr_custom
mtkleind2e39db2016-09-07 07:52:55 -0700405
406 deps = [
Ben Wagnerfc497342017-02-24 11:15:26 -0500407 ":typeface_freetype",
mtkleind2e39db2016-09-07 07:52:55 -0700408 ]
409 sources = [
410 "src/ports/SkFontMgr_custom.cpp",
Ben Wagner8ab590f2017-02-08 17:29:33 -0500411 "src/ports/SkFontMgr_custom.h",
412 "src/ports/SkFontMgr_custom_directory.cpp",
mtkleind2e39db2016-09-07 07:52:55 -0700413 "src/ports/SkFontMgr_custom_directory_factory.cpp",
Ben Wagner8ab590f2017-02-08 17:29:33 -0500414 "src/ports/SkFontMgr_custom_embedded.cpp",
415 "src/ports/SkFontMgr_custom_empty.cpp",
mtkleind2e39db2016-09-07 07:52:55 -0700416 ]
417}
418
Leon Scroggins III631dbc82019-03-04 13:54:02 -0500419optional("fontmgr_custom_empty") {
420 enabled = skia_enable_fontmgr_custom_empty
Kevin Lubickddd0a332018-12-12 10:35:13 -0500421
422 deps = [
423 ":typeface_freetype",
424 ]
425 sources = [
426 "src/ports/SkFontMgr_custom.cpp",
Leon Scroggins III631dbc82019-03-04 13:54:02 -0500427 "src/ports/SkFontMgr_custom_empty.cpp",
428 "src/ports/SkFontMgr_custom_empty_factory.cpp",
Sergey Ulanovf3babcd2018-11-30 17:42:00 -0800429 ]
430}
431
Hal Canaryff2742e2018-01-30 11:35:47 -0500432optional("fontmgr_empty") {
433 enabled = skia_enable_fontmgr_empty
434 sources = [
435 "src/ports/SkFontMgr_empty_factory.cpp",
436 ]
437}
438
mtklein3cc22182016-08-29 13:26:14 -0700439optional("fontmgr_fontconfig") {
440 enabled = skia_use_freetype && skia_use_fontconfig
mtklein3cc22182016-08-29 13:26:14 -0700441
442 deps = [
Ben Wagnerfc497342017-02-24 11:15:26 -0500443 ":typeface_freetype",
mtklein3cc22182016-08-29 13:26:14 -0700444 "//third_party:fontconfig",
mtklein3cc22182016-08-29 13:26:14 -0700445 ]
446 sources = [
bungeman1ae0e012016-09-19 12:13:16 -0700447 "src/ports/SkFontConfigInterface.cpp",
mtklein3cc22182016-08-29 13:26:14 -0700448 "src/ports/SkFontConfigInterface_direct.cpp",
449 "src/ports/SkFontConfigInterface_direct_factory.cpp",
450 "src/ports/SkFontMgr_FontConfigInterface.cpp",
451 "src/ports/SkFontMgr_fontconfig.cpp",
452 "src/ports/SkFontMgr_fontconfig_factory.cpp",
453 ]
454}
455
Leon Scroggins III631dbc82019-03-04 13:54:02 -0500456optional("fontmgr_fuchsia") {
457 enabled = skia_enable_fontmgr_fuchsia
458
459 deps = [
460 "//sdk/fidl/fuchsia.fonts",
461 ]
462 sources = [
463 "src/ports/SkFontMgr_fuchsia.cpp",
464 "src/ports/SkFontMgr_fuchsia.h",
465 ]
466}
467
468optional("fontmgr_wasm") {
Kevin Lubick0e3342c2019-04-16 13:31:25 -0400469 enabled = !skia_enable_fontmgr_empty && target_cpu == "wasm"
mtkleincdedd0e2016-09-12 15:15:44 -0700470
471 deps = [
Ben Wagnerfc497342017-02-24 11:15:26 -0500472 ":typeface_freetype",
mtkleincdedd0e2016-09-12 15:15:44 -0700473 ]
474 sources = [
475 "src/ports/SkFontMgr_custom.cpp",
Leon Scroggins III631dbc82019-03-04 13:54:02 -0500476 "src/ports/SkFontMgr_custom.h",
477 "src/ports/SkFontMgr_custom_embedded.cpp",
478 "src/ports/SkFontMgr_custom_embedded_factory.cpp",
mtkleincdedd0e2016-09-12 15:15:44 -0700479 ]
480}
481
Leon Scroggins III631dbc82019-03-04 13:54:02 -0500482optional("fontmgr_win") {
483 enabled = skia_enable_fontmgr_win
484
485 sources = [
486 "src/fonts/SkFontMgr_indirect.cpp",
487 "src/ports/SkFontMgr_win_dw.cpp",
488 "src/ports/SkFontMgr_win_dw_factory.cpp",
489 "src/ports/SkScalerContext_win_dw.cpp",
490 "src/ports/SkTypeface_win_dw.cpp",
491 ]
492}
493
494optional("fontmgr_win_gdi") {
495 enabled = skia_enable_fontmgr_win_gdi
496
497 sources = [
498 "src/ports/SkFontHost_win.cpp",
499 ]
500 libs = [ "Gdi32.lib" ]
501}
502
Ethan Nicholas5b5f0962017-09-11 13:50:14 -0700503if (skia_lex) {
Ethan Nicholasca82a922017-09-07 09:39:50 -0400504 executable("sksllex") {
505 sources = [
506 "src/sksl/lex/Main.cpp",
507 "src/sksl/lex/NFA.cpp",
508 "src/sksl/lex/RegexNode.cpp",
509 "src/sksl/lex/RegexParser.cpp",
510 ]
511 include_dirs = [ "src/sksl/lex" ]
512 }
513
Ethan Nicholas5b5f0962017-09-11 13:50:14 -0700514 action("run_sksllex") {
515 script = "gn/run_sksllex.py"
Ethan Nicholase148bf72017-10-06 14:22:22 -0400516 deps = [
517 ":sksllex(//gn/toolchain:$host_toolchain)",
518 ]
Ethan Nicholas5b5f0962017-09-11 13:50:14 -0700519 sources = [
Ethan Nicholas5b5f0962017-09-11 13:50:14 -0700520 "src/sksl/lex/sksl.lex",
521 ]
522
523 # GN insists its outputs should go somewhere underneath target_out_dir, so we trick it with a
524 # path that starts with target_out_dir and then uses ".." to back up into the src dir.
525 outputs = [
526 "$target_out_dir/" +
527 rebase_path("src/sksl/lex/SkSLLexer.h", target_out_dir),
528 # the script also modifies the corresponding .cpp file, but if we tell GN that it gets
529 # confused due to the same file being named by two different paths
530 ]
531 sksllex_path = "$root_out_dir/"
532 sksllex_path += "sksllex"
533 if (host_os == "win") {
534 sksllex_path += ".exe"
535 }
536 args = [
537 rebase_path(sksllex_path),
538 rebase_path("bin/clang-format"),
539 rebase_path("src"),
540 ]
541 }
542} else {
543 group("run_sksllex") {
544 }
545}
546
547if (skia_compile_processors) {
Ethan Nicholas762466e2017-06-29 10:03:38 -0400548 executable("skslc") {
549 defines = [ "SKSL_STANDALONE" ]
550 sources = [
551 "src/sksl/SkSLMain.cpp",
552 ]
553 sources += skia_sksl_sources
554 include_dirs = [
555 "src/gpu",
556 "src/sksl",
557 ]
558 deps = [
Ethan Nicholasaae47c82017-11-10 15:34:03 -0500559 ":run_sksllex",
Ethan Nicholas762466e2017-06-29 10:03:38 -0400560 "//third_party/spirv-tools",
561 ]
562 }
563
564 skia_gpu_processor_outputs = []
565 foreach(src, skia_gpu_processor_sources) {
566 dir = get_path_info(src, "dir")
567 name = get_path_info(src, "name")
568
569 # GN insists its outputs should go somewhere underneath target_out_dir, so we trick it with a
570 # path that starts with target_out_dir and then uses ".." to back up into the src dir.
571 skia_gpu_processor_outputs += [
572 "$target_out_dir/" + rebase_path("$dir/$name.h", target_out_dir),
573 # the script also modifies the corresponding .cpp file, but if we tell GN that it gets
574 # confused due to the same file being named by two different paths
575 ]
576 }
577
Ethan Nicholasaae47c82017-11-10 15:34:03 -0500578 action("create_sksl_enums") {
579 script = "gn/create_sksl_enums.py"
580 sources = [
581 "include/private/GrSharedEnums.h",
582 ]
583 outputs = [
584 "$target_out_dir/" +
Ben Wagnera56c4d22018-01-24 17:32:17 -0500585 rebase_path("src/sksl/sksl_enums.inc", target_out_dir),
Ethan Nicholasaae47c82017-11-10 15:34:03 -0500586 ]
587 args = [
588 rebase_path(sources[0]),
589 rebase_path(outputs[0]),
590 ]
591 }
592
Ethan Nicholas762466e2017-06-29 10:03:38 -0400593 action("compile_processors") {
594 script = "gn/compile_processors.py"
595 deps = [
Ethan Nicholasaae47c82017-11-10 15:34:03 -0500596 ":create_sksl_enums",
Ethan Nicholas762466e2017-06-29 10:03:38 -0400597 ":skslc(//gn/toolchain:$host_toolchain)",
598 ]
599 sources = skia_gpu_processor_sources
600 outputs = skia_gpu_processor_outputs
601 skslc_path = "$root_out_dir/"
602 if (host_toolchain != default_toolchain_name) {
603 skslc_path += "$host_toolchain/"
604 }
605 skslc_path += "skslc"
606 if (host_os == "win") {
607 skslc_path += ".exe"
608 }
Ethan Nicholasb9f6afb2017-07-27 16:02:37 -0400609 args = [
610 rebase_path(skslc_path),
Eric Borenb121be72017-07-28 10:00:51 -0400611 rebase_path("bin/clang-format"),
Ethan Nicholasb9f6afb2017-07-27 16:02:37 -0400612 ]
Ethan Nicholas762466e2017-06-29 10:03:38 -0400613 args += rebase_path(skia_gpu_processor_sources)
614 }
615} else {
616 skia_gpu_processor_outputs = []
617 group("compile_processors") {
618 }
619}
620
Ben Wagnere27ee6c2019-02-15 14:59:30 -0500621optional("gpu") {
mtklein06c35c02016-09-20 12:28:12 -0700622 enabled = skia_enable_gpu
Ethan Nicholas762466e2017-06-29 10:03:38 -0400623 deps = [
624 ":compile_processors",
Ethan Nicholas5b5f0962017-09-11 13:50:14 -0700625 ":run_sksllex",
Ethan Nicholas762466e2017-06-29 10:03:38 -0400626 ]
Adrienne Walker1df7cd82018-04-18 13:46:25 -0700627 if (skia_generate_workarounds) {
628 deps += [ ":workaround_list" ]
629 }
mtkleine9fb3d52016-09-20 15:11:46 -0700630 public_defines = []
Chris Dalton3a67b8e2018-05-03 09:30:29 -0600631 public_configs = []
Greg Daniel91dfa3b2018-05-22 13:25:15 -0400632 public_deps = []
mtkleine9fb3d52016-09-20 15:11:46 -0700633
Brian Salomon3d6801e2017-12-11 10:06:31 -0500634 sources = skia_gpu_sources + skia_sksl_sources + skia_gpu_processor_outputs
Kevin Lubick93faa672018-10-10 15:54:53 -0400635 if (!skia_enable_ccpr) {
636 sources -= skia_ccpr_sources
637 sources += [ "src/gpu/ccpr/GrCoverageCountingPathRenderer_none.cpp" ]
638 }
Kevin Lubick4bf2c262018-10-15 09:35:54 -0400639 if (!skia_enable_nvpr) {
640 sources -= skia_nvpr_sources
641 sources += [ "src/gpu/GrPathRendering_none.cpp" ]
642 }
mtklein06c35c02016-09-20 12:28:12 -0700643
644 # These paths need to be absolute to match the ones produced by shared_sources.gni.
Brian Salomon3d6801e2017-12-11 10:06:31 -0500645 sources -= get_path_info([ "src/gpu/gl/GrGLMakeNativeInterface_none.cpp" ],
mtklein06c35c02016-09-20 12:28:12 -0700646 "abspath")
Mike Klein703cf5a2016-10-13 17:18:04 -0400647 libs = []
mtklein06c35c02016-09-20 12:28:12 -0700648 if (is_android) {
Hal Canary25375e82018-03-14 15:16:56 -0400649 sources += [ "src/gpu/gl/egl/GrGLMakeNativeInterface_egl.cpp" ]
Derek Sollenberger7a869872017-06-27 15:37:25 -0400650
651 # this lib is required to link against AHardwareBuffer
652 if (defined(ndk_api) && ndk_api >= 26) {
653 libs += [ "android" ]
654 }
Kevin Lubick4a24e102017-03-29 11:19:01 -0400655 } else if (skia_use_egl) {
Brian Salomon3d6801e2017-12-11 10:06:31 -0500656 sources += [ "src/gpu/gl/egl/GrGLMakeNativeInterface_egl.cpp" ]
Kevin Lubick4a24e102017-03-29 11:19:01 -0400657 libs += [ "EGL" ]
Chinmay Garded92d0352018-09-17 10:23:28 -0700658 } else if (is_linux && skia_use_x11) {
Brian Salomon3d6801e2017-12-11 10:06:31 -0500659 sources += [ "src/gpu/gl/glx/GrGLMakeNativeInterface_glx.cpp" ]
Mike Kleina27f2692018-06-20 11:06:39 -0400660 libs += [ "GL" ]
mtklein06c35c02016-09-20 12:28:12 -0700661 } else if (is_mac) {
Brian Salomon3d6801e2017-12-11 10:06:31 -0500662 sources += [ "src/gpu/gl/mac/GrGLMakeNativeInterface_mac.cpp" ]
Chinmay Garde130a1182016-11-23 11:43:56 -0800663 } else if (is_ios) {
Brian Salomon3d6801e2017-12-11 10:06:31 -0500664 sources += [ "src/gpu/gl/iOS/GrGLMakeNativeInterface_iOS.cpp" ]
Mike Klein703cf5a2016-10-13 17:18:04 -0400665 } else if (is_win) {
Brian Salomon3d6801e2017-12-11 10:06:31 -0500666 sources += [ "src/gpu/gl/win/GrGLMakeNativeInterface_win.cpp" ]
Brian Osman0c757272018-12-10 10:27:26 -0500667 if (target_cpu != "arm64") {
668 libs += [ "OpenGL32.lib" ]
669 }
mtklein06c35c02016-09-20 12:28:12 -0700670 } else {
Brian Salomon3d6801e2017-12-11 10:06:31 -0500671 sources += [ "src/gpu/gl/GrGLMakeNativeInterface_none.cpp" ]
mtklein06c35c02016-09-20 12:28:12 -0700672 }
mtkleine9fb3d52016-09-20 15:11:46 -0700673
674 if (skia_use_vulkan) {
Greg Danielda16cce2018-08-01 09:23:57 -0400675 public_defines += [ "SK_VULKAN" ]
Greg Daniel18dbfd02018-05-29 10:46:51 -0400676 deps += [ "third_party/vulkanmemoryallocator" ]
mtkleine9fb3d52016-09-20 15:11:46 -0700677 sources += skia_vk_sources
egdaniele4a9bd72016-09-21 07:36:14 -0700678 if (skia_enable_vulkan_debug_layers) {
679 public_defines += [ "SK_ENABLE_VK_LAYERS" ]
680 }
Craig Stoutcb6b4bd2018-12-13 10:20:07 -0800681 if (is_fuchsia) {
Kevin Lubickec1c6202018-12-14 11:42:53 -0500682 public_deps +=
683 [ "//third_party/vulkan_loader_and_validation_layers:vulkan" ]
Craig Stoutcb6b4bd2018-12-13 10:20:07 -0800684 }
mtkleine9fb3d52016-09-20 15:11:46 -0700685 }
Greg Daniel91dfa3b2018-05-22 13:25:15 -0400686
Ethan Nicholasa6ae1f72017-03-16 09:56:54 -0400687 if (skia_enable_spirv_validation) {
Ethan Nicholas762466e2017-06-29 10:03:38 -0400688 deps += [ "//third_party/spirv-tools" ]
Ethan Nicholasa6ae1f72017-03-16 09:56:54 -0400689 public_defines += [ "SK_ENABLE_SPIRV_VALIDATION" ]
690 }
Greg Daniele5ddff52017-07-05 16:49:36 -0400691
Greg Daniel6b7e0e22017-07-12 16:21:09 -0400692 cflags_objcc = []
Greg Daniele5ddff52017-07-05 16:49:36 -0400693 if (skia_use_metal) {
694 public_defines += [ "SK_METAL" ]
695 sources += skia_metal_sources
696 libs += [ "Metal.framework" ]
Greg Daniel53956d92018-08-08 14:41:19 -0400697 libs += [ "Foundation.framework" ]
Greg Daniel6b7e0e22017-07-12 16:21:09 -0400698 cflags_objcc += [ "-fobjc-arc" ]
Greg Daniele5ddff52017-07-05 16:49:36 -0400699 }
Brian Salomoncbcb0a12017-11-19 13:20:13 -0500700
701 if (skia_enable_atlas_text) {
702 sources += skia_atlas_text_sources
703 }
Kevin Lubickf4def342018-10-04 12:52:50 -0400704
705 if (is_debug) {
706 public_defines += [ "SK_ENABLE_DUMP_GPU" ]
707 }
mtklein06c35c02016-09-20 12:28:12 -0700708}
709
Leon Scroggins III41169202019-01-29 09:29:57 -0500710optional("gif") {
711 enabled = !skia_use_wuffs
712 sources = [
713 "src/codec/SkGifCodec.cpp",
714 "third_party/gif/SkGifImageReader.cpp",
715 ]
716}
717
Leon Scroggins III04be2b52017-08-17 15:13:20 -0400718optional("heif") {
719 enabled = skia_use_libheif
720 public_defines = [ "SK_HAS_HEIF_LIBRARY" ]
721
722 deps = []
723
724 sources = [
725 "src/codec/SkHeifCodec.cpp",
726 ]
727}
728
mtklein63213812016-08-24 09:55:56 -0700729optional("jpeg") {
730 enabled = skia_use_libjpeg_turbo
731 public_defines = [ "SK_HAS_JPEG_LIBRARY" ]
732
mtklein63213812016-08-24 09:55:56 -0700733 deps = [
734 "//third_party/libjpeg-turbo:libjpeg",
735 ]
Mike Kleinf105dc72018-06-05 15:22:54 -0400736 public = [
737 "include/encode/SkJpegEncoder.h",
738 ]
mtklein63213812016-08-24 09:55:56 -0700739 sources = [
740 "src/codec/SkJpegCodec.cpp",
741 "src/codec/SkJpegDecoderMgr.cpp",
742 "src/codec/SkJpegUtility.cpp",
mtklein63213812016-08-24 09:55:56 -0700743 "src/images/SkJPEGWriteUtility.cpp",
Matt Sarett04c37312017-05-05 14:02:13 -0400744 "src/images/SkJpegEncoder.cpp",
mtklein63213812016-08-24 09:55:56 -0700745 ]
746}
747
748optional("pdf") {
Hal Canary43fb7a02016-12-30 13:09:03 -0500749 enabled = skia_use_zlib && skia_enable_pdf
750 public_defines = [ "SK_SUPPORT_PDF" ]
mtklein63213812016-08-24 09:55:56 -0700751
mtklein63213812016-08-24 09:55:56 -0700752 deps = [
753 "//third_party/zlib",
754 ]
Hal Canary83e0f1b2018-04-05 16:58:41 -0400755 if (skia_use_libjpeg_turbo) {
Adrienne Walker1df7cd82018-04-18 13:46:25 -0700756 deps += [ ":jpeg" ]
Hal Canary83e0f1b2018-04-05 16:58:41 -0400757 }
brettwb9447282016-09-01 14:24:39 -0700758 sources = skia_pdf_sources
mtkleincd01b032016-08-31 04:58:19 -0700759 sources_when_disabled = [ "src/pdf/SkDocument_PDF_None.cpp" ]
Hal Canary2a3093c2019-02-20 11:25:45 -0500760 if (skia_use_icu && skia_use_harfbuzz && skia_pdf_subset_harfbuzz) {
761 deps += [ "//third_party/harfbuzz" ]
762 defines = [ "SK_PDF_USE_HARFBUZZ_SUBSET" ]
763 } else if (skia_use_icu && skia_use_sfntly) {
mtklein63213812016-08-24 09:55:56 -0700764 deps += [ "//third_party/sfntly" ]
Hal Canary32498f02019-02-04 15:36:31 -0500765 defines = [ "SK_PDF_USE_SFNTLY" ]
mtklein63213812016-08-24 09:55:56 -0700766 }
767}
768
769optional("png") {
770 enabled = skia_use_libpng
771 public_defines = [ "SK_HAS_PNG_LIBRARY" ]
772
mtklein63213812016-08-24 09:55:56 -0700773 deps = [
774 "//third_party/libpng",
775 ]
776 sources = [
777 "src/codec/SkIcoCodec.cpp",
778 "src/codec/SkPngCodec.cpp",
Matt Sarett04c37312017-05-05 14:02:13 -0400779 "src/images/SkPngEncoder.cpp",
mtklein63213812016-08-24 09:55:56 -0700780 ]
781}
782
scroggof84ad642016-10-31 09:02:57 -0700783optional("raw") {
Mike Klein10d665d2016-11-01 11:46:10 -0400784 enabled = skia_use_dng_sdk && skia_use_libjpeg_turbo && skia_use_piex
scroggof84ad642016-10-31 09:02:57 -0700785 public_defines = [ "SK_CODEC_DECODES_RAW" ]
786
787 deps = [
788 "//third_party/dng_sdk",
789 "//third_party/libjpeg-turbo:libjpeg",
790 "//third_party/piex",
791 ]
792
793 # SkRawCodec catches any exceptions thrown by dng_sdk, insulating the rest of
794 # Skia.
795 configs_to_remove = [ "//gn:no_exceptions" ]
796
797 sources = [
scroggof84ad642016-10-31 09:02:57 -0700798 "src/codec/SkRawCodec.cpp",
799 ]
800}
801
Mike Klein852a8cb2018-05-15 10:46:58 -0400802import("third_party/skcms/skcms.gni")
Brian Osman8dc68c62018-05-30 12:57:45 -0400803source_set("skcms") {
Mike Klein852a8cb2018-05-15 10:46:58 -0400804 cflags = []
805 if (!is_win || is_clang) {
806 cflags += [
807 "-w",
808 "-std=c11",
809 ]
810 }
811
812 public = [
813 "third_party/skcms/skcms.h",
814 ]
815 sources = rebase_path(skcms_sources, ".", "third_party/skcms")
816}
817
mtklein3cc22182016-08-29 13:26:14 -0700818optional("typeface_freetype") {
819 enabled = skia_use_freetype
mtklein3cc22182016-08-29 13:26:14 -0700820
821 deps = [
822 "//third_party/freetype2",
823 ]
824 sources = [
825 "src/ports/SkFontHost_FreeType.cpp",
826 "src/ports/SkFontHost_FreeType_common.cpp",
827 ]
828}
829
mtklein457b42a2016-08-23 13:56:37 -0700830optional("webp") {
831 enabled = skia_use_libwebp
832 public_defines = [ "SK_HAS_WEBP_LIBRARY" ]
833
mtklein457b42a2016-08-23 13:56:37 -0700834 deps = [
835 "//third_party/libwebp",
836 ]
837 sources = [
mtklein457b42a2016-08-23 13:56:37 -0700838 "src/codec/SkWebpCodec.cpp",
Matt Sarett04c37312017-05-05 14:02:13 -0400839 "src/images/SkWebpEncoder.cpp",
mtklein457b42a2016-08-23 13:56:37 -0700840 ]
mtkleineb3c4252016-08-23 07:38:09 -0700841}
842
Leon Scroggins IIIe93ec682018-10-26 09:25:51 -0400843optional("wuffs") {
844 enabled = skia_use_wuffs
845 public_defines = [ "SK_HAS_WUFFS_LIBRARY" ]
846
847 deps = [
848 "//third_party/wuffs",
849 ]
850 sources = [
851 "src/codec/SkWuffsCodec.cpp",
852 ]
853}
854
mtklein63213812016-08-24 09:55:56 -0700855optional("xml") {
856 enabled = skia_use_expat
Florin Malita442fff92016-11-08 16:07:52 +0000857 public_defines = [ "SK_XML" ]
mtklein63213812016-08-24 09:55:56 -0700858
mtklein63213812016-08-24 09:55:56 -0700859 deps = [
860 "//third_party/expat",
861 ]
862 sources = [
Mike Kleinbd41bcc2017-02-09 16:38:15 -0500863 "src/svg/SkSVGCanvas.cpp",
864 "src/svg/SkSVGDevice.cpp",
mtklein63213812016-08-24 09:55:56 -0700865 "src/xml/SkDOM.cpp",
866 "src/xml/SkXMLParser.cpp",
867 "src/xml/SkXMLWriter.cpp",
868 ]
869}
870
Adrienne Walker1df7cd82018-04-18 13:46:25 -0700871if (skia_enable_gpu && skia_generate_workarounds) {
872 action("workaround_list") {
873 script = "tools/build_workaround_header.py"
874
875 inputs = [
876 "src/gpu/gpu_workaround_list.txt",
877 ]
878
879 # see comments in skia_compile_processors about out dir path shenanigans.
880 output_file =
Adrienne Walkerab7181d2018-05-14 14:02:03 -0700881 rebase_path("include/gpu/GrDriverBugWorkaroundsAutogen.h", root_out_dir)
Adrienne Walker1df7cd82018-04-18 13:46:25 -0700882
883 outputs = [
884 "$root_out_dir/$output_file",
885 ]
886 args = [
887 "--output-file",
888 "$output_file",
889 ]
890
891 foreach(file, inputs) {
892 args += [ rebase_path(file, root_build_dir) ]
893 }
894 }
895}
896
mtkleinc04ff472016-06-23 10:29:30 -0700897component("skia") {
898 public_configs = [ ":skia_public" ]
899 configs += skia_library_configs
mtkleinc04ff472016-06-23 10:29:30 -0700900
Mike Klein607b0a72018-11-07 16:17:34 -0500901 public_deps = [
Ben Wagnere27ee6c2019-02-15 14:59:30 -0500902 ":gpu",
Mike Klein607b0a72018-11-07 16:17:34 -0500903 ":pdf",
904 ":skcms",
905 ]
906
mtkleinc04ff472016-06-23 10:29:30 -0700907 deps = [
anmittalb8b3f712016-08-25 04:55:19 -0700908 ":arm64",
909 ":armv7",
mtklein9b8583d2016-08-24 17:32:30 -0700910 ":avx",
Mike Klein54378232018-11-08 12:08:05 +0000911 ":compile_processors",
anmittalb8b3f712016-08-25 04:55:19 -0700912 ":crc32",
mtkleina45be612016-08-29 15:22:10 -0700913 ":fontmgr_android",
mtkleind2e39db2016-09-07 07:52:55 -0700914 ":fontmgr_custom",
Leon Scroggins IIIbe85c192018-11-13 13:50:12 -0500915 ":fontmgr_custom_empty",
Hal Canaryff2742e2018-01-30 11:35:47 -0500916 ":fontmgr_empty",
mtklein3cc22182016-08-29 13:26:14 -0700917 ":fontmgr_fontconfig",
Sergey Ulanovf3babcd2018-11-30 17:42:00 -0800918 ":fontmgr_fuchsia",
Kevin Lubickddd0a332018-12-12 10:35:13 -0500919 ":fontmgr_wasm",
Leon Scroggins III631dbc82019-03-04 13:54:02 -0500920 ":fontmgr_win",
921 ":fontmgr_win_gdi",
Leon Scroggins III41169202019-01-29 09:29:57 -0500922 ":gif",
Leon Scroggins III04be2b52017-08-17 15:13:20 -0400923 ":heif",
Mike Klein1b9b7d52018-02-27 10:37:40 -0500924 ":hsw",
mtklein63213812016-08-24 09:55:56 -0700925 ":jpeg",
mtklein9b8583d2016-08-24 17:32:30 -0700926 ":none",
mtklein63213812016-08-24 09:55:56 -0700927 ":png",
scroggof84ad642016-10-31 09:02:57 -0700928 ":raw",
mtklein9b8583d2016-08-24 17:32:30 -0700929 ":sse2",
930 ":sse41",
931 ":sse42",
932 ":ssse3",
mtkleineb3c4252016-08-23 07:38:09 -0700933 ":webp",
Leon Scroggins IIIe93ec682018-10-26 09:25:51 -0400934 ":wuffs",
mtklein63213812016-08-24 09:55:56 -0700935 ":xml",
mtkleinc04ff472016-06-23 10:29:30 -0700936 ]
937
Kevin Lubick134be1d2018-10-30 15:05:04 -0400938 if (skia_enable_nima) {
939 deps += [ "//third_party/Nima-Cpp" ]
940 }
941
Chinmay Garde43f115c2016-11-16 15:04:12 -0800942 # This file (and all GN files in Skia) are designed to work with an
943 # empty sources assignment filter; we handle all that explicitly.
944 # We clear the filter here for clients who may have set up a global filter.
945 set_sources_assignment_filter([])
946
Hal Canaryc25f4e92019-02-26 11:54:25 -0500947 public = skia_core_public
948 public += skia_utils_public
949 public += skia_effects_public
950 public += skia_effects_imagefilter_public
951 public += skia_xps_public
952
mtkleinc04ff472016-06-23 10:29:30 -0700953 sources = []
brettwb9447282016-09-01 14:24:39 -0700954 sources += skia_core_sources
brettwb9447282016-09-01 14:24:39 -0700955 sources += skia_utils_sources
Leon Scroggins IIIee0e5d02019-02-27 10:59:11 -0500956 if (skia_use_xps) {
957 sources += skia_xps_sources
958 }
Mike Klein54378232018-11-08 12:08:05 +0000959 sources += skia_effects_sources
960 sources += skia_effects_imagefilter_sources
mtkleinc04ff472016-06-23 10:29:30 -0700961 sources += [
Stan Iliev73d8fd92017-08-02 15:36:24 -0400962 "src/android/SkAndroidFrameworkUtils.cpp",
Leon Scroggins III42ee2842018-01-14 14:46:51 -0500963 "src/android/SkAnimatedImage.cpp",
mtklein25c81d42016-07-27 13:55:26 -0700964 "src/android/SkBitmapRegionCodec.cpp",
965 "src/android/SkBitmapRegionDecoder.cpp",
966 "src/codec/SkAndroidCodec.cpp",
Nigel Tao612a65d2018-11-09 10:10:31 +1100967 "src/codec/SkAndroidCodecAdapter.cpp",
Leon Scroggins IIId81fed92017-06-01 13:42:28 -0400968 "src/codec/SkBmpBaseCodec.cpp",
mtklein1211e0c2016-07-26 13:55:45 -0700969 "src/codec/SkBmpCodec.cpp",
970 "src/codec/SkBmpMaskCodec.cpp",
971 "src/codec/SkBmpRLECodec.cpp",
972 "src/codec/SkBmpStandardCodec.cpp",
973 "src/codec/SkCodec.cpp",
974 "src/codec/SkCodecImageGenerator.cpp",
Leon Scroggins III22f673d2018-05-30 15:33:46 -0400975 "src/codec/SkColorTable.cpp",
Leon Scroggins III36f7e322018-08-27 11:55:46 -0400976 "src/codec/SkEncodedInfo.cpp",
mtklein1211e0c2016-07-26 13:55:45 -0700977 "src/codec/SkMaskSwizzler.cpp",
978 "src/codec/SkMasks.cpp",
mtklein25c81d42016-07-27 13:55:26 -0700979 "src/codec/SkSampledCodec.cpp",
mtklein1211e0c2016-07-26 13:55:45 -0700980 "src/codec/SkSampler.cpp",
scroggo19b91532016-10-24 09:03:26 -0700981 "src/codec/SkStreamBuffer.cpp",
mtklein1211e0c2016-07-26 13:55:45 -0700982 "src/codec/SkSwizzler.cpp",
983 "src/codec/SkWbmpCodec.cpp",
mtkleinc04ff472016-06-23 10:29:30 -0700984 "src/images/SkImageEncoder.cpp",
mtkleinc04ff472016-06-23 10:29:30 -0700985 "src/ports/SkDiscardableMemory_none.cpp",
Mike Klein54378232018-11-08 12:08:05 +0000986 "src/ports/SkGlobalInitialization_default.cpp",
mtklein1211e0c2016-07-26 13:55:45 -0700987 "src/ports/SkImageGenerator_skia.cpp",
mtkleinc04ff472016-06-23 10:29:30 -0700988 "src/ports/SkMemory_malloc.cpp",
989 "src/ports/SkOSFile_stdio.cpp",
990 "src/sfnt/SkOTTable_name.cpp",
991 "src/sfnt/SkOTUtils.cpp",
992 "src/utils/mac/SkStream_mac.cpp",
Jim Van Verth1676cb92019-01-15 13:24:45 -0500993 "third_party/etc1/etc1.cpp",
mtkleinc04ff472016-06-23 10:29:30 -0700994 ]
brettwb9447282016-09-01 14:24:39 -0700995
Kevin Lubick32dfdbe2018-10-18 09:47:01 -0400996 defines = []
997 if (!skia_enable_skpicture) {
998 defines = [ "SK_DISABLE_SKPICTURE" ]
Hal Canaryc25f4e92019-02-26 11:54:25 -0500999 public -= skia_skpicture_public
Kevin Lubick32dfdbe2018-10-18 09:47:01 -04001000 sources -= skia_skpicture_sources
Mike Klein54378232018-11-08 12:08:05 +00001001 sources -= [ "//src/effects/imagefilters/SkPictureImageFilter.cpp" ]
Kevin Lubick32dfdbe2018-10-18 09:47:01 -04001002 sources += [ "src/core/SkPicture_none.cpp" ]
1003 }
1004
mtklein7d6fb2c2016-08-25 14:50:44 -07001005 libs = []
1006
mtkleinc04ff472016-06-23 10:29:30 -07001007 if (is_win) {
1008 sources += [
1009 "src/ports/SkDebug_win.cpp",
mtkleinc04ff472016-06-23 10:29:30 -07001010 "src/ports/SkImageEncoder_WIC.cpp",
1011 "src/ports/SkImageGeneratorWIC.cpp",
1012 "src/ports/SkOSFile_win.cpp",
mtklein605d9522016-09-21 14:01:32 -07001013 "src/ports/SkOSLibrary_win.cpp",
mtkleinc04ff472016-06-23 10:29:30 -07001014 "src/ports/SkTLS_win.cpp",
mtkleinc04ff472016-06-23 10:29:30 -07001015 ]
Mike Klein4b167fc2016-10-11 18:13:53 -04001016 libs += [
1017 "FontSub.lib",
1018 "Ole32.lib",
1019 "OleAut32.lib",
1020 "User32.lib",
Mike Klein0c5fdcb2017-11-13 12:40:46 -05001021 "Usp10.lib",
Mike Klein4b167fc2016-10-11 18:13:53 -04001022 ]
mtkleinc04ff472016-06-23 10:29:30 -07001023 } else {
1024 sources += [
mtkleinc04ff472016-06-23 10:29:30 -07001025 "src/ports/SkOSFile_posix.cpp",
mtklein605d9522016-09-21 14:01:32 -07001026 "src/ports/SkOSLibrary_posix.cpp",
mtkleinc04ff472016-06-23 10:29:30 -07001027 "src/ports/SkTLS_pthread.cpp",
1028 ]
Ben Wagnerbe6ae5b2017-08-31 16:45:23 -04001029 libs += [ "dl" ]
mtkleinc04ff472016-06-23 10:29:30 -07001030 }
1031
mtklein7d6fb2c2016-08-25 14:50:44 -07001032 if (is_android) {
Mike Klein1c471872017-01-13 15:27:45 -05001033 deps += [ "//third_party/expat" ]
Mike Kleine459afd2017-03-03 09:21:30 -05001034 if (defined(ndk) && ndk != "") {
Mike Klein1c471872017-01-13 15:27:45 -05001035 deps += [ "//third_party/cpu-features" ]
1036 }
mtklein06c35c02016-09-20 12:28:12 -07001037 sources += [ "src/ports/SkDebug_android.cpp" ]
mtklein7d6fb2c2016-08-25 14:50:44 -07001038 libs += [
1039 "EGL",
1040 "GLESv2",
1041 "log",
1042 ]
1043 }
1044
Kevin Lubick217056c2018-09-20 17:39:31 -04001045 if (is_linux || target_cpu == "wasm") {
mtklein06c35c02016-09-20 12:28:12 -07001046 sources += [ "src/ports/SkDebug_stdio.cpp" ]
Hal Canary25375e82018-03-14 15:16:56 -04001047 if (skia_use_egl) {
1048 libs += [ "GLESv2" ]
1049 }
mtkleinc04ff472016-06-23 10:29:30 -07001050 }
1051
Leon Scroggins III85e22fc2018-11-28 08:58:47 -05001052 if (skia_use_fonthost_mac) {
Sergey Ulanovf3babcd2018-11-30 17:42:00 -08001053 sources += [ "src/ports/SkFontHost_mac.cpp" ]
Leon Scroggins III85e22fc2018-11-28 08:58:47 -05001054 }
1055
mtkleinc04ff472016-06-23 10:29:30 -07001056 if (is_mac) {
1057 sources += [
mtklein7d6fb2c2016-08-25 14:50:44 -07001058 "src/ports/SkDebug_stdio.cpp",
mtkleinc04ff472016-06-23 10:29:30 -07001059 "src/ports/SkImageEncoder_CG.cpp",
1060 "src/ports/SkImageGeneratorCG.cpp",
1061 ]
mtklein09e61f72016-08-23 13:35:28 -07001062 libs += [
bungeman3e306f62017-03-29 11:32:02 -04001063 # AppKit symbols NSFontWeightXXX may be dlsym'ed.
1064 "AppKit.framework",
mtklein09e61f72016-08-23 13:35:28 -07001065 "ApplicationServices.framework",
1066 "OpenGL.framework",
1067 ]
mtkleinc04ff472016-06-23 10:29:30 -07001068 }
abarth6fc8ff02016-07-15 15:15:15 -07001069
Mike Klein7d302882016-11-03 14:06:31 -04001070 if (is_ios) {
1071 sources += [
1072 "src/ports/SkDebug_stdio.cpp",
1073 "src/ports/SkFontHost_mac.cpp",
1074 "src/ports/SkImageEncoder_CG.cpp",
1075 "src/ports/SkImageGeneratorCG.cpp",
1076 ]
1077 libs += [
1078 "CoreFoundation.framework",
1079 "CoreGraphics.framework",
1080 "CoreText.framework",
1081 "ImageIO.framework",
1082 "MobileCoreServices.framework",
bungeman3e306f62017-03-29 11:32:02 -04001083
1084 # UIKit symbols UIFontWeightXXX may be dlsym'ed.
1085 "UIKit.framework",
Mike Klein7d302882016-11-03 14:06:31 -04001086 ]
1087 }
1088
abarth6fc8ff02016-07-15 15:15:15 -07001089 if (is_fuchsia) {
mtklein06c35c02016-09-20 12:28:12 -07001090 sources += [ "src/ports/SkDebug_stdio.cpp" ]
abarth6fc8ff02016-07-15 15:15:15 -07001091 }
mtkleinc04ff472016-06-23 10:29:30 -07001092}
1093
Nathaniel Nifongad5f6cd2019-03-05 10:45:40 -05001094# DebugCanvas used in experimental/wasm-skp-debugger
1095if (target_cpu == "wasm") {
1096 static_library("debugcanvas") {
1097 public_configs = [ ":skia_public" ]
1098
1099 include_dirs = [
1100 "include/gpu",
1101 "include/private",
1102 "src/gpu",
1103 "src/core",
Kevin Lubick0e3342c2019-04-16 13:31:25 -04001104 "src/sksl",
Nathaniel Nifongad5f6cd2019-03-05 10:45:40 -05001105 "src/shaders",
1106 "src/utils",
1107 "tools",
1108 "tools/debugger",
1109 ]
1110
1111 sources = [
1112 "tools/UrlDataManager.cpp",
Mike Klein8f4e2242019-03-20 11:59:00 -05001113 "tools/debugger/DebugCanvas.cpp",
1114 "tools/debugger/DrawCommand.cpp",
1115 "tools/debugger/JsonWriteBuffer.cpp",
Nathaniel Nifongad5f6cd2019-03-05 10:45:40 -05001116 ]
1117
1118 deps = [
1119 ":fontmgr_wasm",
1120 ]
1121 }
1122}
1123
Kevin Lubickcbcff382018-10-02 09:02:18 -04001124static_library("pathkit") {
Hal Canaryc25f4e92019-02-26 11:54:25 -05001125 check_includes = false
Kevin Lubickcbcff382018-10-02 09:02:18 -04001126 public_configs = [ ":skia_public" ]
1127 configs += skia_library_configs
1128
1129 deps = [
1130 ":arm64",
1131 ":armv7",
1132 ":avx",
1133 ":crc32",
1134 ":hsw",
1135 ":none",
1136 ":sse2",
1137 ":sse41",
1138 ":sse42",
1139 ":ssse3",
1140 ]
1141
1142 # This file (and all GN files in Skia) are designed to work with an
1143 # empty sources assignment filter; we handle all that explicitly.
1144 # We clear the filter here for clients who may have set up a global filter.
1145 set_sources_assignment_filter([])
1146
1147 sources = []
1148 sources += skia_pathops_sources
Hal Canaryc25f4e92019-02-26 11:54:25 -05001149 sources += skia_pathops_public
Kevin Lubickcbcff382018-10-02 09:02:18 -04001150 sources += [
1151 "src/core/SkAnalyticEdge.cpp",
1152 "src/core/SkArenaAlloc.cpp",
Mike Reedcc88f3a2019-02-06 11:40:27 -05001153 "src/core/SkContourMeasure.cpp",
Kevin Lubickcbcff382018-10-02 09:02:18 -04001154 "src/core/SkCubicMap.cpp",
1155 "src/core/SkEdge.cpp",
1156 "src/core/SkEdgeBuilder.cpp",
1157 "src/core/SkEdgeClipper.cpp",
1158 "src/core/SkGeometry.cpp",
1159 "src/core/SkLineClipper.cpp",
1160 "src/core/SkMallocPixelRef.cpp",
1161 "src/core/SkMath.cpp",
1162 "src/core/SkMatrix.cpp",
1163 "src/core/SkOpts.cpp",
1164 "src/core/SkPaint.cpp",
1165 "src/core/SkPath.cpp",
1166 "src/core/SkPathEffect.cpp",
1167 "src/core/SkPathMeasure.cpp",
1168 "src/core/SkPathRef.cpp",
1169 "src/core/SkPoint.cpp",
1170 "src/core/SkRRect.cpp",
1171 "src/core/SkRect.cpp",
1172 "src/core/SkSemaphore.cpp",
1173 "src/core/SkStream.cpp",
1174 "src/core/SkString.cpp",
1175 "src/core/SkStringUtils.cpp",
1176 "src/core/SkStroke.cpp",
1177 "src/core/SkStrokeRec.cpp",
1178 "src/core/SkStrokerPriv.cpp",
1179 "src/core/SkThreadID.cpp",
1180 "src/core/SkUtils.cpp",
1181 "src/effects/SkDashPathEffect.cpp",
1182 "src/effects/SkTrimPathEffect.cpp",
1183 "src/ports/SkDebug_stdio.cpp",
1184 "src/ports/SkMemory_malloc.cpp",
1185 "src/utils/SkDashPath.cpp",
1186 "src/utils/SkParse.cpp",
1187 "src/utils/SkParsePath.cpp",
1188 "src/utils/SkUTF.cpp",
1189 ]
1190}
1191
Kevin Lubick1ba9c4d2019-02-22 10:04:06 -05001192group("modules") {
1193 deps = [
Kevin Lubick96634842019-03-05 14:09:24 -05001194 "modules/particles",
Kevin Lubick1ba9c4d2019-02-22 10:04:06 -05001195 "modules/skottie",
1196 "modules/skshaper",
1197 ]
1198}
1199
mtkleinc095df52016-08-24 12:23:52 -07001200# Targets guarded by skia_enable_tools may use //third_party freely.
1201if (skia_enable_tools) {
Mike Klein308b5ac2016-12-06 16:03:52 -05001202 # Used by gn_to_bp.py to list our public include dirs.
1203 source_set("public") {
1204 configs += [ ":skia_public" ]
1205 }
1206
Mike Kleinc36dedf2016-11-18 09:35:28 -05001207 config("skia.h_config") {
1208 include_dirs = [ "$target_gen_dir" ]
1209 }
1210 action("skia.h") {
1211 public_configs = [ ":skia.h_config" ]
1212 skia_h = "$target_gen_dir/skia.h"
1213 script = "gn/find_headers.py"
Florin Malita6e4d95f2018-05-30 09:27:32 -04001214
1215 # TODO: would be cool to not hard-code these here, but how?
1216 module_public_includes = [
1217 "modules/sksg/include",
Florin Malitaa1dcaae2019-03-25 17:38:43 -04001218 "modules/skshaper/include",
Florin Malita6e4d95f2018-05-30 09:27:32 -04001219 "modules/skottie/include",
1220 ]
1221 args =
1222 [ rebase_path("//bin/gn") ] + [ rebase_path("//") ] +
1223 [ rebase_path(skia_h, root_build_dir) ] +
1224 rebase_path(skia_public_includes) + rebase_path(module_public_includes)
Mike Kleinc36dedf2016-11-18 09:35:28 -05001225 depfile = "$skia_h.deps"
1226 outputs = [
1227 skia_h,
1228 ]
1229 }
1230
Brian Osmanc9a42472018-05-31 13:17:12 -04001231 if (target_cpu == "x64") {
Mike Kleinc36dedf2016-11-18 09:35:28 -05001232 executable("fiddle") {
Hal Canaryc25f4e92019-02-26 11:54:25 -05001233 check_includes = false
Mike Kleinc36dedf2016-11-18 09:35:28 -05001234 libs = []
Mike Kleinc36dedf2016-11-18 09:35:28 -05001235 sources = [
Mike Kleinc36dedf2016-11-18 09:35:28 -05001236 "tools/fiddle/draw.cpp",
1237 "tools/fiddle/fiddle_main.cpp",
1238 ]
Joe Gregorioa8fabd32017-05-31 09:45:19 -04001239
1240 if (skia_use_egl) {
1241 sources += [ "tools/fiddle/egl_context.cpp" ]
Joe Gregorioa8fabd32017-05-31 09:45:19 -04001242 } else {
1243 sources += [ "tools/fiddle/null_context.cpp" ]
1244 }
Joe Gregorio1e735c02017-04-19 14:05:14 -04001245 testonly = true
Mike Kleinc36dedf2016-11-18 09:35:28 -05001246 deps = [
Joe Gregorio1e735c02017-04-19 14:05:14 -04001247 ":flags",
Robert Phillips57e08282017-11-16 14:59:48 -05001248 ":gpu_tool_utils",
Mike Kleinc36dedf2016-11-18 09:35:28 -05001249 ":skia",
1250 ":skia.h",
Florin Malita6e4d95f2018-05-30 09:27:32 -04001251 "modules/skottie",
Florin Malitaa1dcaae2019-03-25 17:38:43 -04001252 "modules/skshaper",
Mike Kleinc36dedf2016-11-18 09:35:28 -05001253 ]
1254 }
1255 }
1256
Brian Osmanc9a42472018-05-31 13:17:12 -04001257 source_set("public_headers_warnings_check") {
1258 sources = [
1259 "tools/public_headers_warnings_check.cpp",
1260 ]
1261 configs -= [ "//gn:warnings_except_public_headers" ]
1262 deps = [
1263 ":skia",
1264 ":skia.h",
1265 "modules/skottie",
Florin Malitaa1dcaae2019-03-25 17:38:43 -04001266 "modules/skshaper",
Brian Osmanc9a42472018-05-31 13:17:12 -04001267 ]
Greg Daniel54bfb182018-11-20 17:12:36 -05001268
1269 # We add this directory to simulate the client already have
1270 # vulkan/vulkan_core.h on their path.
Greg Daniel54200e42018-12-11 17:03:39 -05001271 include_dirs = [ "include/third_party/vulkan" ]
Mike Kleinc36dedf2016-11-18 09:35:28 -05001272 }
1273
mtkleinc095df52016-08-24 12:23:52 -07001274 template("test_lib") {
1275 config(target_name + "_config") {
1276 include_dirs = invoker.public_include_dirs
mtkleina627b5c2016-09-20 13:36:47 -07001277 if (defined(invoker.public_defines)) {
1278 defines = invoker.public_defines
1279 }
mtklein25c81d42016-07-27 13:55:26 -07001280 }
mtkleinc095df52016-08-24 12:23:52 -07001281 source_set(target_name) {
1282 forward_variables_from(invoker, "*", [ "public_include_dirs" ])
Hal Canaryc25f4e92019-02-26 11:54:25 -05001283 check_includes = false
mtkleinc095df52016-08-24 12:23:52 -07001284 public_configs = [
1285 ":" + target_name + "_config",
1286 ":skia_private",
1287 ]
1288
1289 if (!defined(deps)) {
1290 deps = []
1291 }
1292 deps += [ ":skia" ]
1293 testonly = true
1294 }
mtklein25c81d42016-07-27 13:55:26 -07001295 }
mtklein25c81d42016-07-27 13:55:26 -07001296
Mike Kleine6682eb2017-01-05 10:54:57 -05001297 template("test_app") {
Jim Van Verth443a9132017-11-28 09:45:26 -05001298 if (is_ios) {
1299 app_name = target_name
1300 gen_path = target_gen_dir
1301
1302 action("${app_name}_generate_info_plist") {
1303 script = "//gn/gen_plist_ios.py"
1304 outputs = [
1305 "$gen_path/${app_name}_Info.plist",
1306 ]
1307 args = [ rebase_path("$gen_path/$app_name", root_build_dir) ]
1308 }
1309
1310 bundle_data("${app_name}_bundle_info_plist") {
1311 public_deps = [
1312 ":${app_name}_generate_info_plist",
1313 ]
1314 sources = [
1315 "$gen_path/${app_name}_Info.plist",
1316 ]
1317 outputs = [
1318 "{{bundle_root_dir}}/Info.plist",
1319 ]
1320 }
1321
Jim Van Verthffacf652019-04-02 11:59:34 -04001322 has_skps = "True" == exec_script("//gn/checkdir.py",
1323 [ rebase_path("skps", root_build_dir) ],
1324 "trim string")
1325 bundle_data("${app_name}_bundle_resources") {
1326 sources = [
1327 "resources",
1328 ]
1329 outputs = [
1330 # iOS reserves the folders 'Resources' and 'resources' so store one level deeper
1331 "{{bundle_resources_dir}}/data/resources",
1332 ]
1333 }
1334 if (has_skps) {
1335 bundle_data("${app_name}_bundle_skps") {
Jim Van Verth329c5a62017-11-29 11:42:33 -05001336 sources = [
Jim Van Verthffacf652019-04-02 11:59:34 -04001337 "skps",
Jim Van Verth329c5a62017-11-29 11:42:33 -05001338 ]
1339 outputs = [
Jim Van Verthffacf652019-04-02 11:59:34 -04001340 # Store in same folder as resources
1341 "{{bundle_resources_dir}}/data/skps",
Jim Van Verth329c5a62017-11-29 11:42:33 -05001342 ]
1343 }
Jim Van Verth329c5a62017-11-29 11:42:33 -05001344 }
1345
Jim Van Verth443a9132017-11-28 09:45:26 -05001346 executable("${app_name}_generate_executable") {
1347 forward_variables_from(invoker,
1348 "*",
1349 [
1350 "output_name",
1351 "visibility",
1352 "is_shared_library",
1353 ])
Mike Klein154e6da2017-07-26 15:13:47 -04001354 configs += [ ":skia_private" ]
Mike Kleine6682eb2017-01-05 10:54:57 -05001355 testonly = true
Jim Van Verth443a9132017-11-28 09:45:26 -05001356 output_name = rebase_path("$gen_path/$app_name", root_build_dir)
1357 }
1358
1359 bundle_data("${app_name}_bundle_executable") {
1360 public_deps = [
1361 ":${app_name}_generate_executable",
1362 ]
1363 sources = [
1364 "$gen_path/$app_name",
1365 ]
1366 outputs = [
1367 "{{bundle_executable_dir}}/$app_name",
1368 ]
1369 testonly = true
1370 }
1371
Jim Van Verthffacf652019-04-02 11:59:34 -04001372 bundle_data("${app_name}_bundle_symbols") {
1373 public_deps = [
1374 ":${app_name}_generate_executable",
1375 ]
1376 sources = [
1377 "$gen_path/${app_name}.dSYM",
1378 ]
1379 outputs = [
1380 "{{bundle_executable_dir}}/${app_name}.dSYM",
1381 ]
1382 testonly = true
1383 }
1384
Jim Van Verth443a9132017-11-28 09:45:26 -05001385 create_bundle("$app_name") {
1386 product_type = "com.apple.product-type.application"
1387 testonly = true
1388
1389 bundle_root_dir = "${root_build_dir}/${target_name}.app"
1390 bundle_resources_dir = bundle_root_dir
1391 bundle_executable_dir = bundle_root_dir
Jim Van Verth443a9132017-11-28 09:45:26 -05001392
1393 deps = [
1394 ":${app_name}_bundle_executable",
1395 ":${app_name}_bundle_info_plist",
Jim Van Verthffacf652019-04-02 11:59:34 -04001396 ":${app_name}_bundle_resources",
1397 ":${app_name}_bundle_symbols",
Jim Van Verth443a9132017-11-28 09:45:26 -05001398 ]
Jim Van Verthffacf652019-04-02 11:59:34 -04001399 if (has_skps) {
1400 deps += [ ":${app_name}_bundle_skps" ]
Jim Van Verth329c5a62017-11-29 11:42:33 -05001401 }
Jim Van Verth443a9132017-11-28 09:45:26 -05001402
1403 # should only code sign when running on a device, not the simulator
1404 if (target_cpu != "x64") {
1405 code_signing_script = "//gn/codesign_ios.py"
1406 code_signing_sources = [ "$target_gen_dir/$app_name" ]
1407 code_signing_outputs = [
1408 "$bundle_root_dir/_CodeSignature/CodeResources",
1409 "$bundle_root_dir/embedded.mobileprovision",
1410 ]
Jim Van Verth4e502972017-12-07 15:16:10 -05001411 code_signing_args = [
1412 rebase_path("$bundle_root_dir", root_build_dir),
1413 skia_ios_identity,
1414 skia_ios_profile,
1415 ]
Jim Van Verth443a9132017-11-28 09:45:26 -05001416 }
Mike Kleine6682eb2017-01-05 10:54:57 -05001417 }
1418 } else {
Jim Van Verth443a9132017-11-28 09:45:26 -05001419 # !is_ios
1420
1421 if (defined(invoker.is_shared_library) && invoker.is_shared_library) {
1422 shared_library("lib" + target_name) {
1423 forward_variables_from(invoker, "*", [ "is_shared_library" ])
1424 configs += [ ":skia_private" ]
1425 testonly = true
1426 }
1427 } else {
1428 _executable = target_name
1429 executable(_executable) {
Hal Canaryc25f4e92019-02-26 11:54:25 -05001430 check_includes = false
Jim Van Verth443a9132017-11-28 09:45:26 -05001431 forward_variables_from(invoker, "*", [ "is_shared_library" ])
1432 configs += [ ":skia_private" ]
1433 testonly = true
1434 }
Mike Kleine6682eb2017-01-05 10:54:57 -05001435 }
Jim Van Verth443a9132017-11-28 09:45:26 -05001436 if (is_android && skia_android_serial != "" && defined(_executable)) {
1437 action("push_" + target_name) {
1438 script = "gn/push_to_android.py"
1439 deps = [
1440 ":" + _executable,
1441 ]
1442 _stamp = "$target_gen_dir/$_executable.pushed_$skia_android_serial"
1443 outputs = [
1444 _stamp,
1445 ]
1446 args = [
1447 rebase_path("$root_build_dir/$_executable"),
1448 skia_android_serial,
1449 rebase_path(_stamp),
1450 ]
1451 testonly = true
1452 }
Mike Klein7d921032017-01-05 12:20:41 -05001453 }
1454 }
Mike Kleine6682eb2017-01-05 10:54:57 -05001455 }
1456
Greg Danielda16cce2018-08-01 09:23:57 -04001457 config("moltenvk_config") {
1458 if (defined(skia_moltenvk_path) && skia_moltenvk_path != "") {
1459 if (is_ios) {
1460 moltenvk_framework_path = "$skia_moltenvk_path/MoltenVK/iOS"
1461 } else {
1462 moltenvk_framework_path = "$skia_moltenvk_path/MoltenVK/macOS"
1463 }
1464 cflags = [ "-F$moltenvk_framework_path" ]
1465 ldflags = [ "-F$moltenvk_framework_path" ]
1466 libs = [
1467 "MoltenVK.framework",
1468 "Metal.framework",
1469 "IOSurface.framework",
1470 "QuartzCore.framework",
1471 "Foundation.framework",
1472 ]
1473 if (is_ios) {
1474 libs += [ "UIKit.framework" ]
1475 } else {
1476 libs += [ "IOKit.framework" ]
1477 }
1478 defines = [ "SK_MOLTENVK" ]
1479 }
1480 }
1481
1482 source_set("moltenvk") {
1483 public_configs = [ ":moltenvk_config" ]
1484 }
1485
mtkleinc095df52016-08-24 12:23:52 -07001486 test_lib("gpu_tool_utils") {
mtklein38925aa2016-09-21 10:11:25 -07001487 public_include_dirs = []
Brian Osmanc9a42472018-05-31 13:17:12 -04001488 public_defines = []
1489 public_include_dirs += [ "tools/gpu" ]
mtkleind68f9b02016-09-23 13:18:41 -07001490
Mike Klein333fb452019-04-24 08:48:11 -05001491 defines = []
1492 if (skia_enable_discrete_gpu) {
1493 defines += [ "SK_ENABLE_DISCRETE_GPU" ]
1494 }
1495
Brian Osmanc9a42472018-05-31 13:17:12 -04001496 deps = []
Greg Danielda16cce2018-08-01 09:23:57 -04001497 public_deps = []
Brian Osmanc9a42472018-05-31 13:17:12 -04001498 sources = [
1499 "tools/gpu/GrContextFactory.cpp",
1500 "tools/gpu/GrTest.cpp",
Brian Salomon00a5eb82018-07-11 15:32:05 -04001501 "tools/gpu/MemoryCache.cpp",
1502 "tools/gpu/MemoryCache.h",
Brian Osmanc9a42472018-05-31 13:17:12 -04001503 "tools/gpu/ProxyUtils.cpp",
1504 "tools/gpu/TestContext.cpp",
Michael Ludwigd9958f82019-03-21 13:08:36 -04001505 "tools/gpu/YUVUtils.cpp",
1506 "tools/gpu/YUVUtils.h",
Brian Osmanc9a42472018-05-31 13:17:12 -04001507 "tools/gpu/atlastext/GLTestAtlasTextRenderer.cpp",
1508 "tools/gpu/gl/GLTestContext.cpp",
1509 "tools/gpu/gl/command_buffer/GLTestContext_command_buffer.cpp",
Brian Osmanc9a42472018-05-31 13:17:12 -04001510 "tools/gpu/mock/MockTestContext.cpp",
1511 ]
1512 libs = []
1513
1514 if (is_android || skia_use_egl) {
1515 sources += [ "tools/gpu/gl/egl/CreatePlatformGLTestContext_egl.cpp" ]
1516 } else if (is_ios) {
1517 sources += [ "tools/gpu/gl/iOS/CreatePlatformGLTestContext_iOS.mm" ]
1518 libs += [ "OpenGLES.framework" ]
1519 } else if (is_linux) {
1520 sources += [ "tools/gpu/gl/glx/CreatePlatformGLTestContext_glx.cpp" ]
Mike Kleina27f2692018-06-20 11:06:39 -04001521 libs += [
1522 "GLU",
1523 "X11",
1524 ]
Brian Osmanc9a42472018-05-31 13:17:12 -04001525 } else if (is_mac) {
1526 sources += [ "tools/gpu/gl/mac/CreatePlatformGLTestContext_mac.cpp" ]
1527 } else if (is_win) {
1528 sources += [ "tools/gpu/gl/win/CreatePlatformGLTestContext_win.cpp" ]
Brian Osman0c757272018-12-10 10:27:26 -05001529 libs += [ "Gdi32.lib" ]
1530 if (target_cpu != "arm64") {
1531 libs += [ "OpenGL32.lib" ]
1532 }
Brian Osmanc9a42472018-05-31 13:17:12 -04001533 }
mtklein25c81d42016-07-27 13:55:26 -07001534
Brian Osmanc9a42472018-05-31 13:17:12 -04001535 cflags_objcc = [ "-fobjc-arc" ]
mtklein6ef69992016-09-14 06:12:09 -07001536
Brian Osmanc9a42472018-05-31 13:17:12 -04001537 if (skia_use_angle) {
1538 deps += [ "//third_party/angle2" ]
1539 sources += [ "tools/gpu/gl/angle/GLTestContext_angle.cpp" ]
1540 }
Greg Daniel54200e42018-12-11 17:03:39 -05001541
Greg Daniel487132b2018-12-20 14:09:36 -05001542 public_include_dirs += [ "include/third_party/vulkan" ]
Brian Osmanc9a42472018-05-31 13:17:12 -04001543 if (skia_use_vulkan) {
1544 sources += [ "tools/gpu/vk/VkTestContext.cpp" ]
1545 sources += [ "tools/gpu/vk/VkTestUtils.cpp" ]
Greg Danielda16cce2018-08-01 09:23:57 -04001546 if (defined(skia_moltenvk_path) && skia_moltenvk_path != "") {
1547 public_deps += [ ":moltenvk" ]
1548 }
Brian Osmanc9a42472018-05-31 13:17:12 -04001549 }
1550 if (skia_use_metal) {
1551 sources += [ "tools/gpu/mtl/MtlTestContext.mm" ]
mtkleina627b5c2016-09-20 13:36:47 -07001552 }
mtklein25c81d42016-07-27 13:55:26 -07001553 }
mtklein25c81d42016-07-27 13:55:26 -07001554
mtkleinc095df52016-08-24 12:23:52 -07001555 test_lib("flags") {
1556 public_include_dirs = [ "tools/flags" ]
1557 sources = [
Mike Klein88544fb2019-03-20 10:50:33 -05001558 "tools/flags/CommandLineFlags.cpp",
mtklein046cb562016-09-16 10:23:12 -07001559 ]
1560 }
Mike Kleinc6142d82019-03-25 10:54:59 -05001561
1562 test_lib("common_flags_config") {
mtklein046cb562016-09-16 10:23:12 -07001563 public_include_dirs = [ "tools/flags" ]
1564 sources = [
Mike Klein88544fb2019-03-20 10:50:33 -05001565 "tools/flags/CommonFlagsConfig.cpp",
mtkleinc095df52016-08-24 12:23:52 -07001566 ]
1567 deps = [
mtklein046cb562016-09-16 10:23:12 -07001568 ":flags",
Greg Danielda16cce2018-08-01 09:23:57 -04001569 ]
1570 public_deps = [
mtkleinc095df52016-08-24 12:23:52 -07001571 ":gpu_tool_utils",
1572 ]
1573 }
Mike Kleinc6142d82019-03-25 10:54:59 -05001574 test_lib("common_flags_gpu") {
1575 public_include_dirs = [ "tools/flags" ]
1576 sources = [
1577 "tools/flags/CommonFlagsGpu.cpp",
1578 ]
1579 deps = [
1580 ":flags",
1581 ]
1582 public_deps = [
1583 ":gpu_tool_utils",
1584 ]
1585 }
1586 test_lib("common_flags_images") {
1587 public_include_dirs = [ "tools/flags" ]
1588 sources = [
1589 "tools/flags/CommonFlagsImages.cpp",
1590 ]
1591 deps = [
1592 ":flags",
1593 ]
1594 }
1595 test_lib("common_flags_aa") {
1596 public_include_dirs = [ "tools/flags" ]
1597 sources = [
1598 "tools/flags/CommonFlagsAA.cpp",
1599 ]
1600 deps = [
1601 ":flags",
1602 ]
1603 }
mtklein25c81d42016-07-27 13:55:26 -07001604
Mike Klein499f0ac2019-03-25 13:00:12 -05001605 test_lib("trace") {
1606 public_include_dirs = [ "tools/trace" ]
1607 deps = [
1608 ":flags",
1609 ]
1610 sources = [
1611 "tools/trace/ChromeTracingTracer.cpp",
1612 "tools/trace/ChromeTracingTracer.h",
1613 "tools/trace/EventTracingPriv.cpp",
1614 "tools/trace/EventTracingPriv.h",
1615 "tools/trace/SkDebugfTracer.cpp",
1616 "tools/trace/SkDebugfTracer.h",
1617 ]
1618 }
1619
mtkleinc095df52016-08-24 12:23:52 -07001620 test_lib("tool_utils") {
1621 public_include_dirs = [
1622 "tools",
1623 "tools/debugger",
Ben Wagner483c7722018-02-20 17:06:07 -05001624 "tools/fonts",
mtkleinc095df52016-08-24 12:23:52 -07001625 "tools/timer",
1626 ]
1627 sources = [
mtkleinb37c0342016-09-09 11:07:45 -07001628 "tools/AndroidSkDebugToStdOut.cpp",
mtkleinc095df52016-08-24 12:23:52 -07001629 "tools/CrashHandler.cpp",
Robert Phillips96601082018-05-29 16:13:26 -04001630 "tools/DDLPromiseImageHelper.cpp",
1631 "tools/DDLTileHelper.cpp",
mtklein0590fa52016-09-01 07:06:54 -07001632 "tools/LsanSuppressions.cpp",
mtkleinc095df52016-08-24 12:23:52 -07001633 "tools/ProcStats.cpp",
1634 "tools/Resources.cpp",
Mike Kleinea3f0142019-03-20 11:12:10 -05001635 "tools/ToolUtils.cpp",
mtkleinc095df52016-08-24 12:23:52 -07001636 "tools/UrlDataManager.cpp",
Mike Klein8f4e2242019-03-20 11:59:00 -05001637 "tools/debugger/DebugCanvas.cpp",
1638 "tools/debugger/DrawCommand.cpp",
1639 "tools/debugger/JsonWriteBuffer.cpp",
Mike Klein0cffcbf92019-03-20 11:08:46 -05001640 "tools/fonts/RandomScalerContext.cpp",
1641 "tools/fonts/TestEmptyTypeface.h",
1642 "tools/fonts/TestFontMgr.cpp",
1643 "tools/fonts/TestFontMgr.h",
1644 "tools/fonts/TestSVGTypeface.cpp",
1645 "tools/fonts/TestSVGTypeface.h",
1646 "tools/fonts/TestTypeface.cpp",
1647 "tools/fonts/TestTypeface.h",
Mike Kleinea3f0142019-03-20 11:12:10 -05001648 "tools/fonts/ToolUtilsFont.cpp",
mtkleinc095df52016-08-24 12:23:52 -07001649 "tools/random_parse_path.cpp",
Mike Kleincd5104e2019-03-20 11:55:08 -05001650 "tools/timer/AnimTimer.h",
mtkleinc095df52016-08-24 12:23:52 -07001651 "tools/timer/Timer.cpp",
1652 ]
Mike Kleinadacaef2017-02-06 09:26:14 -05001653 libs = []
1654 if (is_ios) {
1655 sources += [ "tools/ios_utils.m" ]
1656 libs += [ "Foundation.framework" ]
Mike Kleinbf15b662019-04-15 11:32:16 -05001657 } else if (is_win) {
1658 libs += [ "DbgHelp.lib" ]
Mike Kleinadacaef2017-02-06 09:26:14 -05001659 }
Mike Kleinbf15b662019-04-15 11:32:16 -05001660
Hal Canaryfd9bcab2018-04-24 11:47:23 -04001661 defines = []
1662 if (skia_tools_require_resources) {
1663 defines += [ "SK_TOOLS_REQUIRE_RESOURCES" ]
1664 }
mtkleinc095df52016-08-24 12:23:52 -07001665 deps = [
Ben Wagner97182cc2018-02-15 10:20:04 -05001666 ":experimental_svg_model",
mtkleinc095df52016-08-24 12:23:52 -07001667 ":flags",
Mike Kleine4ad58a2019-03-26 09:05:52 -05001668 ]
1669 public_deps = [
Mike Kleinc6142d82019-03-25 10:54:59 -05001670 ":gpu_tool_utils",
mtkleinc095df52016-08-24 12:23:52 -07001671 ]
mtkleinc095df52016-08-24 12:23:52 -07001672 }
mtklein25c81d42016-07-27 13:55:26 -07001673
Mike Klein6e744122016-10-27 12:21:40 -04001674 import("gn/gm.gni")
mtkleinc095df52016-08-24 12:23:52 -07001675 test_lib("gm") {
1676 public_include_dirs = [ "gm" ]
1677 sources = gm_sources
1678 deps = [
scroggo19b91532016-10-24 09:03:26 -07001679 ":flags",
mtkleinc095df52016-08-24 12:23:52 -07001680 ":skia",
1681 ":tool_utils",
Mike Reed2f0edd52018-05-31 14:22:30 -04001682 "modules/skottie",
Florin Malita26870722018-09-20 14:35:30 -04001683 "modules/skottie:gm",
Florin Malita3b526b02018-05-25 12:43:51 -04001684 "modules/sksg",
Brian Osmanc725e8f2019-04-10 14:08:44 -04001685 "modules/skshaper",
mtkleinc095df52016-08-24 12:23:52 -07001686 ]
Greg Danielda16cce2018-08-01 09:23:57 -04001687 public_deps = [
1688 ":gpu_tool_utils",
1689 ]
mtkleinc095df52016-08-24 12:23:52 -07001690 }
mtklein25c81d42016-07-27 13:55:26 -07001691
Mike Klein6e744122016-10-27 12:21:40 -04001692 import("gn/tests.gni")
mtkleinc095df52016-08-24 12:23:52 -07001693 test_lib("tests") {
1694 public_include_dirs = [ "tests" ]
Mike Klein6e744122016-10-27 12:21:40 -04001695 sources = tests_sources + pathops_tests_sources
Leon Scroggins IIIbe85c192018-11-13 13:50:12 -05001696 if (!skia_enable_fontmgr_android) {
Mike Klein6e744122016-10-27 12:21:40 -04001697 sources -= [ "//tests/FontMgrAndroidParserTest.cpp" ]
mtkleina45be612016-08-29 15:22:10 -07001698 }
Ben Wagner37a06c02018-06-22 21:11:00 +00001699 if (!(skia_use_freetype && skia_use_fontconfig)) {
1700 sources -= [ "//tests/FontMgrFontConfigTest.cpp" ]
1701 }
mtkleinc095df52016-08-24 12:23:52 -07001702 deps = [
Hal Canary0f666812018-03-22 15:21:12 -04001703 ":experimental_svg_model",
mtkleinc095df52016-08-24 12:23:52 -07001704 ":flags",
mtkleinc095df52016-08-24 12:23:52 -07001705 ":skia",
1706 ":tool_utils",
Florin Malita94d4d3e2018-06-18 13:10:51 -04001707 "modules/skottie:tests",
Brian Osmanccb87522018-06-01 19:20:00 +00001708 "modules/sksg:tests",
Brian Osmanc725e8f2019-04-10 14:08:44 -04001709 "modules/skshaper",
mtkleinc095df52016-08-24 12:23:52 -07001710 "//third_party/libpng",
Leon Scroggins III194580d2019-02-22 12:32:16 -05001711 "//third_party/libwebp",
mtkleinc095df52016-08-24 12:23:52 -07001712 "//third_party/zlib",
1713 ]
Mike Kleind63442d2017-03-27 14:16:04 -04001714 public_deps = [
1715 ":gpu_tool_utils", # Test.h #includes headers from this target.
1716 ]
mtkleinc095df52016-08-24 12:23:52 -07001717 }
mtklein2f3416d2016-08-02 16:02:05 -07001718
Mike Klein6e744122016-10-27 12:21:40 -04001719 import("gn/bench.gni")
mtkleinc095df52016-08-24 12:23:52 -07001720 test_lib("bench") {
1721 public_include_dirs = [ "bench" ]
1722 sources = bench_sources
mtkleinc095df52016-08-24 12:23:52 -07001723 deps = [
1724 ":flags",
1725 ":gm",
1726 ":gpu_tool_utils",
1727 ":skia",
1728 ":tool_utils",
1729 ]
1730 }
mtklein2b6870c2016-07-28 14:17:33 -07001731
mtkleinc095df52016-08-24 12:23:52 -07001732 test_lib("experimental_svg_model") {
Hal Canary0f666812018-03-22 15:21:12 -04001733 public_include_dirs = []
1734 if (skia_use_expat) {
1735 public_include_dirs += [ "experimental/svg/model" ]
1736 sources = [
1737 "experimental/svg/model/SkSVGAttribute.cpp",
1738 "experimental/svg/model/SkSVGAttributeParser.cpp",
1739 "experimental/svg/model/SkSVGCircle.cpp",
1740 "experimental/svg/model/SkSVGClipPath.cpp",
1741 "experimental/svg/model/SkSVGContainer.cpp",
1742 "experimental/svg/model/SkSVGDOM.cpp",
1743 "experimental/svg/model/SkSVGEllipse.cpp",
1744 "experimental/svg/model/SkSVGGradient.cpp",
1745 "experimental/svg/model/SkSVGLine.cpp",
1746 "experimental/svg/model/SkSVGLinearGradient.cpp",
1747 "experimental/svg/model/SkSVGNode.cpp",
1748 "experimental/svg/model/SkSVGPath.cpp",
1749 "experimental/svg/model/SkSVGPattern.cpp",
1750 "experimental/svg/model/SkSVGPoly.cpp",
1751 "experimental/svg/model/SkSVGRadialGradient.cpp",
1752 "experimental/svg/model/SkSVGRect.cpp",
1753 "experimental/svg/model/SkSVGRenderContext.cpp",
1754 "experimental/svg/model/SkSVGSVG.cpp",
1755 "experimental/svg/model/SkSVGShape.cpp",
1756 "experimental/svg/model/SkSVGStop.cpp",
1757 "experimental/svg/model/SkSVGTransformableNode.cpp",
1758 "experimental/svg/model/SkSVGUse.cpp",
1759 "experimental/svg/model/SkSVGValue.cpp",
1760 ]
1761 deps = [
1762 ":skia",
1763 ":xml",
1764 ]
1765 }
mtkleinc095df52016-08-24 12:23:52 -07001766 }
fmalitaa2b9fdf2016-08-03 19:53:36 -07001767
Mike Klein38af9432016-11-11 11:39:44 -05001768 if (skia_use_lua) {
1769 test_lib("lua") {
1770 public_include_dirs = []
1771 sources = [
1772 "src/utils/SkLua.cpp",
1773 "src/utils/SkLuaCanvas.cpp",
1774 ]
1775 deps = [
Herb Derby264182c2018-05-29 15:53:40 -04001776 "modules/skshaper",
Mike Klein38af9432016-11-11 11:39:44 -05001777 "//third_party/lua",
1778 ]
1779 }
1780
Mike Kleine6682eb2017-01-05 10:54:57 -05001781 test_app("lua_app") {
Mike Klein38af9432016-11-11 11:39:44 -05001782 sources = [
1783 "tools/lua/lua_app.cpp",
1784 ]
1785 deps = [
1786 ":lua",
1787 ":skia",
1788 "//third_party/lua",
1789 ]
Mike Klein38af9432016-11-11 11:39:44 -05001790 }
1791
Mike Kleine6682eb2017-01-05 10:54:57 -05001792 test_app("lua_pictures") {
Mike Klein38af9432016-11-11 11:39:44 -05001793 sources = [
1794 "tools/lua/lua_pictures.cpp",
1795 ]
1796 deps = [
1797 ":flags",
1798 ":lua",
1799 ":skia",
1800 ":tool_utils",
1801 "//third_party/lua",
1802 ]
Mike Klein38af9432016-11-11 11:39:44 -05001803 }
1804 }
1805
Florin Malitabfe876a2018-09-02 12:33:59 -04001806 if (is_linux || is_mac) {
Florin Malita79725d32018-06-05 16:16:57 -04001807 test_app("skottie_tool") {
1808 deps = [
1809 "modules/skottie:tool",
1810 ]
1811 }
1812 }
1813
Hal Canary5b39dc82019-04-17 13:29:46 -04001814 test_app("make_skqp_model") {
1815 sources = [
1816 "tools/skqp/make_skqp_model.cpp",
1817 ]
1818 deps = [
1819 ":skia",
1820 ]
1821 }
1822
Kevin Lubickebf648e2017-09-21 13:45:16 -04001823 if (target_cpu != "wasm") {
1824 import("gn/samples.gni")
1825 test_lib("samples") {
1826 public_include_dirs = [ "samplecode" ]
1827 include_dirs = [ "experimental" ]
Yuqian Li56a4a092018-02-12 14:47:34 +08001828 sources = samples_sources
Ben Wagnerb2c4ea62018-08-08 11:36:17 -04001829 public_deps = [
1830 ":tool_utils",
1831 ]
Kevin Lubickebf648e2017-09-21 13:45:16 -04001832 deps = [
1833 ":experimental_svg_model",
1834 ":flags",
Mike Kleinc6142d82019-03-25 10:54:59 -05001835 ":gpu_tool_utils",
Kevin Lubickebf648e2017-09-21 13:45:16 -04001836 ":xml",
Mike Reedec80d902019-02-12 11:31:27 -05001837 "modules/sksg",
Herb Derby264182c2018-05-29 15:53:40 -04001838 "modules/skshaper",
Kevin Lubickebf648e2017-09-21 13:45:16 -04001839 ]
Mike Klein38af9432016-11-11 11:39:44 -05001840
Ruiqi Maof5101492018-06-29 14:32:21 -04001841 # NIMA does not build on Windows clang
1842 if (!is_win || !is_clang) {
Kevin Lubickd9699322018-10-30 15:08:53 -04001843 sources += [ "experimental/nima/NimaActor.cpp" ]
Ruiqi Maof5101492018-06-29 14:32:21 -04001844 deps += [ "//third_party/Nima-Cpp" ]
1845 }
1846
Kevin Lubickebf648e2017-09-21 13:45:16 -04001847 if (skia_use_lua) {
1848 sources += [ "samplecode/SampleLua.cpp" ]
1849 deps += [
1850 ":lua",
1851 "//third_party/lua",
1852 ]
1853 }
1854 }
Mike Klein7af351a2018-07-27 09:54:43 -04001855 test_app("imgcvt") {
1856 sources = [
1857 "tools/imgcvt.cpp",
1858 ]
1859 deps = [
1860 ":skcms",
1861 ":skia",
1862 ]
1863 }
Mike Klein735c7ba2019-03-25 12:57:58 -05001864 test_lib("hash_and_encode") {
1865 public_include_dirs = [ "tools" ]
1866 sources = [
1867 "tools/HashAndEncode.cpp",
1868 "tools/HashAndEncode.h",
1869 ]
1870 deps = [
1871 ":flags",
1872 ":skia",
1873 "//third_party/libpng",
1874 ]
1875 }
1876 test_app("fm") {
1877 sources = [
1878 "tools/fm/fm.cpp",
1879 ]
1880 deps = [
1881 ":common_flags_aa",
1882 ":common_flags_gpu",
Mike Klein6253d902019-03-27 15:09:12 -05001883 ":experimental_svg_model",
Mike Klein735c7ba2019-03-25 12:57:58 -05001884 ":flags",
1885 ":gm",
1886 ":gpu_tool_utils",
1887 ":hash_and_encode",
1888 ":skia",
1889 ":tool_utils",
1890 ":trace",
Mike Klein22924262019-04-02 14:14:56 -04001891 "modules/skottie",
1892 "modules/skottie:utils",
Mike Klein735c7ba2019-03-25 12:57:58 -05001893 ]
1894 }
Kevin Lubickebf648e2017-09-21 13:45:16 -04001895 test_app("dm") {
1896 sources = [
1897 "dm/DM.cpp",
Hal Canaryb6c5e5b2017-10-09 16:13:02 -04001898 "dm/DMGpuTestProcs.cpp",
Kevin Lubickebf648e2017-09-21 13:45:16 -04001899 "dm/DMJsonWriter.cpp",
1900 "dm/DMSrcSink.cpp",
1901 ]
Kevin Lubickebf648e2017-09-21 13:45:16 -04001902 deps = [
Mike Kleinc6142d82019-03-25 10:54:59 -05001903 ":common_flags_aa",
1904 ":common_flags_config",
1905 ":common_flags_gpu",
1906 ":common_flags_images",
Kevin Lubickebf648e2017-09-21 13:45:16 -04001907 ":experimental_svg_model",
1908 ":flags",
1909 ":gm",
1910 ":gpu_tool_utils",
Mike Klein735c7ba2019-03-25 12:57:58 -05001911 ":hash_and_encode",
Kevin Lubickebf648e2017-09-21 13:45:16 -04001912 ":skia",
1913 ":tests",
1914 ":tool_utils",
Mike Klein499f0ac2019-03-25 13:00:12 -05001915 ":trace",
Florin Malita3d856bd2018-05-26 09:49:28 -04001916 "modules/skottie",
Florin Malitaa8316552018-11-09 16:19:44 -05001917 "modules/skottie:utils",
Florin Malita3b526b02018-05-25 12:43:51 -04001918 "modules/sksg",
Mike Klein38af9432016-11-11 11:39:44 -05001919 ]
Ruiqi Maof5101492018-06-29 14:32:21 -04001920
1921 # NIMA does not build on Windows clang
1922 if (!is_win || !is_clang) {
1923 deps += [ "//third_party/Nima-Cpp" ]
1924 }
Mike Klein38af9432016-11-11 11:39:44 -05001925 }
Brian Osman16adfa32016-10-18 14:42:44 -04001926 }
1927
Mike Kleina8a51ce2018-01-09 12:34:11 -05001928 if (!is_win) {
1929 test_app("remote_demo") {
1930 sources = [
1931 "tools/remote_demo.cpp",
1932 ]
1933 deps = [
1934 ":skia",
1935 ]
1936 }
1937 }
1938
Mike Kleine6682eb2017-01-05 10:54:57 -05001939 test_app("nanobench") {
mtklein2b6870c2016-07-28 14:17:33 -07001940 sources = [
1941 "bench/nanobench.cpp",
1942 ]
1943 deps = [
1944 ":bench",
Mike Kleinc6142d82019-03-25 10:54:59 -05001945 ":common_flags_aa",
1946 ":common_flags_config",
1947 ":common_flags_gpu",
1948 ":common_flags_images",
fmalita6519c212016-09-14 08:05:17 -07001949 ":experimental_svg_model",
mtklein2b6870c2016-07-28 14:17:33 -07001950 ":flags",
1951 ":gm",
1952 ":gpu_tool_utils",
1953 ":skia",
1954 ":tool_utils",
Mike Klein499f0ac2019-03-25 13:00:12 -05001955 ":trace",
Florin Malita3b526b02018-05-25 12:43:51 -04001956 "modules/sksg",
mtklein2b6870c2016-07-28 14:17:33 -07001957 ]
mtklein2b6870c2016-07-28 14:17:33 -07001958 }
halcanary19a97202016-08-03 15:08:04 -07001959
Ravi Mistry10d36c52017-01-31 09:49:18 -05001960 test_app("skpinfo") {
1961 sources = [
1962 "tools/skpinfo.cpp",
1963 ]
1964 deps = [
1965 ":flags",
1966 ":skia",
1967 ]
1968 }
1969
Brian Osmanc9a42472018-05-31 13:17:12 -04001970 test_app("skpbench") {
1971 sources = [
1972 "tools/skpbench/skpbench.cpp",
1973 ]
1974 deps = [
Mike Kleinc6142d82019-03-25 10:54:59 -05001975 ":common_flags_config",
1976 ":common_flags_gpu",
Brian Osmanc9a42472018-05-31 13:17:12 -04001977 ":flags",
1978 ":gpu_tool_utils",
1979 ":skia",
1980 ":tool_utils",
1981 ]
csmartdalton4b5179b2016-09-19 11:03:58 -07001982 }
1983
Mike Kleine6682eb2017-01-05 10:54:57 -05001984 test_app("sktexttopdf") {
halcanary3eee9d92016-09-10 07:01:53 -07001985 sources = [
Herb Derby264182c2018-05-29 15:53:40 -04001986 "tools/using_skia_and_harfbuzz.cpp",
halcanary3eee9d92016-09-10 07:01:53 -07001987 ]
1988 deps = [
1989 ":skia",
Herb Derby264182c2018-05-29 15:53:40 -04001990 "modules/skshaper",
halcanary3eee9d92016-09-10 07:01:53 -07001991 ]
halcanary3eee9d92016-09-10 07:01:53 -07001992 }
mtklein046cb562016-09-16 10:23:12 -07001993
Ben Wagner219f3622017-07-17 15:32:25 -04001994 test_app("create_test_font") {
1995 sources = [
Ben Wagner483c7722018-02-20 17:06:07 -05001996 "tools/fonts/create_test_font.cpp",
Ben Wagner219f3622017-07-17 15:32:25 -04001997 ]
1998 deps = [
1999 ":skia",
2000 ]
2001 assert_no_deps = [
2002 # tool_utils requires the output of this app.
2003 ":tool_utils",
2004 ]
2005 }
2006
Florin Malita5d3ff432018-07-31 16:38:43 -04002007 if (skia_use_expat) {
2008 test_app("create_test_font_color") {
2009 sources = [
2010 "tools/fonts/create_test_font_color.cpp",
2011 ]
2012 deps = [
2013 ":flags",
2014 ":skia",
2015 ":tool_utils",
2016 ]
2017 }
Ben Wagner97182cc2018-02-15 10:20:04 -05002018 }
2019
Mike Kleine6682eb2017-01-05 10:54:57 -05002020 test_app("get_images_from_skps") {
mtklein046cb562016-09-16 10:23:12 -07002021 sources = [
2022 "tools/get_images_from_skps.cpp",
2023 ]
2024 deps = [
2025 ":flags",
2026 ":skia",
mtklein046cb562016-09-16 10:23:12 -07002027 ]
mtklein046cb562016-09-16 10:23:12 -07002028 }
mtkleinecbc5262016-09-22 11:51:24 -07002029
Brian Osman6788a542018-12-10 11:56:01 -05002030 if (!is_ios && target_cpu != "wasm" && !(is_win && target_cpu == "arm64")) {
Mike Kleine6682eb2017-01-05 10:54:57 -05002031 test_app("skiaserve") {
Mike Klein7d302882016-11-03 14:06:31 -04002032 sources = [
2033 "tools/skiaserve/Request.cpp",
2034 "tools/skiaserve/Response.cpp",
2035 "tools/skiaserve/skiaserve.cpp",
Mike Klein7d302882016-11-03 14:06:31 -04002036 "tools/skiaserve/urlhandlers/BreakHandler.cpp",
2037 "tools/skiaserve/urlhandlers/ClipAlphaHandler.cpp",
2038 "tools/skiaserve/urlhandlers/CmdHandler.cpp",
2039 "tools/skiaserve/urlhandlers/ColorModeHandler.cpp",
2040 "tools/skiaserve/urlhandlers/DataHandler.cpp",
2041 "tools/skiaserve/urlhandlers/DownloadHandler.cpp",
2042 "tools/skiaserve/urlhandlers/EnableGPUHandler.cpp",
2043 "tools/skiaserve/urlhandlers/ImgHandler.cpp",
2044 "tools/skiaserve/urlhandlers/InfoHandler.cpp",
Brian Salomon144a5c52016-12-20 16:48:59 -05002045 "tools/skiaserve/urlhandlers/OpBoundsHandler.cpp",
2046 "tools/skiaserve/urlhandlers/OpsHandler.cpp",
Mike Klein7d302882016-11-03 14:06:31 -04002047 "tools/skiaserve/urlhandlers/OverdrawHandler.cpp",
2048 "tools/skiaserve/urlhandlers/PostHandler.cpp",
2049 "tools/skiaserve/urlhandlers/QuitHandler.cpp",
2050 "tools/skiaserve/urlhandlers/RootHandler.cpp",
2051 ]
2052 deps = [
2053 ":flags",
2054 ":gpu_tool_utils",
2055 ":skia",
2056 ":tool_utils",
Mike Klein7d302882016-11-03 14:06:31 -04002057 "//third_party/libmicrohttpd",
Mike Klein7d302882016-11-03 14:06:31 -04002058 ]
Mike Klein7d302882016-11-03 14:06:31 -04002059 }
mtkleinecbc5262016-09-22 11:51:24 -07002060 }
kjlubick14f984b2016-10-03 11:49:45 -07002061
Mike Kleine6682eb2017-01-05 10:54:57 -05002062 test_app("fuzz") {
Kevin Lubick9ff5dc92018-01-09 12:47:33 -05002063 include_dirs = [
2064 "tools",
2065 "tools/debugger",
Kevin Lubickec1c6202018-12-14 11:42:53 -05002066 "tools/fonts",
Kevin Lubicke9c1ce82019-03-11 11:09:40 -04002067 "src/sksl",
Kevin Lubick9ff5dc92018-01-09 12:47:33 -05002068 ]
kjlubick14f984b2016-10-03 11:49:45 -07002069 sources = [
Kevin Lubickbc9a1a82018-09-17 14:46:57 -04002070 "fuzz/Fuzz.cpp",
Hal Canary24ac42b2017-02-14 13:35:14 -05002071 "fuzz/FuzzCanvas.cpp",
Cary Clark91390c82018-03-09 14:02:46 -05002072 "fuzz/FuzzCommon.cpp",
Kevin Lubickfec1dea2016-11-22 13:57:18 -05002073 "fuzz/FuzzDrawFunctions.cpp",
Kevin Lubicke4be55d2018-03-30 15:05:13 -04002074 "fuzz/FuzzEncoders.cpp",
kjlubick14f984b2016-10-03 11:49:45 -07002075 "fuzz/FuzzGradients.cpp",
Kevin Lubickbc9a1a82018-09-17 14:46:57 -04002076 "fuzz/FuzzMain.cpp",
kjlubick14f984b2016-10-03 11:49:45 -07002077 "fuzz/FuzzParsePath.cpp",
Cary Clark91390c82018-03-09 14:02:46 -05002078 "fuzz/FuzzPathMeasure.cpp",
kjlubick14f984b2016-10-03 11:49:45 -07002079 "fuzz/FuzzPathop.cpp",
Jim Van Verth061cc212018-07-11 14:09:09 -04002080 "fuzz/FuzzPolyUtils.cpp",
Hal Canary13872dd2018-04-06 10:25:12 -04002081 "fuzz/FuzzRegionOp.cpp",
Leon Scroggins III0b8fcbc2018-10-16 15:52:17 -04002082 "fuzz/oss_fuzz/FuzzAndroidCodec.cpp",
Kevin Lubick2416f962018-02-12 08:26:39 -05002083 "fuzz/oss_fuzz/FuzzAnimatedImage.cpp",
2084 "fuzz/oss_fuzz/FuzzImage.cpp",
Kevin Lubickf034d112018-02-08 14:31:24 -05002085 "fuzz/oss_fuzz/FuzzImageFilterDeserialize.cpp",
Leon Scroggins III0b8fcbc2018-10-16 15:52:17 -04002086 "fuzz/oss_fuzz/FuzzIncrementalImage.cpp",
Florin Malita80452be2018-06-19 11:27:20 -04002087 "fuzz/oss_fuzz/FuzzJSON.cpp",
Kevin Lubickf034d112018-02-08 14:31:24 -05002088 "fuzz/oss_fuzz/FuzzPathDeserialize.cpp",
Kevin Lubick2541edf2018-01-11 10:27:14 -05002089 "fuzz/oss_fuzz/FuzzRegionDeserialize.cpp",
2090 "fuzz/oss_fuzz/FuzzRegionSetPath.cpp",
Kevin Lubicke9c1ce82019-03-11 11:09:40 -04002091 "fuzz/oss_fuzz/FuzzSKSL2GLSL.cpp",
2092 "fuzz/oss_fuzz/FuzzSKSL2Metal.cpp",
Kevin Lubick0f0a7102019-03-18 16:20:55 -04002093 "fuzz/oss_fuzz/FuzzSKSL2Pipeline.cpp",
Kevin Lubicke9c1ce82019-03-11 11:09:40 -04002094 "fuzz/oss_fuzz/FuzzSKSL2SPIRV.cpp",
Kevin Lubickf034d112018-02-08 14:31:24 -05002095 "fuzz/oss_fuzz/FuzzTextBlobDeserialize.cpp",
Kevin Lubick9ff5dc92018-01-09 12:47:33 -05002096 "tools/UrlDataManager.cpp",
Mike Klein8f4e2242019-03-20 11:59:00 -05002097 "tools/debugger/DebugCanvas.cpp",
2098 "tools/debugger/DrawCommand.cpp",
2099 "tools/debugger/JsonWriteBuffer.cpp",
kjlubick14f984b2016-10-03 11:49:45 -07002100 ]
2101 deps = [
2102 ":flags",
Hal Canary44801ca2017-03-15 11:39:06 -04002103 ":gpu_tool_utils",
kjlubick14f984b2016-10-03 11:49:45 -07002104 ":skia",
Florin Malita3d856bd2018-05-26 09:49:28 -04002105 "modules/skottie:fuzz",
kjlubick14f984b2016-10-03 11:49:45 -07002106 ]
kjlubick14f984b2016-10-03 11:49:45 -07002107 }
Mike Klein38312422016-10-05 15:41:01 -04002108
Mike Kleine6682eb2017-01-05 10:54:57 -05002109 test_app("pathops_unittest") {
Mike Klein6e744122016-10-27 12:21:40 -04002110 sources = pathops_tests_sources + [
Mike Klein6e55fef2016-10-26 11:41:47 -04002111 rebase_path("tests/skia_test.cpp"),
2112 rebase_path("tests/Test.cpp"),
2113 ]
caryclark9feb6322016-10-25 08:58:26 -07002114 deps = [
2115 ":flags",
2116 ":gpu_tool_utils",
2117 ":skia",
2118 ":tool_utils",
2119 ]
caryclark9feb6322016-10-25 08:58:26 -07002120 }
2121
Mike Kleine6682eb2017-01-05 10:54:57 -05002122 test_app("dump_record") {
Mike Klein38312422016-10-05 15:41:01 -04002123 sources = [
2124 "tools/DumpRecord.cpp",
2125 "tools/dump_record.cpp",
2126 ]
2127 deps = [
2128 ":flags",
2129 ":skia",
2130 ]
Mike Klein38312422016-10-05 15:41:01 -04002131 }
bungemanfe917272016-10-13 17:36:40 -04002132
Mike Kleine6682eb2017-01-05 10:54:57 -05002133 test_app("skdiff") {
bungemanfe917272016-10-13 17:36:40 -04002134 sources = [
2135 "tools/skdiff/skdiff.cpp",
2136 "tools/skdiff/skdiff_html.cpp",
2137 "tools/skdiff/skdiff_main.cpp",
2138 "tools/skdiff/skdiff_utils.cpp",
2139 ]
2140 deps = [
2141 ":skia",
2142 ":tool_utils",
2143 ]
bungemanfe917272016-10-13 17:36:40 -04002144 }
halcanarya73d76a2016-10-17 13:19:02 -07002145
Mike Kleine6682eb2017-01-05 10:54:57 -05002146 test_app("skp_parser") {
halcanarya73d76a2016-10-17 13:19:02 -07002147 sources = [
2148 "tools/skp_parser.cpp",
2149 ]
2150 deps = [
2151 ":skia",
2152 ":tool_utils",
halcanarya73d76a2016-10-17 13:19:02 -07002153 ]
halcanarya73d76a2016-10-17 13:19:02 -07002154 }
Brian Osman16adfa32016-10-18 14:42:44 -04002155
Brian Osmanc9a42472018-05-31 13:17:12 -04002156 if (!is_win) {
Hal Canaryd7b38452017-12-11 17:46:26 -05002157 test_lib("skqp_lib") {
Hal Canaryac7f23c2018-11-26 14:07:41 -05002158 public_include_dirs = [ "tools/skqp/src" ]
Hal Canary0e07ad72018-02-08 13:06:56 -05002159 defines =
2160 [ "SK_SKQP_GLOBAL_ERROR_TOLERANCE=$skia_skqp_global_error_tolerance" ]
Hal Canary75427132017-10-11 16:00:31 -04002161 sources = [
2162 "dm/DMGpuTestProcs.cpp",
Hal Canaryac7f23c2018-11-26 14:07:41 -05002163 "tools/skqp/src/skqp.cpp",
2164 "tools/skqp/src/skqp_model.cpp",
Hal Canary75427132017-10-11 16:00:31 -04002165 ]
2166 deps = [
2167 ":gm",
2168 ":gpu_tool_utils",
2169 ":skia",
2170 ":tests",
Hal Canaryd7b38452017-12-11 17:46:26 -05002171 ":tool_utils",
2172 ]
2173 }
2174 test_app("skqp") {
2175 sources = [
Hal Canaryac7f23c2018-11-26 14:07:41 -05002176 "tools/skqp/src/skqp_main.cpp",
Hal Canaryd7b38452017-12-11 17:46:26 -05002177 ]
2178 deps = [
2179 ":skia",
2180 ":skqp_lib",
Hal Canary537d9c02018-01-30 11:30:48 -05002181 ":tool_utils",
Hal Canaryac7f23c2018-11-26 14:07:41 -05002182 ]
2183 }
2184 test_app("jitter_gms") {
2185 sources = [
2186 "tools/skqp/jitter_gms.cpp",
2187 ]
2188 deps = [
2189 ":gm",
2190 ":skia",
2191 ":skqp_lib",
Hal Canary75427132017-10-11 16:00:31 -04002192 ]
2193 }
2194 }
Brian Osmanc9a42472018-05-31 13:17:12 -04002195 if (is_android) {
Hal Canary28f89382017-12-12 09:42:14 -05002196 test_app("skqp_app") {
2197 is_shared_library = true
2198 sources = [
Hal Canaryac7f23c2018-11-26 14:07:41 -05002199 "tools/skqp/src/jni_skqp.cpp",
Hal Canary28f89382017-12-12 09:42:14 -05002200 ]
2201 deps = [
2202 ":skia",
2203 ":skqp_lib",
Hal Canaryb4d01a92018-01-29 13:10:08 -05002204 ":tool_utils",
Hal Canary28f89382017-12-12 09:42:14 -05002205 ]
2206 libs = [ "android" ]
2207 }
2208 }
Stan Iliev93151722018-08-02 11:10:52 -04002209 if (is_android && skia_enable_gpu) {
2210 test_app("skottie_android") {
2211 is_shared_library = true
2212
2213 sources = [
2214 "platform_tools/android/apps/skottie/src/main/cpp/JavaInputStreamAdaptor.cpp",
2215 "platform_tools/android/apps/skottie/src/main/cpp/native-lib.cpp",
2216 ]
2217 libs = []
2218
2219 include_dirs = []
2220 deps = [
2221 ":skia",
2222 "modules/skottie",
Stan Ilieva7a52b92018-10-01 15:36:32 -04002223 "modules/sksg:samples",
Stan Iliev93151722018-08-02 11:10:52 -04002224 ]
2225 }
2226 }
Hal Canary75427132017-10-11 16:00:31 -04002227
Hal Canarya9de7602018-01-19 13:08:23 -05002228 test_app("list_gms") {
2229 sources = [
2230 "tools/list_gms.cpp",
2231 ]
2232 deps = [
2233 ":gm",
2234 ":skia",
2235 ]
2236 }
2237 test_app("list_gpu_unit_tests") {
2238 sources = [
2239 "dm/DMGpuTestProcs.cpp",
2240 "tools/list_gpu_unit_tests.cpp",
2241 ]
2242 deps = [
2243 ":skia",
2244 ":tests",
2245 ]
2246 }
2247
Brian Osmanc9a42472018-05-31 13:17:12 -04002248 test_lib("sk_app") {
2249 public_include_dirs = [ "tools/sk_app" ]
2250 sources = [
2251 "tools/sk_app/CommandSet.cpp",
2252 "tools/sk_app/GLWindowContext.cpp",
2253 "tools/sk_app/Window.cpp",
2254 ]
2255 libs = []
2256
2257 if (is_android) {
2258 sources += [
2259 "tools/sk_app/android/GLWindowContext_android.cpp",
2260 "tools/sk_app/android/RasterWindowContext_android.cpp",
2261 "tools/sk_app/android/Window_android.cpp",
2262 "tools/sk_app/android/main_android.cpp",
2263 "tools/sk_app/android/surface_glue_android.cpp",
Brian Osman16adfa32016-10-18 14:42:44 -04002264 ]
Brian Osmanc9a42472018-05-31 13:17:12 -04002265 libs += [ "android" ]
2266 } else if (is_linux) {
2267 sources += [
2268 "tools/sk_app/unix/GLWindowContext_unix.cpp",
2269 "tools/sk_app/unix/RasterWindowContext_unix.cpp",
2270 "tools/sk_app/unix/Window_unix.cpp",
2271 "tools/sk_app/unix/keysym2ucs.c",
2272 "tools/sk_app/unix/main_unix.cpp",
Brian Osman16adfa32016-10-18 14:42:44 -04002273 ]
Brian Osmanc9a42472018-05-31 13:17:12 -04002274 libs += [
2275 "GL",
2276 "X11",
2277 ]
2278 } else if (is_win) {
2279 sources += [
2280 "tools/sk_app/win/GLWindowContext_win.cpp",
2281 "tools/sk_app/win/RasterWindowContext_win.cpp",
2282 "tools/sk_app/win/Window_win.cpp",
2283 "tools/sk_app/win/main_win.cpp",
2284 ]
Brian Salomon194db172017-08-17 14:37:06 -04002285 if (skia_use_angle) {
Brian Osmanc9a42472018-05-31 13:17:12 -04002286 sources += [ "tools/sk_app/win/ANGLEWindowContext_win.cpp" ]
Brian Salomon194db172017-08-17 14:37:06 -04002287 }
Brian Osmanc9a42472018-05-31 13:17:12 -04002288 } else if (is_mac) {
2289 sources += [
Jim Van Verth1f086ca2019-01-28 14:46:04 -05002290 "tools/sk_app/mac/GLWindowContext_mac.mm",
2291 "tools/sk_app/mac/RasterWindowContext_mac.mm",
2292 "tools/sk_app/mac/Window_mac.mm",
2293 "tools/sk_app/mac/main_mac.mm",
Brian Osmanc9a42472018-05-31 13:17:12 -04002294 ]
2295 libs += [
2296 "QuartzCore.framework",
2297 "Cocoa.framework",
2298 "Foundation.framework",
2299 ]
2300 } else if (is_ios) {
2301 sources += [
2302 "tools/sk_app/ios/GLWindowContext_ios.cpp",
2303 "tools/sk_app/ios/RasterWindowContext_ios.cpp",
2304 "tools/sk_app/ios/Window_ios.cpp",
2305 "tools/sk_app/ios/main_ios.cpp",
2306 ]
2307 }
2308
2309 if (skia_use_vulkan) {
2310 sources += [ "tools/sk_app/VulkanWindowContext.cpp" ]
2311 if (is_android) {
2312 sources += [ "tools/sk_app/android/VulkanWindowContext_android.cpp" ]
2313 } else if (is_linux) {
2314 sources += [ "tools/sk_app/unix/VulkanWindowContext_unix.cpp" ]
2315 libs += [ "X11-xcb" ]
2316 } else if (is_win) {
2317 sources += [ "tools/sk_app/win/VulkanWindowContext_win.cpp" ]
Jim Van Verthce51c142019-02-14 14:07:46 -05002318 } else if (is_mac) {
2319 sources += [ "tools/sk_app/mac/VulkanWindowContext_mac.mm" ]
2320 libs += [ "MetalKit.framework" ]
Brian Osmanc9a42472018-05-31 13:17:12 -04002321 }
2322 }
2323
Jim Van Verthbe39f712019-02-08 15:36:14 -05002324 if (skia_use_metal) {
2325 sources += [ "tools/sk_app/MetalWindowContext.mm" ]
2326 if (is_mac) {
2327 sources += [ "tools/sk_app/mac/MetalWindowContext_mac.mm" ]
2328 }
2329 libs += [ "MetalKit.framework" ]
2330 }
2331
Brian Osmanc9a42472018-05-31 13:17:12 -04002332 deps = [
2333 ":gpu_tool_utils",
2334 ":skia",
2335 ":tool_utils",
Brian Osmanc9a42472018-05-31 13:17:12 -04002336 ]
2337 if (is_android) {
2338 deps += [ "//third_party/native_app_glue" ]
Jim Van Verth1f086ca2019-01-28 14:46:04 -05002339 } else if (is_ios) {
Brian Osmanc9a42472018-05-31 13:17:12 -04002340 deps += [ "//third_party/libsdl" ]
2341 }
2342 if (skia_use_angle) {
2343 deps += [ "//third_party/angle2" ]
Mike Kleina92c3832016-12-08 09:49:39 -05002344 }
Brian Osman16adfa32016-10-18 14:42:44 -04002345 }
Ethan Nicholas4f3985c2016-11-14 11:16:37 -05002346
Hal Canary87515122019-03-15 14:22:51 -04002347 if (!skia_use_vulkan && (is_mac || is_linux || is_win)) {
2348 test_app("fiddle_examples") {
2349 sources = [
Brian Osmanc725e8f2019-04-10 14:08:44 -04002350 "tools/fiddle/all_examples.cpp",
Hal Canary87515122019-03-15 14:22:51 -04002351 "tools/fiddle/examples.cpp",
Brian Osman72ef2d52019-03-17 11:09:17 -04002352 "tools/fiddle/examples.h",
Hal Canary87515122019-03-15 14:22:51 -04002353 ]
Hal Canary87515122019-03-15 14:22:51 -04002354 include_dirs = [ "tools" ]
Brian Osman72ef2d52019-03-17 11:09:17 -04002355 if (is_win) {
2356 cflags = [ "/wd4756" ] # Overflow in constant arithmetic
2357 }
Hal Canary87515122019-03-15 14:22:51 -04002358 deps = [
2359 ":skia",
2360 ":skia.h",
2361 "modules/skottie",
Florin Malitaa1dcaae2019-03-25 17:38:43 -04002362 "modules/skshaper",
Hal Canary87515122019-03-15 14:22:51 -04002363 ]
2364 }
2365 }
Brian Osmanc9a42472018-05-31 13:17:12 -04002366 test_app("viewer") {
2367 is_shared_library = is_android
Brian Osmanc9a42472018-05-31 13:17:12 -04002368 sources = [
2369 "tools/viewer/BisectSlide.cpp",
2370 "tools/viewer/GMSlide.cpp",
2371 "tools/viewer/ImGuiLayer.cpp",
2372 "tools/viewer/ImageSlide.cpp",
Brian Osman7c979f52019-02-12 13:27:51 -05002373 "tools/viewer/ParticlesSlide.cpp",
Brian Osmanc9a42472018-05-31 13:17:12 -04002374 "tools/viewer/SKPSlide.cpp",
2375 "tools/viewer/SampleSlide.cpp",
2376 "tools/viewer/SkottieSlide.cpp",
2377 "tools/viewer/SlideDir.cpp",
2378 "tools/viewer/StatsLayer.cpp",
2379 "tools/viewer/SvgSlide.cpp",
Ben Wagnerb2c4ea62018-08-08 11:36:17 -04002380 "tools/viewer/TouchGesture.cpp",
Leon Scroggins III81886e82018-08-22 11:18:08 -04002381 "tools/viewer/TouchGesture.h",
Brian Osmanc9a42472018-05-31 13:17:12 -04002382 "tools/viewer/Viewer.cpp",
2383 ]
2384 libs = []
2385
Kevin Lubickd9699322018-10-30 15:08:53 -04002386 include_dirs = [ "experimental" ]
Brian Osmanc9a42472018-05-31 13:17:12 -04002387 deps = [
Mike Kleinc6142d82019-03-25 10:54:59 -05002388 ":common_flags_gpu",
Brian Osmanc9a42472018-05-31 13:17:12 -04002389 ":experimental_svg_model",
2390 ":flags",
2391 ":gm",
2392 ":gpu_tool_utils",
2393 ":samples",
2394 ":sk_app",
2395 ":skia",
2396 ":tool_utils",
Mike Klein499f0ac2019-03-25 13:00:12 -05002397 ":trace",
Brian Osman7c979f52019-02-12 13:27:51 -05002398 "modules/particles",
Brian Osmanc9a42472018-05-31 13:17:12 -04002399 "modules/skottie",
Florin Malitaa8316552018-11-09 16:19:44 -05002400 "modules/skottie:utils",
Brian Osmanc9a42472018-05-31 13:17:12 -04002401 "modules/sksg",
Ben Wagnerb2c4ea62018-08-08 11:36:17 -04002402 "modules/sksg:samples",
Brian Osmanc9a42472018-05-31 13:17:12 -04002403 "//third_party/imgui",
Brian Osmanc9a42472018-05-31 13:17:12 -04002404 ]
Ruiqi Maof5101492018-06-29 14:32:21 -04002405
2406 # NIMA does not build on Windows clang
2407 if (!is_win || !is_clang) {
2408 sources += [ "tools/viewer/NIMASlide.cpp" ]
2409 deps += [ "//third_party/Nima-Cpp" ]
2410 }
Brian Osmaneff04b52017-11-21 13:18:02 -05002411 }
2412
ziadbbceddbc2018-06-19 13:57:15 -04002413 if (is_android) {
2414 test_app("arcore") {
2415 is_shared_library = true
2416 configs = [
2417 ":skia_public",
2418 "gn:default",
2419 ]
2420
2421 # For internship expedience, yes, we're rebuilding Skia rather than depending on :skia.
2422 # At the moment there's no way to use Skia and Skottie/SkShaper unless they're in the same .so.
Hal Canaryc25f4e92019-02-26 11:54:25 -05002423 public = skia_core_public
2424 public += skia_utils_public
ziadbbceddbc2018-06-19 13:57:15 -04002425 sources = []
2426 sources += skia_core_sources
2427 sources += skia_utils_sources
2428 sources += skia_xps_sources
2429 sources += [
2430 "src/android/SkAndroidFrameworkUtils.cpp",
2431 "src/android/SkAnimatedImage.cpp",
2432 "src/android/SkBitmapRegionCodec.cpp",
2433 "src/android/SkBitmapRegionDecoder.cpp",
2434 "src/codec/SkAndroidCodec.cpp",
2435 "src/codec/SkBmpBaseCodec.cpp",
2436 "src/codec/SkBmpCodec.cpp",
2437 "src/codec/SkBmpMaskCodec.cpp",
2438 "src/codec/SkBmpRLECodec.cpp",
2439 "src/codec/SkBmpStandardCodec.cpp",
2440 "src/codec/SkCodec.cpp",
2441 "src/codec/SkCodecImageGenerator.cpp",
2442 "src/codec/SkColorTable.cpp",
2443 "src/codec/SkGifCodec.cpp",
2444 "src/codec/SkMaskSwizzler.cpp",
2445 "src/codec/SkMasks.cpp",
2446 "src/codec/SkSampledCodec.cpp",
2447 "src/codec/SkSampler.cpp",
2448 "src/codec/SkStreamBuffer.cpp",
2449 "src/codec/SkSwizzler.cpp",
2450 "src/codec/SkWbmpCodec.cpp",
2451 "src/images/SkImageEncoder.cpp",
2452 "src/ports/SkDiscardableMemory_none.cpp",
2453 "src/ports/SkImageGenerator_skia.cpp",
2454 "src/ports/SkMemory_malloc.cpp",
2455 "src/ports/SkOSFile_stdio.cpp",
2456 "src/sfnt/SkOTTable_name.cpp",
2457 "src/sfnt/SkOTUtils.cpp",
2458 "src/utils/mac/SkStream_mac.cpp",
Jim Van Verth1676cb92019-01-15 13:24:45 -05002459 "third_party/etc1/etc1.cpp",
ziadbbceddbc2018-06-19 13:57:15 -04002460 "third_party/gif/SkGifImageReader.cpp",
2461 ]
2462 deps = [
2463 ":tool_utils",
2464 "modules/skottie",
2465 "modules/skshaper",
2466 ]
2467 }
2468 }
2469
Brian Osmanc9a42472018-05-31 13:17:12 -04002470 if (!skia_use_angle && (is_linux || is_win || is_mac)) {
Brian Osmaneff04b52017-11-21 13:18:02 -05002471 test_app("HelloWorld") {
2472 sources = [
2473 "example/HelloWorld.cpp",
2474 ]
2475 libs = []
2476
2477 include_dirs = []
2478 deps = [
2479 ":flags",
2480 ":gpu_tool_utils",
2481 ":sk_app",
2482 ":skia",
2483 ":tool_utils",
Brian Osmaneff04b52017-11-21 13:18:02 -05002484 ]
2485 }
2486 }
2487
Brian Osmanc9a42472018-05-31 13:17:12 -04002488 if (is_linux || is_mac || is_ios) {
Jim Van Verth4c70c752017-07-11 12:03:01 -04002489 test_app("SkiaSDLExample") {
2490 sources = [
2491 "example/SkiaSDLExample.cpp",
2492 ]
2493 libs = []
2494 include_dirs = []
2495 deps = [
2496 ":gpu_tool_utils",
2497 ":skia",
2498 "//third_party/libsdl",
2499 ]
2500 }
2501 }
2502
Robert Phillipsa6d2d702017-09-01 12:17:03 -04002503 if (skia_qt_path != "" && (is_win || is_linux || is_mac)) {
2504 action_foreach("generate_mocs") {
2505 script = "gn/call.py"
2506 sources = [
2507 "tools/mdbviz/MainWindow.h",
2508 ]
2509 outputs = [
2510 "$target_gen_dir/mdbviz/{{source_name_part}}_moc.cpp",
2511 ]
2512 args = [
2513 "$skia_qt_path" + "/bin/moc",
2514 "{{source}}",
2515 "-o",
2516 "gen/mdbviz/{{source_name_part}}_moc.cpp",
2517 ]
2518 }
2519 action_foreach("generate_resources") {
2520 script = "gn/call.py"
2521 sources = [
2522 "tools/mdbviz/resources.qrc",
2523 ]
2524 outputs = [
2525 "$target_gen_dir/mdbviz/{{source_name_part}}_res.cpp",
2526 ]
2527 args = [
2528 "$skia_qt_path" + "/bin/rcc",
2529 "{{source}}",
2530 "-o",
2531 "gen/mdbviz/{{source_name_part}}_res.cpp",
2532 ]
2533 }
2534 test_app("mdbviz") {
2535 if (is_win) {
2536 # on Windows we need to disable some exception handling warnings due to the Qt headers
2537 cflags = [ "/Wv:18" ] # 18 -> VS2013, 19 -> VS2015, 1910 -> VS2017
2538 }
2539 sources = [
Robert Phillips5fccf9d2017-09-05 15:10:12 -04002540 "tools/UrlDataManager.cpp",
Mike Klein8f4e2242019-03-20 11:59:00 -05002541 "tools/debugger/DebugCanvas.cpp",
2542 "tools/debugger/DrawCommand.cpp",
2543 "tools/debugger/JsonWriteBuffer.cpp",
Robert Phillipsa6d2d702017-09-01 12:17:03 -04002544 "tools/mdbviz/MainWindow.cpp",
Robert Phillipsdeaf5682017-09-06 13:07:21 -04002545 "tools/mdbviz/Model.cpp",
Robert Phillipsa6d2d702017-09-01 12:17:03 -04002546 "tools/mdbviz/main.cpp",
2547
2548 # generated files
2549 "$target_gen_dir/mdbviz/MainWindow_moc.cpp",
2550 "$target_gen_dir/mdbviz/resources_res.cpp",
2551 ]
2552 lib_dirs = [ "$skia_qt_path/lib" ]
2553 libs = [
2554 "Qt5Core.lib",
2555 "Qt5Gui.lib",
2556 "Qt5Widgets.lib",
2557 ]
2558 include_dirs = [
2559 "$skia_qt_path/include",
Robert Phillips276066b2017-09-06 17:17:44 -04002560 "$skia_qt_path/include/QtCore",
Robert Phillipsa6d2d702017-09-01 12:17:03 -04002561 "$skia_qt_path/include/QtWidgets",
Robert Phillips5fccf9d2017-09-05 15:10:12 -04002562 "tools",
2563 "tools/debugger",
Robert Phillipsa6d2d702017-09-01 12:17:03 -04002564 ]
2565 deps = [
2566 ":generate_mocs",
2567 ":generate_resources",
2568 ":skia",
2569 ]
2570 }
2571 }
2572
Mike Kleine459afd2017-03-03 09:21:30 -05002573 if (is_android && defined(ndk) && ndk != "") {
Derek Sollenberger70120c72017-01-05 11:39:04 -05002574 copy("gdbserver") {
2575 sources = [
2576 "$ndk/$ndk_gdbserver",
2577 ]
2578 outputs = [
2579 "$root_out_dir/gdbserver",
2580 ]
2581 }
Derek Sollenberger70120c72017-01-05 11:39:04 -05002582 }
Mike Kleinf9ae6702018-06-20 14:05:05 -04002583
2584 if (skia_use_opencl) {
2585 test_app("hello-opencl") {
2586 sources = [
Mike Kleinf9ae6702018-06-20 14:05:05 -04002587 "tools/hello-opencl.cpp",
2588 ]
Mike Klein8a1f15d2019-02-11 11:59:41 -05002589 deps = [
2590 "//third_party/opencl",
2591 ]
Mike Kleinf9ae6702018-06-20 14:05:05 -04002592 }
2593 }
mtklein25c81d42016-07-27 13:55:26 -07002594}