if (is_wasm) {
  import("wasm.gni")
}

declare_args() {
  host_ar = ar
  host_cc = cc
  host_cxx = cxx

  cc_wrapper = ""

  # dsymutil seems to kill the machine when too many processes are run in
  # parallel, so we need to use a pool to limit the concurrency when passing
  # large -j to Ninja (e.g. Goma build). Unfortunately this is also one of the
  # slowest steps in a build, so we don't want to limit too much. Use the number
  # of CPUs as a default.
  dlsymutil_pool_depth = exec_script("num_cpus.py", [], "value")

  # Too many linkers running at once causes issues for some builders. Allow
  # such builders to limit the number of concurrent link steps.
  # link_pool_depth < 0 means no pool, 0 means cpu count, > 0 sets pool size.
  link_pool_depth = -1
}

declare_args() {
  host_link = host_cxx
  target_link = target_cxx
}

# For 'shell' see https://ninja-build.org/manual.html#ref_rule_command
if (host_os == "win") {
  shell = "cmd.exe /c "
  stamp = "$shell echo >"
} else {
  shell = ""
  stamp = "touch"
}

if (current_toolchain == default_toolchain) {
  pool("dsymutil_pool") {
    depth = dlsymutil_pool_depth
  }
  if (0 <= link_pool_depth) {
    pool("link_pool") {
      if (link_pool_depth == 0) {
        depth = exec_script("num_cpus.py", [], "value")
      } else {
        depth = link_pool_depth
      }
    }
  }
}

template("msvc_toolchain") {
  toolchain(target_name) {
    toolchain_target_cpu = invoker.cpu
    lib_switch = ""
    lib_dir_switch = "/LIBPATH:"

    bin = "$win_vc/Tools/MSVC/$win_toolchain_version/bin/HostX64/$toolchain_target_cpu"

    cl_m32_flag = ""

    if (clang_win != "") {
      if (toolchain_target_cpu == "x86") {
        # cl.exe knows implicitly by the choice of executable that it's targeting
        # x86, but clang-cl.exe needs to be told when targeting non-host
        # platforms. (All our builders are x86-64, so x86 is always non-host.)
        cl_m32_flag = "-m32"
      }
      if (host_os == "win") {
        cl = "\"$clang_win/bin/clang-cl.exe\""
        lib = "\"$clang_win/bin/lld-link.exe\" /lib"
        link = "\"$clang_win/bin/lld-link.exe\""
      } else {
        cl = "\"$clang_win/bin/clang-cl\""
        lib = "\"$clang_win/bin/lld-link\" /lib"
        link = "\"$clang_win/bin/lld-link\""
      }
    } else {
      cl = "\"$bin/cl.exe\""
      lib = "\"$bin/lib.exe\""
      link = "\"$bin/link.exe\""
    }

    tool("asm") {
      _ml = "ml"
      if (toolchain_target_cpu == "x64") {
        _ml += "64"
      }
      command =
          "\"$bin/$_ml.exe\" {{asmflags}} /nologo /c /Fo {{output}} {{source}}"
      outputs = [
        "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.obj",
      ]
      description = "assemble {{source}}"
    }

    tool("cc") {
      precompiled_header_type = "msvc"
      pdbname = "{{target_out_dir}}/{{label_name}}_c.pdb"

      # Label names may have spaces so pdbname must be quoted.
      command = "$cc_wrapper $cl /nologo /showIncludes /FC {{defines}} {{include_dirs}} {{cflags}} $cl_m32_flag {{cflags_c}} /c {{source}} /Fo{{output}} /Fd\"$pdbname\""
      depsformat = "msvc"
      outputs = [
        "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.obj",
      ]
      description = "compile {{source}}"
    }

    tool("cxx") {
      precompiled_header_type = "msvc"
      pdbname = "{{target_out_dir}}/{{label_name}}_c.pdb"

      # Label names may have spaces so pdbname must be quoted.
      command = "$cc_wrapper $cl /nologo /showIncludes /FC {{defines}} {{include_dirs}} {{cflags}} $cl_m32_flag {{cflags_cc}} /c {{source}} /Fo{{output}} /Fd\"$pdbname\""
      depsformat = "msvc"
      outputs = [
        "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.obj",
      ]
      description = "compile {{source}}"
    }

    tool("alink") {
      rspfile = "{{output}}.rsp"

      command =
          "$lib /nologo /ignore:4221 {{arflags}} /OUT:{{output}} @$rspfile"
      outputs = [
        # Ignore {{output_extension}} and always use .lib, there's no reason to
        # allow targets to override this extension on Windows.
        "{{root_out_dir}}/{{target_output_name}}{{output_extension}}",
      ]
      default_output_extension = ".lib"
      default_output_dir = "{{target_out_dir}}"

      # inputs_newline works around a fixed per-line buffer size in the linker.
      rspfile_content = "{{inputs_newline}}"
      description = "link {{output}}"
      if (0 <= link_pool_depth) {
        pool = ":link_pool($default_toolchain)"
      }
    }

    tool("solink") {
      dllname = "{{output_dir}}/{{target_output_name}}{{output_extension}}"
      libname = "${dllname}.lib"
      pdbname = "${dllname}.pdb"
      rspfile = "${dllname}.rsp"

      command = "$link /nologo /IMPLIB:$libname /DLL /OUT:$dllname /PDB:$pdbname @$rspfile"
      outputs = [
        dllname,
        libname,
        pdbname,
      ]
      default_output_extension = ".dll"
      default_output_dir = "{{root_out_dir}}"

      link_output = libname
      depend_output = libname
      runtime_outputs = [
        dllname,
        pdbname,
      ]

      # I don't quite understand this.  Aping Chrome's toolchain/win/BUILD.gn.
      restat = true

      # inputs_newline works around a fixed per-line buffer size in the linker.
      rspfile_content = "{{inputs_newline}} {{libs}} {{solibs}} {{ldflags}}"
      description = "link {{output}}"
      if (0 <= link_pool_depth) {
        pool = ":link_pool($default_toolchain)"
      }
    }

    tool("link") {
      exename = "{{root_out_dir}}/{{target_output_name}}{{output_extension}}"
      pdbname = "$exename.pdb"
      rspfile = "$exename.rsp"

      command = "$link /nologo /OUT:$exename /PDB:$pdbname @$rspfile"
      default_output_extension = ".exe"
      default_output_dir = "{{root_out_dir}}"
      outputs = [ exename ]

      # inputs_newline works around a fixed per-line buffer size in the linker.
      rspfile_content = "{{inputs_newline}} {{libs}} {{solibs}} {{ldflags}}"
      description = "link {{output}}"
      if (0 <= link_pool_depth) {
        pool = ":link_pool($default_toolchain)"
      }
    }

    tool("stamp") {
      command = "$stamp {{output}}"
      description = "stamp {{output}}"
    }

    tool("copy") {
      cp_py = rebase_path("../cp.py")
      command = "$shell python3 \"$cp_py\" {{source}} {{output}}"
      description = "copy {{source}} {{output}}"
    }

    toolchain_args = {
      current_cpu = invoker.cpu
      current_os = invoker.os
    }
  }
}

