# 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.

declare_args() {
  # Path to the directory containing the VC binaries for the right
  # combination of host and target architectures. Currently only the
  # 64-bit host toolchain is supported, with either 32-bit or 64-bit targets.
  # If vc_bin_dir is not specified on the command line (and it normally
  # isn't), we will dynamically determine the right value to use at runtime.
  vc_bin_dir = ""
}

import("//build/config/win/visual_studio_version.gni")
import("//build/toolchain/goma.gni")

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

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

# Setup the Visual Studio state.
toolchain_data = exec_script("setup_toolchain.py",
                             [
                               visual_studio_path,
                               windows_sdk_path,
                               visual_studio_runtime_dirs,
                               "win",
                               current_cpu,
                               "environment." + current_cpu,
                             ],
                             "scope")

if (vc_bin_dir == "") {
  vc_bin_dir = toolchain_data.vc_bin_dir
}

if (use_goma) {
  goma_prefix = "$goma_dir/gomacc.exe "
} else {
  goma_prefix = ""
}

# Parameters:
#  current_cpu: current_cpu to pass as a build arg
#  environment: File name of environment file.
template("msvc_toolchain") {
  env = invoker.environment

  if (is_debug) {
    configuration = "Debug"
  } else {
    configuration = "Release"
  }
  exec_script("../../vs_toolchain.py",
              [
                "copy_dlls",
                rebase_path(root_build_dir),
                configuration,
                invoker.current_cpu,
              ])

  cl = invoker.cl

  toolchain(target_name) {
    # Make these apply to all tools below.
    lib_switch = ""
    lib_dir_switch = "/LIBPATH:"

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

      # TODO(brettw) enable this when GN support in the binary has been rolled.
      #precompiled_header_type = "msvc"
      pdbname = "{{target_out_dir}}/{{target_output_name}}_c.pdb"
      flags = ""
      if (invoker.current_cpu == "x86") {
        flags = "-m32"
      }
      command = "ninja -t msvc -e $env -- $cl $flags /nologo /showIncludes /FC @$rspfile /c {{source}} /Fo{{output}} /Fd$pdbname"
      depsformat = "msvc"
      description = "CC {{output}}"
      outputs = [
        "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.obj",
      ]
      rspfile_content = "{{defines}} {{include_dirs}} {{cflags}} {{cflags_c}}"
    }

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

      # TODO(brettw) enable this when GN support in the binary has been rolled.
      #precompiled_header_type = "msvc"

      # The PDB name needs to be different between C and C++ compiled files.
      pdbname = "{{target_out_dir}}/{{target_output_name}}_cc.pdb"
      flags = ""
      if (invoker.current_cpu == "x86") {
        flags = "-m32"
      }
      command = "ninja -t msvc -e $env -- $cl $flags /nologo /showIncludes /FC @$rspfile /c {{source}} /Fo{{output}} /Fd$pdbname"
      depsformat = "msvc"
      description = "CXX {{output}}"
      outputs = [
        "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.obj",
      ]
      rspfile_content = "{{defines}} {{include_dirs}} {{cflags}} {{cflags_cc}}"
    }

    tool("rc") {
      command = "$python_path $tool_wrapper_path rc-wrapper $env rc.exe {{defines}} {{include_dirs}} /fo{{output}} {{source}}"
      outputs = [
        "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.res",
      ]
      description = "RC {{output}}"
    }

    tool("asm") {
      if (invoker.current_cpu == "x64") {
        ml = "ml64.exe"
        x64 = "-D_ML64_X64"
      } else {
        ml = "ml.exe"
        x64 = ""
      }
      command = "$python_path $tool_wrapper_path asm-wrapper $env $ml $x64 {{defines}} {{include_dirs}} {{asmflags}} /c /Fo {{output}} {{source}}"
      description = "ASM {{output}}"
      outputs = [
        "{{source_out_dir}}/{{target_output_name}}.{{source_name_part}}.obj",
      ]
    }

    tool("alink") {
      rspfile = "{{output}}.rsp"
      command = "$python_path $tool_wrapper_path link-wrapper $env False lib.exe /nologo /ignore:4221 /OUT:{{output}} @$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.
        "{{target_out_dir}}/{{target_output_name}}.lib",
      ]
      default_output_extension = ".lib"

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

    tool("solink") {
      dllname = "{{root_out_dir}}/{{target_output_name}}{{output_extension}}"  # e.g.
                                                                               # foo.dll
      libname = "{{root_out_dir}}/{{target_output_name}}{{output_extension}}.lib"  # e.g.
                                                                                   # foo.dll.lib
      rspfile = "${dllname}.rsp"

      link_command = "$python_path $tool_wrapper_path link-wrapper $env False link.exe /nologo /IMPLIB:$libname /DLL /OUT:$dllname /PDB:${dllname}.pdb @$rspfile"

      # TODO(brettw) support manifests
      #manifest_command = "$python_path gyp-win-tool manifest-wrapper $env mt.exe -nologo -manifest $manifests -out:${dllname}.manifest"
      #command = "cmd /c $link_command && $manifest_command"
      # Force rebuild of the .lib-file(if it is being produced) because msvc
      # linker seems to keep it untouched sometimes even when .obj-files are
      # being updated.
      cleanup_lib_command = "$python_path $tool_wrapper_path delete-file $libname"
      command = "cmd /c $cleanup_lib_command && cmd /c $link_command"

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

      # 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") {
      dllname =
          "{{output_dir}}/{{target_output_name}}{{output_extension}}"  # e.g.
                                                                       # foo.dll
      pdbname = "${dllname}.pdb"
      rspfile = "${dllname}.rsp"

      command = "$python_path $tool_wrapper_path link-wrapper $env False link.exe /nologo /DLL /OUT:$dllname /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}}"

      restat = true
    }

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

      link_command = "$python_path $tool_wrapper_path link-wrapper $env False link.exe /nologo /OUT:$binary_output /PDB:$binary_output.pdb @$rspfile"

      # TODO(brettw) support manifests
      #manifest_command = "$python_path gyp-win-tool manifest-wrapper $env mt.exe -nologo -manifest $manifests -out:{{output}}.manifest"
      #command = "cmd /c $link_command && $manifest_command"
      command = link_command

      default_output_extension = ".exe"
      description = "LINK $binary_output"
      outputs = [
        binary_output,
        "{{root_out_dir}}/{{target_output_name}}.lib",
      ]

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

      restat = true
    }

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

    tool("copy") {
      command = "$python_path $tool_wrapper_path recursive-mirror {{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 = invoker.current_cpu
      if (defined(invoker.is_clang)) {
        is_clang = invoker.is_clang
      }
    }
  }
}

