# 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.
    wdk_version = "10.0.17763.0"
  }

  declare_args() {
    # Path to Visual Studio.
    visual_studio_path = "C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/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 = []
}
