Fixes #486
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Windows CI | |
on: [pull_request] | |
# Every time you make a push to your PR, it cancel immediately the previous checks, | |
# and start a new one. The other runner will be available more quickly to your PR. | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
jobs: | |
build: | |
name: ${{ matrix.name }} ${{ matrix.build_type }} | |
runs-on: ${{ matrix.os }} | |
env: | |
CTEST_OUTPUT_ON_FAILURE: ON | |
CTEST_PARALLEL_LEVEL: 2 | |
CMAKE_BUILD_TYPE: ${{ matrix.build_type }} | |
GTSAM_BUILD_UNSTABLE: ${{ matrix.build_unstable }} | |
BOOST_VERSION: 1.72.0 | |
BOOST_EXE: boost_1_72_0-msvc-14.2 | |
strategy: | |
fail-fast: true | |
matrix: | |
# Github Actions requires a single row to be added to the build matrix. | |
# See https://help.github.com/en/articles/workflow-syntax-for-github-actions. | |
name: [ | |
windows-2022-cl, | |
] | |
build_type: [ | |
Debug, | |
Release | |
] | |
build_unstable: [ON] | |
include: | |
- name: windows-2022-cl | |
os: windows-2022 | |
compiler: cl | |
platform: 64 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup msbuild | |
uses: ilammy/msvc-dev-cmd@v1 | |
with: | |
arch: x${{ matrix.platform }} | |
toolset: 14.40 | |
- name: cl version | |
shell: cmd | |
run: cl | |
- name: Install Dependencies | |
shell: powershell | |
run: | | |
iwr -useb get.scoop.sh -outfile 'install_scoop.ps1' | |
.\install_scoop.ps1 -RunAsAdmin | |
scoop install cmake --global # So we don't get issues with CMP0074 policy | |
scoop install ninja --global | |
if ("${{ matrix.compiler }}".StartsWith("clang")) { | |
scoop install llvm --global | |
} | |
if ("${{ matrix.compiler }}" -eq "gcc") { | |
scoop install gcc --global | |
echo "CC=gcc" >> $GITHUB_ENV | |
echo "CXX=g++" >> $GITHUB_ENV | |
} elseif ("${{ matrix.compiler }}" -eq "clang") { | |
echo "CC=clang" >> $GITHUB_ENV | |
echo "CXX=clang++" >> $GITHUB_ENV | |
} else { | |
echo "CC=${{ matrix.compiler }}" >> $env:GITHUB_ENV | |
echo "CXX=${{ matrix.compiler }}" >> $env:GITHUB_ENV | |
} | |
# Scoop modifies the PATH so we make the modified PATH global. | |
echo "$env:PATH" >> $env:GITHUB_PATH | |
- name: Install Boost | |
shell: powershell | |
run: | | |
# Snippet from: https://github.com/actions/virtual-environments/issues/2667 | |
$BOOST_PATH = "C:\hostedtoolcache\windows\Boost\$env:BOOST_VERSION\x86_64" | |
# Use the prebuilt binary for Windows | |
$Url = "https://sourceforge.net/projects/boost/files/boost-binaries/$env:BOOST_VERSION/$env:BOOST_EXE-${{matrix.platform}}.exe" | |
# Create WebClient with appropriate settings and download Boost exe | |
$wc = New-Object System.Net.Webclient | |
$wc.Headers.Add("User-Agent: Other"); | |
$wc.DownloadFile($Url, "$env:TEMP\boost.exe") | |
Start-Process -Wait -FilePath "$env:TEMP\boost.exe" "/SILENT","/SP-","/SUPPRESSMSGBOXES","/DIR=$BOOST_PATH" | |
# Set the BOOST_ROOT variable | |
echo "BOOST_ROOT=$BOOST_PATH" >> $env:GITHUB_ENV | |
- name: Configuration | |
shell: bash | |
run: | | |
export CMAKE_GENERATOR=Ninja | |
cmake -E remove_directory build | |
cmake -B build \ | |
-S . \ | |
-DGTSAM_BUILD_EXAMPLES_ALWAYS=OFF \ | |
-DGTSAM_ALLOW_DEPRECATED_SINCE_V43=OFF \ | |
-DBOOST_ROOT="${BOOST_ROOT}" \ | |
-DBOOST_INCLUDEDIR="${BOOST_ROOT}\boost\include" \ | |
-DBOOST_LIBRARYDIR="${BOOST_ROOT}\lib" | |
- name: Build | |
shell: bash | |
run: | | |
# Since Visual Studio is a multi-generator, we need to use --config | |
# https://stackoverflow.com/a/24470998/1236990 | |
cmake --build build -j4 --config ${{ matrix.build_type }} --target gtsam | |
cmake --build build -j4 --config ${{ matrix.build_type }} --target gtsam_unstable | |
cmake --build build -j4 --config ${{ matrix.build_type }} --target all.tests | |
- name: Test | |
shell: bash | |
run: | | |
# Run GTSAM tests | |
cmake --build build -j4 --config ${{ matrix.build_type }} --target check.base | |
cmake --build build -j4 --config ${{ matrix.build_type }} --target check.basis | |
cmake --build build -j4 --config ${{ matrix.build_type }} --target check.discrete | |
cmake --build build -j4 --config ${{ matrix.build_type }} --target check.geometry | |
cmake --build build -j4 --config ${{ matrix.build_type }} --target check.inference | |
cmake --build build -j4 --config ${{ matrix.build_type }} --target check.linear | |
cmake --build build -j4 --config ${{ matrix.build_type }} --target check.navigation | |
cmake --build build -j4 --config ${{ matrix.build_type }} --target check.sam | |
cmake --build build -j4 --config ${{ matrix.build_type }} --target check.sfm | |
cmake --build build -j4 --config ${{ matrix.build_type }} --target check.symbolic | |
cmake --build build -j4 --config ${{ matrix.build_type }} --target check.hybrid | |
cmake --build build -j4 --config ${{ matrix.build_type }} --target check.nonlinear | |
cmake --build build -j4 --config ${{ matrix.build_type }} --target check.slam | |
# Run GTSAM_UNSTABLE tests | |
cmake --build build -j4 --config ${{ matrix.build_type }} --target check.base_unstable | |
# Compile. Fail with exception | |
# cmake --build build -j4 --config ${{ matrix.build_type }} --target check.geometry_unstable | |
# Compile. Fail with exception | |
# cmake --build build -j4 --config ${{ matrix.build_type }} --target check.linear_unstable | |
# Compile. Fail with exception | |
# cmake --build build -j4 --config ${{ matrix.build_type }} --target check.discrete_unstable | |
# Compile. Fail with exception | |
# cmake --build build -j4 --config ${{ matrix.build_type }} --target check.dynamics_unstable | |
# Compile. Fail with exception | |
# cmake --build build -j4 --config ${{ matrix.build_type }} --target check.nonlinear_unstable | |
# Compile. Fail with exception | |
# cmake --build build -j4 --config ${{ matrix.build_type }} --target check.slam_unstable | |
# Compile. Fail with exception | |
# cmake --build build -j4 --config ${{ matrix.build_type }} --target check.partition | |
# Run all tests | |
# cmake --build build -j1 --config ${{ matrix.build_type }} --target check |