# 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 = ""
  if (target_cpu == "x86" || target_cpu == "mipsel" || target_cpu == "arm") {
    ndk_api = 18
  } else {
    ndk_api = 21
  }
  sanitize = ""

  ar = "ar"
  cc = "cc"
  cxx = "c++"

  msvc = 2015
  clang_win = ""
}
declare_args() {
  is_debug = !is_official_build

  if (msvc == 2015) {
    windk = "C:/Program Files (x86)/Microsoft Visual Studio 14.0"
  } else {
    windk = "C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional"
  }
}

assert(!(is_debug && is_official_build))

# 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 == "mips64el") {
    ndk_target = "mips64el-linux-android"
    ndk_platform = "android-${ndk_api}/arch-mips64"
    ndk_stdlib = "mips64"
    ndk_gccdir = ndk_target
    ndk_gdbserver = "prebuilt/android-mips64/gdbserver/gdbserver"
  } else if (target_cpu == "mipsel") {
    ndk_target = "mipsel-linux-android"
    ndk_platform = "android-${ndk_api}/arch-mips"
    ndk_stdlib = "mips"
    ndk_gccdir = ndk_target
    ndk_gdbserver = "prebuilt/android-mips/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"
  }
}

# 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",
  "//gn:warnings",
  "//gn:warnings_except_public_headers",
]
if (!is_debug) {
  default_configs += [ "//gn:release" ]
}
if (!is_official_build) {
  default_configs += [ "//gn:debug_symbols" ]
}
default_configs += [ "//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"
}
