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

  # TODO(b/210151198) Visual Studio 2022 upgrade compatibility changes.
  # This argument should be removed, and replace the defaults for the arguments
  # that are being overriden correspondingly.
  declare_args() {
    use_visual_studio_2022 = getenv("VISUAL_STUDIO_VERSION") == "2022"
  }

  if (use_visual_studio_2022) {
    visual_studio_version = "14.34.31933"
    if (current_os != "winuwp") {
      wdk_version = "10.0.18362.0"
    }
  }

  if (is_docker_build) {
    _default_visual_studio_path = "C:/BuildTools"
  } else {
    if (use_visual_studio_2022) {
      _vis_std_year = "2022"
    } else {
      _vis_std_year = "2017"
    }
    _default_visual_studio_path = getenv("VS2022INSTALLDIR")
    if (_default_visual_studio_path == "") {
      _default_visual_studio_path = "C:/Program Files (x86)/Microsoft Visual Studio/$_vis_std_year/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 = []
}
