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