# TODO(dpranke): Declare both toolchains all of the time when we
# get it sorted out how we want to support them both in a single build.
# Right now only one of these can be enabled at a time because the
# runtime libraries get copied to root_build_dir and would collide.
if (current_cpu == "x86") {
  msvc_toolchain("x86") {
    environment = "environment.x86"
    current_cpu = "x86"
    cl = "${goma_prefix}\"${vc_bin_dir}/cl.exe\""
    is_clang = false
  }
  msvc_toolchain("clang_x86") {
    environment = "environment.x86"
    current_cpu = "x86"
    prefix = rebase_path("//buildtools/win-x64/clang/bin", root_build_dir)
    cl = "${goma_prefix}$prefix/clang-cl.exe"
    is_clang = true
  }
}

if (current_cpu == "x64") {
  msvc_toolchain("x64") {
    environment = "environment.x64"
    current_cpu = "x64"
    cl = "${goma_prefix}\"${vc_bin_dir}/cl.exe\""
    is_clang = false
  }
  msvc_toolchain("clang_x64") {
    environment = "environment.x64"
    current_cpu = "x64"
    prefix = rebase_path("//buildtools/win-x64/clang/bin", root_build_dir)
    cl = "${goma_prefix}$prefix/clang-cl.exe"
    is_clang = true
  }
}
