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