# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config/sysroot.gni")
import("//build/toolchain/ccache.gni")
import("//build/toolchain/clang.gni")
import("//build/toolchain/gcc_toolchain.gni")
import("//build/toolchain/goma.gni")

declare_args() {
  toolchain_prefix = ""
}

if (use_goma) {
  assert(!use_ccache, "Goma and ccache can't be used together.")
  compiler_prefix = "$goma_dir/gomacc "
} else if (use_ccache) {
  compiler_prefix = "ccache "
} else {
  compiler_prefix = ""
}

gcc_toolchain("arm") {
  cc = "${compiler_prefix}arm-linux-gnueabihf-gcc"
  cxx = "${compiler_prefix}arm-linux-gnueabihf-g++"

  ar = "arm-linux-gnueabihf-ar"
  ld = cxx
  readelf = "arm-linux-gnueabihf-readelf"
  nm = "arm-linux-gnueabihf-nm"

  toolchain_cpu = "arm"
  toolchain_os = "linux"
  is_clang = false
}

gcc_toolchain("arm64") {
  cc = "${compiler_prefix}aarch64-linux-gnu-gcc"
  cxx = "${compiler_prefix}aarch64-linux-gnu-g++"

  ar = "aarch64-linux-gnu-ar"
  ld = cxx
  readelf = "aarch64-linux-gnu-readelf"
  nm = "aarch64-linux-gnu-nm"

  toolchain_cpu = "arm64"
  toolchain_os = "linux"
  is_clang = false
}

gcc_toolchain("clang_x86") {
  prefix = rebase_path("//third_party/llvm-build/Release+Asserts/bin",
                       root_build_dir)
  cc = "${compiler_prefix}$prefix/clang"
  cxx = "${compiler_prefix}$prefix/clang++"
  readelf = "readelf"
  nm = "nm"
  ar = "ar"
  ld = cxx

  toolchain_cpu = "x86"
  toolchain_os = "linux"
  is_clang = true
}

gcc_toolchain("x86") {
  cc = "${compiler_prefix}gcc"
  cxx = "${compiler_prefix}g++"

  readelf = "readelf"
  nm = "nm"
  ar = "ar"
  ld = cxx

  toolchain_cpu = "x86"
  toolchain_os = "linux"
  is_clang = false
}

gcc_toolchain("clang_x64") {
  prefix = rebase_path("//third_party/llvm-build/Release+Asserts/bin",
                       root_build_dir)
  cc = "${compiler_prefix}$prefix/clang"
  cxx = "${compiler_prefix}$prefix/clang++"

  readelf = "readelf"
  nm = "nm"
  ar = "ar"
  ld = cxx

  toolchain_cpu = "x64"
  toolchain_os = "linux"
  is_clang = true
}

gcc_toolchain("x64") {
  cc = "${compiler_prefix}gcc"
  cxx = "${compiler_prefix}g++"

  readelf = "readelf"
  nm = "nm"
  ar = "ar"
  ld = cxx

  toolchain_cpu = "x64"
  toolchain_os = "linux"
  is_clang = false
}

gcc_toolchain("mipsel") {
  cc = "${toolchain_prefix}gcc"
  cxx = "${toolchain_prefix}g++"
  ar = "${toolchain_prefix}ar"
  ld = cxx
  readelf = "${toolchain_prefix}readelf"
  nm = "${toolchain_prefix}nm"

  toolchain_cpu = "${target_cpu}"
  toolchain_os = "linux"
  is_clang = is_clang
}
