# 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
}
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
}

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"
}
