# Copyright (c) 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/clang/clang.gni")
import("//build/config/compiler/compiler.gni")
import("//build/config/sanitizers/sanitizers.gni")
import("//build/config/win/visual_studio_version.gni")
import("//build/toolchain/cc_wrapper.gni")
import("//build/toolchain/goma.gni")
import("//build/toolchain/rbe.gni")
import("//build/toolchain/toolchain.gni")

# Should only be running on Windows.
assert(is_win)

# Setup the Visual Studio state.
#
# Its arguments are the VS path and the compiler wrapper tool. It will write
# "environment.x86" and "environment.x64" to the build directory and return a
# list to us.

# This tool will is used as a wrapper for various commands below.
tool_wrapper_path = rebase_path("tool_wrapper.py", root_build_dir)

if (use_rbe) {
  goma_prefix = ""
  rbe_prefix = "${rbe_bin_dir}/rewrapper -cfg=${rbe_cc_cfg_file} -exec_root=${rbe_exec_root} "
  clang_prefix = rbe_prefix
} else if (use_goma) {
  if (host_os == "win") {
    goma_prefix = "$goma_dir/gomacc.exe "
  } else {
    goma_prefix = "$goma_dir/gomacc "
  }
  clang_prefix = goma_prefix
} else {
  goma_prefix = ""
  if (cc_wrapper != "") {
    clang_prefix = cc_wrapper + " "
  } else {
    clang_prefix = ""
  }
}

# Copy the VS runtime DLL for the default toolchain to the root build directory
# so things will run.
if (current_toolchain == default_toolchain) {
  if (is_debug) {
    configuration_name = "Debug"
  } else {
    configuration_name = "Release"
  }
  exec_script("../../vs_toolchain.py",
              [
                "copy_dlls",
                rebase_path(root_build_dir),
                configuration_name,
                target_cpu,
              ])
}

if (host_os == "win") {
  clang_cl = "clang-cl.exe"
} else {
  clang_cl = "clang-cl"
}

