# Copyright 2017 The Flutter 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/toolchain/custom/custom.gni")
import("//build/toolchain/ccache.gni")

toolchain("custom") {
  toolchain_bin = "${custom_toolchain}/bin"
  compiler_prefix = ""
  if (use_ccache) {
    compiler_prefix = "ccache "
  }

  # We can't do string interpolation ($ in strings) on things with dots in
  # them. To allow us to use $cc below, for example, we create copies of
  # these values in our scope.
  cc = "${compiler_prefix}${toolchain_bin}/clang"
  cxx = "${compiler_prefix}${toolchain_bin}/clang++"
  ar = "${toolchain_bin}/${custom_target_triple}-ar"
  ld = "${toolchain_bin}/clang++"
  readelf = "${toolchain_bin}/${custom_target_triple}-readelf"
  nm = "${toolchain_bin}/${custom_target_triple}-nm"
  strip = "${toolchain_bin}/${custom_target_triple}-strip"

  target_triple_flags = "--target=${custom_target_triple}"
  sysroot_flags = "--sysroot ${custom_sysroot}"

  custom_lib_flags = "-L${custom_toolchain}/lib"

  # These library switches can apply to all tools below.
  lib_switch = "-l"
  lib_dir_switch = "-L"

  tool("cc") {
    depfile = "{{output}}.d"
    command = "$cc -MD -MF $depfile $target_triple_flags $sysroot_flags {{defines}} {{include_dirs}} {{cflags}} {{cflags_c}} -c {{source}} -o {{output}}"
    depsformat = "gcc"
    description = "CC {{output}}"
    outputs =
        [ "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o" ]
  }

  tool("cxx") {
    depfile = "{{output}}.d"
    command = "$cxx -MD -MF $depfile $target_triple_flags $sysroot_flags {{defines}} {{include_dirs}} {{cflags}} {{cflags_cc}} -c {{source}} -o {{output}}"
    depsformat = "gcc"
    description = "CXX {{output}}"
    outputs =
        [ "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o" ]
  }

  tool("asm") {
    depfile = "{{output}}.d"
    command = "$cc -MD -MF $depfile $target_triple_flags $sysroot_flags {{defines}} {{include_dirs}} {{asmflags}} {{cflags}} {{cflags_c}} -c {{source}} -o {{output}}"
    depsformat = "gcc"
    description = "ASM {{output}}"
    outputs =
        [ "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o" ]
  }

  tool("alink") {
    rspfile = "{{output}}.rsp"
    command = "rm -f {{output}} && $ar rcs {{output}} @$rspfile"
    description = "AR {{output}}"
    rspfile_content = "{{inputs}}"
    outputs =
        [ "{{target_out_dir}}/{{target_output_name}}{{output_extension}}" ]
    default_output_extension = ".a"
    output_prefix = "lib"
  }

  tool("solink") {
    soname = "{{target_output_name}}{{output_extension}}"  # e.g. "libfoo.so".
    sofile = "{{root_out_dir}}/$soname"  # Possibly including toolchain dir.
    unstripped_sofile =
        "{{root_out_dir}}/so.unstripped/$soname"  # Possibly including toolchain
                                                  # dir.
    rspfile = sofile + ".rsp"

    # These variables are not built into GN but are helpers that implement
    # (1) linking to produce a .so, (2) extracting the symbols from that file
    # to a temporary file, (3) if the temporary file has differences from the
    # existing .TOC file, overwrite it, otherwise, don't change it.
    tocfile = sofile + ".TOC"
    temporary_tocname = sofile + ".tmp"
    link_command = "$ld $target_triple_flags $sysroot_flags -shared {{ldflags}} -o $unstripped_sofile $custom_lib_flags -Wl,--build-id=sha1 -Wl,-soname=$soname @$rspfile"
    toc_command = "{ $readelf -d $unstripped_sofile | grep SONAME ; $nm -gD -f posix $unstripped_sofile | cut -f1-2 -d' '; } > $temporary_tocname"
    replace_command = "if ! cmp -s $temporary_tocname $tocfile; then mv $temporary_tocname $tocfile; fi"
    strip_command = "$strip -o $sofile $unstripped_sofile"

    command =
        "$link_command && $toc_command && $replace_command && $strip_command"
    rspfile_content = "-Wl,--whole-archive {{inputs}} {{solibs}} -Wl,--no-whole-archive {{libs}}"

    description = "SOLINK $sofile"

    default_output_extension = ".so"

    output_prefix = "lib"

    # Since the above commands only updates the .TOC file when it changes, ask
    # Ninja to check if the timestamp actually changed to know if downstream
    # dependencies should be recompiled.
    restat = true

    # Tell GN about the output files. It will link to the sofile but use the
    # tocfile for dependency management.
    outputs = [
      sofile,
      unstripped_sofile,
      tocfile,
    ]

    link_output = sofile
    depend_output = tocfile
  }

  tool("link") {
    exename = "{{target_output_name}}{{output_extension}}"
    outfile = "{{root_out_dir}}/$exename"
    rspfile = "$outfile.rsp"
    unstripped_outfile = "{{root_out_dir}}/exe.unstripped/$exename"
    command = "$ld $target_triple_flags $sysroot_flags {{ldflags}} -o $unstripped_outfile $custom_lib_flags -Wl,--build-id=sha1 -Wl,--start-group @$rspfile {{solibs}} -Wl,--end-group {{libs}} && ${strip} -o $outfile $unstripped_outfile"
    description = "LINK $outfile"
    rspfile_content = "{{inputs}}"
    outputs = [
      unstripped_outfile,
      outfile,
    ]
  }

  tool("stamp") {
    command = "touch {{output}}"
    description = "STAMP {{output}}"
  }

  tool("copy") {
    command = "ln -f {{source}} {{output}} 2>/dev/null || (rm -rf {{output}} && cp -af {{source}} {{output}})"
    description = "COPY {{source}} {{output}}"
  }

  # When invoking this toolchain not as the default one, these args will be
  # passed to the build. They are ignored when this is the default toolchain.
  toolchain_args = {
    current_cpu = target_cpu
    current_os = target_os

    # These values need to be passed through unchanged.
    target_os = target_os
    target_cpu = target_cpu

    is_clang = true
  }
}
