##=============================================================================
##
##  Copyright (c) Kitware, Inc.
##  All rights reserved.
##  See LICENSE.txt for details.
##
##  This software is distributed WITHOUT ANY WARRANTY; without even
##  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
##  PURPOSE.  See the above copyright notice for more information.
##
##=============================================================================

.windows_build:
  variables:
    # Note that shell runners only support runners with a single
    # concurrency level. We can't use `$CI_CONCURRENCY_ID` because this may
    # change between the build and test stages which CMake doesn't support.
    # Even if we could, it could change if other runners on the machine
    # could run at the same time, so we drop it.
    GIT_CLONE_PATH:     "$CI_BUILDS_DIR\\vtkm ci"
    CCACHE_INSTALL_DIR: "$CI_PROJECT_DIR\\.gitlab"
  artifacts:
    reports:
      junit:
        - build/junit.xml


.windows_vs2019:
  variables:
    VCVARSALL: "${VS160COMNTOOLS}\\..\\..\\VC\\Auxiliary\\Build\\vcvarsall.bat"
    VCVARSPLATFORM: "x64"
    VCVARSVERSION: "14.28.29333"

.cmake_build_windows: &cmake_build_windows
  extends:
    - .windows_build
    - .windows_vs2019
  stage: build
  timeout:  2 hours
  interruptible: true
  before_script:
    - Invoke-Expression -Command .gitlab/ci/config/cmake.ps1
    - Invoke-Expression -Command .gitlab/ci/config/vcvarsall.ps1
    - $pwdpath = $pwd.Path
    - Set-Item -Force -Path "env:PATH" -Value "$pwdpath\.gitlab\cmake\bin;$env:PATH"
    - "cmake --version"
    - "cmake -V -P .gitlab/ci/config/ccache.cmake"
    - Set-Item -Force -Path "env:PATH" -Value "$env:CCACHE_INSTALL_DIR\ccache;$env:PATH"
    - "cmake -V -P .gitlab/ci/config/ninja.cmake"
    - Set-Item -Force -Path "env:PATH" -Value "$pwdpath\.gitlab;$env:PATH"
    - "cmake -V -P .gitlab/ci/config/gitlab_ci_setup.cmake"
    - "ctest -VV -S .gitlab/ci/ctest_configure.cmake"
  script:
    - "ctest -VV -S .gitlab/ci/ctest_build.cmake"
    - "cmake -P .gitlab/ci/check_warnings.cmake"
    - if (!$?) { $host.SetShouldExit(47); exit 47 }
  after_script:
    # This is needed since sometimes this process hangs holding files
    # in the build directory. Blocking new builds
    - "tskill cvtres"
  artifacts:
    expire_in: 24 hours
    when: always
    paths:
      # The artifacts of the build.
      - build/bin/
      - build/include/
      - build/lib/
      - build/vtkm/thirdparty/diy/vtkmdiy/include
      - build/config/

      # CTest and CMake install files.
      # Note: this also captures our CIState.cmake file
      - build/CMakeCache.txt
      - build/compile_num_warnings.log
      - build/**/*.cmake
      - build/Testing/

      # CDash files.
      - build/DartConfiguration.tcl


.cmake_test_windows: &cmake_test_windows
  extends:
    - .windows_build
    - .windows_vs2019
  stage: test
  timeout:  50 minutes
  interruptible: true
  before_script:
    - Invoke-Expression -Command .gitlab/ci/config/cmake.ps1
    - Invoke-Expression -Command .gitlab/ci/config/vcvarsall.ps1
    - $pwdpath = $pwd.Path
    - Set-Item -Force -Path "env:PATH" -Value "$pwdpath\.gitlab\cmake\bin;$env:PATH"
    - "cmake --version"
    - "cmake -V -P .gitlab/ci/config/ninja.cmake"
    - Set-Item -Force -Path "env:PATH" -Value "$pwdpath\.gitlab;$env:PATH"
  script:
    - "ctest -VV -S .gitlab/ci/ctest_test.cmake"

# Build on windows10 with Visual Studio
# Will have CUDA 10.2 once build issues are resolved
build:windows_vs2019:
  tags:
    - vtkm # Since this is a bare runner, pin to a project.
    - nonconcurrent
    - build
    - windows-x86_64
    - shell
    - vs2019
    - msvc-19.25
    - large-memory
  extends:
    - .cmake_build_windows
    - .run_automatically
    - .warning_policy
  variables:
    CMAKE_GENERATOR: "Ninja"
    CMAKE_BUILD_TYPE: Release
    # Disabled while we track down cub allocator issues with vtkm/io tests
    # VTKM_SETTINGS: "cuda+turing"
    VTKM_SETTINGS: "serial"

test:windows_vs2019:
  tags:
    - vtkm # Since this is a bare runner, pin to a project.
    - nonconcurrent
    - test
    - windows-x86_64
    - shell
    - vs2019
    - msvc-19.25
    - cuda-rt
    - turing
  extends:
    - .cmake_test_windows
    - .run_automatically
  dependencies:
    - build:windows_vs2019
  needs:
    - build:windows_vs2019
