1*c8dee2aaSAndroid Build Coastguard Worker# Copyright 2016 Google Inc. 2*c8dee2aaSAndroid Build Coastguard Worker# 3*c8dee2aaSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 4*c8dee2aaSAndroid Build Coastguard Worker# found in the LICENSE file. 5*c8dee2aaSAndroid Build Coastguard Worker 6*c8dee2aaSAndroid Build Coastguard Workeris_skia_standalone = true 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker# It's best to keep the names and defaults of is_foo flags consistent with Chrome. 9*c8dee2aaSAndroid Build Coastguard Worker 10*c8dee2aaSAndroid Build Coastguard Workerdeclare_args() { 11*c8dee2aaSAndroid Build Coastguard Worker is_official_build = false 12*c8dee2aaSAndroid Build Coastguard Worker is_component_build = false 13*c8dee2aaSAndroid Build Coastguard Worker use_libfuzzer = false 14*c8dee2aaSAndroid Build Coastguard Worker ndk = "" 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Worker # Android 5.0, Lollipop 17*c8dee2aaSAndroid Build Coastguard Worker ndk_api = 21 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Worker sanitize = "" 20*c8dee2aaSAndroid Build Coastguard Worker 21*c8dee2aaSAndroid Build Coastguard Worker ar = "ar" 22*c8dee2aaSAndroid Build Coastguard Worker cc = "cc" 23*c8dee2aaSAndroid Build Coastguard Worker cxx = "c++" 24*c8dee2aaSAndroid Build Coastguard Worker 25*c8dee2aaSAndroid Build Coastguard Worker win_sdk = "C:/Program Files (x86)/Windows Kits/10" 26*c8dee2aaSAndroid Build Coastguard Worker win_sdk_version = "" 27*c8dee2aaSAndroid Build Coastguard Worker 28*c8dee2aaSAndroid Build Coastguard Worker win_vc = "" 29*c8dee2aaSAndroid Build Coastguard Worker win_toolchain_version = "" 30*c8dee2aaSAndroid Build Coastguard Worker 31*c8dee2aaSAndroid Build Coastguard Worker clang_win = "" 32*c8dee2aaSAndroid Build Coastguard Worker clang_win_version = "" 33*c8dee2aaSAndroid Build Coastguard Worker 34*c8dee2aaSAndroid Build Coastguard Worker ios_min_target = "" 35*c8dee2aaSAndroid Build Coastguard Worker ios_use_simulator = 36*c8dee2aaSAndroid Build Coastguard Worker target_os == "ios" && (target_cpu == "x86" || target_cpu == "x64") 37*c8dee2aaSAndroid Build Coastguard Worker 38*c8dee2aaSAndroid Build Coastguard Worker # Enable -H, which prints the include tree during compilation. 39*c8dee2aaSAndroid Build Coastguard Worker # For use by external tools for analyzing include files. 40*c8dee2aaSAndroid Build Coastguard Worker show_includes = false 41*c8dee2aaSAndroid Build Coastguard Worker} 42*c8dee2aaSAndroid Build Coastguard Workerdeclare_args() { 43*c8dee2aaSAndroid Build Coastguard Worker is_debug = !is_official_build 44*c8dee2aaSAndroid Build Coastguard Worker 45*c8dee2aaSAndroid Build Coastguard Worker # This affects Skia's ABI; must be set consistently for Skia and dependents. 46*c8dee2aaSAndroid Build Coastguard Worker is_trivial_abi = !is_official_build 47*c8dee2aaSAndroid Build Coastguard Worker} 48*c8dee2aaSAndroid Build Coastguard Worker 49*c8dee2aaSAndroid Build Coastguard Workerassert(!(is_debug && is_official_build)) 50*c8dee2aaSAndroid Build Coastguard Worker 51*c8dee2aaSAndroid Build Coastguard Workerif (target_cpu == "wasm") { 52*c8dee2aaSAndroid Build Coastguard Worker target_os = "wasm" 53*c8dee2aaSAndroid Build Coastguard Worker} 54*c8dee2aaSAndroid Build Coastguard Worker 55*c8dee2aaSAndroid Build Coastguard Worker# Platform detection 56*c8dee2aaSAndroid Build Coastguard Workerif (target_os == "") { 57*c8dee2aaSAndroid Build Coastguard Worker target_os = host_os 58*c8dee2aaSAndroid Build Coastguard Worker if (ndk != "") { 59*c8dee2aaSAndroid Build Coastguard Worker target_os = "android" 60*c8dee2aaSAndroid Build Coastguard Worker } 61*c8dee2aaSAndroid Build Coastguard Worker} 62*c8dee2aaSAndroid Build Coastguard Workerif (current_os == "") { 63*c8dee2aaSAndroid Build Coastguard Worker current_os = target_os 64*c8dee2aaSAndroid Build Coastguard Worker} 65*c8dee2aaSAndroid Build Coastguard Worker 66*c8dee2aaSAndroid Build Coastguard Workeris_android = current_os == "android" 67*c8dee2aaSAndroid Build Coastguard Workeris_fuchsia = current_os == "fuchsia" 68*c8dee2aaSAndroid Build Coastguard Workeris_ios = current_os == "ios" || current_os == "tvos" 69*c8dee2aaSAndroid Build Coastguard Workeris_tvos = current_os == "tvos" 70*c8dee2aaSAndroid Build Coastguard Workeris_linux = current_os == "linux" 71*c8dee2aaSAndroid Build Coastguard Workeris_mac = current_os == "mac" 72*c8dee2aaSAndroid Build Coastguard Workeris_wasm = current_os == "wasm" 73*c8dee2aaSAndroid Build Coastguard Workeris_win = current_os == "win" 74*c8dee2aaSAndroid Build Coastguard Worker 75*c8dee2aaSAndroid Build Coastguard Worker# This is just to make the Dawn build files happy. Skia itself uses target_os = "linux" 76*c8dee2aaSAndroid Build Coastguard Worker# for ChromeOS, so this variable will not affect Skia proper. 77*c8dee2aaSAndroid Build Coastguard Workeris_chromeos = false 78*c8dee2aaSAndroid Build Coastguard Worker 79*c8dee2aaSAndroid Build Coastguard Worker# This is to make the ANGLE build files happy. Skia always uses is_mac and/or is_ios. 80*c8dee2aaSAndroid Build Coastguard Workeris_apple = is_mac || is_ios 81*c8dee2aaSAndroid Build Coastguard Worker 82*c8dee2aaSAndroid Build Coastguard Workerif (target_cpu == "") { 83*c8dee2aaSAndroid Build Coastguard Worker target_cpu = host_cpu 84*c8dee2aaSAndroid Build Coastguard Worker if (is_android || is_ios) { 85*c8dee2aaSAndroid Build Coastguard Worker target_cpu = "arm64" 86*c8dee2aaSAndroid Build Coastguard Worker } 87*c8dee2aaSAndroid Build Coastguard Worker} 88*c8dee2aaSAndroid Build Coastguard Workerif (target_cpu == "x86_64") { 89*c8dee2aaSAndroid Build Coastguard Worker target_cpu = "x64" 90*c8dee2aaSAndroid Build Coastguard Worker} 91*c8dee2aaSAndroid Build Coastguard Workerif (current_cpu == "") { 92*c8dee2aaSAndroid Build Coastguard Worker current_cpu = target_cpu 93*c8dee2aaSAndroid Build Coastguard Worker} 94*c8dee2aaSAndroid Build Coastguard Worker 95*c8dee2aaSAndroid Build Coastguard Workeris_clang = is_android || is_ios || is_mac || is_fuchsia || is_wasm || 96*c8dee2aaSAndroid Build Coastguard Worker (cc == "clang" && cxx == "clang++") || clang_win != "" 97*c8dee2aaSAndroid Build Coastguard Workerif (!is_clang && !is_win) { 98*c8dee2aaSAndroid Build Coastguard Worker is_clang = exec_script("//gn/is_clang.py", 99*c8dee2aaSAndroid Build Coastguard Worker [ 100*c8dee2aaSAndroid Build Coastguard Worker cc, 101*c8dee2aaSAndroid Build Coastguard Worker cxx, 102*c8dee2aaSAndroid Build Coastguard Worker ], 103*c8dee2aaSAndroid Build Coastguard Worker "value") 104*c8dee2aaSAndroid Build Coastguard Worker} 105*c8dee2aaSAndroid Build Coastguard Worker 106*c8dee2aaSAndroid Build Coastguard Workerif (is_android) { 107*c8dee2aaSAndroid Build Coastguard Worker ndk_host = "" 108*c8dee2aaSAndroid Build Coastguard Worker ndk_target = "" 109*c8dee2aaSAndroid Build Coastguard Worker 110*c8dee2aaSAndroid Build Coastguard Worker if (host_os == "linux") { 111*c8dee2aaSAndroid Build Coastguard Worker ndk_host = "linux-x86_64" 112*c8dee2aaSAndroid Build Coastguard Worker } else if (host_os == "mac") { 113*c8dee2aaSAndroid Build Coastguard Worker ndk_host = "darwin-x86_64" 114*c8dee2aaSAndroid Build Coastguard Worker } else if (host_os == "win") { 115*c8dee2aaSAndroid Build Coastguard Worker ndk_host = "windows-x86_64" 116*c8dee2aaSAndroid Build Coastguard Worker } 117*c8dee2aaSAndroid Build Coastguard Worker 118*c8dee2aaSAndroid Build Coastguard Worker if (target_cpu == "arm64") { 119*c8dee2aaSAndroid Build Coastguard Worker ndk_target = "aarch64-linux-android" 120*c8dee2aaSAndroid Build Coastguard Worker } else if (target_cpu == "arm") { 121*c8dee2aaSAndroid Build Coastguard Worker ndk_target = "armv7a-linux-androideabi" 122*c8dee2aaSAndroid Build Coastguard Worker } else if (target_cpu == "x64") { 123*c8dee2aaSAndroid Build Coastguard Worker ndk_target = "x86_64-linux-android" 124*c8dee2aaSAndroid Build Coastguard Worker } else if (target_cpu == "x86") { 125*c8dee2aaSAndroid Build Coastguard Worker ndk_target = "i686-linux-android" 126*c8dee2aaSAndroid Build Coastguard Worker } 127*c8dee2aaSAndroid Build Coastguard Worker} 128*c8dee2aaSAndroid Build Coastguard Worker 129*c8dee2aaSAndroid Build Coastguard Workerif (target_os == "win") { 130*c8dee2aaSAndroid Build Coastguard Worker # By default we look for 2017 (Enterprise, Pro, and Community), then 2015. If MSVC is installed in a 131*c8dee2aaSAndroid Build Coastguard Worker # non-default location, you can set win_vc to inform us where it is. 132*c8dee2aaSAndroid Build Coastguard Worker 133*c8dee2aaSAndroid Build Coastguard Worker if (win_vc == "") { 134*c8dee2aaSAndroid Build Coastguard Worker win_vc = exec_script("//gn/find_msvc.py", [], "trim string") 135*c8dee2aaSAndroid Build Coastguard Worker } 136*c8dee2aaSAndroid Build Coastguard Worker assert(win_vc != "") # Could not find VC installation. Set win_vc to your VC 137*c8dee2aaSAndroid Build Coastguard Worker # directory. 138*c8dee2aaSAndroid Build Coastguard Worker} 139*c8dee2aaSAndroid Build Coastguard Worker 140*c8dee2aaSAndroid Build Coastguard Workerif (target_os == "win") { 141*c8dee2aaSAndroid Build Coastguard Worker if (win_toolchain_version == "") { 142*c8dee2aaSAndroid Build Coastguard Worker win_toolchain_version = exec_script("//gn/highest_version_dir.py", 143*c8dee2aaSAndroid Build Coastguard Worker [ 144*c8dee2aaSAndroid Build Coastguard Worker "$win_vc/Tools/MSVC", 145*c8dee2aaSAndroid Build Coastguard Worker "[0-9]{2}\.[0-9]{2}\.[0-9]{5}", 146*c8dee2aaSAndroid Build Coastguard Worker ], 147*c8dee2aaSAndroid Build Coastguard Worker "trim string") 148*c8dee2aaSAndroid Build Coastguard Worker } 149*c8dee2aaSAndroid Build Coastguard Worker if (win_sdk_version == "") { 150*c8dee2aaSAndroid Build Coastguard Worker win_sdk_version = exec_script("//gn/highest_version_dir.py", 151*c8dee2aaSAndroid Build Coastguard Worker [ 152*c8dee2aaSAndroid Build Coastguard Worker "$win_sdk/Include", 153*c8dee2aaSAndroid Build Coastguard Worker "[0-9]{2}\.[0-9]\.[0-9]{5}\.[0-9]", 154*c8dee2aaSAndroid Build Coastguard Worker ], 155*c8dee2aaSAndroid Build Coastguard Worker "trim string") 156*c8dee2aaSAndroid Build Coastguard Worker } 157*c8dee2aaSAndroid Build Coastguard Worker if (clang_win != "" && clang_win_version == "") { 158*c8dee2aaSAndroid Build Coastguard Worker clang_win_version = exec_script("//gn/highest_version_dir.py", 159*c8dee2aaSAndroid Build Coastguard Worker [ 160*c8dee2aaSAndroid Build Coastguard Worker "$clang_win/lib/clang", 161*c8dee2aaSAndroid Build Coastguard Worker "[0-9]+(\.[0-9]+\.[0-9]+)?", 162*c8dee2aaSAndroid Build Coastguard Worker ], 163*c8dee2aaSAndroid Build Coastguard Worker "trim string") 164*c8dee2aaSAndroid Build Coastguard Worker } 165*c8dee2aaSAndroid Build Coastguard Worker} 166*c8dee2aaSAndroid Build Coastguard Worker 167*c8dee2aaSAndroid Build Coastguard Worker# A component is either a static or a shared library. 168*c8dee2aaSAndroid Build Coastguard Workertemplate("component") { 169*c8dee2aaSAndroid Build Coastguard Worker _component_mode = "static_library" 170*c8dee2aaSAndroid Build Coastguard Worker if (is_component_build) { 171*c8dee2aaSAndroid Build Coastguard Worker _component_mode = "shared_library" 172*c8dee2aaSAndroid Build Coastguard Worker } 173*c8dee2aaSAndroid Build Coastguard Worker 174*c8dee2aaSAndroid Build Coastguard Worker target(_component_mode, target_name) { 175*c8dee2aaSAndroid Build Coastguard Worker forward_variables_from(invoker, "*") 176*c8dee2aaSAndroid Build Coastguard Worker } 177*c8dee2aaSAndroid Build Coastguard Worker} 178*c8dee2aaSAndroid Build Coastguard Worker 179*c8dee2aaSAndroid Build Coastguard Worker# Default configs 180*c8dee2aaSAndroid Build Coastguard Workerdefault_configs = [ 181*c8dee2aaSAndroid Build Coastguard Worker "//gn/skia:default", 182*c8dee2aaSAndroid Build Coastguard Worker "//gn/skia:no_exceptions", 183*c8dee2aaSAndroid Build Coastguard Worker "//gn/skia:no_rtti", 184*c8dee2aaSAndroid Build Coastguard Worker "//gn/skia:strict_aliasing", 185*c8dee2aaSAndroid Build Coastguard Worker] 186*c8dee2aaSAndroid Build Coastguard Workerif (!is_debug) { 187*c8dee2aaSAndroid Build Coastguard Worker default_configs += [ 188*c8dee2aaSAndroid Build Coastguard Worker "//gn/skia:optimize", 189*c8dee2aaSAndroid Build Coastguard Worker "//gn/skia:NDEBUG", 190*c8dee2aaSAndroid Build Coastguard Worker ] 191*c8dee2aaSAndroid Build Coastguard Worker} 192*c8dee2aaSAndroid Build Coastguard Workerif (is_trivial_abi) { 193*c8dee2aaSAndroid Build Coastguard Worker default_configs += [ "//gn/skia:trivial_abi" ] 194*c8dee2aaSAndroid Build Coastguard Worker} 195*c8dee2aaSAndroid Build Coastguard Workerif (!is_official_build) { 196*c8dee2aaSAndroid Build Coastguard Worker default_configs += [ "//gn/skia:debug_symbols" ] 197*c8dee2aaSAndroid Build Coastguard Worker} 198*c8dee2aaSAndroid Build Coastguard Workerdefault_configs += [ "//gn/skia:extra_flags" ] 199*c8dee2aaSAndroid Build Coastguard Worker 200*c8dee2aaSAndroid Build Coastguard Workerset_defaults("executable") { 201*c8dee2aaSAndroid Build Coastguard Worker configs = [ "//gn/skia:executable" ] + default_configs 202*c8dee2aaSAndroid Build Coastguard Worker} 203*c8dee2aaSAndroid Build Coastguard Worker 204*c8dee2aaSAndroid Build Coastguard Workerset_defaults("source_set") { 205*c8dee2aaSAndroid Build Coastguard Worker configs = default_configs 206*c8dee2aaSAndroid Build Coastguard Worker} 207*c8dee2aaSAndroid Build Coastguard Worker 208*c8dee2aaSAndroid Build Coastguard Workerset_defaults("static_library") { 209*c8dee2aaSAndroid Build Coastguard Worker configs = default_configs 210*c8dee2aaSAndroid Build Coastguard Worker} 211*c8dee2aaSAndroid Build Coastguard Worker 212*c8dee2aaSAndroid Build Coastguard Workerset_defaults("shared_library") { 213*c8dee2aaSAndroid Build Coastguard Worker configs = default_configs 214*c8dee2aaSAndroid Build Coastguard Worker} 215*c8dee2aaSAndroid Build Coastguard Worker 216*c8dee2aaSAndroid Build Coastguard Workerset_defaults("component") { 217*c8dee2aaSAndroid Build Coastguard Worker configs = default_configs 218*c8dee2aaSAndroid Build Coastguard Worker if (!is_component_build) { 219*c8dee2aaSAndroid Build Coastguard Worker complete_static_lib = true 220*c8dee2aaSAndroid Build Coastguard Worker } 221*c8dee2aaSAndroid Build Coastguard Worker} 222*c8dee2aaSAndroid Build Coastguard Worker 223*c8dee2aaSAndroid Build Coastguard Workerskia_target_default_configs = [] 224*c8dee2aaSAndroid Build Coastguard Workerif (!is_official_build) { 225*c8dee2aaSAndroid Build Coastguard Worker skia_target_default_configs += [ "//gn/skia:warnings" ] 226*c8dee2aaSAndroid Build Coastguard Worker} 227*c8dee2aaSAndroid Build Coastguard Worker 228*c8dee2aaSAndroid Build Coastguard Workerskia_header_target_default_configs = [] 229*c8dee2aaSAndroid Build Coastguard Workerif (!is_official_build) { 230*c8dee2aaSAndroid Build Coastguard Worker skia_header_target_default_configs += 231*c8dee2aaSAndroid Build Coastguard Worker [ "//gn/skia:warnings_for_public_headers" ] 232*c8dee2aaSAndroid Build Coastguard Worker} 233*c8dee2aaSAndroid Build Coastguard Worker 234*c8dee2aaSAndroid Build Coastguard Workerif (is_win) { 235*c8dee2aaSAndroid Build Coastguard Worker # Windows tool chain 236*c8dee2aaSAndroid Build Coastguard Worker set_default_toolchain("//gn/toolchain:msvc") 237*c8dee2aaSAndroid Build Coastguard Worker default_toolchain_name = "msvc" 238*c8dee2aaSAndroid Build Coastguard Worker host_toolchain = "msvc_host" 239*c8dee2aaSAndroid Build Coastguard Worker} else if (is_wasm) { 240*c8dee2aaSAndroid Build Coastguard Worker set_default_toolchain("//gn/toolchain:wasm") 241*c8dee2aaSAndroid Build Coastguard Worker default_toolchain_name = "wasm" 242*c8dee2aaSAndroid Build Coastguard Worker host_toolchain = "wasm" 243*c8dee2aaSAndroid Build Coastguard Worker} else { 244*c8dee2aaSAndroid Build Coastguard Worker # GCC-like toolchains, including Clang. 245*c8dee2aaSAndroid Build Coastguard Worker set_default_toolchain("//gn/toolchain:gcc_like") 246*c8dee2aaSAndroid Build Coastguard Worker default_toolchain_name = "gcc_like" 247*c8dee2aaSAndroid Build Coastguard Worker host_toolchain = "gcc_like_host" 248*c8dee2aaSAndroid Build Coastguard Worker} 249