diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 32703836..dcda8a95 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -3,35 +3,48 @@ name: Linux on: [push, pull_request] jobs: - cmake-minimum: + headers: + name: Build and cache Headers runs-on: ${{ matrix.OS }} strategy: matrix: - OS: [ubuntu-18.04] - COMPILER: [gcc-7, gcc-8, clang-8, clang-10] - EXT: [ON, OFF] + OS: [ubuntu-18.04, ubuntu-20.04] + COMPILER: [gcc] + EXT: [ON] GEN: [Unix Makefiles] - CONFIG: [Debug, Release] - STD: [99, 11] - BIN: [32, 64] - CMAKE: [3.1.3, 3.21.2] + CONFIG: [Release] + STD: [99] + BIN: [64] + CMAKE: [3.21.2] env: CMAKE_URL: https://github.com/Kitware/CMake/releases/download/v${{ matrix.CMAKE }}/cmake-${{ matrix.CMAKE }}-Linux-x86_64.tar.gz CMAKE_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/cmake CTEST_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/ctest - steps: - - name: Checkout OpenCL-ICD-Loader - uses: actions/checkout@v2 + - name: Get sha of Headers + id: get-sha + run: | + echo ::set-output name=sha::$( curl -u "u:${{github.token}}" https://api.github.com/repos/KhronosGroup/OpenCL-Headers/git/ref/heads/main | jq .object.sha | tr -d '"' ) + + - uses: actions/cache@v2 + name: Cache Headers + id: headers + env: + cache-name: cache-headers + with: + path: external/OpenCL-Headers/install + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ steps.get-sha.outputs.sha }} - name: Checkout OpenCL-Headers + if: steps.headers.outputs.cache-hit != 'true' uses: actions/checkout@v2 with: repository: KhronosGroup/OpenCL-Headers path: external/OpenCL-Headers - name: Create Build Environment + if: steps.headers.outputs.cache-hit != 'true' run: sudo apt-get update -q; if [[ "${{matrix.GEN}}" =~ "Ninja" && ! `which ninja` ]]; then sudo apt install -y ninja-build; fi; sudo apt install -y ${{matrix.COMPILER}}; @@ -40,9 +53,9 @@ jobs: mkdir -p /opt/Kitware/CMake; wget -c $CMAKE_URL -O - | tar -xz --directory /opt/Kitware/CMake; mv /opt/Kitware/CMake/cmake-${{ matrix.CMAKE }}-* /opt/Kitware/CMake/${{ matrix.CMAKE }} - # Install Ninja only if it's the selected generator and it's not available. - + - name: Build & install OpenCL-Headers + if: steps.headers.outputs.cache-hit != 'true' run: $CMAKE_EXE -G "${{matrix.GEN}}" -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}} @@ -59,6 +72,55 @@ jobs: -- -j`nproc` + + cmake-minimum: + needs: [headers] + runs-on: ${{ matrix.OS }} + strategy: + matrix: + OS: [ubuntu-18.04] + COMPILER: [gcc-7, gcc-8, clang-8, clang-10] + EXT: [ON, OFF] + GEN: [Unix Makefiles] + CONFIG: [Debug, Release] + STD: [99, 11] + BIN: [32, 64] + CMAKE: [3.1.3, 3.21.2] + env: + CMAKE_URL: https://github.com/Kitware/CMake/releases/download/v${{ matrix.CMAKE }}/cmake-${{ matrix.CMAKE }}-Linux-x86_64.tar.gz + CMAKE_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/cmake + CTEST_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/ctest + + + steps: + - name: Checkout OpenCL-ICD-Loader + uses: actions/checkout@v2 + + - name: Get sha of Headers + id: get-sha + run: | + echo ::set-output name=sha::$( curl -u "u:${{github.token}}" https://api.github.com/repos/KhronosGroup/OpenCL-Headers/git/ref/heads/main | jq .object.sha | tr -d '"' ) + + - uses: actions/cache@v2 + name: Restore Headers + id: headers + env: + cache-name: cache-headers + with: + path: external/OpenCL-Headers/install + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ steps.get-sha.outputs.sha }} + + - name: Create Build Environment + run: sudo apt-get update -q; + if [[ "${{matrix.GEN}}" =~ "Ninja" && ! `which ninja` ]]; then sudo apt install -y ninja-build; fi; + sudo apt install -y ${{matrix.COMPILER}}; + if [[ "${{matrix.BIN}}" == "32" && "${{matrix.COMPILER}}" =~ "gcc" ]]; then sudo apt install -y ${{matrix.COMPILER}}-multilib; fi; + if [[ "${{matrix.BIN}}" == "32" && "${{matrix.COMPILER}}" =~ "clang" ]]; then sudo apt install -y gcc-multilib ; fi; + mkdir -p /opt/Kitware/CMake; + wget -c $CMAKE_URL -O - | tar -xz --directory /opt/Kitware/CMake; + mv /opt/Kitware/CMake/cmake-${{ matrix.CMAKE }}-* /opt/Kitware/CMake/${{ matrix.CMAKE }} + # Install Ninja only if it's the selected generator and it's not available. + - name: Configure shell: bash run: $CMAKE_EXE @@ -137,6 +199,7 @@ jobs: cmake-latest: + needs: [headers] runs-on: ${{ matrix.OS }} strategy: matrix: @@ -157,11 +220,19 @@ jobs: - name: Checkout OpenCL-ICD-Loader uses: actions/checkout@v2 - - name: Checkout OpenCL-Headers - uses: actions/checkout@v2 + - name: Get sha of Headers + id: get-sha + run: | + echo ::set-output name=sha::$( curl -u "u:${{github.token}}" https://api.github.com/repos/KhronosGroup/OpenCL-Headers/git/ref/heads/main | jq .object.sha | tr -d '"' ) + + - uses: actions/cache@v2 + name: Restore Headers + id: headers + env: + cache-name: cache-headers with: - repository: KhronosGroup/OpenCL-Headers - path: external/OpenCL-Headers + path: external/OpenCL-Headers/install + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ steps.get-sha.outputs.sha }} - name: Create Build Environment run: sudo apt-get update -q; @@ -176,23 +247,6 @@ jobs: mv /opt/Kitware/CMake/cmake-${{ matrix.CMAKE }}-* /opt/Kitware/CMake/${{ matrix.CMAKE }} # Install Ninja only if it's the selected generator and it's not available. - - name: Build & install OpenCL-Headers - run: $CMAKE_EXE - -G "${{matrix.GEN}}" - -D CMAKE_C_FLAGS="-w -m${{matrix.BIN}}" - -D CMAKE_C_COMPILER=${{matrix.COMPILER}} - -D CMAKE_C_STANDARD=${{matrix.STD}} - -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} - -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-Headers/install - -B $GITHUB_WORKSPACE/external/OpenCL-Headers/build - -S $GITHUB_WORKSPACE/external/OpenCL-Headers; - $CMAKE_EXE - --build $GITHUB_WORKSPACE/external/OpenCL-Headers/build - --target install - --config Release - -- - -j`nproc` - - name: Configure shell: bash run: $CMAKE_EXE diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 4144a2bb..5c1efd0e 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -3,33 +3,48 @@ name: MacOS on: [push, pull_request] jobs: - macos-gcc: + + headers: + name: Build and cache Headers runs-on: macos-latest strategy: matrix: - VER: [9, 10, 11] - EXT: [ON, OFF] - GEN: [Xcode, Ninja Multi-Config] - STD: [99, 11] # 90 results in errors + VER: [11] + EXT: [ON] + GEN: [Xcode] + STD: [11] # 90 results in errors steps: - - name: Checkout OpenCL-ICD-Loader - uses: actions/checkout@v2 + - name: Get sha of Headers + id: get-sha + run: | + echo ::set-output name=sha::$( curl -u "u:${{github.token}}" https://api.github.com/repos/KhronosGroup/OpenCL-Headers/git/ref/heads/main | jq .object.sha | tr -d '"' ) + + - uses: actions/cache@v2 + name: Cache Headers + id: headers + env: + cache-name: cache-headers + with: + path: external/OpenCL-Headers/install + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ steps.get-sha.outputs.sha }} - name: Checkout OpenCL-Headers + if: steps.headers.outputs.cache-hit != 'true' uses: actions/checkout@v2 with: repository: KhronosGroup/OpenCL-Headers path: external/OpenCL-Headers - name: Create Build Environment + if: steps.headers.outputs.cache-hit != 'true' run: | cmake -E make_directory $GITHUB_WORKSPACE/build; cmake -E make_directory $GITHUB_WORKSPACE/install; if [[ "${{matrix.GEN}}" == "Ninja Multi-Config" && ! `which ninja` ]]; then brew install ninja; fi; - # Install Ninja only if it's the selected generator and it's not available. - name: Build & install OpenCL-Headers + if: steps.headers.outputs.cache-hit != 'true' run: cmake -G "${{matrix.GEN}}" -D CMAKE_C_FLAGS="-w" @@ -45,6 +60,41 @@ jobs: --config Release --parallel `sysctl -n hw.logicalcpu` + macos-gcc: + needs: [headers] + runs-on: macos-latest + strategy: + matrix: + VER: [9, 10, 11] + EXT: [ON, OFF] + GEN: [Xcode, Ninja Multi-Config] + STD: [99, 11] # 90 results in errors + + steps: + - name: Checkout OpenCL-ICD-Loader + uses: actions/checkout@v2 + + - name: Get sha of Headers + id: get-sha + run: | + echo ::set-output name=sha::$( curl -u "u:${{github.token}}" https://api.github.com/repos/KhronosGroup/OpenCL-Headers/git/ref/heads/main | jq .object.sha | tr -d '"' ) + + - uses: actions/cache@v2 + name: Restore Headers + id: headers + env: + cache-name: cache-headers + with: + path: external/OpenCL-Headers/install + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ steps.get-sha.outputs.sha }} + + - name: Create Build Environment + run: | + cmake -E make_directory $GITHUB_WORKSPACE/build; + cmake -E make_directory $GITHUB_WORKSPACE/install; + if [[ "${{matrix.GEN}}" == "Ninja Multi-Config" && ! `which ninja` ]]; then brew install ninja; fi; + # Install Ninja only if it's the selected generator and it's not available. + - name: Configure CMake # no -Werror during configuration because: # warning: ISO C forbids assignment between function pointer and ‘void *’ [-Wpedantic] @@ -93,4 +143,4 @@ jobs: if: matrix.GEN == 'Ninja Multi-Config' shell: bash run: | - cmake --build $GITHUB_WORKSPACE/build --config Release --target install \ No newline at end of file + cmake --build $GITHUB_WORKSPACE/build --config Release --target install diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index f084fa5a..11cb0346 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -3,15 +3,17 @@ name: Windows on: [push, pull_request] jobs: - msvc: + + headers: + name: Build and cache Headers runs-on: windows-2022 strategy: matrix: - VER: [v141, v142, v143] - EXT: [ON, OFF] - GEN: [Visual Studio 17 2022, Ninja Multi-Config] - BIN: [x64, x86] - STD: [90, 11, 17] + VER: [v143] + EXT: [ON] + GEN: [Visual Studio 17 2022] + BIN: [x64] + STD: [17] CMAKE: [3.22.0] env: CMAKE_URL: https://github.com/Kitware/CMake/releases/download/v${{matrix.CMAKE}}/cmake-${{matrix.CMAKE}}-windows-x86_64.zip @@ -21,16 +23,29 @@ jobs: NINJA_EXE: C:\Tools\Ninja\ninja.exe steps: - - name: Checkout OpenCL-ICD-Loader - uses: actions/checkout@v2 + - name: Get sha of Headers + id: get-sha + run: | + echo ::set-output name=sha::$( curl -u "u:${{github.token}}" https://api.github.com/repos/KhronosGroup/OpenCL-Headers/git/ref/heads/main | jq .object.sha | tr -d '"' ) + + - uses: actions/cache@v2 + name: Cache Headers + id: headers + env: + cache-name: cache-headers + with: + path: external/OpenCL-Headers/install + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ steps.get-sha.outputs.sha }} - name: Checkout OpenCL-Headers + if: steps.headers.outputs.cache-hit != 'true' uses: actions/checkout@v2 with: repository: KhronosGroup/OpenCL-Headers path: external/OpenCL-Headers - name: Create Build Environment + if: steps.headers.outputs.cache-hit != 'true' shell: pwsh run: | Invoke-WebRequest ${env:CMAKE_URL} -OutFile ~\Downloads\cmake-${{matrix.CMAKE}}-windows-x86_64.zip @@ -42,8 +57,9 @@ jobs: & ${env:CMAKE_EXE} --version & ${env:NINJA_EXE} --version + - name: Build & install OpenCL-Headers (MSBuild) - if: matrix.GEN == 'Visual Studio 17 2022' + if: steps.headers.outputs.cache-hit != 'true' shell: cmd run: | set C_FLAGS="/W4 /WX" @@ -51,18 +67,54 @@ jobs: %CMAKE_EXE% -G "${{matrix.GEN}}" -A %BIN% -T ${{matrix.VER}} -D CMAKE_C_FLAGS=%C_FLAGS% -D CMAKE_C_STANDARD=${{matrix.STD}} -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} -D CMAKE_INSTALL_PREFIX=%GITHUB_WORKSPACE%\external\OpenCL-Headers\install -S %GITHUB_WORKSPACE%\external\OpenCL-Headers -B %GITHUB_WORKSPACE%\external\OpenCL-Headers\build %CMAKE_EXE% --build %GITHUB_WORKSPACE%/external/OpenCL-Headers/build --target install --config Release -- /verbosity:minimal /maxCpuCount /noLogo - - name: Build & install OpenCL-Headers (Ninja Multi-Config) - if: matrix.GEN == 'Ninja Multi-Config' - shell: cmd + + msvc: + needs: [headers] + runs-on: windows-2022 + strategy: + matrix: + VER: [v141, v142, v143] + EXT: [ON, OFF] + GEN: [Visual Studio 17 2022, Ninja Multi-Config] + BIN: [x64, x86] + STD: [90, 11, 17] + CMAKE: [3.22.0] + env: + CMAKE_URL: https://github.com/Kitware/CMake/releases/download/v${{matrix.CMAKE}}/cmake-${{matrix.CMAKE}}-windows-x86_64.zip + CMAKE_EXE: C:\Tools\Kitware\CMake\${{matrix.CMAKE}}\bin\cmake.exe + CTEST_EXE: C:\Tools\Kitware\CMake\${{matrix.CMAKE}}\bin\ctest.exe + NINJA_URL: https://github.com/ninja-build/ninja/releases/download/v1.10.2/ninja-win.zip + NINJA_EXE: C:\Tools\Ninja\ninja.exe + + steps: + - name: Checkout OpenCL-ICD-Loader + uses: actions/checkout@v2 + + - name: Get sha of Headers + id: get-sha run: | - set C_FLAGS="/W4 /WX" - if /I "${{matrix.VER}}"=="v140" (set VER=14.0) - if /I "${{matrix.VER}}"=="v141" (set VER=14.1) - if /I "${{matrix.VER}}"=="v142" (set VER=14.2) - if /I "${{matrix.VER}}"=="v143" (set VER=14.3) - call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{matrix.BIN}} /vcvars_ver=%VER% - %CMAKE_EXE% -G "${{matrix.GEN}}" -D CMAKE_MAKE_PROGRAM=%NINJA_EXE% -D CMAKE_C_FLAGS=%C_FLAGS% -D CMAKE_C_STANDARD=${{matrix.STD}} -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} -D CMAKE_INSTALL_PREFIX=%GITHUB_WORKSPACE%\external\OpenCL-Headers\install -S %GITHUB_WORKSPACE%\external\OpenCL-Headers -B %GITHUB_WORKSPACE%\external\OpenCL-Headers\build - %CMAKE_EXE% --build %GITHUB_WORKSPACE%/external/OpenCL-Headers/build --target install -- -j%NUMBER_OF_PROCESSORS% + echo ::set-output name=sha::$( curl -u "u:${{github.token}}" https://api.github.com/repos/KhronosGroup/OpenCL-Headers/git/ref/heads/main | jq .object.sha | tr -d '"' ) + + - uses: actions/cache@v2 + name: Restore Headers + id: headers + env: + cache-name: cache-headers + with: + path: external/OpenCL-Headers/install + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ steps.get-sha.outputs.sha }} + + - name: Create Build Environment + shell: pwsh + run: | + Invoke-WebRequest ${env:CMAKE_URL} -OutFile ~\Downloads\cmake-${{matrix.CMAKE}}-windows-x86_64.zip + Expand-Archive ~\Downloads\cmake-${{matrix.CMAKE}}-windows-x86_64.zip -DestinationPath C:\Tools\Kitware\CMake\ + Rename-Item C:\Tools\Kitware\CMake\* ${{matrix.CMAKE}} + Invoke-WebRequest ${env:NINJA_URL} -OutFile ~\Downloads\ninja-win.zip + Expand-Archive ~\Downloads\ninja-win.zip -DestinationPath C:\Tools\Ninja\ + Remove-Item ~\Downloads\* + & ${env:CMAKE_EXE} --version + & ${env:NINJA_EXE} --version - name: Configure (MSBuild) if: matrix.GEN == 'Visual Studio 17 2022'