blob: 9f1d0be08040c2815015d417dabf1a4cc68d6918 [file] [log] [blame]
mtklein7fbfbbe2016-07-21 12:25:45 -07001# Copyright 2016 Google Inc.
2#
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
Mike Klein3669a822017-03-03 10:55:02 -05006is_skia_standalone = true
7
mtklein7fbfbbe2016-07-21 12:25:45 -07008# It's best to keep the names and defaults of is_foo flags consistent with Chrome.
9
10declare_args() {
mtklein88a7ac02016-09-14 11:16:49 -070011 is_official_build = false
mtklein7fbfbbe2016-07-21 12:25:45 -070012 is_component_build = false
mtklein7d6fb2c2016-08-25 14:50:44 -070013 ndk = ""
Mike Klein9c1c8922017-11-28 14:31:14 -050014
15 # It's nice to keep ndk_api set to what Clank targets, but probably no big deal if we can't.
Mike Kleinf32b27d2017-12-05 08:50:20 -050016 if (target_cpu == "x86" || target_cpu == "arm") {
Mike Klein9c1c8922017-11-28 14:31:14 -050017 ndk_api = 16
Mike Kleinb7ce80b2016-12-14 13:17:53 -050018 } else {
19 ndk_api = 21
20 }
Mike Klein9c1c8922017-11-28 14:31:14 -050021
mtklein2b3c2a32016-09-08 08:39:34 -070022 sanitize = ""
Ethan Nicholas762466e2017-06-29 10:03:38 -040023
24 ar = "ar"
25 cc = "cc"
26 cxx = "c++"
27
Brian Osman852ca312017-12-07 16:16:21 -050028 win_sdk = "C:/Program Files (x86)/Windows Kits/10"
29 win_sdk_version = ""
30
31 win_vc = ""
32 win_toolchain_version = ""
33
Mike Kleinc722f792017-07-31 11:57:21 -040034 clang_win = ""
Greg Daniel91dfa3b2018-05-22 13:25:15 -040035
36 skia_vulkan_sdk = getenv("VULKAN_SDK")
37 skia_moltenvk_path = ""
mtklein7fbfbbe2016-07-21 12:25:45 -070038}
mtklein88a7ac02016-09-14 11:16:49 -070039declare_args() {
40 is_debug = !is_official_build
41}
42
43assert(!(is_debug && is_official_build))
mtklein7fbfbbe2016-07-21 12:25:45 -070044
Kevin Lubickebf648e2017-09-21 13:45:16 -040045if (target_cpu == "wasm") {
46 target_os = "wasm"
47}
48
mtklein7fbfbbe2016-07-21 12:25:45 -070049# Platform detection
50if (target_os == "") {
51 target_os = host_os
mtklein7d6fb2c2016-08-25 14:50:44 -070052 if (ndk != "") {
53 target_os = "android"
54 }
mtklein7fbfbbe2016-07-21 12:25:45 -070055}
56if (current_os == "") {
57 current_os = target_os
58}
59
60is_android = current_os == "android"
61is_fuchsia = current_os == "fuchsia"
Matthew Leibowitz3150ec62017-03-14 16:22:32 -040062is_ios = current_os == "ios" || current_os == "tvos"
63is_tvos = current_os == "tvos"
mtklein7fbfbbe2016-07-21 12:25:45 -070064is_linux = current_os == "linux"
65is_mac = current_os == "mac"
66is_win = current_os == "win"
67
mtklein349cece2016-08-26 08:13:04 -070068if (target_cpu == "") {
69 target_cpu = host_cpu
Mike Klein7d302882016-11-03 14:06:31 -040070 if (is_android || is_ios) {
mtklein349cece2016-08-26 08:13:04 -070071 target_cpu = "arm64"
72 }
73}
Mike Kleinb48fd3c2017-01-23 11:58:53 -050074if (target_cpu == "x86_64") {
75 target_cpu = "x64"
76}
mtklein349cece2016-08-26 08:13:04 -070077if (current_cpu == "") {
78 current_cpu = target_cpu
79}
mtklein7fbfbbe2016-07-21 12:25:45 -070080
Kevin Lubickebf648e2017-09-21 13:45:16 -040081is_clang = is_android || is_ios || is_mac ||
82 (cc == "clang" && cxx == "clang++") || clang_win != ""
Mike Kleinc722f792017-07-31 11:57:21 -040083if (!is_clang && !is_win) {
84 is_clang = exec_script("gn/is_clang.py",
85 [
86 cc,
87 cxx,
88 ],
89 "value")
90}
91
mtklein7d6fb2c2016-08-25 14:50:44 -070092if (is_android) {
93 ndk_host = ""
94 ndk_target = ""
95 ndk_platform = ""
96 ndk_stdlib = ""
mtklein6ef69992016-09-14 06:12:09 -070097 ndk_gccdir = ""
Derek Sollenberger70120c72017-01-05 11:39:04 -050098 ndk_gdbserver = ""
mtklein6ef69992016-09-14 06:12:09 -070099
mtklein349cece2016-08-26 08:13:04 -0700100 if (host_os == "linux") {
mtklein7d6fb2c2016-08-25 14:50:44 -0700101 ndk_host = "linux-x86_64"
mtklein349cece2016-08-26 08:13:04 -0700102 } else if (host_os == "mac") {
103 ndk_host = "darwin-x86_64"
Mike Klein82364ba2016-10-24 16:49:15 -0400104 } else if (host_os == "win") {
105 ndk_host = "windows-x86_64"
mtklein7d6fb2c2016-08-25 14:50:44 -0700106 }
mtklein349cece2016-08-26 08:13:04 -0700107
mtklein7d6fb2c2016-08-25 14:50:44 -0700108 if (target_cpu == "arm64") {
109 ndk_target = "aarch64-linux-android"
mtklein6ef69992016-09-14 06:12:09 -0700110 ndk_platform = "android-${ndk_api}/arch-arm64"
mtklein7d6fb2c2016-08-25 14:50:44 -0700111 ndk_stdlib = "arm64-v8a"
mtklein349cece2016-08-26 08:13:04 -0700112 ndk_gccdir = ndk_target
Derek Sollenberger70120c72017-01-05 11:39:04 -0500113 ndk_gdbserver = "prebuilt/android-arm64/gdbserver/gdbserver"
mtklein349cece2016-08-26 08:13:04 -0700114 } else if (target_cpu == "arm") {
115 ndk_target = "arm-linux-androideabi"
mtklein6ef69992016-09-14 06:12:09 -0700116 ndk_platform = "android-${ndk_api}/arch-arm"
mtklein349cece2016-08-26 08:13:04 -0700117 ndk_stdlib = "armeabi-v7a"
118 ndk_gccdir = ndk_target
Derek Sollenberger70120c72017-01-05 11:39:04 -0500119 ndk_gdbserver = "prebuilt/android-arm/gdbserver/gdbserver"
mtklein349cece2016-08-26 08:13:04 -0700120 } else if (target_cpu == "x64") {
121 ndk_target = "x86_64-linux-android"
mtklein6ef69992016-09-14 06:12:09 -0700122 ndk_platform = "android-${ndk_api}/arch-x86_64"
mtklein349cece2016-08-26 08:13:04 -0700123 ndk_stdlib = "x86_64"
124 ndk_gccdir = ndk_stdlib
Derek Sollenberger70120c72017-01-05 11:39:04 -0500125 ndk_gdbserver = "prebuilt/android-x86_64/gdbserver/gdbserver"
mtklein349cece2016-08-26 08:13:04 -0700126 } else if (target_cpu == "x86") {
127 ndk_target = "i686-linux-android"
mtklein6ef69992016-09-14 06:12:09 -0700128 ndk_platform = "android-${ndk_api}/arch-x86"
mtklein349cece2016-08-26 08:13:04 -0700129 ndk_stdlib = "x86"
130 ndk_gccdir = ndk_stdlib
Derek Sollenberger70120c72017-01-05 11:39:04 -0500131 ndk_gdbserver = "prebuilt/android-x86/gdbserver/gdbserver"
mtklein7d6fb2c2016-08-25 14:50:44 -0700132 }
133}
134
Brian Osman852ca312017-12-07 16:16:21 -0500135msvc = ""
136if (target_os == "win") {
Dawson Coleman3c888572019-01-08 17:37:43 -0600137 # By default we look for 2017 (Enterprise, Pro, and Community), then 2015. If MSVC is installed in a
Brian Osmanc50f8e02018-02-08 10:24:09 -0500138 # non-default location, you can set win_vc to inform us where it is.
Dawson Coleman3c888572019-01-08 17:37:43 -0600139 vc_2017_ent_default =
140 "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Enterprise\\VC"
Brian Osmanc50f8e02018-02-08 10:24:09 -0500141 vc_2017_pro_default =
Brian Osmana0982652018-12-07 15:30:43 -0500142 "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Professional\\VC"
Brian Osmanc50f8e02018-02-08 10:24:09 -0500143 vc_2017_com_default =
Brian Osmana0982652018-12-07 15:30:43 -0500144 "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC"
Hal Canary28728e42018-02-14 11:25:31 -0500145 vc_2017_bt_default =
Brian Osmana0982652018-12-07 15:30:43 -0500146 "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\BuildTools\\VC"
147 vc_2015_default = "C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC"
Brian Osman852ca312017-12-07 16:16:21 -0500148
149 if (win_vc == "") {
Brian Osmanc50f8e02018-02-08 10:24:09 -0500150 if ("True" == exec_script("//gn/checkdir.py",
Dawson Coleman3c888572019-01-08 17:37:43 -0600151 [ "$vc_2017_ent_default" ],
Brian Osmanc50f8e02018-02-08 10:24:09 -0500152 "trim string")) {
Dawson Coleman3c888572019-01-08 17:37:43 -0600153 win_vc = vc_2017_ent_default
154 msvc = 2017
155 } else if ("True" == exec_script("//gn/checkdir.py",
156 [ "$vc_2017_pro_default" ],
157 "trim string")) {
Brian Osmanc50f8e02018-02-08 10:24:09 -0500158 win_vc = vc_2017_pro_default
159 msvc = 2017
160 } else if ("True" == exec_script("//gn/checkdir.py",
161 [ "$vc_2017_com_default" ],
162 "trim string")) {
163 win_vc = vc_2017_com_default
Brian Osman852ca312017-12-07 16:16:21 -0500164 msvc = 2017
165 } else if ("True" == exec_script("//gn/checkdir.py",
Hal Canary28728e42018-02-14 11:25:31 -0500166 [ "$vc_2017_bt_default" ],
167 "trim string")) {
168 win_vc = vc_2017_bt_default
169 msvc = 2017
170 } else if ("True" == exec_script("//gn/checkdir.py",
Brian Osman852ca312017-12-07 16:16:21 -0500171 [ "$vc_2015_default" ],
172 "trim string")) {
173 win_vc = vc_2015_default
174 msvc = 2015
175 }
176 }
177 assert(win_vc != "") # Could not find VC installation. Set win_vc to your VC directory.
178
179 if (msvc == "") {
180 if ("True" ==
181 exec_script("//gn/checkdir.py", [ "$win_vc/Tools" ], "trim string")) {
182 msvc = 2017
183 } else {
184 msvc = 2015
185 }
186 }
187}
188
Mike Klein409506c2017-12-06 16:47:41 -0500189if (target_os == "win") {
190 if (msvc == 2017 && win_toolchain_version == "") {
191 win_toolchain_version = exec_script("//gn/highest_version_dir.py",
Brian Osman5c548922017-12-11 14:59:03 -0500192 [
193 "$win_vc/Tools/MSVC",
194 "[0-9]{2}\.[0-9]{2}\.[0-9]{5}",
195 ],
Mike Klein409506c2017-12-06 16:47:41 -0500196 "trim string")
197 }
198 if (win_sdk_version == "") {
199 win_sdk_version = exec_script("//gn/highest_version_dir.py",
Brian Osman5c548922017-12-11 14:59:03 -0500200 [
201 "$win_sdk/Include",
202 "[0-9]{2}\.[0-9]\.[0-9]{5}\.[0-9]",
203 ],
Mike Klein409506c2017-12-06 16:47:41 -0500204 "trim string")
205 }
206}
207
mtklein5db44aa2016-07-29 09:10:31 -0700208# A component is either a static or a shared library.
mtklein7fbfbbe2016-07-21 12:25:45 -0700209template("component") {
mtklein5db44aa2016-07-29 09:10:31 -0700210 _component_mode = "static_library"
mtklein7fbfbbe2016-07-21 12:25:45 -0700211 if (is_component_build) {
212 _component_mode = "shared_library"
213 }
214
215 target(_component_mode, target_name) {
216 forward_variables_from(invoker, "*")
217 }
218}
219
220# Default configs
halcanary19a97202016-08-03 15:08:04 -0700221default_configs = [
222 "//gn:default",
Mike Klein6e55fef2016-10-26 11:41:47 -0400223 "//gn:no_exceptions",
halcanary19a97202016-08-03 15:08:04 -0700224 "//gn:no_rtti",
225]
Mike Klein09008ff2017-01-21 15:35:10 +0000226if (!is_debug) {
Mike Klein7ea977b2018-09-19 13:44:43 -0400227 default_configs += [
228 "//gn:optimize",
229 "//gn:NDEBUG",
230 ]
mtklein7fbfbbe2016-07-21 12:25:45 -0700231}
mtklein88a7ac02016-09-14 11:16:49 -0700232if (!is_official_build) {
Mike Kleind84c1e62018-09-04 10:15:58 -0400233 default_configs += [
234 "//gn:debug_symbols",
235 "//gn:warnings",
236 ]
mtklein88a7ac02016-09-14 11:16:49 -0700237}
Mike Kleind84c1e62018-09-04 10:15:58 -0400238default_configs += [
239 "//gn:warnings_except_public_headers",
240 "//gn:extra_flags",
241]
mtklein7fbfbbe2016-07-21 12:25:45 -0700242
243set_defaults("executable") {
Mike Klein121563e2016-10-04 17:09:13 -0400244 configs = [ "//gn:executable" ] + default_configs
mtklein7fbfbbe2016-07-21 12:25:45 -0700245}
246
247set_defaults("source_set") {
halcanary19a97202016-08-03 15:08:04 -0700248 configs = default_configs
mtklein7fbfbbe2016-07-21 12:25:45 -0700249}
250
251set_defaults("static_library") {
halcanary19a97202016-08-03 15:08:04 -0700252 configs = default_configs
mtklein7fbfbbe2016-07-21 12:25:45 -0700253}
254
255set_defaults("shared_library") {
halcanary19a97202016-08-03 15:08:04 -0700256 configs = default_configs
mtklein7fbfbbe2016-07-21 12:25:45 -0700257}
258
259set_defaults("component") {
halcanary19a97202016-08-03 15:08:04 -0700260 configs = default_configs
mtklein9b8583d2016-08-24 17:32:30 -0700261 if (!is_component_build) {
262 complete_static_lib = true
263 }
mtklein7fbfbbe2016-07-21 12:25:45 -0700264}
265
herbb6318bf2016-09-16 13:29:57 -0700266if (is_win) {
267 # Windows tool chain
Ethan Nicholas762466e2017-06-29 10:03:38 -0400268 set_default_toolchain("//gn/toolchain:msvc")
269 default_toolchain_name = "msvc"
270 host_toolchain = "msvc"
herbb6318bf2016-09-16 13:29:57 -0700271} else {
272 # GCC-like toolchains, including Clang.
Ethan Nicholas762466e2017-06-29 10:03:38 -0400273 set_default_toolchain("//gn/toolchain:gcc_like")
274 default_toolchain_name = "gcc_like"
275 host_toolchain = "gcc_like_host"
herbb6318bf2016-09-16 13:29:57 -0700276}