Reactos
1name: Build
2on: [push, pull_request]
3
4jobs:
5 build-linux:
6 strategy:
7 matrix:
8 compiler: [gcc, clang]
9 arch: [i386, amd64]
10 config: [Debug, Release]
11 dllver: ['0x502', '0x600']
12 exclude:
13 - dllver: 0x600
14 compiler: clang
15 - dllver: 0x600
16 config: Release
17 fail-fast: false
18 runs-on: ubuntu-22.04
19 steps:
20 - name: Get RosBE build specifics
21 id: get_rosbe_spec
22 run: |
23 gcc -march=native -Q --help=target | grep "\-march= " | awk '{print $NF}'
24 echo march-sha=$(gcc -march=native -Q --help=target | sha1sum | awk '{print $1}') >> $GITHUB_OUTPUT
25 echo git-sha=$(git ls-remote https://github.com/zefklop/RosBE.git | grep unix_amd64 | awk '{print $1}') >> $GITHUB_OUTPUT
26 wget https://gist.githubusercontent.com/zefklop/b2d6a0b470c70183e93d5285a03f5899/raw/build_rosbe_ci.sh
27 - name: Get RosBE
28 id: get_rosbe
29 uses: actions/cache@v4
30 with:
31 path: RosBE-CI
32 key: RosBE-CI-${{runner.os}}-${{steps.get_rosbe_spec.outputs.march-sha}}-${{steps.get_rosbe_spec.outputs.git-sha}}-${{hashfiles('./build_rosbe_ci.sh')}}
33 - name: Compile RosBE
34 if: ${{ steps.get_rosbe.outputs.cache-hit != 'true' }}
35 run: |
36 chmod +x build_rosbe_ci.sh
37 ./build_rosbe_ci.sh ${{github.workspace}}/RosBE-CI
38 - name: Install ccache
39 run: sudo apt install ccache
40 - name: Install LLVM
41 if: ${{ matrix.compiler == 'clang' }}
42 run: |
43 export LLVM_VERSION=13
44 wget https://apt.llvm.org/llvm.sh
45 chmod +x llvm.sh
46 sudo ./llvm.sh $LLVM_VERSION
47 echo "D_CLANG_VERSION=-DCLANG_VERSION=$LLVM_VERSION" >> $GITHUB_ENV
48 - name: Source checkout
49 uses: actions/checkout@v6
50 with:
51 path: src
52 - name: Set up cache for ccache
53 uses: actions/cache@v4
54 with:
55 path: ccache
56 key: ccache-${{matrix.compiler}}-${{matrix.arch}}-${{matrix.config}}-${{matrix.dllver}}-${{github.sha}}
57 restore-keys: |
58 ccache-${{matrix.compiler}}-${{matrix.arch}}-${{matrix.config}}-${{matrix.dllver}}-
59 - name: Set ccache settings
60 run: |
61 echo "CCACHE_BASEDIR=${{github.workspace}}" >> $GITHUB_ENV
62 echo "CCACHE_DIR=${{github.workspace}}/ccache" >> $GITHUB_ENV
63 echo "CCACHE_MAXSIZE=1G" >> $GITHUB_ENV
64 echo "CCACHE_SLOPPINESS=time_macros" >> $GITHUB_ENV
65 - name: Ease ccache compiler check (GCC)
66 if: ${{ matrix.compiler == 'gcc' }}
67 run: echo "CCACHE_COMPILERCHECK=string:${{steps.get_rosbe_spec.outputs.git-sha}}-${{hashfiles('./build_rosbe_ci.sh')}}" >> $GITHUB_ENV
68 - name: Configure
69 run: echo 'cmake -S ${{github.workspace}}/src -B ${{github.workspace}}/build -G Ninja -DCMAKE_TOOLCHAIN_FILE:FILEPATH=toolchain-${{matrix.compiler}}.cmake -DARCH:STRING=${{matrix.arch}} -DCMAKE_BUILD_TYPE=${{matrix.config}} -DDLL_EXPORT_VERSION=${{matrix.dllver}} -DENABLE_CCACHE=1 -DENABLE_ROSTESTS=1 -DENABLE_ROSAPPS=1 ${{env.D_CLANG_VERSION}}' | ${{github.workspace}}/RosBE-CI/RosBE.sh . 0 ${{matrix.arch}}
70 - name: Build
71 run: echo 'cmake --build ${{github.workspace}}/build -- -k0' | ${{github.workspace}}/RosBE-CI/RosBE.sh . 0 ${{matrix.arch}}
72 - name: Generate ISOs
73 run: echo 'cmake --build ${{github.workspace}}/build --target bootcd --target livecd' | ${{github.workspace}}/RosBE-CI/RosBE.sh . 0 ${{matrix.arch}}
74 - name: Print ccache statistics
75 run: ccache -s
76 - name: Upload ISOs
77 uses: actions/upload-artifact@v5
78 with:
79 name: reactos-${{matrix.compiler}}-${{matrix.arch}}-${{matrix.config}}-${{matrix.dllver}}-${{github.sha}}
80 path: |
81 build/bootcd.iso
82 build/livecd.iso
83
84 build-msvc:
85 strategy:
86 matrix:
87 os: [windows-latest]
88 toolset: ['14','14.2'] # VS 2022, and 2019 (see below)
89 arch: [i386, amd64]
90 config: [Debug, Release]
91 dllver: ['0x502', '0x600']
92 exclude: # Build NT6 ISOs only with the latest toolset when compiled as a debug build
93 - dllver: 0x600
94 toolset: 14.2
95 - dllver: 0x600
96 config: Release
97 fail-fast: false
98 runs-on: ${{matrix.os}}
99 steps:
100 - name: Install ninja
101 run: choco install -y ninja
102 - name: Install Flex & Bison
103 run: |
104 curl -O https://svn.reactos.org/storage/vperevertkin/flexbison.7z
105 7z x flexbison.7z -O${{github.workspace}}\bin
106 echo "${{github.workspace}}\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
107 echo "BISON_PKGDATADIR=${{github.workspace}}\bin\share\bison" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
108 echo "M4=${{github.workspace}}\bin\m4.exe" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
109 - name: Activate VS cmd (x86)
110 if: ${{ matrix.arch == 'i386' }}
111 uses: ilammy/msvc-dev-cmd@v1
112 with:
113 arch: amd64_x86
114 toolset: ${{matrix.toolset}}
115 - name: Activate VS cmd (amd64)
116 if: ${{ matrix.arch == 'amd64' }}
117 uses: ilammy/msvc-dev-cmd@v1
118 with:
119 arch: amd64
120 toolset: ${{matrix.toolset}}
121 - name: Source checkout
122 uses: actions/checkout@v6
123 with:
124 path: src
125 - name: Configure
126 run: cmake -S src -B build -G Ninja -DCMAKE_TOOLCHAIN_FILE:FILEPATH=toolchain-msvc.cmake -DARCH:STRING=${{matrix.arch}} -DCMAKE_BUILD_TYPE=${{matrix.config}} -DDLL_EXPORT_VERSION=${{matrix.dllver}} -DENABLE_ROSTESTS=1 -DENABLE_ROSAPPS=1
127 - name: Build
128 run: cmake --build build -- -k0
129 - name: Generate ISOs
130 run: cmake --build build --target bootcd --target livecd
131 - name: Upload ISOs
132 uses: actions/upload-artifact@v5
133 with:
134 name: reactos-msvc${{matrix.toolset}}-${{matrix.arch}}-${{matrix.config}}-${{matrix.dllver}}-${{github.sha}}
135 path: |
136 build/bootcd.iso
137 build/livecd.iso
138 - name: Upload debug symbols
139 if: ${{ matrix.config == 'Debug' }}
140 uses: actions/upload-artifact@v5
141 with:
142 name: reactos-syms-msvc${{matrix.toolset}}-${{matrix.arch}}-${{matrix.config}}-${{matrix.dllver}}-${{github.sha}}
143 path: build/msvc_pdb
144
145 build-msvc-arm:
146 strategy:
147 matrix:
148 os: [windows-2022, windows-latest]
149 toolset: ['14', '14.29'] # VS 2022 (ongoing), 2019 (last)
150 arch: [arm, arm64]
151 config: [Debug, Release]
152 exclude:
153 # arm64: windows-latest is enough/fine.
154 - os: windows-2022
155 arch: arm64
156 # arm (sdk): only available on windows-2022.
157 - os: windows-latest
158 arch: arm
159 fail-fast: false
160 runs-on: ${{matrix.os}}
161 steps:
162 - name: Install ninja
163 run: choco install -y ninja
164 - name: Install Flex & Bison
165 run: |
166 curl -O https://svn.reactos.org/storage/vperevertkin/flexbison.7z
167 7z x flexbison.7z -O${{github.workspace}}\bin
168 echo "${{github.workspace}}\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
169 echo "BISON_PKGDATADIR=${{github.workspace}}\bin\share\bison" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
170 echo "M4=${{github.workspace}}\bin\m4.exe" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
171 - name: Activate VS cmd (arm)
172 if: ${{ matrix.arch == 'arm' }}
173 uses: ilammy/msvc-dev-cmd@v1
174 with:
175 arch: amd64_arm
176 sdk: 10.0.22621.0 # Windows SDK 10.0.26100.0 dropped support for 32-bit ARM
177 toolset: ${{matrix.toolset}}
178 - name: Activate VS cmd (arm64)
179 if: ${{ matrix.arch == 'arm64' }}
180 uses: ilammy/msvc-dev-cmd@v1
181 with:
182 arch: amd64_arm64
183 toolset: ${{matrix.toolset}}
184 - name: Source checkout
185 uses: actions/checkout@v6
186 with:
187 path: src
188 - name: Configure
189 run: cmake -S src -B build -G Ninja -DCMAKE_TOOLCHAIN_FILE:FILEPATH=toolchain-msvc.cmake -DARCH:STRING=${{matrix.arch}} -DCMAKE_BUILD_TYPE=${{matrix.config}} -DENABLE_ROSTESTS=1 -DENABLE_ROSAPPS=1
190 - name: Build base module
191 if: ${{ matrix.arch == 'arm' }}
192 run: cmake --build build --target base/all
193 - name: Build dll:3rdparty
194 if: ${{ matrix.arch == 'arm' }}
195 run: cmake --build build --target dll/3rdparty/all -- -k0
196 - name: Build control panel applets
197 if: ${{ matrix.arch == 'arm' }}
198 run: cmake --build build --target dll/cpl/all
199 - name: Build dll:opengl
200 if: ${{ matrix.arch == 'arm' }}
201 run: cmake --build build --target dll/opengl/all -- -k0
202 - name: Build dll:shellext
203 if: ${{ matrix.arch == 'arm' }}
204 run: cmake --build build --target dll/shellext/all -- -k0
205 - name: Build drivers:base
206 if: ${{ matrix.arch == 'arm' }}
207 run: cmake --build build --target drivers/base/all -- -k0
208 - name: Build rosapps
209 if: ${{ matrix.arch == 'arm' }}
210 run: cmake --build build --target modules/rosapps/all
211 - name: Build subsystems
212 if: ${{ matrix.arch == 'arm' }}
213 run: cmake --build build --target subsystems/all
214 - name: Build some applications (arm64)
215 if: ${{ matrix.arch == 'arm64' }}
216 run: cmake --build build --target calc magnify mstsc notepad osk regedit taskmgr winmine wordpad base/applications/screensavers/all -- -k0
217 - name: Build control panel applets (arm64)
218 if: ${{ matrix.arch == 'arm64' }}
219 run: cmake --build build --target dll/cpl/all -- -k0
220 - name: Upload compiled binaries
221 uses: actions/upload-artifact@v5
222 with:
223 name: reactos-msvc${{matrix.toolset}}-${{matrix.arch}}-${{matrix.config}}-${{github.sha}}
224 path: |
225 build/base
226 build/dll/3rdparty
227 build/dll/cpl
228 build/dll/opengl
229 build/dll/shellext
230 build/drivers/base
231 build/modules/rosapps
232 build/subsystems
233 !**/CMakeFiles
234 !**/cmake_install.cmake
235 !**/*.asm
236 !**/*.bin
237 !**/*.c
238 !**/*.def
239 !**/*.exp
240 !**/*.h
241 !**/*.lib
242 !**/*.mc
243 !**/*.obj
244 !**/*.rc
245 !**/*.tlb
246 - name: Upload debug symbols
247 if: ${{ matrix.config == 'Debug' }}
248 uses: actions/upload-artifact@v5
249 with:
250 name: reactos-syms-msvc${{matrix.toolset}}-${{matrix.arch}}-${{matrix.config}}-${{github.sha}}
251 path: build/msvc_pdb
252
253 # FIXME: Does not boot on toolset 14.1, 14.3+ is untested
254 build-clang-cl:
255 strategy:
256 matrix:
257 arch: [i386, amd64]
258 config: [Debug, Release]
259 fail-fast: false
260 runs-on: windows-latest
261 steps:
262 - name: Install ninja
263 run: choco install -y ninja
264 - name: Install LLVM
265 run: |
266 choco install -y --allow-downgrade llvm --version 13.0.1
267 echo "LLVM_PATH=${env:PROGRAMFILES}\llvm\bin" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
268 - name: Install Flex & Bison
269 run: |
270 curl -O https://svn.reactos.org/storage/vperevertkin/flexbison.7z
271 7z x flexbison.7z -O${{github.workspace}}\bin
272 echo "${{github.workspace}}\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
273 echo "BISON_PKGDATADIR=${{github.workspace}}\bin\share\bison" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
274 echo "M4=${{github.workspace}}\bin\m4.exe" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
275 - name: Activate VS cmd (x86)
276 if: ${{ matrix.arch == 'i386' }}
277 uses: ilammy/msvc-dev-cmd@v1
278 with:
279 arch: amd64_x86
280 toolset: '14'
281 - name: Activate VS cmd (amd64)
282 if: ${{ matrix.arch == 'amd64' }}
283 uses: ilammy/msvc-dev-cmd@v1
284 with:
285 arch: amd64
286 toolset: '14'
287 - name: Add LLVM to PATH
288 run: echo "${env:LLVM_PATH}" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
289 - name: Source checkout
290 uses: actions/checkout@v6
291 with:
292 path: src
293 - name: Configure
294 run: cmake -S src -B build -G Ninja -DCMAKE_TOOLCHAIN_FILE:FILEPATH=toolchain-msvc.cmake -DARCH:STRING=${{matrix.arch}} -DCMAKE_BUILD_TYPE=${{matrix.config}} -DENABLE_ROSTESTS=1 -DENABLE_ROSAPPS=1 -DUSE_CLANG_CL:BOOL=TRUE
295 - name: Build
296 run: cmake --build build -- -k0
297 - name: Generate ISOs
298 run: cmake --build build --target bootcd --target livecd
299 - name: Upload ISOs
300 uses: actions/upload-artifact@v5
301 with:
302 name: reactos-clang-cl-${{matrix.arch}}-${{matrix.config}}-${{github.sha}}
303 path: |
304 build/bootcd.iso
305 build/livecd.iso
306 - name: Upload debug symbols
307 if: ${{ matrix.config == 'Debug' }}
308 uses: actions/upload-artifact@v5
309 with:
310 name: reactos-syms-clang-cl-${{matrix.arch}}-${{matrix.config}}-${{github.sha}}
311 path: build/msvc_pdb
312
313 build-msbuild-i386:
314 name: MSBuild (i386)
315 runs-on: windows-latest
316 steps:
317 - name: Install Flex and Bison
318 run: |
319 curl -O https://svn.reactos.org/storage/vperevertkin/flexbison.7z
320 7z x flexbison.7z -O${{github.workspace}}\bin
321 echo "${{github.workspace}}\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
322 echo "BISON_PKGDATADIR=${{github.workspace}}\bin\share\bison" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
323 echo "M4=${{github.workspace}}\bin\m4.exe" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
324 - name: Add CL to PATH
325 uses: ilammy/msvc-dev-cmd@v1
326 with:
327 arch: amd64_x86
328 - uses: actions/checkout@v6
329 with:
330 path: src
331 - name: Configure
332 run: |
333 mkdir build
334 cd build
335 cmake -G "Visual Studio 17 2022" -A Win32 -DCMAKE_TOOLCHAIN_FILE:FILEPATH=toolchain-msvc.cmake -DARCH:STRING=i386 -DENABLE_ROSTESTS=1 -DENABLE_ROSAPPS=1 ${{github.workspace}}\src
336 - name: Build
337 run: cmake --build ${{github.workspace}}\build --target bootcd --target livecd