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