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

if (is_starboard) {
  declare_args() {
    # Version of Visual Studio.
    visual_studio_version = "14.15.26726"

    # Full path to the Windows SDK, not including a backslash at the end.
    # This value is the default location, override if you have a different
    # installation location.
    windows_sdk_path = "C:/Program Files (x86)/Windows Kits/10"

    # Version of Windows SDK. XB1 requires >=10.0.22000.0.
    if (current_os == "winuwp") {
      wdk_version = "10.0.22000.0"
    } else {
      wdk_version = "10.0.17763.0"
    }
  }

  if (is_docker_build) {
    _default_visual_studio_path = "C:/BuildTools"
  } else {
    _default_visual_studio_path = "C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional"
  }

  declare_args() {
    # Path to Visual Studio.
    visual_studio_path = _default_visual_studio_path

    wdk_include_path = "$windows_sdk_path/include/$wdk_version"

    wdk_lib_path = "$windows_sdk_path/lib/$wdk_version"
  }

  declare_args() {
    msvc_path = "$visual_studio_path/VC/Tools/MSVC/$visual_studio_version"
  }
} else {
  declare_args() {
    # Path to Visual Studio. If empty, the default is used which is to use the
    # automatic toolchain in depot_tools. If set, you must also set the
    # visual_studio_version and wdk_path.
    visual_studio_path = ""

    # Version of Visual Studio pointed to by the visual_studio_path.
    # Currently always "2015".
    visual_studio_version = ""

    # Directory of the Windows driver kit. If visual_studio_path is empty, this
    # will be auto-filled.
    wdk_path = ""

    # Full path to the Windows SDK, not including a backslash at the end.
    # This value is the default location, override if you have a different
    # installation location.
    windows_sdk_path = "C:\Program Files (x86)\Windows Kits\10"
  }
}

if (visual_studio_path == "") {
  toolchain_data =
      exec_script("../../vs_toolchain.py", [ "get_toolchain_dir" ], "scope")
  visual_studio_path = toolchain_data.vs_path
  windows_sdk_path = toolchain_data.sdk_path
  visual_studio_version = toolchain_data.vs_version
  wdk_path = toolchain_data.wdk_dir
  visual_studio_runtime_dirs = toolchain_data.runtime_dirs
} else if (!is_starboard) {
  assert(visual_studio_version != "",
         "You must set the visual_studio_version if you set the path")
  assert(wdk_path != "",
         "You must set the wdk_path if you set the visual studio path")
  visual_studio_runtime_dirs = []
}
