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

import("//build/config/dcheck_always_on.gni")
import("//build/config/ozone.gni")
import("//build/config/sysroot.gni")
import("//build/config/ui.gni")
import("//build/toolchain/gcc_toolchain.gni")

clang_toolchain("clang_ppc64") {
  enable_linker_map = true
  toolchain_args = {
    current_cpu = "ppc64"
    current_os = "linux"
  }
}

clang_toolchain("clang_arm") {
  toolchain_args = {
    current_cpu = "arm"
    current_os = "linux"
  }
}

clang_toolchain("clang_arm64") {
  toolchain_args = {
    current_cpu = "arm64"
    current_os = "linux"
  }
}

gcc_toolchain("arm64") {
  toolprefix = "aarch64-linux-gnu-"

  cc = "${toolprefix}gcc"
  cxx = "${toolprefix}g++"

  ar = "${toolprefix}ar"
  ld = cxx
  readelf = "${toolprefix}readelf"
  nm = "${toolprefix}nm"

  toolchain_args = {
    current_cpu = "arm64"
    current_os = "linux"

    # remote execution does not support gcc.
    use_remoteexec = false
    is_clang = false
  }
}

gcc_toolchain("arm") {
  toolprefix = "arm-linux-gnueabihf-"

  cc = "${toolprefix}gcc"
  cxx = "${toolprefix}g++"

  ar = "${toolprefix}ar"
  ld = cxx
  readelf = "${toolprefix}readelf"
  nm = "${toolprefix}nm"

  toolchain_args = {
    current_cpu = "arm"
    current_os = "linux"

    # remote execution does not support gcc.
    use_remoteexec = false
    is_clang = false
  }
}

clang_toolchain("clang_x86") {
  # Output linker map files for binary size analysis.
  enable_linker_map = true

  toolchain_args = {
    current_cpu = "x86"
    current_os = "linux"
  }
}

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

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

  # Output linker map files for binary size analysis.
  enable_linker_map = true

  toolchain_args = {
    current_cpu = "x86"
    current_os = "linux"

    # remote execution does not support gcc.
    use_remoteexec = false
    is_clang = false
  }
}

clang_toolchain("clang_x64") {
  # Output linker map files for binary size analysis.
  enable_linker_map = true
  if (arkweb_enable_minidebug) {
    strip = rebase_path("${clang_base_path}/bin/llvm-strip", root_build_dir)
  }
  toolchain_args = {
    current_cpu = "x64"
    current_os = "linux"
  }
}

template("clang_v8_toolchain") {
  clang_toolchain(target_name) {
    if (arkweb_enable_minidebug) {
      strip = rebase_path("${clang_base_path}/bin/llvm-strip", root_build_dir)
    }
    toolchain_args = {
      current_os = "linux"
      forward_variables_from(invoker.toolchain_args, "*")
    }
  }
}

clang_v8_toolchain("clang_x86_v8_arm") {
  toolchain_args = {
    current_cpu = "x86"
    v8_current_cpu = "arm"
  }
}

clang_v8_toolchain("clang_x86_v8_mipsel") {
  toolchain_args = {
    current_cpu = "x86"
    v8_current_cpu = "mipsel"
  }
}

clang_v8_toolchain("clang_x86_v8_mips") {
  toolchain_args = {
    current_cpu = "x86"
    v8_current_cpu = "mips"
  }
}

clang_v8_toolchain("clang_x64_v8_arm64") {
  toolchain_args = {
    current_cpu = "x64"
    v8_current_cpu = "arm64"
  }
}

clang_v8_toolchain("clang_x64_v8_mips64el") {
  toolchain_args = {
    current_cpu = "x64"
    v8_current_cpu = "mips64el"
  }
}

clang_v8_toolchain("clang_x64_v8_mips64") {
  toolchain_args = {
    current_cpu = "x64"
    v8_current_cpu = "mips64"
  }
}

clang_v8_toolchain("clang_x64_v8_riscv64") {
  toolchain_args = {
    current_cpu = "x64"
    v8_current_cpu = "riscv64"
  }
}

clang_v8_toolchain("clang_x64_v8_loong64") {
  toolchain_args = {
    current_cpu = "x64"
    v8_current_cpu = "loong64"
  }
}

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

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

  # Output linker map files for binary size analysis.
  enable_linker_map = true

  toolchain_args = {
    current_cpu = "x64"
    current_os = "linux"

    # remote execution does not support gcc.
    use_remoteexec = false
    is_clang = false
  }
}

