1name: Linux 2 3on: [push, pull_request] 4 5env: 6 OPENCL_PKGCONFIG_PATHS: ${{ github.workspace }}/install/share/pkgconfig:${{ github.workspace }}/external/OpenCL-Headers/install/share/pkgconfig:${{ github.workspace }}/external/OpenCL-ICD-Loader/install/lib/pkgconfig 7 8jobs: 9 cmake-minimum: 10 runs-on: ${{ matrix.OS }} 11 container: streamhpc/opencl-sdk-base:ubuntu-18.04-20220127 12 strategy: 13 matrix: 14 OS: [ubuntu-20.04] 15 VER: [7] # gcc-8, clang-8, clang-10 16 EXT: [ON, OFF] 17 GEN: [Unix Makefiles] 18 CONFIG: [Debug, Release] 19 STD: [11, 14] 20 BIN: [64] # Temporarily disable cross-compilation (will need toolchain files) 21 CMAKE: [3.1.3] 22 env: 23 CMAKE_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/cmake 24 CTEST_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/ctest 25 # Workaround for https://github.com/actions/runner/issues/2058 26 OPENCL_PKGCONFIG_PATHS: /__w/OpenCL-CLHPP/OpenCL-CLHPP/install/share/pkgconfig:/__w/OpenCL-CLHPP/OpenCL-CLHPP/external/OpenCL-Headers/install/share/pkgconfig:/__w/OpenCL-CLHPP/OpenCL-CLHPP/external/OpenCL-ICD-Loader/install/lib/pkgconfig 27 28 29 steps: 30 - name: Checkout OpenCL-CLHPP 31 uses: actions/checkout@v3 32 with: 33 submodules: recursive 34 35 - name: Checkout OpenCL-Headers 36 uses: actions/checkout@v3 37 with: 38 repository: KhronosGroup/OpenCL-Headers 39 path: external/OpenCL-Headers 40 41 - name: Checkout OpenCL-ICD-Loader 42 uses: actions/checkout@v3 43 with: 44 repository: KhronosGroup/OpenCL-ICD-Loader 45 path: external/OpenCL-ICD-Loader 46 47 - name: Build & install OpenCL-Headers 48 run: $CMAKE_EXE 49 -G "${{matrix.GEN}}" 50 -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}} 51 -D CMAKE_C_FLAGS="-w -m${{matrix.BIN}}" 52 -D CMAKE_C_COMPILER=gcc-${{matrix.VER}} 53 -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} 54 -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-Headers/install 55 -D BUILD_TESTING=OFF 56 -B$GITHUB_WORKSPACE/external/OpenCL-Headers/build 57 -H$GITHUB_WORKSPACE/external/OpenCL-Headers && 58 $CMAKE_EXE 59 --build $GITHUB_WORKSPACE/external/OpenCL-Headers/build 60 --target install 61 -- 62 -j`nproc` 63 64 - name: Build & install OpenCL-ICD-Loader 65 run: $CMAKE_EXE 66 -G "${{matrix.GEN}}" 67 -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}} 68 -D CMAKE_C_FLAGS="-w -m${{matrix.BIN}}" 69 -D CMAKE_C_COMPILER=gcc-${{matrix.VER}} 70 -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} 71 -D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/external/OpenCL-Headers/install 72 -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install 73 -D BUILD_TESTING=OFF 74 -B$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/build 75 -H$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader && 76 $CMAKE_EXE 77 --build $GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/build 78 --target install 79 -- 80 -j`nproc` 81 82 - name: Configure 83 shell: bash 84 # no -Werror during configuration because: 85 # warning: ISO C forbids assignment between function pointer and ‘void *’ [-Wpedantic] 86 # warning: unused parameter [-Wunused-parameter] 87 run: 88 $CMAKE_EXE 89 -G "${{matrix.GEN}}" 90 -D BUILD_TESTING=ON 91 -D BUILD_EXAMPLES=ON 92 -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}} 93 -D CMAKE_CXX_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}" 94 -D CMAKE_CXX_COMPILER=g++-${{matrix.VER}} 95 -D CMAKE_CXX_STANDARD=${{matrix.STD}} 96 -D CMAKE_CXX_EXTENSIONS=${{matrix.EXT}} 97 -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install 98 -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install" 99 -B$GITHUB_WORKSPACE/build 100 -H$GITHUB_WORKSPACE 101 102 - name: Build 103 shell: bash 104 run: $CMAKE_EXE 105 --build $GITHUB_WORKSPACE/build 106 -- 107 -j`nproc` 108 109 - name: Test 110 working-directory: ${{runner.workspace}}/OpenCL-CLHPP/build 111 shell: bash 112 run: $CTEST_EXE --output-on-failure --parallel `nproc` 113 114 - name: Install 115 shell: bash 116 run: $CMAKE_EXE 117 --build $GITHUB_WORKSPACE/build 118 --target install 119 -- 120 -j`nproc` 121 122 - name: "Consume (standalone): Configure/Build/Test" 123 shell: bash 124 run: $CMAKE_EXE 125 -G "${{matrix.GEN}}" 126 -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}} 127 -D CMAKE_CXX_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}" 128 -D CMAKE_CXX_COMPILER=g++-${{matrix.VER}} 129 -D CMAKE_CXX_STANDARD=${{matrix.STD}} 130 -D CMAKE_CXX_EXTENSIONS=${{matrix.EXT}} 131 -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install;$GITHUB_WORKSPACE/install" 132 -B$GITHUB_WORKSPACE/build/downstream/bare 133 -H$GITHUB_WORKSPACE/tests/pkgconfig/bare ; 134 $CMAKE_EXE 135 --build $GITHUB_WORKSPACE/build/downstream/bare ; 136 cd $GITHUB_WORKSPACE/build/downstream/bare ; 137 $CTEST_EXE --output-on-failure 138 139 - name: "Consume (SDK): Configure/Build/Test" 140 shell: bash 141 run: $CMAKE_EXE -E make_directory $GITHUB_WORKSPACE/install/share/cmake/OpenCL ; 142 echo -e "include(\"$GITHUB_WORKSPACE/external/OpenCL-Headers/install/share/cmake/OpenCLHeaders/OpenCLHeadersTargets.cmake\")\ninclude(\"$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install/share/cmake/OpenCLICDLoader/OpenCLICDLoaderTargets.cmake\")\ninclude(\"\${CMAKE_CURRENT_LIST_DIR}/../OpenCLHeadersCpp/OpenCLHeadersCppTargets.cmake\")" > $GITHUB_WORKSPACE/install/share/cmake/OpenCL/OpenCLConfig.cmake ; 143 $CMAKE_EXE 144 -G "${{matrix.GEN}}" 145 -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}} 146 -D CMAKE_CXX_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}" 147 -D CMAKE_CXX_COMPILER=g++-${{matrix.VER}} 148 -D CMAKE_CXX_STANDARD=${{matrix.STD}} 149 -D CMAKE_CXX_EXTENSIONS=${{matrix.EXT}} 150 -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install;$GITHUB_WORKSPACE/install" 151 -B$GITHUB_WORKSPACE/build/downstream/sdk 152 -H$GITHUB_WORKSPACE/tests/pkgconfig/sdk ; 153 $CMAKE_EXE 154 --build $GITHUB_WORKSPACE/build/downstream/sdk ; 155 cd $GITHUB_WORKSPACE/build/downstream/sdk ; 156 $CTEST_EXE --output-on-failure 157 158 - name: Test pkg-config 159 shell: bash 160 run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" pkg-config OpenCL-CLHPP --cflags | grep -q "\-I$GITHUB_WORKSPACE/install/include" 161 162 - name: Test pkg-config dependency 163 shell: bash 164 run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" pkg-config OpenCL-CLHPP --cflags | grep -q "\-I$GITHUB_WORKSPACE/external/OpenCL-Headers/install/include" 165 166 167 168 169 170 cmake-latest: 171 runs-on: ${{ matrix.OS }} 172 strategy: 173 matrix: 174 OS : [ubuntu-20.04] 175 VER: [9, 11] # clang-11, clang-13 176 EXT: [ON, OFF] 177 GEN: [Ninja Multi-Config] 178 STD: [11, 14] 179 BIN: [64] # Temporarily disable cross-compilation (will need toolchain files) 180 CMAKE: [3.21.2] 181 env: 182 CMAKE_URL: https://github.com/Kitware/CMake/releases/download/v${{ matrix.CMAKE }}/cmake-${{ matrix.CMAKE }}-Linux-x86_64.tar.gz 183 CMAKE_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/cmake 184 CTEST_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/ctest 185 186 187 steps: 188 - name: Checkout OpenCL-CLHPP 189 uses: actions/checkout@v3 190 with: 191 submodules: recursive 192 193 - name: Checkout OpenCL-Headers 194 uses: actions/checkout@v3 195 with: 196 repository: KhronosGroup/OpenCL-Headers 197 path: external/OpenCL-Headers 198 199 - name: Checkout OpenCL-ICD-Loader 200 uses: actions/checkout@v3 201 with: 202 repository: KhronosGroup/OpenCL-ICD-Loader 203 path: external/OpenCL-ICD-Loader 204 205 - name: Create Build Environment 206 run: sudo apt-get update -q; 207 if [[ "${{matrix.GEN}}" =~ "Ninja" && ! `which ninja` ]]; then sudo apt install -y ninja-build; fi; 208 sudo apt install gcc-${{matrix.VER}} g++-${{matrix.VER}}; 209 if [[ "${{matrix.BIN}}" == "32" ]]; 210 then sudo apt install gcc-${COMPILER_VER}-multilib; 211 fi; 212 mkdir -p /opt/Kitware/CMake; 213 wget -c $CMAKE_URL -O - | tar -xz --directory /opt/Kitware/CMake; 214 mv /opt/Kitware/CMake/cmake-${{ matrix.CMAKE }}-* /opt/Kitware/CMake/${{ matrix.CMAKE }} 215 # Install Ninja only if it's the selected generator and it's not available. 216 217 - name: Build & install OpenCL-Headers 218 run: $CMAKE_EXE 219 -G "${{matrix.GEN}}" 220 -D CMAKE_C_FLAGS="-w -m${{matrix.BIN}}" 221 -D CMAKE_C_COMPILER=gcc-${{matrix.VER}} 222 -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} 223 -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-Headers/install 224 -D BUILD_TESTING=OFF 225 -B$GITHUB_WORKSPACE/external/OpenCL-Headers/build 226 -H$GITHUB_WORKSPACE/external/OpenCL-Headers && 227 $CMAKE_EXE 228 --build $GITHUB_WORKSPACE/external/OpenCL-Headers/build 229 --target install 230 --config Release 231 -- 232 -j`nproc` 233 234 - name: Build & install OpenCL-ICD-Loader 235 run: $CMAKE_EXE 236 -G "${{matrix.GEN}}" 237 -D CMAKE_C_FLAGS="-w -m${{matrix.BIN}}" 238 -D CMAKE_C_COMPILER=gcc-${{matrix.VER}} 239 -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} 240 -D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/external/OpenCL-Headers/install 241 -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install 242 -D BUILD_TESTING=OFF 243 -B$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/build 244 -H$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader && 245 $CMAKE_EXE 246 --build $GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/build 247 --target install 248 --config Release 249 -- 250 -j`nproc` 251 252 - name: Configure 253 shell: bash 254 # no -Werror during configuration because: 255 # warning: ISO C forbids assignment between function pointer and ‘void *’ [-Wpedantic] 256 # warning: unused parameter [-Wunused-parameter] 257 run: $CMAKE_EXE 258 -G "${{matrix.GEN}}" 259 -D BUILD_TESTING=ON 260 -D BUILD_EXAMPLES=ON 261 -D CMAKE_CXX_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}" 262 -D CMAKE_CXX_COMPILER=g++-${{matrix.VER}} 263 -D CMAKE_CXX_STANDARD=${{matrix.STD}} 264 -D CMAKE_CXX_EXTENSIONS=${{matrix.EXT}} 265 -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install 266 -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install" 267 -B$GITHUB_WORKSPACE/build 268 -H$GITHUB_WORKSPACE 269 270 - name: Build 271 shell: bash 272 run: | 273 $CMAKE_EXE --build $GITHUB_WORKSPACE/build --config Release -- -j`nproc`; 274 $CMAKE_EXE --build $GITHUB_WORKSPACE/build --config Debug -- -j`nproc` 275 276 - name: Test 277 working-directory: ${{runner.workspace}}/OpenCL-CLHPP/build 278 shell: bash 279 run: | 280 $CTEST_EXE --output-on-failure -C Release --parallel `nproc`; 281 $CTEST_EXE --output-on-failure -C Debug --parallel `nproc`; 282 283 - name: Install 284 shell: bash 285 run: $CMAKE_EXE 286 --build $GITHUB_WORKSPACE/build 287 --target install 288 --config Release 289 -- 290 -j`nproc` 291 292 - name: "Consume (standalone): Configure/Build/Test" 293 shell: bash 294 run: $CMAKE_EXE 295 -G "${{matrix.GEN}}" 296 -D CMAKE_CXX_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}" 297 -D CMAKE_CXX_COMPILER=g++-${{matrix.VER}} 298 -D CMAKE_CXX_STANDARD=${{matrix.STD}} 299 -D CMAKE_CXX_EXTENSIONS=${{matrix.EXT}} 300 -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install;$GITHUB_WORKSPACE/install" 301 -B$GITHUB_WORKSPACE/build/downstream/bare 302 -H$GITHUB_WORKSPACE/tests/pkgconfig/bare ; 303 $CMAKE_EXE --build $GITHUB_WORKSPACE/build/downstream/bare --config Release; 304 $CMAKE_EXE --build $GITHUB_WORKSPACE/build/downstream/bare --config Debug; 305 cd $GITHUB_WORKSPACE/build/downstream/bare; 306 $CTEST_EXE --output-on-failure -C Release; 307 $CTEST_EXE --output-on-failure -C Debug; 308 309 - name: "Consume (SDK): Configure/Build/Test" 310 shell: bash 311 run: $CMAKE_EXE -E make_directory $GITHUB_WORKSPACE/install/share/cmake/OpenCL ; 312 echo -e "include(\"$GITHUB_WORKSPACE/external/OpenCL-Headers/install/share/cmake/OpenCLHeaders/OpenCLHeadersTargets.cmake\")\ninclude(\"$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install/share/cmake/OpenCLICDLoader/OpenCLICDLoaderTargets.cmake\")\ninclude(\"\${CMAKE_CURRENT_LIST_DIR}/../OpenCLHeadersCpp/OpenCLHeadersCppTargets.cmake\")" > $GITHUB_WORKSPACE/install/share/cmake/OpenCL/OpenCLConfig.cmake ; 313 $CMAKE_EXE 314 -G "${{matrix.GEN}}" 315 -D CMAKE_CXX_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}" 316 -D CMAKE_CXX_COMPILER=g++-${{matrix.VER}} 317 -D CMAKE_CXX_STANDARD=${{matrix.STD}} 318 -D CMAKE_CXX_EXTENSIONS=${{matrix.EXT}} 319 -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install;$GITHUB_WORKSPACE/install" 320 -B$GITHUB_WORKSPACE/build/downstream/sdk 321 -H$GITHUB_WORKSPACE/tests/pkgconfig/sdk ; 322 $CMAKE_EXE --build $GITHUB_WORKSPACE/build/downstream/sdk --config Release; 323 $CMAKE_EXE --build $GITHUB_WORKSPACE/build/downstream/sdk --config Debug; 324 cd $GITHUB_WORKSPACE/build/downstream/sdk; 325 $CTEST_EXE --output-on-failure -C Release; 326 $CTEST_EXE --output-on-failure -C Debug; 327 328 - name: Test pkg-config 329 shell: bash 330 run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" pkg-config OpenCL-CLHPP --cflags | grep -q "\-I$GITHUB_WORKSPACE/install/include" 331 332 - name: Test pkg-config dependency 333 shell: bash 334 run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" pkg-config OpenCL-CLHPP --cflags | grep -q "\-I$GITHUB_WORKSPACE/external/OpenCL-Headers/install/include" 335