# 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 = ""
  ndk_api = 21
  sanitize = ""
}
declare_args() {
  is_debug = !is_official_build
}

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"
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 (current_cpu == "") {
  current_cpu = target_cpu
}

if (is_android) {
  ndk_host = ""
  ndk_target = ""
  ndk_platform = ""
  ndk_stdlib = ""
  ndk_gccdir = ""

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

# 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:msvc")
} else {
  # GCC-like toolchains, including Clang.
  set_default_toolchain("//gn:gcc_like")
}
