1name: Windows 2 3on: [push, pull_request] 4 5jobs: 6 compatibility: 7 runs-on: windows-latest 8 strategy: 9 matrix: 10 VER: [v142, v143] 11 EXT: [ON, OFF] 12 GEN: [Visual Studio 17 2022] 13 BIN: [x64, x86] 14 STD: [99, 11, 17] 15 include: 16 - VER: v141 17 EXT: OFF 18 GEN: Ninja Multi-Config 19 BIN: x64 20 STD: 89 # /Za 21 env: 22 NINJA_URL: https://github.com/ninja-build/ninja/releases/download/v1.10.2/ninja-win.zip 23 NINJA_ROOT: C:\Tools\Ninja 24 VS_ROOT: 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise' 25 UseMultiToolTask: true # Better parallel MSBuild execution 26 27 steps: 28 - uses: actions/checkout@v2 29 30 - name: Cache Ninja install 31 if: matrix.GEN == 'Ninja Multi-Config' 32 id: ninja-install 33 uses: actions/cache@v2 34 with: 35 path: | 36 C:\Tools\Ninja 37 key: ${{runner.os}}-ninja-${{env.NINJA_URL}} 38 39 - name: Install Ninja 40 if: matrix.GEN == 'Ninja Multi-Config' && steps.ninja-install.outputs.cache-hit != 'true' 41 shell: pwsh 42 run: | 43 Invoke-WebRequest ${env:NINJA_URL} -OutFile ~\Downloads\ninja-win.zip 44 Expand-Archive ~\Downloads\ninja-win.zip -DestinationPath ${env:NINJA_ROOT}\ 45 Remove-Item ~\Downloads\* 46 47 - name: Configure (MSBuild) 48 if: matrix.GEN == 'Visual Studio 17 2022' 49 shell: pwsh 50 run: | 51 $BIN = if('${{matrix.BIN}}' -eq 'x86') {'Win32'} else {'x64'} 52 $C_FLAGS = '/W4 /WX' 53 & cmake ` 54 -G '${{matrix.GEN}}' ` 55 -A $BIN ` 56 -T ${{matrix.VER}} ` 57 -D BUILD_TESTING=ON ` 58 -D CMAKE_C_FLAGS="${C_FLAGS}" ` 59 -D CMAKE_C_EXTENSIONS='${{matrix.EXT}}' ` 60 -S "${env:GITHUB_WORKSPACE}" ` 61 -B "${env:GITHUB_WORKSPACE}\build" 62 63 - name: Configure (Ninja Multi-Config) 64 if: matrix.GEN == 'Ninja Multi-Config' 65 shell: pwsh 66 run: | 67 $VER = switch ('${{matrix.VER}}') { ` 68 'v141' {'14.1'} ` 69 'v142' {'14.2'} ` 70 'v143' {'14.3'} } 71 Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" 72 Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=${VER}" 73 $C_FLAGS = '/W4 /WX' 74 & cmake ` 75 -G '${{matrix.GEN}}' ` 76 -D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" ` 77 -D BUILD_TESTING=ON ` 78 -D CMAKE_C_FLAGS="${C_FLAGS}" ` 79 -D CMAKE_C_EXTENSIONS='${{matrix.EXT}}' ` 80 -D CMAKE_EXE_LINKER_FLAGS='/INCREMENTAL' ` 81 -S "${env:GITHUB_WORKSPACE}" ` 82 -B "${env:GITHUB_WORKSPACE}\build" 83 84 - name: Build (MSBuild) 85 if: matrix.GEN == 'Visual Studio 17 2022' 86 shell: pwsh 87 run: | 88 foreach ($Config in 'Release','Debug') { ` 89 & cmake ` 90 --build "${env:GITHUB_WORKSPACE}\build" ` 91 --config ${Config} ` 92 -- ` 93 /verbosity:minimal ` 94 /maxCpuCount ` 95 /noLogo 96 } 97 98 - name: Build (Ninja) 99 if: matrix.GEN == 'Ninja Multi-Config' 100 shell: pwsh 101 run: | 102 $VER = switch ('${{matrix.VER}}') { ` 103 'v141' {'14.1'} ` 104 'v142' {'14.2'} ` 105 'v143' {'14.3'} } 106 Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" 107 Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=${VER}" 108 foreach ($Config in 'Release','Debug') { ` 109 & cmake ` 110 --build "${env:GITHUB_WORKSPACE}\build" ` 111 --config ${Config} ` 112 -- ` 113 -j ${env:NUMBER_OF_PROCESSORS} 114 } 115 116 - name: Test 117 shell: pwsh 118 run: | 119 foreach ($Config in 'Release','Debug') { ` 120 & ctest ` 121 --test-dir "${env:GITHUB_WORKSPACE}\build" ` 122 --build-config ${Config} ` 123 --output-on-failure ` 124 --parallel ${env:NUMBER_OF_PROCESSORS} 125 } 126 127 - name: Install 128 shell: pwsh 129 run: | 130 & cmake ` 131 --install "${env:GITHUB_WORKSPACE}\build" ` 132 --prefix "${env:GITHUB_WORKSPACE}\install" ` 133 --config Release 134 135 - name: Consume (PkgConfig - bare MSBuild) 136 if: matrix.GEN == 'Visual Studio 17 2022' 137 shell: pwsh 138 run: | 139 $BIN = if('${{matrix.BIN}}' -eq 'x86') {'Win32'} else {'x64'} 140 $C_FLAGS = '/W4 /WX' 141 & cmake ` 142 -G '${{matrix.GEN}}' ` 143 -A $BIN ` 144 -T ${{matrix.VER}} ` 145 -D CMAKE_C_FLAGS="${C_FLAGS}" ` 146 -D CMAKE_C_EXTENSIONS='${{matrix.EXT}}' ` 147 -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\install" ` 148 -S "${env:GITHUB_WORKSPACE}\tests\pkgconfig\bare" ` 149 -B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare" 150 foreach ($Config in 'Release','Debug') { ` 151 & cmake ` 152 --build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare" ` 153 --config ${Config} ` 154 -- ` 155 /verbosity:minimal ` 156 /maxCpuCount ` 157 /noLogo ` 158 } 159 160 - name: Consume (PkgConfig - bare Ninja) 161 if: matrix.GEN == 'Ninja Multi-Config' 162 shell: pwsh 163 run: | 164 $VER = switch ('${{matrix.VER}}') { ` 165 'v141' {'14.1'} ` 166 'v142' {'14.2'} ` 167 'v143' {'14.3'} } 168 Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" 169 Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=${VER}" 170 $C_FLAGS = '/W4 /WX' 171 & cmake ` 172 -G '${{matrix.GEN}}' ` 173 -D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" ` 174 -D BUILD_TESTING=ON ` 175 -D CMAKE_C_FLAGS="${C_FLAGS}" ` 176 -D CMAKE_C_EXTENSIONS='${{matrix.EXT}}' ` 177 -D CMAKE_EXE_LINKER_FLAGS='/INCREMENTAL' ` 178 -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\install" ` 179 -S "${env:GITHUB_WORKSPACE}\tests\pkgconfig\bare" ` 180 -B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare" 181 foreach ($Config in 'Release','Debug') { ` 182 & cmake ` 183 --build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare" ` 184 --config ${Config} ` 185 -- ` 186 -j ${env:NUMBER_OF_PROCESSORS} ` 187 } 188 189 - name: Consume (Emulate SDK presence) 190 shell: pwsh 191 run: | 192 New-Item -Type Directory -Path ${env:GITHUB_WORKSPACE}\install\share\cmake\OpenCL 193 New-Item -Type File -Path ${env:GITHUB_WORKSPACE}\install\share\cmake\OpenCL\OpenCLConfig.cmake -Value 'include("${CMAKE_CURRENT_LIST_DIR}/../OpenCLHeaders/OpenCLHeadersTargets.cmake")' 194 195 - name: Consume (PkgConfig - SDK MSBuild) 196 if: matrix.GEN == 'Visual Studio 17 2022' 197 shell: pwsh 198 run: | 199 $BIN = if('${{matrix.BIN}}' -eq 'x86') {'Win32'} else {'x64'} 200 $C_FLAGS = '/W4 /WX' 201 & cmake ` 202 -G '${{matrix.GEN}}' ` 203 -A $BIN ` 204 -T ${{matrix.VER}} ` 205 -D CMAKE_C_FLAGS="${C_FLAGS}" ` 206 -D CMAKE_C_EXTENSIONS='${{matrix.EXT}}' ` 207 -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\install" ` 208 -S "${env:GITHUB_WORKSPACE}\tests\pkgconfig\sdk" ` 209 -B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk" 210 foreach ($Config in 'Release','Debug') { ` 211 & cmake ` 212 --build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk" ` 213 --config ${Config} ` 214 -- ` 215 /verbosity:minimal ` 216 /maxCpuCount ` 217 /noLogo ` 218 } 219 220 - name: Consume (PkgConfig - SDK Ninja) 221 if: matrix.GEN == 'Ninja Multi-Config' 222 shell: pwsh 223 run: | 224 $VER = switch ('${{matrix.VER}}') { ` 225 'v141' {'14.1'} ` 226 'v142' {'14.2'} ` 227 'v143' {'14.3'} } 228 Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" 229 Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=${VER}" 230 $C_FLAGS = '/W4 /WX' 231 & cmake ` 232 -G '${{matrix.GEN}}' ` 233 -D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" ` 234 -D BUILD_TESTING=ON ` 235 -D CMAKE_C_FLAGS="${C_FLAGS}" ` 236 -D CMAKE_C_EXTENSIONS='${{matrix.EXT}}' ` 237 -D CMAKE_EXE_LINKER_FLAGS='/INCREMENTAL' ` 238 -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\install" ` 239 -S "${env:GITHUB_WORKSPACE}\tests\pkgconfig\sdk" ` 240 -B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk" 241 foreach ($Config in 'Release','Debug') { ` 242 & cmake ` 243 --build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk" ` 244 --config ${Config} ` 245 -- ` 246 -j ${env:NUMBER_OF_PROCESSORS} ` 247 }