xref: /reactos/.github/workflows/build.yml (revision 2d4c0b87)
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@v4
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@v4
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@v4
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@v4
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@v4
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        toolset: ['14','14.2'] # VS 2022, 2019
149        arch: [arm, arm64]
150        config: [Debug, Release]
151      fail-fast: false
152    runs-on: windows-latest
153    steps:
154    - name: Install ninja
155      run: choco install -y ninja
156    - name: Install Flex & Bison
157      run: |
158        curl -O https://svn.reactos.org/storage/vperevertkin/flexbison.7z
159        7z x flexbison.7z -O${{github.workspace}}\bin
160        echo "${{github.workspace}}\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
161        echo "BISON_PKGDATADIR=${{github.workspace}}\bin\share\bison" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
162        echo "M4=${{github.workspace}}\bin\m4.exe" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
163    - name: Activate VS cmd (arm)
164      if: ${{ matrix.arch == 'arm' }}
165      uses: ilammy/msvc-dev-cmd@v1
166      with:
167        arch: amd64_arm
168        sdk: 10.0.22621.0   # Windows SDK 10.0.26100.0 dropped support for 32-bit ARM
169        toolset: ${{matrix.toolset}}
170    - name: Activate VS cmd (arm64)
171      if: ${{ matrix.arch == 'arm64' }}
172      uses: ilammy/msvc-dev-cmd@v1
173      with:
174        arch: amd64_arm64
175        toolset: ${{matrix.toolset}}
176    - name: Source checkout
177      uses: actions/checkout@v4
178      with:
179        path: src
180    - name: Configure
181      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
182    - name: Build base module
183      if: ${{ matrix.arch == 'arm' }}
184      run: cmake --build build --target base/all
185    - name: Build control panel applets
186      if: ${{ matrix.arch == 'arm' }}
187      run: cmake --build build --target dll/cpl/all
188    - name: Build rosapps
189      if: ${{ matrix.arch == 'arm' }}
190      run: cmake --build build --target modules/rosapps/all
191    - name: Build subsystems
192      if: ${{ matrix.arch == 'arm' }}
193      run: cmake --build build --target subsystems/all
194    - name: Build some applications (arm64)
195      if: ${{ matrix.arch == 'arm64' }}
196      run: cmake --build build --target calc magnify mstsc notepad osk regedit taskmgr winmine wordpad base/applications/screensavers/all -- -k0
197    - name: Upload compiled binaries
198      uses: actions/upload-artifact@v4
199      with:
200        name: reactos-msvc${{matrix.toolset}}-${{matrix.arch}}-${{matrix.config}}-${{github.sha}}
201        path: |
202          build/base
203          build/dll/cpl
204          build/modules/rosapps
205          build/subsystems
206          !**/CMakeFiles
207          !**/cmake_install.cmake
208          !**/*.asm
209          !**/*.bin
210          !**/*.c
211          !**/*.def
212          !**/*.exp
213          !**/*.h
214          !**/*.lib
215          !**/*.mc
216          !**/*.obj
217          !**/*.rc
218          !**/*.tlb
219    - name: Upload debug symbols
220      if: ${{ matrix.config == 'Debug' }}
221      uses: actions/upload-artifact@v4
222      with:
223        name: reactos-syms-msvc${{matrix.toolset}}-${{matrix.arch}}-${{matrix.config}}-${{github.sha}}
224        path: build/msvc_pdb
225
226  # FIXME: Does not boot on toolset 14.1, 14.3+ is untested
227  build-clang-cl:
228    strategy:
229      matrix:
230        arch: [i386, amd64]
231        config: [Debug, Release]
232      fail-fast: false
233    runs-on: windows-latest
234    steps:
235    - name: Install ninja
236      run: choco install -y ninja
237    - name: Install LLVM
238      run: |
239        choco install -y --allow-downgrade llvm --version 13.0.1
240        echo "LLVM_PATH=${env:PROGRAMFILES}\llvm\bin" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
241    - name: Install Flex & Bison
242      run: |
243        curl -O https://svn.reactos.org/storage/vperevertkin/flexbison.7z
244        7z x flexbison.7z -O${{github.workspace}}\bin
245        echo "${{github.workspace}}\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
246        echo "BISON_PKGDATADIR=${{github.workspace}}\bin\share\bison" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
247        echo "M4=${{github.workspace}}\bin\m4.exe" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
248    - name: Activate VS cmd (x86)
249      if: ${{ matrix.arch == 'i386' }}
250      uses: ilammy/msvc-dev-cmd@v1
251      with:
252        arch: amd64_x86
253        toolset: '14'
254    - name: Activate VS cmd (amd64)
255      if: ${{ matrix.arch == 'amd64' }}
256      uses: ilammy/msvc-dev-cmd@v1
257      with:
258        arch: amd64
259        toolset: '14'
260    - name: Add LLVM to PATH
261      run: echo "${env:LLVM_PATH}" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
262    - name: Source checkout
263      uses: actions/checkout@v4
264      with:
265        path: src
266    - name: Configure
267      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
268    - name: Build
269      run: cmake --build build -- -k0
270    - name: Generate ISOs
271      run: cmake --build build --target bootcd --target livecd
272    - name: Upload ISOs
273      uses: actions/upload-artifact@v4
274      with:
275        name: reactos-clang-cl-${{matrix.arch}}-${{matrix.config}}-${{github.sha}}
276        path: |
277          build/bootcd.iso
278          build/livecd.iso
279    - name: Upload debug symbols
280      if: ${{ matrix.config == 'Debug' }}
281      uses: actions/upload-artifact@v4
282      with:
283        name: reactos-syms-clang-cl-${{matrix.arch}}-${{matrix.config}}-${{github.sha}}
284        path: build/msvc_pdb
285
286  build-msbuild-i386:
287    name: MSBuild (i386)
288    runs-on: windows-latest
289    steps:
290    - name: Install Flex and Bison
291      run: |
292        curl -O https://svn.reactos.org/storage/vperevertkin/flexbison.7z
293        7z x flexbison.7z -O${{github.workspace}}\bin
294        echo "${{github.workspace}}\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
295        echo "BISON_PKGDATADIR=${{github.workspace}}\bin\share\bison" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
296        echo "M4=${{github.workspace}}\bin\m4.exe" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
297    - name: Add CL to PATH
298      uses: ilammy/msvc-dev-cmd@v1
299      with:
300        arch: amd64_x86
301    - uses: actions/checkout@v4
302      with:
303        path: src
304    - name: Configure
305      run: |
306        mkdir build
307        cd build
308        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
309    - name: Build
310      run: cmake --build ${{github.workspace}}\build --target bootcd --target livecd
311