# Parameters:
#   environment: File name of environment file.
#
# You would also define a toolchain_args variable with at least these set:
#   current_cpu: current_cpu to pass as a build arg
#   current_os: current_os to pass as a build arg
template("msvc_toolchain") {
  toolchain(target_name) {
    # 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.
    assert(defined(invoker.toolchain_args))
    toolchain_args = {
      if (defined(invoker.toolchain_args)) {
        forward_variables_from(invoker.toolchain_args, "*")
      }

      # This value needs to be passed through unchanged.
      host_toolchain = host_toolchain
    }

    # Make these apply to all tools below.
    lib_switch = ""
    lib_dir_switch = "/LIBPATH:"

    # Object files go in this directory.
    object_subdir = "{{target_out_dir}}/{{label_name}}"

    env = invoker.environment

    cl = invoker.cl

    if (use_lld) {
      if (host_os == "win") {
        lld_link = "lld-link.exe"
      } else {
        lld_link = "lld-link"
      }
      prefix = rebase_path("$clang_base_path/bin", root_build_dir)

      # lld-link includes a replacement for lib.exe that can produce thin
      # archives and understands bitcode (for lto builds).
      link = "$prefix/$lld_link"
      if (host_os == "win") {
        # Flip the slashes so that copy/paste of the commands works.
        link = string_replace(link, "/", "\\")
      }
      lib = "$link /lib"
      if (host_os != "win") {
        # See comment adding --rsp-quoting to $cl above for more information.
        link = "$link --rsp-quoting=posix"
      }
    } else {
      lib = "lib.exe"
      link = "link.exe"
    }

    # If possible, pass system includes as flags to the compiler.  When that's
    # not possible, load a full environment file (containing %INCLUDE% and
    # %PATH%) -- e.g. 32-bit MSVS builds require %PATH% to be set and just
    # passing in a list of include directories isn't enough.
    if (defined(invoker.sys_include_flags)) {
      env_wrapper = ""
      sys_include_flags =
          "${invoker.sys_include_flags} "  # Note trailing space.
    } else {
      # clang-cl doesn't need this env hoop, so omit it there.
      assert((defined(toolchain_args.is_clang) && !toolchain_args.is_clang) ||
             !is_clang)
      env_wrapper = "ninja -t msvc -e $env -- "  # Note trailing space.
      sys_include_flags = ""
    }

    # ninja does not have -t msvc other than windows, and lld doesn't depend on
    # mt.exe in PATH on non-Windows, so it's not needed there anyways.
    if (host_os != "win") {
      linker_wrapper = ""
      sys_lib_flags = "${invoker.sys_lib_flags} "  # Note trailing space.
    } else if (defined(invoker.sys_lib_flags)) {
      # Invoke ninja as wrapper instead of tool wrapper, because python
      # invocation requires higher cpu usage compared to ninja invocation, and
      # the python wrapper is only needed to work around link.exe problems.
      # TODO(thakis): Remove wrapper once lld-link can merge manifests without
      # relying on mt.exe being in %PATH% on Windows, https://crbug.com/872740
      linker_wrapper = "ninja -t msvc -e $env -- "  # Note trailing space.
      sys_lib_flags = "${invoker.sys_lib_flags} "  # Note trailing space.
    } else {
      # Note trailing space:
      linker_wrapper =
          "$python_path $tool_wrapper_path link-wrapper $env False "
      sys_lib_flags = ""
    }

    if (defined(toolchain_args.use_clang_coverage)) {
      toolchain_use_clang_coverage = toolchain_args.use_clang_coverage
    } else {
      toolchain_use_clang_coverage = use_clang_coverage
    }

    if (toolchain_use_clang_coverage) {
      assert(toolchain_args.is_clang,
             "use_clang_coverage should only be used with Clang")
      if (defined(toolchain_args.coverage_instrumentation_input_file)) {
        toolchain_coverage_instrumentation_input_file =
            toolchain_args.coverage_instrumentation_input_file
      } else {
        toolchain_coverage_instrumentation_input_file =
            coverage_instrumentation_input_file
      }

      coverage_wrapper =
          rebase_path("//build/toolchain/clang_code_coverage_wrapper.py",
                      root_build_dir)
      coverage_wrapper = coverage_wrapper + " --target-os=" + target_os
      if (toolchain_coverage_instrumentation_input_file != "") {
        coverage_wrapper =
            coverage_wrapper + " --files-to-instrument=" +
            rebase_path(toolchain_coverage_instrumentation_input_file,
                        root_build_dir)
      }
      coverage_wrapper = "$python_path " + coverage_wrapper + " "
    } else {
      coverage_wrapper = ""
    }

    if (toolchain_args.is_clang) {
      # This flag omits system includes from /showIncludes output, to reduce the
      # amount of data to parse and store in .ninja_deps. We do this on non-Windows too,
      # and already make sure rebuilds after win sdk / libc++ / clang header updates happen via
      # changing commandline flags.
      show_includes = "/showIncludes:user"
    } else {
      show_includes = "/showIncludes"
    }

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

      # Label names may have spaces in them so the pdbname must be quoted. The
      # source and output don't need to be quoted because GN knows they're a
      # full file name and will quote automatically when necessary.
      depsformat = "msvc"
      description = "CC {{output}}"
      outputs = [ "$object_subdir/{{source_name_part}}.obj" ]

      command = "$coverage_wrapper$env_wrapper$cl /nologo $show_includes $sys_include_flags{{defines}} {{include_dirs}} {{cflags}} {{cflags_c}} /c {{source}} /Fo{{output}} /Fd\"$pdbname\""
    }

    tool("cxx") {
      precompiled_header_type = "msvc"

      # The PDB name needs to be different between C and C++ compiled files.
      pdbname = "{{target_out_dir}}/{{label_name}}_cc.pdb"

      # See comment in CC tool about quoting.
      depsformat = "msvc"
      description = "CXX {{output}}"
      outputs = [ "$object_subdir/{{source_name_part}}.obj" ]

      command = "$coverage_wrapper$env_wrapper$cl /nologo $show_includes $sys_include_flags{{defines}} {{include_dirs}} {{cflags}} {{cflags_cc}} /c {{source}} /Fo{{output}} /Fd\"$pdbname\""
    }

    tool("rc") {
      command = "$python_path $tool_wrapper_path rc-wrapper $env rc.exe /nologo $sys_include_flags{{defines}} {{include_dirs}} /fo{{output}} {{source}}"
      depsformat = "msvc"
      outputs = [ "$object_subdir/{{source_name_part}}.res" ]
      description = "RC {{output}}"
    }

    tool("asm") {
      is_msvc_assembler = true

      if (toolchain_args.current_cpu == "arm64") {
        if (is_clang) {
          prefix = rebase_path("$clang_base_path/bin", root_build_dir)
          ml = "${clang_prefix}${prefix}/${clang_cl} --target=arm64-windows"
          if (host_os == "win") {
            # Flip the slashes so that copy/paste of the command works.
            ml = string_replace(ml, "/", "\\")
          }
          ml += " -c -o{{output}}"
          is_msvc_assembler = false
        } else {
          # Only affects Arm builds with is_clang = false, implemented for building
          # V8 for Windows on Arm systems with the MSVC toolchain.
          ml = "armasm64.exe"
        }
      } else {
        # x86/x64 builds always use the MSVC assembler.
        if (toolchain_args.current_cpu == "x64") {
          ml = "ml64.exe"
        } else {
          ml = "ml.exe"
        }
      }

      if (is_msvc_assembler) {
        ml += " /nologo /Fo{{output}}"

        # Suppress final-stage linking on x64/x86 builds. (Armasm64 does not
        # require /c because it doesn't support linking.)
        if (toolchain_args.current_cpu != "arm64") {
          ml += " /c"
        }
        if (use_lld) {
          # Wrap ml(64).exe with a script that makes its output deterministic.
          # It's lld only because the script zaps obj Timestamp which
          # link.exe /incremental looks at.
          # TODO(https://crbug.com/762167): If we end up writing an llvm-ml64,
          # make sure it has deterministic output (maybe with /Brepro or
          # something) and remove this wrapper.
          ml_py = rebase_path("ml.py", root_build_dir)
          ml = "$python_path $ml_py $ml"
        }
      }
      if (toolchain_args.current_cpu != "arm64" || is_clang) {
        command = "$python_path $tool_wrapper_path asm-wrapper $env $ml {{defines}} {{include_dirs}} {{asmflags}} {{source}}"
      } else {
        # armasm64.exe does not support definitions passed via the command line.
        # (Fortunately, they're not needed for compiling the V8 snapshot, which
        # is the only time this assembler is required.)
        command = "$python_path $tool_wrapper_path asm-wrapper $env $ml {{include_dirs}} {{asmflags}} {{source}}"
      }

      description = "ASM {{output}}"
      outputs = [ "$object_subdir/{{source_name_part}}.obj" ]
    }

    tool("alink") {
      rspfile = "{{output}}.rsp"
      command = "$linker_wrapper$lib /OUT:{{output}} /nologo ${sys_lib_flags}{{arflags}} @$rspfile"
      description = "LIB {{output}}"
      outputs = [
        # Ignore {{output_extension}} and always use .lib, there's no reason to
        # allow targets to override this extension on Windows.
        "{{output_dir}}/{{target_output_name}}.lib",
      ]
      default_output_extension = ".lib"
      default_output_dir = "{{target_out_dir}}"

      # The use of inputs_newline is to work around a fixed per-line buffer
      # size in the linker.
      rspfile_content = "{{inputs_newline}}"
    }

    tool("solink") {
      # E.g. "foo.dll":
      dllname = "{{output_dir}}/{{target_output_name}}{{output_extension}}"
      libname = "${dllname}.lib"  # e.g. foo.dll.lib
      pdbname = "${dllname}.pdb"
      rspfile = "${dllname}.rsp"
      pool = "//build/toolchain:link_pool($default_toolchain)"

      command = "$linker_wrapper$link /OUT:$dllname /nologo ${sys_lib_flags}/IMPLIB:$libname /DLL /PDB:$pdbname @$rspfile"

      default_output_extension = ".dll"
      default_output_dir = "{{root_out_dir}}"
      description = "LINK(DLL) {{output}}"
      outputs = [
        dllname,
        libname,
        pdbname,
      ]
      link_output = libname
      depend_output = libname
      runtime_outputs = [
        dllname,
        pdbname,
      ]

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

      # The use of inputs_newline is to work around a fixed per-line buffer
      # size in the linker.
      rspfile_content = "{{libs}} {{solibs}} {{inputs_newline}} {{ldflags}}"
    }

    tool("solink_module") {
      # E.g. "foo.dll":
      dllname = "{{output_dir}}/{{target_output_name}}{{output_extension}}"
      pdbname = "${dllname}.pdb"
      rspfile = "${dllname}.rsp"
      pool = "//build/toolchain:link_pool($default_toolchain)"

      command = "$linker_wrapper$link /OUT:$dllname /nologo ${sys_lib_flags}/DLL /PDB:$pdbname @$rspfile"

      default_output_extension = ".dll"
      default_output_dir = "{{root_out_dir}}"
      description = "LINK_MODULE(DLL) {{output}}"
      outputs = [
        dllname,
        pdbname,
      ]
      runtime_outputs = outputs

      # The use of inputs_newline is to work around a fixed per-line buffer
      # size in the linker.
      rspfile_content = "{{libs}} {{solibs}} {{inputs_newline}} {{ldflags}}"
    }

    tool("link") {
      exename = "{{output_dir}}/{{target_output_name}}{{output_extension}}"
      pdbname = "$exename.pdb"
      rspfile = "$exename.rsp"
      pool = "//build/toolchain:link_pool($default_toolchain)"

      command = "$linker_wrapper$link /OUT:$exename /nologo ${sys_lib_flags} /PDB:$pdbname @$rspfile"

      default_output_extension = ".exe"
      default_output_dir = "{{root_out_dir}}"
      description = "LINK {{output}}"
      outputs = [
        exename,
        pdbname,
      ]
      runtime_outputs = outputs

      # The use of inputs_newline is to work around a fixed per-line buffer
      # size in the linker.
      rspfile_content = "{{inputs_newline}} {{libs}} {{solibs}} {{ldflags}}"
    }

    # These two are really entirely generic, but have to be repeated in
    # each toolchain because GN doesn't allow a template to be used here.
    # See //build/toolchain/toolchain.gni for details.
    tool("stamp") {
      command = stamp_command
      description = stamp_description
      pool = "//build/toolchain:action_pool($default_toolchain)"
    }
    tool("copy") {
      command = copy_command
      description = copy_description
      pool = "//build/toolchain:action_pool($default_toolchain)"
    }

    tool("action") {
      pool = "//build/toolchain:action_pool($default_toolchain)"
    }
  }
}

