• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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        }