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

declare_args() {
  toolchain_prefix = ""
}

if (use_rbe) {
  remote_wrapper =
      rebase_path("//flutter/build/rbe/remote_wrapper_linux.sh", root_build_dir)
  local_wrapper =
      rebase_path("//flutter/build/rbe/local_wrapper.sh", root_build_dir)
  compiler_args = rewrapper_command + [
    "--remote_wrapper=$remote_wrapper",
    "--local_wrapper=$local_wrapper",
    "--labels=type=compile,compiler=clang,lang=cpp ",
  ]
  compiler_prefix = string_join(" ", compiler_args)
  link_prefix = ""
} else if (use_ccache) {
  # ccache only supports compilation, not linking.
  compiler_prefix = "ccache "
  link_prefix = ""
} else {
  compiler_prefix = ""
  link_prefix = ""
}

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

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

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

  ar = "${prefix}ar"
  ld = "${link_prefix}${prefix}g++"
  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
  asm = "${prefix}/clang"
  cc = "${compiler_prefix}${prefix}/clang"
  cxx = "${compiler_prefix}${prefix}/clang++"

  readelf = "${prefix}/llvm-readelf"
  nm = "${prefix}/llvm-nm"
  ar = "${prefix}/llvm-ar"
  ld = "${link_prefix}${prefix}/clang++"
  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
  }

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

  ar = "${prefix}ar"
  ld = "${link_prefix}${prefix}g++"
  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
  asm = "${prefix}/clang"
  cc = "${compiler_prefix}${prefix}/clang"
  cxx = "${compiler_prefix}${prefix}/clang++"

  readelf = "readelf"
  nm = "${prefix}/llvm-nm"
  ar = "${prefix}/llvm-ar"
  ld = "${link_prefix}${prefix}/clang++"
  llvm_objcopy = "${prefix}/llvm-objcopy"

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

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

  readelf = "${prefix}/llvm-readelf"
  nm = "${prefix}/llvm-nm"
  ar = "${prefix}/llvm-ar"
  ld = "${link_prefix}${prefix}/clang++"
  llvm_objcopy = "${prefix}/llvm-objcopy"

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

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

  readelf = "${prefix}/llvm-readelf"
  nm = "${prefix}/llvm-nm"
  ar = "${prefix}/llvm-ar"
  ld = "${link_prefix}${prefix}/clang++"
  llvm_objcopy = "${prefix}/llvm-objcopy"

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

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

  readelf = "${prefix}readelf"
  nm = "${prefix}nm"
  ar = "${prefix}ar"
  ld = "${link_prefix}${prefix}g++"
  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
  }

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

  ar = "${prefix}ar"
  ld = "${link_prefix}${prefix}g++"
  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
  asm = "${prefix}/clang"
  cc = "${compiler_prefix}${prefix}/clang"
  cxx = "${compiler_prefix}${prefix}/clang++"

  readelf = "readelf"
  nm = "${prefix}/llvm-nm"
  ar = "${prefix}/llvm-ar"
  ld = "${link_prefix}${prefix}/clang++"
  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
  }

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

  ar = "${prefix}ar"
  ld = "${link_prefix}${prefix}g++"
  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
  asm = "${prefix}/clang"
  cc = "${compiler_prefix}${prefix}/clang"
  cxx = "${compiler_prefix}${prefix}/clang++"

  readelf = "readelf"
  nm = "${prefix}/llvm-nm"
  ar = "${prefix}/llvm-ar"
  ld = "${link_prefix}${prefix}/clang++"
  llvm_objcopy = "${prefix}/llvm-objcopy"

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