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

declare_args() {
  toolchain_prefix = ""
  # TODO(zra): Add an argument for overriding the host toolchain.
}

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

if (host_cpu == "arm64") {
  rebased_clang_dir =
      rebase_path("//buildtools/linux-arm64/clang/bin", root_build_dir)
} else {
  rebased_clang_dir =
      rebase_path("//buildtools/linux-x64/clang/bin", root_build_dir)
}

gcc_toolchain("arm") {
  prefix = "arm-linux-gnueabihf-"
  if (toolchain_prefix != "") {
    prefix = toolchain_prefix
  }

  cc = "${compiler_prefix}${prefix}gcc"
  cxx = "${compiler_prefix}${prefix}g++"

  ar = "${prefix}ar"
  ld = cxx
  readelf = "${prefix}readelf"
  nm = "${prefix}nm"
  strip = "${prefix}strip"

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

gcc_toolchain("clang_arm") {
  prefix = rebased_clang_dir
  cc = "${compiler_prefix}${prefix}/clang"
  cxx = "${compiler_prefix}${prefix}/clang++"

  readelf = "${prefix}/llvm-readelf"
  nm = "${prefix}/llvm-nm"
  ar = "${prefix}/llvm-ar"
  ld = cxx
  llvm_objcopy = "${prefix}/llvm-objcopy"

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

gcc_toolchain("arm64") {
  prefix = "aarch64-linux-gnu-"
  if (toolchain_prefix != "") {
    prefix = toolchain_prefix
  }

  cc = "${compiler_prefix}${prefix}gcc"
  cxx = "${compiler_prefix}${prefix}g++"

  ar = "${prefix}ar"
  ld = cxx
  readelf = "${prefix}readelf"
  nm = "${prefix}nm"
  strip = "${prefix}strip"

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

gcc_toolchain("clang_arm64") {
  prefix = rebased_clang_dir
  cc = "${compiler_prefix}${prefix}/clang"
  cxx = "${compiler_prefix}${prefix}/clang++"

  readelf = "readelf"
  nm = "${prefix}/llvm-nm"
  ar = "${prefix}/llvm-ar"
  ld = cxx
  llvm_objcopy = "${prefix}/llvm-objcopy"

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

gcc_toolchain("clang_x86") {
  prefix = rebased_clang_dir
  cc = "${compiler_prefix}${prefix}/clang"
  cxx = "${compiler_prefix}${prefix}/clang++"

  readelf = "${prefix}/llvm-readelf"
  nm = "${prefix}/llvm-nm"
  ar = "${prefix}/llvm-ar"
  ld = cxx
  llvm_objcopy = "${prefix}/llvm-objcopy"

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

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

  readelf = "${prefix}readelf"
  nm = "${prefix}nm"
  ar = "${prefix}ar"
  ld = cxx
  strip = "${prefix}strip"

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

gcc_toolchain("clang_x64") {
  prefix = rebased_clang_dir
  cc = "${compiler_prefix}${prefix}/clang"
  cxx = "${compiler_prefix}${prefix}/clang++"

  readelf = "${prefix}/llvm-readelf"
  nm = "${prefix}/llvm-nm"
  ar = "${prefix}/llvm-ar"
  ld = cxx
  llvm_objcopy = "${prefix}/llvm-objcopy"

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

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

  readelf = "${prefix}readelf"
  nm = "${prefix}nm"
  ar = "${prefix}ar"
  ld = cxx
  strip = "${prefix}strip"

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

gcc_toolchain("riscv32") {
  prefix = "riscv32-linux-gnu-"
  if (toolchain_prefix != "") {
    prefix = toolchain_prefix
  }

  cc = "${compiler_prefix}${prefix}gcc"
  cxx = "${compiler_prefix}${prefix}g++"

  ar = "${prefix}ar"
  ld = cxx
  readelf = "${prefix}readelf"
  nm = "${prefix}nm"
  strip = "${prefix}strip"

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

gcc_toolchain("clang_riscv32") {
  prefix = rebased_clang_dir
  cc = "${compiler_prefix}${prefix}/clang"
  cxx = "${compiler_prefix}${prefix}/clang++"

  readelf = "readelf"
  nm = "${prefix}/llvm-nm"
  ar = "${prefix}/llvm-ar"
  ld = cxx
  llvm_objcopy = "${prefix}/llvm-objcopy"

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

gcc_toolchain("riscv64") {
  prefix = "riscv64-linux-gnu-"
  if (toolchain_prefix != "") {
    prefix = toolchain_prefix
  }

  cc = "${compiler_prefix}${prefix}gcc"
  cxx = "${compiler_prefix}${prefix}g++"

  ar = "${prefix}ar"
  ld = cxx
  readelf = "${prefix}readelf"
  nm = "${prefix}nm"
  strip = "${prefix}strip"

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

gcc_toolchain("clang_riscv64") {
  prefix = rebased_clang_dir
  cc = "${compiler_prefix}${prefix}/clang"
  cxx = "${compiler_prefix}${prefix}/clang++"

  readelf = "readelf"
  nm = "${prefix}/llvm-nm"
  ar = "${prefix}/llvm-ar"
  ld = cxx
  llvm_objcopy = "${prefix}/llvm-objcopy"

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