xref: /aosp_15_r20/external/skia/gn/skia.gni (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker# Copyright 2019 Google LLC.
2*c8dee2aaSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
3*c8dee2aaSAndroid Build Coastguard Worker# found in the LICENSE file.
4*c8dee2aaSAndroid Build Coastguard Worker
5*c8dee2aaSAndroid Build Coastguard Workerif (!defined(is_skia_standalone)) {
6*c8dee2aaSAndroid Build Coastguard Worker  is_skia_standalone = false
7*c8dee2aaSAndroid Build Coastguard Worker}
8*c8dee2aaSAndroid Build Coastguard Worker
9*c8dee2aaSAndroid Build Coastguard Workeris_skia_dev_build = is_skia_standalone && !is_official_build
10*c8dee2aaSAndroid Build Coastguard Worker
11*c8dee2aaSAndroid Build Coastguard Workerdeclare_args() {
12*c8dee2aaSAndroid Build Coastguard Worker  skia_android_serial = ""
13*c8dee2aaSAndroid Build Coastguard Worker  skia_compile_modules = false
14*c8dee2aaSAndroid Build Coastguard Worker  skia_compile_sksl_tests = false
15*c8dee2aaSAndroid Build Coastguard Worker  skia_dwritecore_sdk = ""
16*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_api_available_macro = true
17*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_android_utils = is_skia_dev_build
18*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_discrete_gpu = true
19*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_fontmgr_empty = false
20*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_fontmgr_fuchsia = is_fuchsia
21*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_fontmgr_win = is_win
22*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_gpu_debug_layers = is_skia_dev_build && is_debug
23*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_optimize_size = false
24*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_pdf = !is_wasm
25*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_precompile = true
26*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_skottie = !is_component_build
27*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_svg = !is_component_build
28*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_tools = is_skia_dev_build
29*c8dee2aaSAndroid Build Coastguard Worker  skia_disable_tracing = is_official_build
30*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_vello_shaders = false
31*c8dee2aaSAndroid Build Coastguard Worker  skia_disable_vma_stl_shared_mutex = false
32*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_winuwp = false
33*c8dee2aaSAndroid Build Coastguard Worker  skia_generate_workarounds = false
34*c8dee2aaSAndroid Build Coastguard Worker  skia_include_multiframe_procs = false
35*c8dee2aaSAndroid Build Coastguard Worker  skia_lex = false
36*c8dee2aaSAndroid Build Coastguard Worker  skia_print_sksl_shaders = false
37*c8dee2aaSAndroid Build Coastguard Worker  skia_print_native_shaders = false
38*c8dee2aaSAndroid Build Coastguard Worker  skia_tools_require_resources = false
39*c8dee2aaSAndroid Build Coastguard Worker  skia_update_fuchsia_sdk = false
40*c8dee2aaSAndroid Build Coastguard Worker  skia_use_angle = false
41*c8dee2aaSAndroid Build Coastguard Worker  skia_use_client_icu = false
42*c8dee2aaSAndroid Build Coastguard Worker  skia_use_crabbyavif = false
43*c8dee2aaSAndroid Build Coastguard Worker  skia_use_dawn = false
44*c8dee2aaSAndroid Build Coastguard Worker  skia_use_direct3d = false
45*c8dee2aaSAndroid Build Coastguard Worker  skia_use_egl = false
46*c8dee2aaSAndroid Build Coastguard Worker  skia_use_epoxy_egl = false
47*c8dee2aaSAndroid Build Coastguard Worker  skia_use_expat = !is_wasm
48*c8dee2aaSAndroid Build Coastguard Worker  skia_use_ffmpeg = false
49*c8dee2aaSAndroid Build Coastguard Worker  skia_use_fixed_gamma_text = is_android
50*c8dee2aaSAndroid Build Coastguard Worker  skia_use_fontconfig = is_linux
51*c8dee2aaSAndroid Build Coastguard Worker  skia_use_fontations = false
52*c8dee2aaSAndroid Build Coastguard Worker  skia_use_fonthost_mac = is_mac || is_ios
53*c8dee2aaSAndroid Build Coastguard Worker  skia_use_freetype = is_android || is_fuchsia || is_linux || is_wasm
54*c8dee2aaSAndroid Build Coastguard Worker  skia_use_harfbuzz = true
55*c8dee2aaSAndroid Build Coastguard Worker  skia_use_gl = !is_fuchsia
56*c8dee2aaSAndroid Build Coastguard Worker  skia_use_icu = !is_fuchsia
57*c8dee2aaSAndroid Build Coastguard Worker  skia_use_icu4x = false
58*c8dee2aaSAndroid Build Coastguard Worker  skia_use_jpeg_gainmaps = is_skia_dev_build
59*c8dee2aaSAndroid Build Coastguard Worker  skia_use_libavif = false
60*c8dee2aaSAndroid Build Coastguard Worker  skia_use_libgrapheme = false
61*c8dee2aaSAndroid Build Coastguard Worker  skia_use_libheif = is_skia_dev_build
62*c8dee2aaSAndroid Build Coastguard Worker  skia_use_libjpeg_turbo_decode = true
63*c8dee2aaSAndroid Build Coastguard Worker  skia_use_libjpeg_turbo_encode = true
64*c8dee2aaSAndroid Build Coastguard Worker  skia_use_no_jpeg_encode = false
65*c8dee2aaSAndroid Build Coastguard Worker  skia_use_libjxl_decode = false
66*c8dee2aaSAndroid Build Coastguard Worker  skia_use_libpng_decode = true
67*c8dee2aaSAndroid Build Coastguard Worker  skia_use_libpng_encode = true
68*c8dee2aaSAndroid Build Coastguard Worker  skia_use_no_png_encode = false
69*c8dee2aaSAndroid Build Coastguard Worker  skia_use_libwebp_decode = true
70*c8dee2aaSAndroid Build Coastguard Worker  skia_use_libwebp_encode = !is_wasm
71*c8dee2aaSAndroid Build Coastguard Worker  skia_use_no_webp_encode = false
72*c8dee2aaSAndroid Build Coastguard Worker  skia_use_lua = is_skia_dev_build && !is_ios
73*c8dee2aaSAndroid Build Coastguard Worker  skia_use_metal = false
74*c8dee2aaSAndroid Build Coastguard Worker  skia_use_ndk_images = is_android && defined(ndk_api) && ndk_api >= 30
75*c8dee2aaSAndroid Build Coastguard Worker  skia_use_perfetto = is_linux || is_mac || is_android
76*c8dee2aaSAndroid Build Coastguard Worker
77*c8dee2aaSAndroid Build Coastguard Worker  # Currently only supported in Android framework
78*c8dee2aaSAndroid Build Coastguard Worker  skia_android_framework_use_perfetto = false
79*c8dee2aaSAndroid Build Coastguard Worker  skia_use_piex = !is_win && !is_wasm
80*c8dee2aaSAndroid Build Coastguard Worker  skia_use_rust_png_decode = false
81*c8dee2aaSAndroid Build Coastguard Worker  skia_use_rust_png_encode = false
82*c8dee2aaSAndroid Build Coastguard Worker  skia_use_sfml = false
83*c8dee2aaSAndroid Build Coastguard Worker  skia_use_webgl = is_wasm
84*c8dee2aaSAndroid Build Coastguard Worker  skia_use_webgpu = is_wasm
85*c8dee2aaSAndroid Build Coastguard Worker  skia_use_wuffs = true
86*c8dee2aaSAndroid Build Coastguard Worker  skia_use_x11 = is_linux
87*c8dee2aaSAndroid Build Coastguard Worker  skia_use_xps = true
88*c8dee2aaSAndroid Build Coastguard Worker
89*c8dee2aaSAndroid Build Coastguard Worker  # Use the safe mode for libcxx
90*c8dee2aaSAndroid Build Coastguard Worker  # See: https://libcxx.llvm.org/UsingLibcxx.html#enabling-the-safe-libc-mode
91*c8dee2aaSAndroid Build Coastguard Worker  skia_use_safe_libcxx = false
92*c8dee2aaSAndroid Build Coastguard Worker
93*c8dee2aaSAndroid Build Coastguard Worker  # deprecated, we will eventually use just skia_enable_ganesh
94*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_gpu = true
95*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_graphite = false
96*c8dee2aaSAndroid Build Coastguard Worker  skia_use_zlib = true
97*c8dee2aaSAndroid Build Coastguard Worker
98*c8dee2aaSAndroid Build Coastguard Worker  if (is_ios) {
99*c8dee2aaSAndroid Build Coastguard Worker    skia_ios_identity = ".*Google.*"
100*c8dee2aaSAndroid Build Coastguard Worker    skia_ios_profile = "Google Development"
101*c8dee2aaSAndroid Build Coastguard Worker
102*c8dee2aaSAndroid Build Coastguard Worker    # should only code sign when running on a device, not the simulator
103*c8dee2aaSAndroid Build Coastguard Worker    skia_ios_use_signing = !ios_use_simulator
104*c8dee2aaSAndroid Build Coastguard Worker  }
105*c8dee2aaSAndroid Build Coastguard Worker
106*c8dee2aaSAndroid Build Coastguard Worker  skia_build_rust_targets = false
107*c8dee2aaSAndroid Build Coastguard Worker}
108*c8dee2aaSAndroid Build Coastguard Worker
109*c8dee2aaSAndroid Build Coastguard Workerdeclare_args() {
110*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_ganesh = skia_enable_gpu
111*c8dee2aaSAndroid Build Coastguard Worker}
112*c8dee2aaSAndroid Build Coastguard Worker
113*c8dee2aaSAndroid Build Coastguard Workerdeclare_args() {
114*c8dee2aaSAndroid Build Coastguard Worker  # This is now a no-op. TODO(kjlubick) remove after Flutter stops using this.
115*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_sksl_tracing = false
116*c8dee2aaSAndroid Build Coastguard Worker}
117*c8dee2aaSAndroid Build Coastguard Worker
118*c8dee2aaSAndroid Build Coastguard Workerdeclare_args() {
119*c8dee2aaSAndroid Build Coastguard Worker  if (is_mac) {
120*c8dee2aaSAndroid Build Coastguard Worker    skia_gl_standard = "gl"
121*c8dee2aaSAndroid Build Coastguard Worker  } else if (is_ios) {
122*c8dee2aaSAndroid Build Coastguard Worker    skia_gl_standard = "gles"
123*c8dee2aaSAndroid Build Coastguard Worker  } else if (is_wasm && skia_enable_ganesh) {
124*c8dee2aaSAndroid Build Coastguard Worker    skia_gl_standard = "webgl"
125*c8dee2aaSAndroid Build Coastguard Worker  } else {
126*c8dee2aaSAndroid Build Coastguard Worker    skia_gl_standard = ""
127*c8dee2aaSAndroid Build Coastguard Worker  }
128*c8dee2aaSAndroid Build Coastguard Worker
129*c8dee2aaSAndroid Build Coastguard Worker  if (is_fuchsia) {
130*c8dee2aaSAndroid Build Coastguard Worker    skia_use_vulkan = true
131*c8dee2aaSAndroid Build Coastguard Worker  } else {
132*c8dee2aaSAndroid Build Coastguard Worker    skia_use_vulkan = false
133*c8dee2aaSAndroid Build Coastguard Worker  }
134*c8dee2aaSAndroid Build Coastguard Worker
135*c8dee2aaSAndroid Build Coastguard Worker  skia_build_fuzzers = is_clang && is_linux && target_cpu == "x64"
136*c8dee2aaSAndroid Build Coastguard Worker  skia_use_libfuzzer_defaults = true
137*c8dee2aaSAndroid Build Coastguard Worker}
138*c8dee2aaSAndroid Build Coastguard Worker
139*c8dee2aaSAndroid Build Coastguard Workerdeclare_args() {
140*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_skunicode = skia_use_icu || skia_use_client_icu ||
141*c8dee2aaSAndroid Build Coastguard Worker                          skia_use_libgrapheme || skia_use_icu4x
142*c8dee2aaSAndroid Build Coastguard Worker}
143*c8dee2aaSAndroid Build Coastguard Worker
144*c8dee2aaSAndroid Build Coastguard Workerif (skia_use_angle && skia_gl_standard != "gles") {
145*c8dee2aaSAndroid Build Coastguard Worker  skia_gl_standard = ""
146*c8dee2aaSAndroid Build Coastguard Worker}
147*c8dee2aaSAndroid Build Coastguard Worker
148*c8dee2aaSAndroid Build Coastguard Workerdeclare_args() {
149*c8dee2aaSAndroid Build Coastguard Worker  skia_pdf_subset_harfbuzz = skia_use_harfbuzz
150*c8dee2aaSAndroid Build Coastguard Worker}
151*c8dee2aaSAndroid Build Coastguard Worker
152*c8dee2aaSAndroid Build Coastguard Workerdeclare_args() {
153*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_fontmgr_android = skia_use_expat && skia_use_freetype
154*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_fontmgr_android_ndk = is_android && skia_use_freetype
155*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_fontmgr_custom_directory =
156*c8dee2aaSAndroid Build Coastguard Worker      skia_use_freetype && !is_fuchsia && !is_wasm
157*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_fontmgr_custom_embedded = skia_use_freetype && !is_fuchsia
158*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_fontmgr_custom_empty = skia_use_freetype && !is_wasm
159*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_fontmgr_fontconfig = skia_use_freetype && skia_use_fontconfig
160*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_fontmgr_win_gdi = is_win && !skia_enable_winuwp
161*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_fontmgr_FontConfigInterface =
162*c8dee2aaSAndroid Build Coastguard Worker      skia_use_freetype && skia_use_fontconfig
163*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_spirv_validation = is_skia_dev_build && is_debug && !skia_use_dawn
164*c8dee2aaSAndroid Build Coastguard Worker  skia_use_dng_sdk =
165*c8dee2aaSAndroid Build Coastguard Worker      !is_fuchsia && !is_wasm && skia_use_libjpeg_turbo_decode && skia_use_zlib
166*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_vulkan_debug_layers = skia_enable_gpu_debug_layers
167*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_direct3d_debug_layer = skia_enable_gpu_debug_layers
168*c8dee2aaSAndroid Build Coastguard Worker  skia_enable_metal_debug_info = skia_enable_gpu_debug_layers
169*c8dee2aaSAndroid Build Coastguard Worker  skia_use_vma = skia_use_vulkan
170*c8dee2aaSAndroid Build Coastguard Worker  skia_vulkan_memory_allocator_dir =
171*c8dee2aaSAndroid Build Coastguard Worker      "//third_party/externals/vulkanmemoryallocator"
172*c8dee2aaSAndroid Build Coastguard Worker  skia_build_for_debugger = false
173*c8dee2aaSAndroid Build Coastguard Worker
174*c8dee2aaSAndroid Build Coastguard Worker  # icu_bidi sources
175*c8dee2aaSAndroid Build Coastguard Worker  skia_icu_bidi_third_party_dir = "//third_party/icu_bidi"
176*c8dee2aaSAndroid Build Coastguard Worker
177*c8dee2aaSAndroid Build Coastguard Worker  # libgrapheme sources
178*c8dee2aaSAndroid Build Coastguard Worker  skia_libgrapheme_third_party_dir = "//third_party/libgrapheme"
179*c8dee2aaSAndroid Build Coastguard Worker}
180*c8dee2aaSAndroid Build Coastguard Worker
181*c8dee2aaSAndroid Build Coastguard Workerassert(!skia_use_dawn || skia_enable_graphite)  # Dawn is Graphite-only
182*c8dee2aaSAndroid Build Coastguard Worker
183*c8dee2aaSAndroid Build Coastguard Worker# Our tools require static linking (they use non-exported symbols), and the Ganesh backend.
184*c8dee2aaSAndroid Build Coastguard Workerskia_enable_tools =
185*c8dee2aaSAndroid Build Coastguard Worker    skia_enable_tools && !is_component_build && skia_enable_ganesh
186*c8dee2aaSAndroid Build Coastguard Worker
187*c8dee2aaSAndroid Build Coastguard Workerif (skia_enable_optimize_size) {
188*c8dee2aaSAndroid Build Coastguard Worker  assert(
189*c8dee2aaSAndroid Build Coastguard Worker      !is_debug,
190*c8dee2aaSAndroid Build Coastguard Worker      "Must set is_debug to false for skia_enable_optimize_size to do anything. If you want to build with debug mode and the correct define, add extra_cflags=['-DSK_ENABLE_OPTIMIZE_SIZE'] to your GN args.")
191*c8dee2aaSAndroid Build Coastguard Worker}
192*c8dee2aaSAndroid Build Coastguard Worker
193*c8dee2aaSAndroid Build Coastguard Worker# Current Perfetto integrations are mutually exclusive
194*c8dee2aaSAndroid Build Coastguard Workerassert(!skia_use_perfetto || !skia_android_framework_use_perfetto)
195*c8dee2aaSAndroid Build Coastguard Worker
196*c8dee2aaSAndroid Build Coastguard Worker# Skia's targets may be built inside other gn build systems.
197*c8dee2aaSAndroid Build Coastguard Worker# Skia builds other project's build targets inside its build.
198*c8dee2aaSAndroid Build Coastguard Worker# This is easier if the built-in target types remain generic.
199*c8dee2aaSAndroid Build Coastguard Worker# Place Skia target specific configs in skia_target_default_configs.
200*c8dee2aaSAndroid Build Coastguard Worker# These will be applied by the 'skia_*' templates.
201*c8dee2aaSAndroid Build Coastguard Worker# In the Skia build these configs apply many warnings as errors.
202*c8dee2aaSAndroid Build Coastguard Worker# Other projects may optionally set these configs as they see fit.
203*c8dee2aaSAndroid Build Coastguard Workertemplate("skia_target") {
204*c8dee2aaSAndroid Build Coastguard Worker  target(invoker._skia_target_type, target_name) {
205*c8dee2aaSAndroid Build Coastguard Worker    # set_defaults(invoker._skia_target_type) might not exist or set configs
206*c8dee2aaSAndroid Build Coastguard Worker    if (!defined(configs)) {
207*c8dee2aaSAndroid Build Coastguard Worker      configs = []
208*c8dee2aaSAndroid Build Coastguard Worker    }
209*c8dee2aaSAndroid Build Coastguard Worker
210*c8dee2aaSAndroid Build Coastguard Worker    # Explicit configs instead of set_defaults("skia_target")
211*c8dee2aaSAndroid Build Coastguard Worker    # Allows template("skia_*") below to avoid the configs dance.
212*c8dee2aaSAndroid Build Coastguard Worker    if (defined(skia_target_default_configs)) {
213*c8dee2aaSAndroid Build Coastguard Worker      configs += skia_target_default_configs
214*c8dee2aaSAndroid Build Coastguard Worker    }
215*c8dee2aaSAndroid Build Coastguard Worker
216*c8dee2aaSAndroid Build Coastguard Worker    # "*" clobbers the current scope; append to existing configs
217*c8dee2aaSAndroid Build Coastguard Worker    forward_variables_from(invoker, "*", [ "configs" ])
218*c8dee2aaSAndroid Build Coastguard Worker    if (defined(invoker.configs)) {
219*c8dee2aaSAndroid Build Coastguard Worker      configs += invoker.configs
220*c8dee2aaSAndroid Build Coastguard Worker    }
221*c8dee2aaSAndroid Build Coastguard Worker  }
222*c8dee2aaSAndroid Build Coastguard Worker}
223*c8dee2aaSAndroid Build Coastguard Worker
224*c8dee2aaSAndroid Build Coastguard Workertemplate("skia_executable") {
225*c8dee2aaSAndroid Build Coastguard Worker  skia_target(target_name) {
226*c8dee2aaSAndroid Build Coastguard Worker    assert(!defined(configs), "No set_defaults(skia_target)")
227*c8dee2aaSAndroid Build Coastguard Worker    _skia_target_type = "executable"
228*c8dee2aaSAndroid Build Coastguard Worker    forward_variables_from(invoker, "*")
229*c8dee2aaSAndroid Build Coastguard Worker  }
230*c8dee2aaSAndroid Build Coastguard Worker}
231*c8dee2aaSAndroid Build Coastguard Workertemplate("skia_source_set") {
232*c8dee2aaSAndroid Build Coastguard Worker  skia_target(target_name) {
233*c8dee2aaSAndroid Build Coastguard Worker    assert(!defined(configs), "No set_defaults(skia_target)")
234*c8dee2aaSAndroid Build Coastguard Worker    _skia_target_type = "source_set"
235*c8dee2aaSAndroid Build Coastguard Worker    forward_variables_from(invoker, "*")
236*c8dee2aaSAndroid Build Coastguard Worker  }
237*c8dee2aaSAndroid Build Coastguard Worker}
238*c8dee2aaSAndroid Build Coastguard Workertemplate("skia_static_library") {
239*c8dee2aaSAndroid Build Coastguard Worker  skia_target(target_name) {
240*c8dee2aaSAndroid Build Coastguard Worker    assert(!defined(configs), "No set_defaults(skia_target)")
241*c8dee2aaSAndroid Build Coastguard Worker    _skia_target_type = "static_library"
242*c8dee2aaSAndroid Build Coastguard Worker    forward_variables_from(invoker, "*")
243*c8dee2aaSAndroid Build Coastguard Worker  }
244*c8dee2aaSAndroid Build Coastguard Worker}
245*c8dee2aaSAndroid Build Coastguard Workertemplate("skia_shared_library") {
246*c8dee2aaSAndroid Build Coastguard Worker  skia_target(target_name) {
247*c8dee2aaSAndroid Build Coastguard Worker    assert(!defined(configs), "No set_defaults(skia_target)")
248*c8dee2aaSAndroid Build Coastguard Worker    _skia_target_type = "shared_library"
249*c8dee2aaSAndroid Build Coastguard Worker    forward_variables_from(invoker, "*")
250*c8dee2aaSAndroid Build Coastguard Worker  }
251*c8dee2aaSAndroid Build Coastguard Worker}
252*c8dee2aaSAndroid Build Coastguard Workertemplate("skia_component") {
253*c8dee2aaSAndroid Build Coastguard Worker  skia_target(target_name) {
254*c8dee2aaSAndroid Build Coastguard Worker    assert(!defined(configs), "No set_defaults(skia_target)")
255*c8dee2aaSAndroid Build Coastguard Worker    _skia_target_type = "component"
256*c8dee2aaSAndroid Build Coastguard Worker    forward_variables_from(invoker, "*")
257*c8dee2aaSAndroid Build Coastguard Worker  }
258*c8dee2aaSAndroid Build Coastguard Worker}
259