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

    wdk_include_path = "$windows_sdk_path/Include/$wdk_version"

    wdk_lib_path = "$windows_sdk_path/lib/$wdk_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 = []
}
