| # Copyright 2016 Google Inc. |
| # |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| is_skia_standalone = true |
| |
| # It's best to keep the names and defaults of is_foo flags consistent with Chrome. |
| |
| declare_args() { |
| is_official_build = false |
| is_component_build = false |
| ndk = "" |
| |
| # It's nice to keep ndk_api set to what Clank targets, but probably no big deal if we can't. |
| if (target_cpu == "x86" || target_cpu == "arm") { |
| ndk_api = 16 |
| } else { |
| ndk_api = 21 |
| } |
| |
| sanitize = "" |
| fyi_sanitize = "" |
| |
| ar = "ar" |
| cc = "cc" |
| cxx = "c++" |
| |
| win_sdk = "C:/Program Files (x86)/Windows Kits/10" |
| win_sdk_version = "" |
| |
| win_vc = "" |
| win_toolchain_version = "" |
| |
| clang_win = "" |
| |
| skia_vulkan_sdk = getenv("VULKAN_SDK") |
| skia_moltenvk_path = "" |
| } |
| declare_args() { |
| is_debug = !is_official_build |
| } |
| |
| assert(!(is_debug && is_official_build)) |
| |
| if (target_cpu == "wasm") { |
| target_os = "wasm" |
| } |
| |
| # Platform detection |
| if (target_os == "") { |
| target_os = host_os |
| if (ndk != "") { |
| target_os = "android" |
| } |
| } |
| if (current_os == "") { |
| current_os = target_os |
| } |
| |
| is_android = current_os == "android" |
| is_fuchsia = current_os == "fuchsia" |
| is_ios = current_os == "ios" || current_os == "tvos" |
| is_tvos = current_os == "tvos" |
| is_linux = current_os == "linux" |
| is_mac = current_os == "mac" |
| is_win = current_os == "win" |
| |
| if (target_cpu == "") { |
| target_cpu = host_cpu |
| if (is_android || is_ios) { |
| target_cpu = "arm64" |
| } |
| } |
| if (target_cpu == "x86_64") { |
| target_cpu = "x64" |
| } |
| if (current_cpu == "") { |
| current_cpu = target_cpu |
| } |
| |
| is_clang = is_android || is_ios || is_mac || |
| (cc == "clang" && cxx == "clang++") || clang_win != "" |
| if (!is_clang && !is_win) { |
| is_clang = exec_script("gn/is_clang.py", |
| [ |
| cc, |
| cxx, |
| ], |
| "value") |
| } |
| |
| if (is_android) { |
| ndk_host = "" |
| ndk_target = "" |
| ndk_platform = "" |
| ndk_stdlib = "" |
| ndk_gccdir = "" |
| ndk_gdbserver = "" |
| |
| if (host_os == "linux") { |
| ndk_host = "linux-x86_64" |
| } else if (host_os == "mac") { |
| ndk_host = "darwin-x86_64" |
| } else if (host_os == "win") { |
| ndk_host = "windows-x86_64" |
| } |
| |
| if (target_cpu == "arm64") { |
| ndk_target = "aarch64-linux-android" |
| ndk_platform = "android-${ndk_api}/arch-arm64" |
| ndk_stdlib = "arm64-v8a" |
| ndk_gccdir = ndk_target |
| ndk_gdbserver = "prebuilt/android-arm64/gdbserver/gdbserver" |
| } else if (target_cpu == "arm") { |
| ndk_target = "arm-linux-androideabi" |
| ndk_platform = "android-${ndk_api}/arch-arm" |
| ndk_stdlib = "armeabi-v7a" |
| ndk_gccdir = ndk_target |
| ndk_gdbserver = "prebuilt/android-arm/gdbserver/gdbserver" |
| } else if (target_cpu == "x64") { |
| ndk_target = "x86_64-linux-android" |
| ndk_platform = "android-${ndk_api}/arch-x86_64" |
| ndk_stdlib = "x86_64" |
| ndk_gccdir = ndk_stdlib |
| ndk_gdbserver = "prebuilt/android-x86_64/gdbserver/gdbserver" |
| } else if (target_cpu == "x86") { |
| ndk_target = "i686-linux-android" |
| ndk_platform = "android-${ndk_api}/arch-x86" |
| ndk_stdlib = "x86" |
| ndk_gccdir = ndk_stdlib |
| ndk_gdbserver = "prebuilt/android-x86/gdbserver/gdbserver" |
| } |
| } |
| |
| msvc = "" |
| if (target_os == "win") { |
| # By default we look for 2017 (Pro & Community), then 2015. If MSVC is installed in a |
| # non-default location, you can set win_vc to inform us where it is. |
| vc_2017_pro_default = |
| "C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC" |
| vc_2017_com_default = |
| "C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC" |
| vc_2017_bt_default = |
| "C:/Program Files (x86)/Microsoft Visual Studio/2017/BuildTools/VC" |
| vc_2015_default = "C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC" |
| |
| if (win_vc == "") { |
| if ("True" == exec_script("//gn/checkdir.py", |
| [ "$vc_2017_pro_default" ], |
| "trim string")) { |
| win_vc = vc_2017_pro_default |
| msvc = 2017 |
| } else if ("True" == exec_script("//gn/checkdir.py", |
| [ "$vc_2017_com_default" ], |
| "trim string")) { |
| win_vc = vc_2017_com_default |
| msvc = 2017 |
| } else if ("True" == exec_script("//gn/checkdir.py", |
| [ "$vc_2017_bt_default" ], |
| "trim string")) { |
| win_vc = vc_2017_bt_default |
| msvc = 2017 |
| } else if ("True" == exec_script("//gn/checkdir.py", |
| [ "$vc_2015_default" ], |
| "trim string")) { |
| win_vc = vc_2015_default |
| msvc = 2015 |
| } |
| } |
| assert(win_vc != "") # Could not find VC installation. Set win_vc to your VC directory. |
| |
| if (msvc == "") { |
| if ("True" == |
| exec_script("//gn/checkdir.py", [ "$win_vc/Tools" ], "trim string")) { |
| msvc = 2017 |
| } else { |
| msvc = 2015 |
| } |
| } |
| } |
| |
| if (target_os == "win") { |
| if (msvc == 2017 && win_toolchain_version == "") { |
| win_toolchain_version = exec_script("//gn/highest_version_dir.py", |
| [ |
| "$win_vc/Tools/MSVC", |
| "[0-9]{2}\.[0-9]{2}\.[0-9]{5}", |
| ], |
| "trim string") |
| } |
| if (win_sdk_version == "") { |
| win_sdk_version = exec_script("//gn/highest_version_dir.py", |
| [ |
| "$win_sdk/Include", |
| "[0-9]{2}\.[0-9]\.[0-9]{5}\.[0-9]", |
| ], |
| "trim string") |
| } |
| } |
| |
| # A component is either a static or a shared library. |
| template("component") { |
| _component_mode = "static_library" |
| if (is_component_build) { |
| _component_mode = "shared_library" |
| } |
| |
| target(_component_mode, target_name) { |
| forward_variables_from(invoker, "*") |
| } |
| } |
| |
| # Default configs |
| default_configs = [ |
| "//gn:default", |
| "//gn:no_exceptions", |
| "//gn:no_rtti", |
| ] |
| if (!is_debug) { |
| default_configs += [ |
| "//gn:optimize", |
| "//gn:NDEBUG", |
| ] |
| } |
| if (!is_official_build) { |
| default_configs += [ |
| "//gn:debug_symbols", |
| "//gn:warnings", |
| ] |
| } |
| default_configs += [ |
| "//gn:warnings_except_public_headers", |
| "//gn:extra_flags", |
| ] |
| |
| set_defaults("executable") { |
| configs = [ "//gn:executable" ] + default_configs |
| } |
| |
| set_defaults("source_set") { |
| configs = default_configs |
| } |
| |
| set_defaults("static_library") { |
| configs = default_configs |
| } |
| |
| set_defaults("shared_library") { |
| configs = default_configs |
| } |
| |
| set_defaults("component") { |
| configs = default_configs |
| if (!is_component_build) { |
| complete_static_lib = true |
| } |
| } |
| |
| if (is_win) { |
| # Windows tool chain |
| set_default_toolchain("//gn/toolchain:msvc") |
| default_toolchain_name = "msvc" |
| host_toolchain = "msvc" |
| } else { |
| # GCC-like toolchains, including Clang. |
| set_default_toolchain("//gn/toolchain:gcc_like") |
| default_toolchain_name = "gcc_like" |
| host_toolchain = "gcc_like_host" |
| } |