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

# The Android GCC toolchains share most of the same parameters, so we have this
# wrapper around gcc_toolchain to avoid duplication of logic.
#
# Parameters:
#  - android_ndk_sysroot
#      Sysroot for this architecture.
#  - android_ndk_lib_dir
#      Subdirectory inside of android_ndk_sysroot where libs go.
#  - tool_prefix
#      Prefix to be added to the tool names.
#  - toolchain_cpu
#      Same as gcc_toolchain
template("android_gcc_toolchain") {
  gcc_toolchain(target_name) {
    # Make our manually injected libs relative to the build dir.
    android_ndk_lib = rebase_path(
            invoker.android_ndk_sysroot + "/" + invoker.android_ndk_lib_dir,
            root_build_dir)

    libs_section_prefix = "$android_ndk_lib/crtbegin_dynamic.o"
    libs_section_postfix = "$android_ndk_lib/crtend_android.o"

    solink_libs_section_prefix = "$android_ndk_lib/crtbegin_so.o"
    solink_libs_section_postfix = "$android_ndk_lib/crtend_so.o"

    # The tools should be run relative to the build dir.
    tool_prefix = rebase_path(invoker.tool_prefix, root_build_dir)

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

    is_clang = invoker.is_clang
    if (is_clang) {
      prefix = rebase_path("//third_party/llvm-build/Release+Asserts/bin",
                           root_build_dir)

      cc = compiler_prefix + prefix + "/clang"
      cxx = compiler_prefix + prefix + "/clang++"
    } else {
      cc = compiler_prefix + tool_prefix + "gcc"
      cxx = compiler_prefix + tool_prefix + "g++"
    }

    ar = tool_prefix + "ar"
    ld = cxx
    readelf = compiler_prefix + tool_prefix + "readelf"
    nm = compiler_prefix + tool_prefix + "nm"

    toolchain_os = "android"
    toolchain_cpu = invoker.toolchain_cpu

    # We make the assumption that the gcc_toolchain will produce a soname with
    # the following definition.
    soname = "{{target_output_name}}{{output_extension}}"

    stripped_soname = "lib.stripped/${soname}"
    temp_stripped_soname = "${stripped_soname}.tmp"

    android_strip = "${tool_prefix}strip"

    strip_command =
        "$android_strip --strip-unneeded -o $temp_stripped_soname $soname"
    replace_command = "if ! cmp -s $temp_stripped_soname $stripped_soname; then mv $temp_stripped_soname $stripped_soname; fi"
    postsolink = "$strip_command && $replace_command"
    solink_outputs = [ stripped_soname ]
    default_output_extension = android_product_extension

    # We make the assumption that the gcc_toolchain will produce an exe with
    # the following definition.
    exe = "{{root_out_dir}}/{{target_output_name}}{{output_extension}}"
    stripped_exe = "exe.stripped/$exe"
    postlink = "$android_strip --strip-unneeded -o $stripped_exe $exe"
    link_outputs = [ stripped_exe ]
  }
}

template("android_gcc_toolchains_helper") {
  android_gcc_toolchain(target_name) {
    android_ndk_sysroot = invoker.android_ndk_sysroot
    android_ndk_lib_dir = invoker.android_ndk_lib_dir
    tool_prefix = invoker.tool_prefix
    toolchain_cpu = invoker.toolchain_cpu
  }
  android_gcc_toolchain("clang_$target_name") {
    android_ndk_sysroot = invoker.android_ndk_sysroot
    android_ndk_lib_dir = invoker.android_ndk_lib_dir
    tool_prefix = invoker.tool_prefix
    toolchain_cpu = invoker.toolchain_cpu
    is_clang = true
  }
}

android_gcc_toolchains_helper("x86") {
  android_ndk_sysroot = "$android_ndk_root/$x86_android_sysroot_subdir"
  android_ndk_lib_dir = "usr/lib"

  tool_prefix = "$x86_android_toolchain_root/bin/i686-linux-android-"
  toolchain_cpu = "x86"
}

android_gcc_toolchains_helper("arm") {
  android_ndk_sysroot = "$android_ndk_root/$arm_android_sysroot_subdir"
  android_ndk_lib_dir = "usr/lib"

  tool_prefix = "$arm_android_toolchain_root/bin/arm-linux-androideabi-"
  toolchain_cpu = "arm"
}

android_gcc_toolchains_helper("mipsel") {
  android_ndk_sysroot = "$android_ndk_root/$mips_android_sysroot_subdir"
  android_ndk_lib_dir = "usr/lib"

  tool_prefix = "$mips_android_toolchain_root/bin/mipsel-linux-android-"
  toolchain_cpu = "mipsel"
}

android_gcc_toolchains_helper("x64") {
  android_ndk_sysroot = "$android_ndk_root/$x86_64_android_sysroot_subdir"
  android_ndk_lib_dir = "usr/lib64"

  tool_prefix = "$x86_64_android_toolchain_root/bin/x86_64-linux-android-"
  toolchain_cpu = "x86_64"
}

android_gcc_toolchains_helper("arm64") {
  android_ndk_sysroot = "$android_ndk_root/$arm64_android_sysroot_subdir"
  android_ndk_lib_dir = "usr/lib"

  tool_prefix = "$arm64_android_toolchain_root/bin/aarch64-linux-android-"
  toolchain_cpu = "aarch64"
}

android_gcc_toolchains_helper("mips64el") {
  android_ndk_sysroot = "$android_ndk_root/$mips64_android_sysroot_subdir"
  android_ndk_lib_dir = "usr/lib64"

  tool_prefix = "$mips64_android_toolchain_root/bin/mipsel-linux-android-"
  toolchain_cpu = "mipsel64el"
}