template("win_toolchains") {
  assert(defined(invoker.toolchain_arch))
  toolchain_arch = invoker.toolchain_arch

  win_toolchain_data = exec_script("setup_toolchain.py",
                                   [
                                     visual_studio_path,
                                     windows_sdk_path,
                                     visual_studio_runtime_dirs,
                                     "win",
                                     toolchain_arch,
                                     "environment." + toolchain_arch,
                                   ],
                                   "scope")

  # The toolchain using MSVC only makes sense when not doing cross builds.
  # Chromium exclusively uses the win_clang_ toolchain below, but V8 and
  # WebRTC still use this MSVC toolchain in some cases.
  if (host_os == "win") {
    msvc_toolchain(target_name) {
      environment = "environment." + toolchain_arch
      cl = "${goma_prefix}\"${win_toolchain_data.vc_bin_dir}/cl.exe\""

      toolchain_args = {
        if (defined(invoker.toolchain_args)) {
          forward_variables_from(invoker.toolchain_args, "*")
        }
        is_clang = false
        use_clang_coverage = false
        current_os = "win"
        current_cpu = toolchain_arch
      }
    }
  }

  msvc_toolchain("win_clang_" + target_name) {
    environment = "environment." + toolchain_arch
    prefix = rebase_path("$clang_base_path/bin", root_build_dir)
    cl = "${clang_prefix}$prefix/${clang_cl}"
    _clang_lib_dir =
        rebase_path("$clang_base_path/lib/clang/$clang_version/lib/windows",
                    root_build_dir)
    if (host_os == "win") {
      # Flip the slashes so that copy/paste of the command works.
      cl = string_replace(cl, "/", "\\")

      # And to match the other -libpath flags.
      _clang_lib_dir = string_replace(_clang_lib_dir, "/", "\\")
    }

    sys_include_flags = "${win_toolchain_data.include_flags_imsvc}"
    sys_lib_flags =
        "-libpath:$_clang_lib_dir ${win_toolchain_data.libpath_flags}"

    toolchain_args = {
      if (defined(invoker.toolchain_args)) {
        forward_variables_from(invoker.toolchain_args, "*")
      }
      is_clang = true
      current_os = "win"
      current_cpu = toolchain_arch
    }
  }
}

