xref: /aosp_15_r20/external/skia/gn/BUILDCONFIG.gn (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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