msvc_toolchain("msvc") {
  cpu = current_cpu
  os = current_os
}

msvc_toolchain("msvc_host") {
  cpu = host_cpu
  os = host_os
}

template("gcc_like_toolchain") {
  toolchain(target_name) {
    ar = invoker.ar
    cc = invoker.cc
    cxx = invoker.cxx
    link = invoker.link
    lib_switch = "-l"
    lib_dir_switch = "-L"

    current_cpu = invoker.cpu
    current_os = invoker.os

    if (defined(invoker.deps)) {
      deps = invoker.deps
    }

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

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

    tool("objc") {
      depfile = "{{output}}.d"
      command = "$cc_wrapper $cc -MD -MF $depfile {{defines}} {{include_dirs}} {{framework_dirs}} {{cflags}} {{cflags_objc}} -c {{source}} -o {{output}}"
      depsformat = "gcc"
      outputs =
          [ "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o" ]
      description = "compile {{source}}"
    }

    tool("objcxx") {
      depfile = "{{output}}.d"
      command = "$cc_wrapper $cxx -MD -MF $depfile {{defines}} {{include_dirs}} {{framework_dirs}} {{cflags}} {{cflags_objcc}} -c {{source}} -o {{output}}"
      depsformat = "gcc"
      outputs =
          [ "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.o" ]
      description = "compile {{source}}"
    }

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

    if (current_os == "mac" || current_os == "ios" || current_os == "tvos") {
      not_needed([ "ar" ])  # We use libtool instead.
    }

    tool("alink") {
      if (current_os == "mac" || current_os == "ios" || current_os == "tvos") {
        command = "libtool -static -o {{output}} -no_warning_for_no_symbols {{inputs}}"
      } else {
        rspfile = "{{output}}.rsp"
        rspfile_content = "{{inputs}}"
        rm_py = rebase_path("../rm.py")
        command = "$shell python3 \"$rm_py\" \"{{output}}\" && $ar rcs {{output}} @$rspfile"
      }

      outputs =
          [ "{{root_out_dir}}/{{target_output_name}}{{output_extension}}" ]
      if (current_os == "wasm" && !is_canvaskit) {
        default_output_extension = ".wasm.a"
      } else {
        default_output_extension = ".a"
      }
      output_prefix = "lib"
      description = "link {{output}}"
      if (0 <= link_pool_depth) {
        pool = ":link_pool($default_toolchain)"
      }
    }

    tool("solink") {
      soname = "{{target_output_name}}{{output_extension}}"

      rpath = "-Wl,-soname,$soname"
      if (current_os == "mac" || current_os == "ios" || current_os == "tvos") {
        rpath = "-Wl,-install_name,@rpath/$soname"
      }

      rspfile = "{{output}}.rsp"
      rspfile_content = "{{inputs}}"

      # --start-group/--end-group let us link multiple .a {{inputs}}
      # without worrying about their relative order on the link line.
      #
      # This is mostly important for traditional linkers like GNU ld and Gold.
      # The Mac/iOS linker neither needs nor accepts these flags.
      # LLD doesn't need these flags, but accepts and ignores them.
      _start_group = "-Wl,--start-group"
      _end_group = "-Wl,--end-group"
      if (current_os == "mac" || current_os == "ios" || current_os == "tvos") {
        _start_group = ""
        _end_group = ""
      }

      _emcc_flags = ""
      if (current_os == "wasm") {
        _emcc_flags = "-sSIDE_MODULE=1"
      }

      command = "$link -shared {{ldflags}} $_start_group @$rspfile {{frameworks}} {{solibs}} $_end_group {{libs}} $rpath $_emcc_flags -o {{output}}"
      outputs = [ "{{root_out_dir}}/$soname" ]
      output_prefix = "lib"
      if (current_os == "mac" || current_os == "ios" || current_os == "tvos") {
        default_output_extension = ".dylib"
      } else if (current_os == "wasm" && !is_canvaskit) {
        default_output_extension = ".wasm.so"
      } else {
        default_output_extension = ".so"
      }
      description = "link {{output}}"
      if (0 <= link_pool_depth) {
        pool = ":link_pool($default_toolchain)"
      }
    }

    tool("link") {
      exe_name = "{{root_out_dir}}/{{target_output_name}}{{output_extension}}"
      rspfile = "$exe_name.rsp"
      rspfile_content = "{{inputs}}"

      # --start-group/--end-group let us link multiple .a {{inputs}}
      # without worrying about their relative order on the link line.
      #
      # This is mostly important for traditional linkers like GNU ld and Gold.
      # The Mac/iOS linker neither needs nor accepts these flags.
      # LLD doesn't need these flags, but accepts and ignores them.
      _start_group = "-Wl,--start-group"
      _end_group = "-Wl,--end-group"
      if (current_os == "mac" || current_os == "ios" || current_os == "tvos") {
        _start_group = ""
        _end_group = ""
      }
      command = "$link {{ldflags}} $_start_group @$rspfile {{frameworks}} {{solibs}} $_end_group {{libs}} -o $exe_name"

      outputs = [ "$exe_name" ]
      description = "link {{output}}"
      if (0 <= link_pool_depth) {
        pool = ":link_pool($default_toolchain)"
      }

      if (current_os == "wasm" && !is_canvaskit) {
        # Executables for wasm are run via Emscripten JS hooks. Those hooks will
        # only be generated when the output extension is .js.
        default_output_extension = ".js"
      }
    }

    tool("stamp") {
      command = "$stamp {{output}}"
      description = "stamp {{output}}"
    }

    tool("copy") {
      cp_py = rebase_path("../cp.py")
      command = "python3 \"$cp_py\" {{source}} {{output}}"
      description = "copy {{source}} {{output}}"
    }

    tool("copy_bundle_data") {
      cp_py = rebase_path("../cp.py")
      command = "python3 \"$cp_py\" {{source}} {{output}}"
      description = "copy_bundle_data {{source}} {{output}}"
    }

    # We don't currently have any xcasset files so make this a NOP
    tool("compile_xcassets") {
      command = "true"
      description = "compile_xcassets {{output}}"
    }

    toolchain_args = {
      current_cpu = invoker.cpu
      current_os = invoker.os
    }
  }
}

gcc_like_toolchain("gcc_like") {
  cpu = current_cpu
  os = current_os
  ar = target_ar
  cc = target_cc
  cxx = target_cxx
  link = target_link
}

gcc_like_toolchain("gcc_like_host") {
  cpu = host_cpu
  os = host_os
  ar = host_ar
  cc = host_cc
  cxx = host_cxx
  link = host_link
}

# Only define this toolchain if actually building for wasm.
if (is_wasm) {
  gcc_like_toolchain("wasm") {
    cpu = "wasm"
    os = "wasm"
    if (host_os == "win") {
      ar = "$skia_emsdk_dir/upstream/emscripten/emar.bat"
      cc = "$skia_emsdk_dir/upstream/emscripten/emcc.bat"
      cxx = "$skia_emsdk_dir/upstream/emscripten/em++.bat"
    } else {
      ar = "$skia_emsdk_dir/upstream/emscripten/emar"
      cc = "$skia_emsdk_dir/upstream/emscripten/emcc"
      cxx = "$skia_emsdk_dir/upstream/emscripten/em++"
    }
    link = cxx

    if (!is_canvaskit) {
      deps = [ "//gn/toolchain/emsdk:activate(//gn/toolchain:$host_toolchain)" ]
    }
  }
}
