# Copyright 2013 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

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

assert(is_win, "Should only be running on Windows")

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

# 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 (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("x64") {
    toolchain_arch = "x64"
  }
}

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

  # Note that //build/toolchain/win/win_toolchain_data.gni collects the output
  # of setup_toolchain.py, however it's not compatible with the UWP toolchain,
  # as the UWP toolchain requires the `environment.store_$CPU` variable, instead
  # of the usual `environment.$CPU`.
  store_cpu_toolchain_data =
      exec_script("//build/toolchain/win/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 = "\"${store_cpu_toolchain_data.vc_bin_dir}/cl.exe\""
    toolchain_args = {
      current_os = "winuwp"
      current_cpu = target_cpu
      is_clang = false
    }
  }
}