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