clang_toolchain("clang_mipsel") {
  toolchain_args = {
    current_cpu = "mipsel"
    current_os = "linux"
  }
}

clang_toolchain("clang_mips64el") {
  toolchain_args = {
    current_cpu = "mips64el"
    current_os = "linux"
  }
}

gcc_toolchain("mipsel") {
  toolprefix = "mipsel-linux-gnu-"

  cc = "${toolprefix}gcc"
  cxx = " ${toolprefix}g++"
  ar = "${toolprefix}ar"
  ld = cxx
  readelf = "${toolprefix}readelf"
  nm = "${toolprefix}nm"

  toolchain_args = {
    cc_wrapper = ""
    current_cpu = "mipsel"
    current_os = "linux"

    # remote execution does not support gcc.
    use_remoteexec = false
    is_clang = false
  }
}

gcc_toolchain("mips64el") {
  toolprefix = "mips64el-linux-gnuabi64-"

  cc = "${toolprefix}gcc"
  cxx = "${toolprefix}g++"
  ar = "${toolprefix}ar"
  ld = cxx
  readelf = "${toolprefix}readelf"
  nm = "${toolprefix}nm"

  toolchain_args = {
    cc_wrapper = ""
    current_cpu = "mips64el"
    current_os = "linux"

    # remote execution does not support gcc.
    use_remoteexec = false
    is_clang = false
  }
}

clang_toolchain("clang_riscv64") {
  enable_linker_map = true
  toolchain_args = {
    current_cpu = "riscv64"
    current_os = "linux"
    is_clang = true
  }
}

gcc_toolchain("riscv64") {
  toolprefix = "riscv64-linux-gnu"

  cc = "${toolprefix}-gcc"
  cxx = "${toolprefix}-g++"

  readelf = "${toolprefix}-readelf"
  nm = "${toolprefix}-nm"
  ar = "${toolprefix}-ar"
  ld = cxx

  toolchain_args = {
    current_cpu = "riscv64"
    current_os = "linux"
    is_clang = false
  }
}

clang_toolchain("clang_s390x") {
  toolchain_args = {
    current_cpu = "s390x"
    current_os = "linux"
    is_clang = true
  }
}

gcc_toolchain("s390x") {
  cc = "gcc"
  cxx = "g++"

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

  toolchain_args = {
    current_cpu = "s390x"
    current_os = "linux"

    # remote execution does not support gcc.
    use_remoteexec = false
    is_clang = false
  }
}

gcc_toolchain("ppc64") {
  cc = "gcc"
  cxx = "g++"

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

  toolchain_args = {
    current_cpu = "ppc64"
    current_os = "linux"

    # remote execution does not support gcc.
    use_remoteexec = false
    is_clang = false
  }
}

gcc_toolchain("mips") {
  toolprefix = "mips-linux-gnu-"

  cc = "${toolprefix}gcc"
  cxx = "${toolprefix}g++"

  readelf = "${toolprefix}readelf"
  nm = "${toolprefix}nm"
  ar = "${toolprefix}ar"
  ld = cxx

  toolchain_args = {
    current_cpu = "mips"
    current_os = "linux"

    # remote execution does not support gcc.
    use_remoteexec = false
    is_clang = false
  }
}

gcc_toolchain("mips64") {
  toolprefix = "mips64-linux-gnuabi64-"

  cc = "${toolprefix}gcc"
  cxx = "${toolprefix}g++"

  readelf = "${toolprefix}readelf"
  nm = "${toolprefix}nm"
  ar = "${toolprefix}ar"
  ld = cxx

  toolchain_args = {
    current_cpu = "mips64"
    current_os = "linux"

    # remote execution does not support gcc.
    use_remoteexec = false
    is_clang = false
  }
}

clang_toolchain("clang_loong64") {
  toolchain_args = {
    current_cpu = "loong64"
    current_os = "linux"
  }
}

gcc_toolchain("loong64") {
  toolprefix = "loongarch64-unknown-linux-gnu"

  cc = "${toolprefix}-gcc"
  cxx = "${toolprefix}-g++"

  readelf = "${toolprefix}-readelf"
  nm = "${toolprefix}-nm"
  ar = "${toolprefix}-ar"
  ld = cxx

  toolchain_args = {
    current_cpu = "loong64"
    current_os = "linux"
    is_clang = false
  }
}