if (target_cpu == "x86" || target_cpu == "x64") {
  win_toolchains("x86") {
    toolchain_arch = "x86"
  }
  win_toolchains("x64") {
    toolchain_arch = "x64"
  }
}

if (target_cpu == "arm64") {
  win_toolchains("arm64") {
    toolchain_arch = "arm64"
  }
  win_toolchains(host_cpu) {
    toolchain_arch = host_cpu
  }
}

# The nacl_win64 toolchain is nearly identical to the plain x64 toolchain.
# It's used solely for building nacl64.exe (//components/nacl/broker:nacl64).
# The only reason it's a separate toolchain is so that it can force
# is_component_build to false in the toolchain_args() block, because
# building nacl64.exe in component style does not work.
win_toolchains("nacl_win64") {
  toolchain_arch = "x64"
  toolchain_args = {
    is_component_build = false
  }
}

# WinUWP toolchains. Only define these when targeting them.

if (target_os == "winuwp") {
  assert(target_cpu == "x64" || target_cpu == "x86" || target_cpu == "arm" ||
         target_cpu == "arm64")
  store_cpu_toolchain_data = exec_script("setup_toolchain.py",
                                         [
                                           visual_studio_path,
                                           windows_sdk_path,
                                           visual_studio_runtime_dirs,
                                           target_os,
                                           target_cpu,
                                           "environment.store_" + target_cpu,
                                         ],
                                         "scope")

  msvc_toolchain("uwp_" + target_cpu) {
    environment = "environment.store_" + target_cpu
    cl = "${goma_prefix}\"${store_cpu_toolchain_data.vc_bin_dir}/cl.exe\""
    toolchain_args = {
      current_os = "winuwp"
      current_cpu = target_cpu
      is_clang = false
    }
  }
}
