Merge branch 'main' into ewan/mutable-dispatch-combined #17
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Presubmit | |
on: [push, pull_request] | |
jobs: | |
linux: | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
shell: bash | |
strategy: | |
matrix: | |
CMAKE: [3.26.4] | |
COMPILER: | |
- C_NAME: gcc | |
CXX_NAME: g++ | |
VER: 11 | |
- C_NAME: gcc | |
CXX_NAME: g++ | |
VER: 13 | |
- C_NAME: clang | |
CXX_NAME: clang++ | |
VER: 14 | |
- C_NAME: clang | |
CXX_NAME: clang++ | |
VER: 16 | |
BIN: [64] | |
CXXSTD: [11, 17] | |
CONF: | |
- GEN: Unix Makefiles | |
CONFIG: Debug | |
- GEN: Unix Makefiles | |
CONFIG: Release | |
- GEN: Ninja Multi-Config | |
CONFIG: Release | |
IMAGE: | |
- khronosgroup/docker-images:opencl-sdk-base-ubuntu-22.04.20230717 | |
include: | |
- CMAKE: system | |
COMPILER: | |
C_NAME: gcc | |
CXX_NAME: g++ | |
VER: 9 | |
BIN: 64 | |
CXXSTD: 11 | |
CONF: | |
GEN: Unix Makefiles | |
CONFIG: Debug | |
IMAGE: khronosgroup/docker-images:opencl-sdk-base-ubuntu-20.04.20230717 | |
- CMAKE: system | |
COMPILER: | |
C_NAME: gcc | |
CXX_NAME: g++ | |
VER: 9 | |
BIN: 64 | |
CXXSTD: 11 | |
CONF: | |
GEN: Unix Makefiles | |
CONFIG: Release | |
IMAGE: khronosgroup/docker-images:opencl-sdk-base-ubuntu-20.04.20230717 | |
- CMAKE: system | |
COMPILER: | |
C_NAME: gcc | |
CXX_NAME: g++ | |
VER: 9 | |
BIN: 32 | |
CXXSTD: 11 | |
CONF: | |
GEN: Unix Makefiles | |
CONFIG: Debug | |
IMAGE: khronosgroup/docker-images:opencl-sdk-base-ubuntu-20.04.20230717 | |
- CMAKE: system | |
COMPILER: | |
C_NAME: gcc | |
CXX_NAME: g++ | |
VER: 9 | |
BIN: 32 | |
CXXSTD: 11 | |
CONF: | |
GEN: Unix Makefiles | |
CONFIG: Release | |
IMAGE: khronosgroup/docker-images:opencl-sdk-base-ubuntu-20.04.20230717 | |
container: ${{matrix.IMAGE}} | |
env: | |
CMAKE_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/cmake | |
CPACK_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/cpack | |
CTEST_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/ctest | |
DEB_INSTALLATION_PATH: /usr | |
CC: ${{matrix.COMPILER.C_NAME}}-${{matrix.COMPILER.VER}} | |
CXX: ${{matrix.COMPILER.CXX_NAME}}-${{matrix.COMPILER.VER}} | |
CFLAGS: -Wall -Wextra -pedantic -Werror -m${{matrix.BIN}} | |
CXXFLAGS: -Wall -Wextra -pedantic -Werror -m${{matrix.BIN}} | |
steps: | |
- name: Install system CMake | |
if: ${{matrix.CMAKE}} == 'system' | |
run: apt-get update -qq && apt-get install -y cmake && | |
echo "CMAKE_EXE=cmake" >> "$GITHUB_ENV" && | |
echo "CPACK_EXE=cpack" >> "$GITHUB_ENV" && | |
echo "CTEST_EXE=ctest" >> "$GITHUB_ENV" | |
- name: Checkout OpenCL-CLHPP | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Checkout OpenCL-Headers | |
uses: actions/checkout@v4 | |
with: | |
path: external/OpenCL-Headers | |
repository: KhronosGroup/OpenCL-Headers | |
- name: Checkout OpenCL-ICD-Loader | |
uses: actions/checkout@v4 | |
with: | |
path: external/OpenCL-ICD-Loader | |
repository: KhronosGroup/OpenCL-ICD-Loader | |
- name: Configure, install & package OpenCL-Headers | |
run: $CMAKE_EXE | |
-G "${{matrix.CONF.GEN}}" | |
`if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; then echo "-D CMAKE_BUILD_TYPE=${{matrix.CONF.CONFIG}}"; fi` | |
-D CMAKE_C_EXTENSIONS=OFF | |
-D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-Headers/install | |
-D CPACK_PACKAGING_INSTALL_PREFIX=$DEB_INSTALLATION_PATH | |
-D BUILD_TESTING=OFF | |
-S $GITHUB_WORKSPACE/external/OpenCL-Headers | |
-B $GITHUB_WORKSPACE/external/OpenCL-Headers/build && | |
$CMAKE_EXE | |
--build $GITHUB_WORKSPACE/external/OpenCL-Headers/build | |
--target install | |
--parallel `nproc` && | |
$CPACK_EXE | |
--config "$GITHUB_WORKSPACE/external/OpenCL-Headers/build/CPackConfig.cmake" | |
-G DEB | |
-C ${{matrix.CONF.CONFIG}} | |
-B "$GITHUB_WORKSPACE/external/OpenCL-Headers/package-deb" | |
- name: Configure & install OpenCL-ICD-Loader | |
run: $CMAKE_EXE | |
-G "${{matrix.CONF.GEN}}" | |
`if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; then echo "-D CMAKE_BUILD_TYPE=${{matrix.CONF.CONFIG}}"; fi` | |
-D CMAKE_C_EXTENSIONS=OFF | |
-D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install | |
-D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/external/OpenCL-Headers/install | |
-D BUILD_TESTING=OFF | |
-S $GITHUB_WORKSPACE/external/OpenCL-ICD-Loader | |
-B $GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/build && | |
$CMAKE_EXE | |
--build $GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/build | |
--target install | |
--parallel `nproc` | |
- name: Configure | |
run: $CMAKE_EXE | |
-G "${{matrix.CONF.GEN}}" | |
-D BUILD_TESTING=ON | |
-D BUILD_EXAMPLES=ON | |
`if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; then echo "-D CMAKE_BUILD_TYPE=${{matrix.CONF.CONFIG}}"; fi` | |
-D CMAKE_CXX_STANDARD=${{matrix.CXXSTD}} | |
-D CMAKE_CXX_EXTENSIONS=OFF | |
-D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install | |
-D CPACK_PACKAGING_INSTALL_PREFIX=$DEB_INSTALLATION_PATH | |
-D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install" | |
-S $GITHUB_WORKSPACE | |
-B $GITHUB_WORKSPACE/build | |
- name: Build | |
run: if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; | |
then | |
$CMAKE_EXE --build $GITHUB_WORKSPACE/build --config ${{matrix.CONF.CONFIG}} --parallel `nproc`; | |
else | |
$CMAKE_EXE --build $GITHUB_WORKSPACE/build --config Debug; | |
$CMAKE_EXE --build $GITHUB_WORKSPACE/build --config Release; | |
fi | |
- name: Test | |
working-directory: ${{runner.workspace}}/OpenCL-CLHPP/build | |
run: if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; | |
then | |
$CTEST_EXE --output-on-failure --no-tests=error --parallel `nproc`; | |
else | |
$CTEST_EXE --output-on-failure --no-tests=error -C Debug --parallel `nproc`; | |
$CTEST_EXE --output-on-failure --no-tests=error -C Release --parallel `nproc`; | |
fi | |
- name: Package DEB | |
run: $CPACK_EXE | |
--config "$GITHUB_WORKSPACE/build/CPackConfig.cmake" | |
-G DEB | |
-C ${{matrix.CONF.CONFIG}} | |
-B "$GITHUB_WORKSPACE/package-deb" | |
- name: Consume (DEB) | |
run: dpkg -i $GITHUB_WORKSPACE/external/OpenCL-Headers/package-deb/*.deb && | |
dpkg -i $GITHUB_WORKSPACE/package-deb/*.deb && | |
$CMAKE_EXE | |
-G "${{matrix.CONF.GEN}}" | |
`if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; then echo "-D CMAKE_BUILD_TYPE=${{matrix.CONF.CONFIG}}"; fi` | |
-D CMAKE_CXX_STANDARD=${{matrix.CXXSTD}} | |
-D CMAKE_CXX_EXTENSIONS=OFF | |
-D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install | |
-S $GITHUB_WORKSPACE/tests/pkgconfig/bare | |
-B $GITHUB_WORKSPACE/build_package && | |
if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; | |
then | |
$CMAKE_EXE --build $GITHUB_WORKSPACE/build_package --config ${{matrix.CONF.CONFIG}} --parallel `nproc`; | |
else | |
$CMAKE_EXE --build $GITHUB_WORKSPACE/build_package --config Debug; | |
$CMAKE_EXE --build $GITHUB_WORKSPACE/build_package --config Release; | |
fi | |
- name: Run consume test (DEB) | |
if: matrix.BIN != 32 | |
working-directory: ${{runner.workspace}}/OpenCL-CLHPP/build_package | |
run: if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; | |
then | |
$CTEST_EXE -C ${{matrix.CONF.CONFIG}} --output-on-failure --no-tests=error --parallel `nproc`; | |
else | |
$CTEST_EXE -C Debug --output-on-failure --no-tests=error --parallel `nproc`; | |
$CTEST_EXE -C Release --output-on-failure --no-tests=error --parallel `nproc`; | |
fi | |
- name: Test pkg-config (DEB) | |
# /usr/include is already on the include search path, | |
# we don't expect any output | |
run: | | |
# First check if OpenCL-Headers is locatable | |
pkg-config OpenCL-CLHPP --cflags | |
# Then check if the output is empty | |
if [[ "$(pkg-config OpenCL-CLHPP --cflags)" ]]; | |
then | |
exit 1; | |
fi; | |
- name: Uninstall (DEB) | |
run: apt-get remove -y opencl-c-headers opencl-clhpp-headers | |
- name: Test install | |
run: $CMAKE_EXE --build $GITHUB_WORKSPACE/build --target install --config ${{matrix.CONF.CONFIG}} --parallel `nproc` | |
- name: Consume (install) | |
run: $CMAKE_EXE | |
-G "${{matrix.CONF.GEN}}" | |
`if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; then echo "-D CMAKE_BUILD_TYPE=${{matrix.CONF.CONFIG}}"; fi` | |
-D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install;$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/install" | |
-S $GITHUB_WORKSPACE/tests/pkgconfig/bare | |
-B $GITHUB_WORKSPACE/build_install && | |
if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; | |
then | |
$CMAKE_EXE --build $GITHUB_WORKSPACE/build_install --parallel `nproc`; | |
else | |
$CMAKE_EXE --build $GITHUB_WORKSPACE/build_install --config Debug; | |
$CMAKE_EXE --build $GITHUB_WORKSPACE/build_install --config Release; | |
fi | |
- name: Run consume test (install) | |
if: matrix.BIN != 32 | |
working-directory: ${{runner.workspace}}/OpenCL-CLHPP/build_install | |
run: if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; | |
then | |
$CTEST_EXE -C ${{matrix.CONF.CONFIG}} --output-on-failure --no-tests=error --parallel `nproc`; | |
else | |
$CTEST_EXE -C Debug --output-on-failure --no-tests=error --parallel `nproc`; | |
$CTEST_EXE -C Release --output-on-failure --no-tests=error --parallel `nproc`; | |
fi | |
- name: Test pkg-config (install) | |
run: PKG_CONFIG_PATH=$GITHUB_WORKSPACE/install/share/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-Headers/install/share/pkgconfig | |
pkg-config OpenCL-CLHPP --cflags | grep -q "\-I$GITHUB_WORKSPACE/install/include" | |
windows: | |
runs-on: windows-latest | |
defaults: | |
run: | |
shell: pwsh | |
strategy: | |
matrix: | |
VER: [v142, v143, clangcl] | |
GEN: [Visual Studio 17 2022, Ninja Multi-Config] | |
BIN: [x64] | |
CXXSTD: [11, 17] | |
exclude: | |
- VER: clangcl | |
GEN: Ninja Multi-Config | |
include: | |
- VER: v142 | |
GEN: Visual Studio 17 2022 | |
BIN: x86 | |
CXXSTD: 11 | |
env: | |
NINJA_URL: https://github.com/ninja-build/ninja/releases/download/v1.10.2/ninja-win.zip | |
NINJA_ROOT: C:\Tools\Ninja | |
VS_ROOT: 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise' | |
UseMultiToolTask: true # Better parallel MSBuild execution | |
EnforceProcessCountAcrossBuilds: 'true' # -=- | |
MultiProcMaxCount: '3' # -=- | |
# C4152: nonstandard extension, function/data pointer conversion in expression | |
# C4201: nonstandard extension used: nameless struct/union | |
# C4310: cast truncates constant value | |
CFLAGS: /W4 /WX /wd4152 /wd4201 /wd4310 | |
CXXFLAGS: /W4 /WX | |
steps: | |
- name: Cache Ninja install | |
if: matrix.GEN == 'Ninja Multi-Config' | |
id: ninja-install | |
uses: actions/cache@v4 | |
with: | |
path: | | |
C:\Tools\Ninja | |
key: ${{runner.os}}-ninja-${{env.NINJA_URL}} | |
- name: Install Ninja | |
if: matrix.GEN == 'Ninja Multi-Config' && steps.ninja-install.outputs.cache-hit != 'true' | |
run: | | |
Invoke-WebRequest ${env:NINJA_URL} -OutFile ~\Downloads\ninja-win.zip | |
Expand-Archive ~\Downloads\ninja-win.zip -DestinationPath ${env:NINJA_ROOT}\ | |
Remove-Item ~\Downloads\* | |
- name: Checkout OpenCL-CLHPP | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Checkout OpenCL-Headers | |
uses: actions/checkout@v4 | |
with: | |
repository: KhronosGroup/OpenCL-Headers | |
path: external/OpenCL-Headers | |
- name: Checkout OpenCL-ICD-Loader | |
uses: actions/checkout@v4 | |
with: | |
repository: KhronosGroup/OpenCL-ICD-Loader | |
path: external/OpenCL-ICD-Loader | |
- name: Build & install OpenCL-Headers (MSBuild) | |
if: matrix.GEN == 'Visual Studio 17 2022' | |
run: | | |
$BIN = if('${{matrix.BIN}}' -eq 'x86') {'Win32'} else {'x64'} | |
& cmake ` | |
-G '${{matrix.GEN}}' ` | |
-A $BIN ` | |
-T ${{matrix.VER}} ` | |
-D BUILD_TESTING=OFF ` | |
-D CMAKE_INSTALL_PREFIX=${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install ` | |
-S ${env:GITHUB_WORKSPACE}\external\OpenCL-Headers ` | |
-B ${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\build | |
if ($LASTEXITCODE -ne 0) { throw "Configuring OpenCL-Headers failed." } | |
& cmake ` | |
--build "${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\build" ` | |
--target install ` | |
--config Release ` | |
-- ` | |
/verbosity:minimal ` | |
/maxCpuCount ` | |
/noLogo | |
if ($LASTEXITCODE -ne 0) { throw "Building OpenCL-Headers failed." } | |
- name: Build & install OpenCL-Headers (Ninja Multi-Config) | |
if: matrix.GEN == 'Ninja Multi-Config' | |
run: | | |
$VER = switch ('${{matrix.VER}}') { ` | |
'v142' {'14.2'} ` | |
'v143' {'14.4'} } | |
Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" | |
Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=$VER" | |
& cmake ` | |
-G '${{matrix.GEN}}' ` | |
-D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" ` | |
-D BUILD_TESTING=OFF ` | |
-D CMAKE_INSTALL_PREFIX=${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install ` | |
-S ${env:GITHUB_WORKSPACE}\external\OpenCL-Headers ` | |
-B ${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\build | |
if ($LASTEXITCODE -ne 0) { throw "Configuring OpenCL-Headers failed." } | |
& cmake ` | |
--build "${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\build" ` | |
--target install ` | |
--config Release | |
if ($LASTEXITCODE -ne 0) { throw "Building OpenCL-Headers failed." } | |
- name: Build & install OpenCL-ICD-Loader (MSBuild) | |
if: matrix.GEN == 'Visual Studio 17 2022' | |
run: | | |
$BIN = if('${{matrix.BIN}}' -eq 'x86') {'Win32'} else {'x64'} | |
& cmake ` | |
-G '${{matrix.GEN}}' ` | |
-A $BIN ` | |
-T ${{matrix.VER}} ` | |
-D BUILD_TESTING=OFF ` | |
-D CMAKE_INSTALL_PREFIX=${env:GITHUB_WORKSPACE}\external\OpenCL-ICD-Loader\install ` | |
-D CMAKE_PREFIX_PATH=${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install ` | |
-S ${env:GITHUB_WORKSPACE}\external\OpenCL-ICD-Loader ` | |
-B ${env:GITHUB_WORKSPACE}\external\OpenCL-ICD-Loader\build | |
if ($LASTEXITCODE -ne 0) { throw "Configuring OpenCL-ICD-Loader failed." } | |
& cmake ` | |
--build "${env:GITHUB_WORKSPACE}\external\OpenCL-ICD-Loader\build" ` | |
--target install ` | |
--config Release ` | |
-- ` | |
/verbosity:minimal ` | |
/maxCpuCount ` | |
/noLogo | |
if ($LASTEXITCODE -ne 0) { throw "Building OpenCL-ICD-Loader failed." } | |
- name: Build & install OpenCL-ICD-Loader (Ninja Multi-Config) | |
if: matrix.GEN == 'Ninja Multi-Config' | |
run: | | |
$VER = switch ('${{matrix.VER}}') { ` | |
'v142' {'14.2'} ` | |
'v143' {'14.4'} } | |
Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" | |
Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=$VER" | |
& cmake ` | |
-G '${{matrix.GEN}}' ` | |
-D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" ` | |
-D BUILD_TESTING=OFF ` | |
-D CMAKE_INSTALL_PREFIX=${env:GITHUB_WORKSPACE}\external\OpenCL-ICD-Loader\install ` | |
-D CMAKE_PREFIX_PATH=${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install ` | |
-S ${env:GITHUB_WORKSPACE}\external\OpenCL-ICD-Loader ` | |
-B ${env:GITHUB_WORKSPACE}\external\OpenCL-ICD-Loader\build | |
if ($LASTEXITCODE -ne 0) { throw "Configuring OpenCL-ICD-Loader failed." } | |
& cmake ` | |
--build "${env:GITHUB_WORKSPACE}\external\OpenCL-ICD-Loader\build" ` | |
--target install ` | |
--config Release | |
if ($LASTEXITCODE -ne 0) { throw "Building OpenCL-ICD-Loader failed." } | |
- name: Configure (MSBuild) | |
if: matrix.GEN == 'Visual Studio 17 2022' | |
run: | | |
$BIN = if('${{matrix.BIN}}' -eq 'x86') {'Win32'} else {'x64'} | |
& cmake ` | |
-G '${{matrix.GEN}}' ` | |
-A $BIN ` | |
-T ${{matrix.VER}} ` | |
-D BUILD_TESTING=ON ` | |
-D CMAKE_CXX_STANDARD=${{matrix.CXXSTD}} ` | |
-D CMAKE_CXX_EXTENSIONS=OFF ` | |
-D CMAKE_INSTALL_PREFIX=${env:GITHUB_WORKSPACE}\install ` | |
-D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install;${env:GITHUB_WORKSPACE}\external\OpenCL-ICD-Loader\install" ` | |
-S ${env:GITHUB_WORKSPACE} ` | |
-B ${env:GITHUB_WORKSPACE}\build | |
if ($LASTEXITCODE -ne 0) { throw "Configuring OpenCL-CLHPP failed." } | |
- name: Configure (Ninja Multi-Config) | |
if: matrix.GEN == 'Ninja Multi-Config' | |
run: | | |
$VER = switch ('${{matrix.VER}}') { ` | |
'v142' {'14.2'} ` | |
'v143' {'14.4'} } | |
Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" | |
Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=$VER" | |
& cmake ` | |
-G '${{matrix.GEN}}' ` | |
-D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" ` | |
-D BUILD_TESTING=ON ` | |
-D CMAKE_CXX_STANDARD=${{matrix.CXXSTD}} ` | |
-D CMAKE_CXX_EXTENSIONS=OFF ` | |
-D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL ` | |
-D CMAKE_INSTALL_PREFIX=${env:GITHUB_WORKSPACE}\install ` | |
-D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install;${env:GITHUB_WORKSPACE}\external\OpenCL-ICD-Loader\install" ` | |
-S ${env:GITHUB_WORKSPACE} ` | |
-B ${env:GITHUB_WORKSPACE}\build | |
if ($LASTEXITCODE -ne 0) { throw "Configuring OpenCL-CLHPP failed." } | |
- name: Build (MSBuild) | |
if: matrix.GEN == 'Visual Studio 17 2022' | |
run: | | |
foreach ($Config in 'Release','Debug') { | |
& cmake ` | |
--build "${env:GITHUB_WORKSPACE}\build" ` | |
--config ${Config} ` | |
-- ` | |
/verbosity:minimal ` | |
/maxCpuCount ` | |
/noLogo | |
if ($LASTEXITCODE -ne 0) { throw "Building OpenCL-CLHPP in $Config failed." } | |
} | |
- name: Build (Ninja) | |
if: matrix.GEN == 'Ninja Multi-Config' | |
run: | | |
$VER = switch ('${{matrix.VER}}') { ` | |
'v142' {'14.2'} ` | |
'v143' {'14.4'} } | |
Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" | |
Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=$VER" | |
foreach ($Config in 'Release','Debug') { | |
& cmake ` | |
--build "${env:GITHUB_WORKSPACE}\build" ` | |
--config ${Config} | |
if ($LASTEXITCODE -ne 0) { throw "Building OpenCL-CLHPP in $Config failed." } | |
} | |
- name: Test | |
run: | | |
foreach ($Config in 'Release','Debug') { | |
& ctest ` | |
--test-dir "${env:GITHUB_WORKSPACE}\build" ` | |
--build-config ${Config} ` | |
--output-on-failure ` | |
--no-tests=error ` | |
--parallel ${env:NUMBER_OF_PROCESSORS} | |
if ($LASTEXITCODE -ne 0) { throw "Testing OpenCL-CLHPP in $Config failed." } | |
} | |
- name: Install | |
run: | | |
& cmake ` | |
--install "${env:GITHUB_WORKSPACE}\build" ` | |
--prefix "${env:GITHUB_WORKSPACE}\install" ` | |
--config Release | |
if ($LASTEXITCODE -ne 0) { throw "Installing OpenCL-CLHPP failed." } | |
- name: "Consume (MSBuild standalone): Configure/Build/Test" | |
if: matrix.GEN == 'Visual Studio 17 2022' | |
run: | | |
$BIN = if('${{matrix.BIN}}' -eq 'x86') {'Win32'} else {'x64'} | |
& cmake ` | |
-G '${{matrix.GEN}}' ` | |
-A ${BIN} ` | |
-T ${{matrix.VER}} ` | |
-D CMAKE_CXX_STANDARD=${{matrix.CXXSTD}} ` | |
-D CMAKE_CXX_EXTENSIONS=OFF ` | |
-D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL ` | |
-D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install;${env:GITHUB_WORKSPACE}\external\OpenCL-ICD-Loader\install;${env:GITHUB_WORKSPACE}\install" ` | |
-S "${env:GITHUB_WORKSPACE}\tests\pkgconfig\bare" ` | |
-B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare" | |
if ($LASTEXITCODE -ne 0) { throw "Configuring OpenCL-CLHPP standalone consume test failed." } | |
foreach ($Config in 'Release','Debug') { | |
& cmake ` | |
--build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare" ` | |
--config ${Config} | |
if ($LASTEXITCODE -ne 0) { throw "Building OpenCL-CLHPP standalone consume test in $Config failed." } | |
& cd ${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare | |
& ctest --output-on-failure --no-tests=error -C ${Config} | |
if ($LASTEXITCODE -ne 0) { throw "Running OpenCL-CLHPP standalone consume test in $Config failed." } | |
} | |
- name: "Consume (Ninja-Multi-Config standalone): Configure/Build/Test" | |
if: matrix.GEN == 'Ninja Multi-Config' | |
run: | | |
$VER = switch ('${{matrix.VER}}') { ` | |
'v142' {'14.2'} ` | |
'v143' {'14.4'} } | |
Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" | |
Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=$VER" | |
& cmake ` | |
-G '${{matrix.GEN}}' ` | |
-D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" ` | |
-D CMAKE_CXX_STANDARD=${{matrix.CXXSTD}} ` | |
-D CMAKE_CXX_EXTENSIONS=OFF ` | |
-D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL ` | |
-D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install;${env:GITHUB_WORKSPACE}\external\OpenCL-ICD-Loader\install;${env:GITHUB_WORKSPACE}\install" ` | |
-S "${env:GITHUB_WORKSPACE}\tests\pkgconfig\bare" ` | |
-B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare" | |
if ($LASTEXITCODE -ne 0) { throw "Configuring OpenCL-CLHPP standalone consume test failed." } | |
foreach ($Config in 'Release','Debug') { | |
& cmake ` | |
--build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare" ` | |
--config ${Config} | |
if ($LASTEXITCODE -ne 0) { throw "Building OpenCL-CLHPP standalone consume test in $Config failed." } | |
& cd ${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare | |
& ctest --output-on-failure --no-tests=error -C ${Config} | |
if ($LASTEXITCODE -ne 0) { throw "Running OpenCL-CLHPP standalone consume test in $Config failed." } | |
} | |
- name: Consume (Emulate SDK presence) | |
run: | | |
New-Item -Type Directory -Path ${env:GITHUB_WORKSPACE}\install\share\cmake\OpenCL | |
$workspace = ${env:GITHUB_WORKSPACE}.replace("\", "/") | |
New-Item -Type File -Path ${env:GITHUB_WORKSPACE}\install\share\cmake\OpenCL\OpenCLConfig.cmake -Value "include(`"$workspace/external/OpenCL-Headers/install/share/cmake/OpenCLHeaders/OpenCLHeadersTargets.cmake`")`r`ninclude(`"$workspace/external/OpenCL-ICD-Loader/install/share/cmake/OpenCLICDLoader/OpenCLICDLoaderTargets.cmake`")`r`ninclude(`"`${CMAKE_CURRENT_LIST_DIR}/../OpenCLHeadersCpp/OpenCLHeadersCppTargets.cmake`")" | |
- name: "Consume (MSBuild SDK): Configure/Build/Test" | |
if: matrix.GEN == 'Visual Studio 17 2022' | |
run: | | |
$BIN = if('${{matrix.BIN}}' -eq 'x86') {'Win32'} else {'x64'} | |
& cmake ` | |
-G '${{matrix.GEN}}' ` | |
-A ${BIN} ` | |
-T ${{matrix.VER}} ` | |
-D CMAKE_CXX_STANDARD=${{matrix.CXXSTD}} ` | |
-D CMAKE_CXX_EXTENSIONS=OFF ` | |
-D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL ` | |
-D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install;${env:GITHUB_WORKSPACE}\external\OpenCL-ICD-Loader\install;${env:GITHUB_WORKSPACE}\install" ` | |
-S "${env:GITHUB_WORKSPACE}\tests\pkgconfig\sdk" ` | |
-B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk" | |
if ($LASTEXITCODE -ne 0) { throw "Configuring OpenCL-CLHPP in-SDK consume test failed." } | |
foreach ($Config in 'Release','Debug') { | |
& cmake ` | |
--build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk" ` | |
--config ${Config} | |
if ($LASTEXITCODE -ne 0) { throw "Building OpenCL-CLHPP in-SDK consume test in $Config failed." } | |
& cd ${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk | |
& ctest --output-on-failure --no-tests=error -C ${Config} | |
if ($LASTEXITCODE -ne 0) { throw "Running OpenCL-CLHPP in-SDK consume test in $Config failed." } | |
} | |
- name: "Consume (Ninja-Multi-Config SDK): Configure/Build/Test" | |
if: matrix.GEN == 'Ninja Multi-Config' | |
run: | | |
$VER = switch ('${{matrix.VER}}') { ` | |
'v142' {'14.2'} ` | |
'v143' {'14.4'} } | |
Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" | |
Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=${VER}" | |
& cmake ` | |
-G '${{matrix.GEN}}' ` | |
-D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" ` | |
-D CMAKE_CXX_STANDARD=${{matrix.CXXSTD}} ` | |
-D CMAKE_CXX_EXTENSIONS=OFF ` | |
-D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL ` | |
-D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install;${env:GITHUB_WORKSPACE}\external\OpenCL-ICD-Loader\install;${env:GITHUB_WORKSPACE}\install" ` | |
-S "${env:GITHUB_WORKSPACE}\tests\pkgconfig\sdk" ` | |
-B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk" | |
if ($LASTEXITCODE -ne 0) { throw "Configuring OpenCL-CLHPP in-SDK consume test failed." } | |
foreach ($Config in 'Release','Debug') { ` | |
& cmake ` | |
--build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk" ` | |
--config ${Config} | |
if ($LASTEXITCODE -ne 0) { throw "Building OpenCL-CLHPP in-SDK consume test in $Config failed." } | |
& cd ${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk | |
& ctest --output-on-failure --no-tests=error -C ${Config} | |
if ($LASTEXITCODE -ne 0) { throw "Running OpenCL-CLHPP in-SDK consume test in $Config failed." } | |
} | |
macos: | |
runs-on: macos-latest | |
defaults: | |
run: | |
shell: bash | |
strategy: | |
matrix: | |
COMPILER: | |
- C_NAME: /usr/bin/clang | |
CXX_NAME: /usr/bin/clang++ | |
# Disabled due to problems with __has_cpp_attribute | |
# See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114007 | |
#- C_NAME: gcc-11 | |
# CXX_NAME: g++-11 | |
# Disabled due to problems with the __API_AVAILABLE macro | |
# - C_NAME: gcc-13 | |
# CXX_NAME: g++-13 | |
# # A workaround for a bug in the toolset | |
# # See https://forums.developer.apple.com/forums/thread/737707 | |
# EXTRA_FLAGS: -Wl,-ld_classic | |
GEN: | |
- Xcode | |
- Ninja Multi-Config | |
CXXSTD: [11, 17] | |
exclude: | |
# These entries are excluded, since XCode selects its own compiler | |
- COMPILER: | |
C_NAME: gcc-11 | |
CXX_NAME: g++-11 | |
GEN: Xcode | |
- COMPILER: | |
C_NAME: gcc-13 | |
CXX_NAME: g++-13 | |
GEN: Xcode | |
env: | |
CC: ${{matrix.COMPILER.C_NAME}} | |
CXX: ${{matrix.COMPILER.CXX_NAME}} | |
CFLAGS: -Wall -Wextra -pedantic -Wno-format -Werror ${{matrix.COMPILER.EXTRA_FLAGS}} | |
CXXFLAGS: -Wall -Wextra -pedantic -Wno-format -Werror ${{matrix.COMPILER.EXTRA_FLAGS}} | |
steps: | |
- name: Checkout OpenCL-CLHPP | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Checkout OpenCL-Headers | |
uses: actions/checkout@v4 | |
with: | |
repository: KhronosGroup/OpenCL-Headers | |
path: external/OpenCL-Headers | |
- name: Checkout OpenCL-ICD-Loader | |
uses: actions/checkout@v4 | |
with: | |
repository: KhronosGroup/OpenCL-ICD-Loader | |
path: external/OpenCL-ICD-Loader | |
- name: Create Build Environment | |
run: | | |
# Install Ninja only if it's the selected generator and it's not available. | |
if [[ "${{matrix.GEN}}" == "Ninja Multi-Config" && ! `which ninja` ]]; then brew install ninja; fi && | |
if [[ ! `which pkg-config` ]]; then brew install pkg-config; fi; | |
cmake --version | |
- name: Build & install OpenCL-Headers | |
run: cmake | |
-G "${{matrix.GEN}}" | |
-D BUILD_TESTING=OFF | |
-D CMAKE_C_EXTENSIONS=OFF | |
-D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-Headers/install | |
-S $GITHUB_WORKSPACE/external/OpenCL-Headers | |
-B $GITHUB_WORKSPACE/external/OpenCL-Headers/build && | |
cmake | |
--build $GITHUB_WORKSPACE/external/OpenCL-Headers/build | |
--target install | |
--config Release | |
--parallel `sysctl -n hw.logicalcpu` | |
- name: Build & install OpenCL-ICD-Loader | |
run: cmake | |
-G "${{matrix.GEN}}" | |
-D BUILD_TESTING=OFF | |
-D CMAKE_C_EXTENSIONS=OFF | |
-D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/external/OpenCL-Headers/install | |
-D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install | |
-S $GITHUB_WORKSPACE/external/OpenCL-ICD-Loader | |
-B $GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/build && | |
cmake | |
--build $GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/build | |
--target install | |
--config Release | |
--parallel `sysctl -n hw.logicalcpu` | |
- name: Configure | |
run: cmake | |
-G "${{matrix.GEN}}" | |
-D BUILD_TESTING=ON | |
-D CMAKE_CXX_STANDARD=${{matrix.CXXSTD}} | |
-D CMAKE_CXX_EXTENSIONS=OFF | |
-D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install | |
-D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install" | |
-S $GITHUB_WORKSPACE | |
-B $GITHUB_WORKSPACE/build | |
- name: Build | |
run: | | |
cmake --build $GITHUB_WORKSPACE/build --config Release --parallel `sysctl -n hw.logicalcpu` | |
cmake --build $GITHUB_WORKSPACE/build --config Debug --parallel `sysctl -n hw.logicalcpu` | |
- name: Test | |
working-directory: ${{runner.workspace}}/OpenCL-CLHPP/build | |
run: | | |
ctest -C Release --output-on-failure --no-tests=error --parallel `sysctl -n hw.logicalcpu` | |
ctest -C Debug --output-on-failure --no-tests=error --parallel `sysctl -n hw.logicalcpu` | |
- name: Test install | |
run: | | |
cmake --build $GITHUB_WORKSPACE/build --config Release --target install | |
- name: Consume (install) | |
run: cmake | |
-G "${{matrix.GEN}}" | |
-D CMAKE_CXX_STANDARD=${{matrix.CXXSTD}} | |
-D CMAKE_CXX_EXTENSIONS=OFF | |
-D CMAKE_CXX_STANDARD_REQUIRED=ON | |
-D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install;$GITHUB_WORKSPACE/install" | |
-S $GITHUB_WORKSPACE/tests/pkgconfig/bare | |
-B $GITHUB_WORKSPACE/build_install && | |
cmake --build $GITHUB_WORKSPACE/build_install --config Release --parallel `sysctl -n hw.logicalcpu` && | |
cmake --build $GITHUB_WORKSPACE/build_install --config Debug --parallel `sysctl -n hw.logicalcpu` && | |
cd $GITHUB_WORKSPACE/build_install && | |
ctest -C Release --output-on-failure --no-tests=error --parallel `sysctl -n hw.logicalcpu` && | |
ctest -C Debug --output-on-failure --no-tests=error --parallel `sysctl -n hw.logicalcpu` | |
- name: Test pkg-config | |
run: | | |
export PKG_CONFIG_PATH=$GITHUB_WORKSPACE/install/share/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-Headers/install/share/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install/lib/pkgconfig | |
pkg-config OpenCL-CLHPP --cflags | grep -q "\-I$GITHUB_WORKSPACE/install/include" | |
- name: Test pkg-config dependency | |
run: | | |
export PKG_CONFIG_PATH=$GITHUB_WORKSPACE/install/share/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-Headers/install/share/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install/lib/pkgconfig | |
pkg-config OpenCL-CLHPP --cflags | grep -q "\-I$GITHUB_WORKSPACE/external/OpenCL-Headers/install/include" | |
android: | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
shell: bash | |
strategy: | |
matrix: | |
ABI: | |
- arm64-v8a | |
- x86_64 | |
API_LEVEL: | |
- android-19 | |
- android-33 | |
CONFIG: | |
- Debug | |
- Release | |
env: | |
CFLAGS: -Wall -Wextra -pedantic -Werror | |
CXXFLAGS: -Wall -Wextra -pedantic -Werror | |
steps: | |
- name: Checkout OpenCL-CLHPP | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Checkout OpenCL-Headers | |
uses: actions/checkout@v4 | |
with: | |
repository: KhronosGroup/OpenCL-Headers | |
path: external/OpenCL-Headers | |
- name: Checkout OpenCL-ICD-Loader | |
uses: actions/checkout@v4 | |
with: | |
repository: KhronosGroup/OpenCL-ICD-Loader | |
path: external/OpenCL-ICD-Loader | |
- name: Configure & install OpenCL-Headers | |
run: cmake | |
-G "Unix Makefiles" | |
-D CMAKE_BUILD_TYPE=${{matrix.CONFIG}} | |
-D CMAKE_C_EXTENSIONS=OFF | |
-D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-Headers/install | |
-D BUILD_TESTING=OFF | |
-S $GITHUB_WORKSPACE/external/OpenCL-Headers | |
-B $GITHUB_WORKSPACE/external/OpenCL-Headers/build && | |
cmake | |
--build $GITHUB_WORKSPACE/external/OpenCL-Headers/build | |
--target install | |
-- | |
-j`nproc` | |
- name: Configure & install OpenCL-ICD-Loader | |
run: cmake | |
-G "Unix Makefiles" | |
-D CMAKE_BUILD_TYPE=${{matrix.CONFIG}} | |
-D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install | |
-D BUILD_TESTING=ON | |
-D CMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake | |
-D ANDROID_ABI=${{matrix.ABI}} | |
-D ANDROID_PLATFORM=${{matrix.API_LEVEL}} | |
-D CMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY | |
-D CMAKE_FIND_ROOT_PATH=$GITHUB_WORKSPACE/external/OpenCL-Headers/install | |
-S $GITHUB_WORKSPACE/external/OpenCL-ICD-Loader | |
-B $GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/build && | |
sudo cmake | |
--build $GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/build | |
--target install | |
-- | |
-j`nproc` | |
- name: Configure | |
run: cmake | |
-G "Unix Makefiles" | |
-D BUILD_TESTING=ON | |
-D BUILD_EXAMPLES=ON | |
-D CMAKE_BUILD_TYPE=${{matrix.CONFIG}} | |
-D CMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake | |
-D ANDROID_ABI=${{matrix.ABI}} | |
-D ANDROID_PLATFORM=${{matrix.API_LEVEL}} | |
-D CMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY | |
-D CMAKE_FIND_ROOT_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install" | |
-S $GITHUB_WORKSPACE | |
-B $GITHUB_WORKSPACE/build | |
- name: Build | |
run: cmake --build $GITHUB_WORKSPACE/build -j `nproc` |