# 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/clang.gni")
import("//build/toolchain/gcc_toolchain.gni")
import("//build/toolchain/goma.gni")

if (use_goma) {
  goma_prefix = "$goma_dir/gomacc "
} else {
  goma_prefix = ""
}

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

  ar = "arm-linux-gnueabi-ar"
  ld = cxx

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

gcc_toolchain("clang_x86") {
  if (use_clang_type_profiler) {
    prefix = rebase_path("//third_party/llvm-allocated-type/Linux_ia32/bin",
                         root_build_dir)
  } else {
    prefix = rebase_path("//third_party/llvm-build/Release+Asserts/bin",
                         root_build_dir)
  }
  cc = "${goma_prefix}$prefix/clang"
  cxx = "${goma_prefix}$prefix/clang++"

  ar = "ar"
  ld = cxx

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

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

  ar = "ar"
  ld = cxx

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

gcc_toolchain("clang_x64") {
  if (use_clang_type_profiler) {
    prefix = rebase_path("//third_party/llvm-allocated-type/Linux_x64/bin",
                         root_build_dir)
  } else {
    prefix = rebase_path("//third_party/llvm-build/Release+Asserts/bin",
                         root_build_dir)
  }
  cc = "${goma_prefix}$prefix/clang"
  cxx = "${goma_prefix}$prefix/clang++"

  ar = "ar"
  ld = cxx

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

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

  ar = "ar"
  ld = cxx

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

gcc_toolchain("mipsel") {
  cc = "mipsel-linux-gnu-gcc"
  cxx = "mipsel-linux-gnu-g++"
  ar = "mipsel-linux-gnu-ar"
  ld = cxx

  toolchain_cpu_arch = "mipsel"
  toolchain_os = "linux"
  is_clang = false
}
