Updated CI, added CD (#226)
* Add DEB packaging
* Fix MacOS workflow
* Move linux CI to presubmit and update it
* Fixes for CMake < 3.15
* Fixes for CMake < 3.5
* Remove linux.yml
* Update Windows CI
* Migrate contents of windows.yml to presubmit.yml and delete it
* Update MacOS CI
* Migrate contents of macos.yml to presubmit.yml and delete it
* Add format-checking script and job
* Build android binaries
* CMake minimum 3.16
* Added release workflow
* Update workflows to match the rest of the ecosystem
* Add DEB packaging
* Update pkgconfig tests
* Warning fixes
* Added update-alternatives to the Debian source package
* Removed unneeded STD in macos ci
* Ignore Markdown changes in CI
* fix(ci): Using actions/checkout@v4
* fix(ci): Removed VC++ v141 from Windows matrix
* fix(ci): Referencing upstream Headers repo in Linux jobs
* fix(ci): Using actions/cache@v4
* Removed clang-format and formatting check
* Disabled macos/gcc-13 due to a problem with __API_AVAILABLE
* Update docker images
* Fix MSVC compiler toolset version
---------
Co-authored-by: Beatriz Navidad Vilches <beatriz@streamhpc.com>
Co-authored-by: Máté Ferenc Nagy-Egri <mate@streamhpc.com>
diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml
deleted file mode 100644
index f301de6..0000000
--- a/.github/workflows/linux.yml
+++ /dev/null
@@ -1,342 +0,0 @@
-name: Linux
-
-on: [push, pull_request]
-
-env:
- OPENCL_PKGCONFIG_PATHS: ${{ github.workspace }}/install/lib/pkgconfig:${{ github.workspace }}/external/OpenCL-Headers/install/share/pkgconfig
-
-jobs:
-
- tools:
- runs-on: ubuntu-20.04
- strategy:
- matrix:
- 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
-
- steps:
- - name: Cache CMake
- uses: actions/cache@v3
- id: cmake
- env:
- cache-name: cache-cmake
- with:
- path: ~/cmake-${{matrix.CMAKE}}-Linux-x86_64.tar.gz
- key: ${{ runner.os }}-${{ env.cache-name }}-${{matrix.CMAKE}}
- - name: Checkout CMake
- if: steps.cmake.outputs.cache-hit != 'true'
- run: wget -c -O ~/cmake-${{matrix.CMAKE}}-Linux-x86_64.tar.gz $CMAKE_URL
-
- cmake-minimum:
- runs-on: ${{ matrix.OS }}
- container: streamhpc/opencl-sdk-base:ubuntu-18.04-20220127
- strategy:
- matrix:
- OS: [ubuntu-20.04]
- COMPILER: [gcc-7, clang-8] #gcc-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_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/cmake
- CTEST_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/ctest
- OPENCL_PKGCONFIG_PATHS: /__w/OpenCL-ICD-Loader/OpenCL-ICD-Loader/install/lib/pkgconfig:/__w/OpenCL-ICD-Loader/OpenCL-ICD-Loader/external/OpenCL-Headers/install/share/pkgconfig
-
-
- steps:
- - name: Checkout OpenCL-ICD-Loader
- uses: actions/checkout@v3
-
- - name: Checkout OpenCL-Headers
- uses: actions/checkout@v3
- with:
- repository: KhronosGroup/OpenCL-Headers
- path: external/OpenCL-Headers
-
- - name: Build & install OpenCL-Headers
- run: $CMAKE_EXE
- -G "${{matrix.GEN}}"
- -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}}
- -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
- -D BUILD_TESTING=OFF
- -B$GITHUB_WORKSPACE/external/OpenCL-Headers/build
- -H$GITHUB_WORKSPACE/external/OpenCL-Headers &&
- $CMAKE_EXE
- --build $GITHUB_WORKSPACE/external/OpenCL-Headers/build
- --target install
- --
- -j`nproc`
-
- - name: Configure
- shell: bash
- run: $CMAKE_EXE
- -G "${{matrix.GEN}}"
- -D BUILD_TESTING=ON
- -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}}
- -D CMAKE_C_FLAGS="-Wall -Wextra -Werror -pedantic -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/install
- -D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/external/OpenCL-Headers/install
- -B$GITHUB_WORKSPACE/build
- -H$GITHUB_WORKSPACE
-
- - name: Build
- shell: bash
- run: $CMAKE_EXE
- --build $GITHUB_WORKSPACE/build
- --
- -j`nproc`
-
- - name: Test
- working-directory: ${{runner.workspace}}/OpenCL-ICD-Loader/build
- shell: bash
- run: $CTEST_EXE --output-on-failure --parallel `nproc`
-
- - name: Install
- shell: bash
- run: $CMAKE_EXE
- --build $GITHUB_WORKSPACE/build
- --target install
- --
- -j`nproc`
-
- - name: "Consume (standalone): Configure/Build/Test"
- shell: bash
- run: $CMAKE_EXE
- -G "${{matrix.GEN}}"
- -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}}
- -D CMAKE_C_COMPILER=${{matrix.COMPILER}}
- -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}"
- -D CMAKE_C_STANDARD=${{matrix.STD}}
- -D CMAKE_C_EXTENSIONS=${{matrix.EXT}}
- -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/install"
- -D DRIVER_STUB_PATH=$GITHUB_WORKSPACE/build/libOpenCLDriverStub.so
- -B$GITHUB_WORKSPACE/build/downstream/bare
- -H$GITHUB_WORKSPACE/test/pkgconfig/bare ;
- $CMAKE_EXE
- --build $GITHUB_WORKSPACE/build/downstream/bare ;
- cd $GITHUB_WORKSPACE/build/downstream/bare ;
- $CTEST_EXE --output-on-failure
-
- - name: "Consume (SDK): Configure/Build/Test"
- shell: bash
- run: $CMAKE_EXE -E make_directory $GITHUB_WORKSPACE/install/share/cmake/OpenCL ;
- echo -e "include(\"$GITHUB_WORKSPACE/external/OpenCL-Headers/install/share/cmake/OpenCLHeaders/OpenCLHeadersTargets.cmake\")\ninclude(\"\${CMAKE_CURRENT_LIST_DIR}/../OpenCLICDLoader/OpenCLICDLoaderTargets.cmake\")" > $GITHUB_WORKSPACE/install/share/cmake/OpenCL/OpenCLConfig.cmake ;
- $CMAKE_EXE
- -G "${{matrix.GEN}}"
- -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}}
- -D CMAKE_C_COMPILER=${{matrix.COMPILER}}
- -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}"
- -D CMAKE_C_STANDARD=${{matrix.STD}}
- -D CMAKE_C_EXTENSIONS=${{matrix.EXT}}
- -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/install"
- -D DRIVER_STUB_PATH=$GITHUB_WORKSPACE/build/libOpenCLDriverStub.so
- -B$GITHUB_WORKSPACE/build/downstream/sdk
- -H$GITHUB_WORKSPACE/test/pkgconfig/sdk ;
- $CMAKE_EXE
- --build $GITHUB_WORKSPACE/build/downstream/sdk ;
- cd $GITHUB_WORKSPACE/build/downstream/sdk ;
- $CTEST_EXE --output-on-failure
-
- - name: Test pkg-config --cflags
- shell: bash
- run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" pkg-config OpenCL --cflags | grep -q "\-I$GITHUB_WORKSPACE/external/OpenCL-Headers/install/include"
-
- - name: Test pkg-config --libs
- shell: bash
- run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" pkg-config OpenCL --libs | grep -q "\-L$GITHUB_WORKSPACE/install/lib -lOpenCL"
-
- - name: Consume pkg-config
- shell: bash
- run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" $CMAKE_EXE
- -G "${{matrix.GEN}}"
- -D CMAKE_C_COMPILER=${{matrix.COMPILER}}
- -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}"
- -D CMAKE_C_STANDARD=${{matrix.STD}}
- -D CMAKE_C_EXTENSIONS=${{matrix.EXT}}
- -D DRIVER_STUB_PATH=$GITHUB_WORKSPACE/build/libOpenCLDriverStub.so
- -B$GITHUB_WORKSPACE/build/downstream/pkgconfig
- -H$GITHUB_WORKSPACE/test/pkgconfig/pkgconfig ;
- $CMAKE_EXE --build $GITHUB_WORKSPACE/build/downstream/pkgconfig ;
- cd $GITHUB_WORKSPACE/build/downstream/pkgconfig ;
- $CTEST_EXE --output-on-failure
-
-
-
-
-
- cmake-latest:
- needs: [tools]
- runs-on: ${{ matrix.OS }}
- strategy:
- matrix:
- OS : [ubuntu-20.04]
- COMPILER: [gcc-9, gcc-11, clang-11, clang-13]
- EXT: [ON, OFF]
- GEN: [Ninja Multi-Config]
- STD: [99, 11, 17]
- BIN: [32, 64]
- CMAKE: [3.21.2]
- env:
- 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@v3
-
- - name: Checkout OpenCL-Headers
- uses: actions/checkout@v3
- with:
- repository: KhronosGroup/OpenCL-Headers
- path: external/OpenCL-Headers
-
- - name: Restore CMake
- uses: actions/cache@v3
- id: cmake
- env:
- cache-name: cache-cmake
- with:
- path: ~/cmake-${{matrix.CMAKE}}-Linux-x86_64.tar.gz
- key: ${{ runner.os }}-${{ env.cache-name }}-${{matrix.CMAKE}}
-
- - name: Create Build Environment
- run: sudo apt-get update -q;
- if [[ "${{matrix.GEN}}" =~ "Ninja" && ! `which ninja` ]]; then sudo apt install -y ninja-build; fi;
- if [[ "${{matrix.COMPILER}}" =~ "gcc-11" ]]; then sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test; fi;
- if [[ "${{matrix.COMPILER}}" =~ "clang-13" ]]; then wget -q -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -; sudo apt-add-repository -y 'deb [arch=amd64] https://apt.llvm.org/focal/ llvm-toolchain-focal-13 main'; 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;
- tar -xzf ~/cmake-${{matrix.CMAKE}}-Linux-x86_64.tar.gz --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
- 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
- -D BUILD_TESTING=OFF
- -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
- -G "${{matrix.GEN}}"
- -D BUILD_TESTING=ON
- -D CMAKE_C_FLAGS="-Wall -Wextra -Werror -pedantic -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/install
- -D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/external/OpenCL-Headers/install
- -B $GITHUB_WORKSPACE/build
- -S $GITHUB_WORKSPACE
-
- - name: Build
- shell: bash
- run: |
- $CMAKE_EXE --build $GITHUB_WORKSPACE/build --config Release -- -j`nproc`;
- $CMAKE_EXE --build $GITHUB_WORKSPACE/build --config Debug -- -j`nproc`
-
- - name: Test
- working-directory: ${{runner.workspace}}/OpenCL-ICD-Loader/build
- shell: bash
- run: |
- $CTEST_EXE --output-on-failure -C Release --parallel `nproc`;
- $CTEST_EXE --output-on-failure -C Debug --parallel `nproc`;
-
- - name: Install
- shell: bash
- run: $CMAKE_EXE
- --build $GITHUB_WORKSPACE/build
- --target install
- --config Release
- --
- -j`nproc`
-
- - name: "Consume (standalone): Configure/Build/Test"
- shell: bash
- run: $CMAKE_EXE
- -G "${{matrix.GEN}}"
- -D CMAKE_C_COMPILER=${{matrix.COMPILER}}
- -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}"
- -D CMAKE_C_STANDARD=${{matrix.STD}}
- -D CMAKE_C_EXTENSIONS=${{matrix.EXT}}
- -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/install"
- -D DRIVER_STUB_PATH=$GITHUB_WORKSPACE/build/Release/libOpenCLDriverStub.so
- -B $GITHUB_WORKSPACE/build/downstream/bare
- -S $GITHUB_WORKSPACE/test/pkgconfig/bare;
- $CMAKE_EXE --build $GITHUB_WORKSPACE/build/downstream/bare --config Release;
- $CMAKE_EXE --build $GITHUB_WORKSPACE/build/downstream/bare --config Debug;
- cd $GITHUB_WORKSPACE/build/downstream/bare;
- $CTEST_EXE --output-on-failure -C Release;
- $CTEST_EXE --output-on-failure -C Debug;
-
- - name: "Consume (SDK): Configure/Build/Test"
- shell: bash
- run: $CMAKE_EXE -E make_directory $GITHUB_WORKSPACE/install/share/cmake/OpenCL ;
- echo -e "include(\"$GITHUB_WORKSPACE/external/OpenCL-Headers/install/share/cmake/OpenCLHeaders/OpenCLHeadersTargets.cmake\")\ninclude(\"\${CMAKE_CURRENT_LIST_DIR}/../OpenCLICDLoader/OpenCLICDLoaderTargets.cmake\")" > $GITHUB_WORKSPACE/install/share/cmake/OpenCL/OpenCLConfig.cmake ;
- $CMAKE_EXE
- -G "${{matrix.GEN}}"
- -D CMAKE_C_COMPILER=${{matrix.COMPILER}}
- -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}"
- -D CMAKE_C_STANDARD=${{matrix.STD}}
- -D CMAKE_C_EXTENSIONS=${{matrix.EXT}}
- -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/install"
- -D DRIVER_STUB_PATH=$GITHUB_WORKSPACE/build/Release/libOpenCLDriverStub.so
- -B $GITHUB_WORKSPACE/build/downstream/sdk
- -S $GITHUB_WORKSPACE/test/pkgconfig/sdk;
- $CMAKE_EXE --build $GITHUB_WORKSPACE/build/downstream/sdk --config Release;
- $CMAKE_EXE --build $GITHUB_WORKSPACE/build/downstream/sdk --config Debug;
- cd $GITHUB_WORKSPACE/build/downstream/sdk;
- $CTEST_EXE --output-on-failure -C Release;
- $CTEST_EXE --output-on-failure -C Debug;
-
- - name: Test pkg-config --cflags
- shell: bash
- run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" pkg-config OpenCL --cflags | grep -q "\-I$GITHUB_WORKSPACE/external/OpenCL-Headers/install/include"
-
- - name: Test pkg-config --libs
- shell: bash
- run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" pkg-config OpenCL --libs | grep -q "\-L$GITHUB_WORKSPACE/install/lib -lOpenCL"
-
- - name: Consume pkg-config
- shell: bash
- run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" $CMAKE_EXE
- -G "${{matrix.GEN}}"
- -D CMAKE_C_COMPILER=${{matrix.COMPILER}}
- -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}"
- -D CMAKE_C_STANDARD=${{matrix.STD}}
- -D CMAKE_C_EXTENSIONS=${{matrix.EXT}}
- -D DRIVER_STUB_PATH=$GITHUB_WORKSPACE/build/Release/libOpenCLDriverStub.so
- -B $GITHUB_WORKSPACE/build/downstream/pkgconfig
- -S $GITHUB_WORKSPACE/test/pkgconfig/pkgconfig;
- $CMAKE_EXE --build $GITHUB_WORKSPACE/build/downstream/pkgconfig --config Release;
- $CMAKE_EXE --build $GITHUB_WORKSPACE/build/downstream/pkgconfig --config Debug;
- cd $GITHUB_WORKSPACE/build/downstream/pkgconfig;
- $CTEST_EXE --output-on-failure -C Release;
- $CTEST_EXE --output-on-failure -C Debug;
diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml
deleted file mode 100644
index 53fc5e7..0000000
--- a/.github/workflows/macos.yml
+++ /dev/null
@@ -1,132 +0,0 @@
-name: MacOS
-
-on: [push, pull_request]
-
-env:
- OPENCL_PKGCONFIG_PATHS: ${{ github.workspace }}/install/lib/pkgconfig:${{ github.workspace }}/external/OpenCL-Headers/install/share/pkgconfig
-
-jobs:
- macos-gcc:
- #runs-on: macos-latest
- runs-on: macos-11 # temporary, macos-latest only supports gcc-12
- 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@v3
-
- - name: Checkout OpenCL-Headers
- uses: actions/checkout@v3
- with:
- repository: KhronosGroup/OpenCL-Headers
- path: external/OpenCL-Headers
-
- - name: Install gcc if required
- run: |
- if [[ ! `which /usr/local/bin/gcc-${{matrix.VER}}` ]]; then brew install gcc@${{matrix.VER}}; fi;
-
- - 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: Build & install OpenCL-Headers
- run: cmake
- -G "${{matrix.GEN}}"
- -D CMAKE_C_FLAGS="-w"
- -D CMAKE_C_COMPILER=/usr/local/bin/gcc-${{matrix.VER}}
- -D CMAKE_C_STANDARD=${{matrix.STD}}
- -D CMAKE_C_EXTENSIONS=${{matrix.EXT}}
- -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
- --config Release
- --parallel `sysctl -n hw.logicalcpu`
-
- - name: Configure CMake
- # no -Werror during configuration because:
- # warning: ISO C forbids assignment between function pointer and ‘void *’ [-Wpedantic]
- # warning: unused parameter [-Wunused-parameter]
- shell: bash
- run: cmake
- -G "${{matrix.GEN}}"
- -D BUILD_TESTING=ON
- -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -Wno-format"
- -D CMAKE_C_COMPILER=/usr/local/bin/gcc-${{matrix.VER}}
- -D CMAKE_C_STANDARD=${{matrix.STD}}
- -D CMAKE_C_EXTENSIONS=${{matrix.EXT}}
- -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install
- -D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/external/OpenCL-Headers/install
- -S $GITHUB_WORKSPACE
- -B $GITHUB_WORKSPACE/build
-
- - name: Build (Xcode)
- if: matrix.GEN == 'Xcode'
- shell: bash
- 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: Build (Ninja)
- if: matrix.GEN == 'Ninja Multi-Config'
- shell: bash
- 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-ICD-Loader/build
- shell: bash
- run: |
- ctest -C Release --output-on-failure --parallel `sysctl -n hw.logicalcpu`
- ctest -C Debug --output-on-failure --parallel `sysctl -n hw.logicalcpu`
-
- - name: Install (Xcode)
- if: matrix.GEN == 'Xcode'
- shell: bash
- run: |
- cmake --build $GITHUB_WORKSPACE/build --config Release --target install
-
- - name: Install (Ninja)
- if: matrix.GEN == 'Ninja Multi-Config'
- shell: bash
- run: |
- cmake --build $GITHUB_WORKSPACE/build --config Release --target install
-
- - name: Test pkg-config --cflags
- shell: bash
- run: |
- if [[ ! `which pkg-config` ]]; then brew install pkg-config; fi;
- PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" pkg-config OpenCL --cflags | grep -q "\-I$GITHUB_WORKSPACE/external/OpenCL-Headers/install/include"
-
- - name: Test pkg-config --libs
- shell: bash
- run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" pkg-config OpenCL --libs | grep -q "\-L$GITHUB_WORKSPACE/install/lib -lOpenCL"
-
- - name: Consume pkg-config
- shell: bash
- run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" cmake
- -G "${{matrix.GEN}}"
- -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -Wno-format"
- -D CMAKE_C_COMPILER=/usr/local/bin/gcc-${{matrix.VER}}
- -D CMAKE_C_STANDARD=${{matrix.STD}}
- -D CMAKE_C_EXTENSIONS=${{matrix.EXT}}
- -D DRIVER_STUB_PATH=$GITHUB_WORKSPACE/build/Release/libOpenCLDriverStub.dylib
- -B $GITHUB_WORKSPACE/build/downstream/pkgconfig
- -S $GITHUB_WORKSPACE/test/pkgconfig/pkgconfig;
- cmake --build $GITHUB_WORKSPACE/build/downstream/pkgconfig --config Release;
- cmake --build $GITHUB_WORKSPACE/build/downstream/pkgconfig --config Debug;
- cd $GITHUB_WORKSPACE/build/downstream/pkgconfig;
- ctest --output-on-failure -C Release
- ctest --output-on-failure -C Debug
diff --git a/.github/workflows/presubmit.yml b/.github/workflows/presubmit.yml
new file mode 100644
index 0000000..52b7eb0
--- /dev/null
+++ b/.github/workflows/presubmit.yml
@@ -0,0 +1,723 @@
+name: Presubmit
+
+on:
+ push:
+ paths-ignore:
+ - '**/*.md'
+ pull_request:
+ paths-ignore:
+ - '**/*.md'
+
+jobs:
+ linux:
+ runs-on: ubuntu-latest
+ defaults:
+ run:
+ shell: bash
+ strategy:
+ matrix:
+ CMAKE: [3.26.4]
+ C_COMPILER:
+ - gcc-11
+ - gcc-13
+ - clang-14
+ - clang-16
+ BIN: [64]
+ CONF:
+ - GEN: Unix Makefiles
+ CONFIG: Debug
+ - GEN: Unix Makefiles
+ CONFIG: Release
+ - GEN: Ninja Multi-Config
+ CONFIG: Release
+ IMAGE:
+ - khronosgroup/docker-images:opencl-sdk-intelcpu-ubuntu-22.04.20230717
+ include:
+ - CMAKE: system
+ C_COMPILER: gcc-9
+ BIN: 64
+ CONF:
+ GEN: Unix Makefiles
+ CONFIG: Debug
+ IMAGE: khronosgroup/docker-images:opencl-sdk-intelcpu-ubuntu-20.04.20230717
+ - CMAKE: system
+ C_COMPILER: gcc-9
+ BIN: 64
+ CONF:
+ GEN: Unix Makefiles
+ CONFIG: Release
+ IMAGE: khronosgroup/docker-images:opencl-sdk-intelcpu-ubuntu-20.04.20230717
+ - CMAKE: system
+ C_COMPILER: gcc-9
+ BIN: 32
+ CONF:
+ GEN: Unix Makefiles
+ CONFIG: Debug
+ IMAGE: khronosgroup/docker-images:opencl-sdk-intelcpu-ubuntu-20.04.20230717
+ - CMAKE: system
+ C_COMPILER: gcc-9
+ BIN: 32
+ CONF:
+ GEN: Unix Makefiles
+ CONFIG: Release
+ IMAGE: khronosgroup/docker-images:opencl-sdk-intelcpu-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
+ CC: ${{matrix.C_COMPILER}}
+ CFLAGS: -Wall -Wextra -Werror -pedantic -m${{matrix.BIN}}
+ DEB_INSTALLATION_PATH: /usr
+
+ 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-ICD-Loader
+ uses: actions/checkout@v4
+
+ - name: Checkout OpenCL-Headers
+ uses: actions/checkout@v4
+ with:
+ path: external/OpenCL-Headers
+ repository: KhronosGroup/OpenCL-Headers
+
+ - 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_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
+ run: $CMAKE_EXE
+ -G "${{matrix.CONF.GEN}}"
+ `if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; then echo "-D CMAKE_BUILD_TYPE=${{matrix.CONF.CONFIG}}"; fi`
+ -D BUILD_TESTING=ON
+ -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install
+ -D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/external/OpenCL-Headers/install
+ -D CPACK_PACKAGING_INSTALL_PREFIX=$DEB_INSTALLATION_PATH
+ -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-ICD-Loader/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 DRIVER_STUB_PATH=$GITHUB_WORKSPACE/build/`if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; then echo "libOpenCLDriverStub.so"; else echo "${{ matrix.CONF.CONFIG }}/libOpenCLDriverStub.so"; fi`
+ -S $GITHUB_WORKSPACE/test/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-ICD-Loader/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)
+ # We expect no pre-processor and compile flags (--cflags) but we do expect link flags (--libs)
+ run: if [[ $(pkg-config OpenCL --cflags) ]];
+ then
+ exit 1;
+ fi &&
+ pkg-config OpenCL --libs | grep -q "\-lOpenCL"
+
+ - name: Test cllayerinfo (DEB)
+ run: cllayerinfo
+
+ - name: Uninstall (DEB)
+ run: apt-get remove -y "khronos-opencl-loader*" opencl-c-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/install;$GITHUB_WORKSPACE/external/OpenCL-Headers/install"
+ -D DRIVER_STUB_PATH=$GITHUB_WORKSPACE/build/`if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; then echo "libOpenCLDriverStub.so"; else echo "${{ matrix.CONF.CONFIG }}/libOpenCLDriverStub.so"; fi`
+ -S $GITHUB_WORKSPACE/test/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-ICD-Loader/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)
+ # We expect no pre-processor and compile flags (--cflags) but we do expect link flags (--libs)
+ run: export PKG_CONFIG_PATH="$GITHUB_WORKSPACE/install/lib/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-Headers/install/share/pkgconfig" &&
+ pkg-config OpenCL --cflags | grep -q "\-I$GITHUB_WORKSPACE/external/OpenCL-Headers/install/include" &&
+ pkg-config OpenCL --libs | grep -q "\-L$GITHUB_WORKSPACE/install/lib \-lOpenCL"
+
+ 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]
+ exclude:
+ - VER: clangcl
+ GEN: Ninja Multi-Config
+ include:
+ - VER: v142
+ GEN: Visual Studio 17 2022
+ BIN: x86
+ 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
+
+ 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-ICD-Loader
+ uses: actions/checkout@v4
+
+ - name: Checkout OpenCL-Headers
+ uses: actions/checkout@v4
+ with:
+ repository: KhronosGroup/OpenCL-Headers
+ path: external/OpenCL-Headers
+
+ - 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_C_EXTENSIONS=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 `
+ -- `
+ /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_C_EXTENSIONS=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 `
+ -- `
+ -j ${env:NUMBER_OF_PROCESSORS}
+ if ($LASTEXITCODE -ne 0) { throw "Building OpenCL-Headers 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_C_EXTENSIONS=OFF `
+ -D CMAKE_INSTALL_PREFIX=${env:GITHUB_WORKSPACE}\install `
+ -D CMAKE_PREFIX_PATH=${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install `
+ -S ${env:GITHUB_WORKSPACE} `
+ -B ${env:GITHUB_WORKSPACE}\build
+ if ($LASTEXITCODE -ne 0) { throw "Configuring OpenCL-ICD-Loader 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_C_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 `
+ -S ${env:GITHUB_WORKSPACE} `
+ -B ${env:GITHUB_WORKSPACE}\build
+ if ($LASTEXITCODE -ne 0) { throw "Configuring OpenCL-ICD-Loader 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-ICD-Loader in $Config failed." }
+ }
+
+ - name: Build (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"
+ foreach ($Config in 'Release','Debug') {
+ & cmake `
+ --build "${env:GITHUB_WORKSPACE}\build" `
+ --config $Config `
+ -- `
+ -j ${env:NUMBER_OF_PROCESSORS}
+ if ($LASTEXITCODE -ne 0) { throw "Building OpenCL-ICD-Loader in $Config failed." }
+ }
+
+ - name: Test
+ working-directory: ${{runner.workspace}}/OpenCL-ICD-Loader/build
+ run: |
+ $REG = if('${{matrix.BIN}}' -eq 'x64') {"reg"} else {"${env:SystemRoot}\Syswow64\reg.exe"}
+ $KEY_NAME = "HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors"
+ foreach ($Config in 'Release','Debug') {
+ $VALUE_NAME = "${env:GITHUB_WORKSPACE}/build/$Config/OpenCLDriverStub.dll"
+ & $REG ADD $KEY_NAME /v $VALUE_NAME /t REG_DWORD /d 0
+ & ctest -C $Config --output-on-failure --no-tests=error --parallel ${env:NUMBER_OF_PROCESSORS}
+ if ($LASTEXITCODE -ne 0) { throw "Testing OpenCL-ICD-Loader in $Config failed." }
+ & $REG DELETE $KEY_NAME /v $VALUE_NAME /f
+ }
+
+ - name: Install
+ run: |
+ & cmake `
+ --build "${env:GITHUB_WORKSPACE}\build" `
+ --config Release `
+ --target install
+ if ($LASTEXITCODE -ne 0) { throw "Installing OpenCL-ICD-Loader 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_C_EXTENSIONS=OFF `
+ -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL `
+ -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install;${env:GITHUB_WORKSPACE}\install" `
+ -D DRIVER_STUB_PATH="${env:GITHUB_WORKSPACE}\build\Release\OpenCLDriverStub.dll" `
+ -S "${env:GITHUB_WORKSPACE}\test\pkgconfig\bare" `
+ -B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare"
+ if ($LASTEXITCODE -ne 0) { throw "Configuring OpenCL-ICD-Loader standalone consume test failed." }
+ $REG = if('${{matrix.BIN}}' -eq 'x64') {"reg"} else {"${env:SystemRoot}\Syswow64\reg.exe"}
+ $KEY_NAME = "HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors"
+ $VALUE_NAME = "${env:GITHUB_WORKSPACE}/build/Release/OpenCLDriverStub.dll"
+ & $REG ADD $KEY_NAME /v $VALUE_NAME /t REG_DWORD /d 0
+ if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." }
+ foreach ($Config in 'Release','Debug') {
+ & cmake `
+ --build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare" `
+ --config $Config
+ if ($LASTEXITCODE -ne 0) { throw "Building OpenCL-ICD-Loader 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-ICD-Loader standalone consume test in $Config failed." }
+ }
+ & $REG DELETE $KEY_NAME /v $VALUE_NAME /f
+ if ($LASTEXITCODE -ne 0) { throw "Editing registry 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_C_EXTENSIONS=OFF `
+ -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL `
+ -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install;${env:GITHUB_WORKSPACE}\install" `
+ -D DRIVER_STUB_PATH="${env:GITHUB_WORKSPACE}\build\Release\OpenCLDriverStub.dll" `
+ -S "${env:GITHUB_WORKSPACE}\test\pkgconfig\bare" `
+ -B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare"
+ if ($LASTEXITCODE -ne 0) { throw "Configuring OpenCL-ICD-Loader standalone consume test failed." }
+ $REG = if('${{matrix.BIN}}' -eq 'x64') {"reg"} else {"${env:SystemRoot}\Syswow64\reg.exe"}
+ $KEY_NAME = "HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors"
+ $VALUE_NAME = "${env:GITHUB_WORKSPACE}/build/Release/OpenCLDriverStub.dll"
+ & $REG ADD $KEY_NAME /v $VALUE_NAME /t REG_DWORD /d 0
+ if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." }
+ foreach ($Config in 'Release','Debug') {
+ & cmake `
+ --build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare" `
+ --config $Config
+ if ($LASTEXITCODE -ne 0) { throw "Building OpenCL-ICD-Loader 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-ICD-Loader standalone consume test in $Config failed." }
+ }
+ & $REG DELETE $KEY_NAME /v $VALUE_NAME /f
+ if ($LASTEXITCODE -ne 0) { throw "Editing registry 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(`"`${CMAKE_CURRENT_LIST_DIR}/../OpenCLICDLoader/OpenCLICDLoaderTargets.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_C_EXTENSIONS=OFF `
+ -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL `
+ -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install;${env:GITHUB_WORKSPACE}\install" `
+ -D DRIVER_STUB_PATH="${env:GITHUB_WORKSPACE}\build\Release\OpenCLDriverStub.dll" `
+ -S "${env:GITHUB_WORKSPACE}\test\pkgconfig\sdk" `
+ -B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk"
+ if ($LASTEXITCODE -ne 0) { throw "Configuring OpenCL-ICD-Loader in-SDK consume test failed." }
+ $REG = if('${{matrix.BIN}}' -eq 'x64') {"reg"} else {"${env:SystemRoot}\Syswow64\reg.exe"}
+ $KEY_NAME = "HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors"
+ $VALUE_NAME = "${env:GITHUB_WORKSPACE}/build/Release/OpenCLDriverStub.dll"
+ & $REG ADD $KEY_NAME /v $VALUE_NAME /t REG_DWORD /d 0
+ if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." }
+ foreach ($Config in 'Release','Debug') {
+ & cmake `
+ --build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk" `
+ --config $Config
+ if ($LASTEXITCODE -ne 0) { throw "Building OpenCL-ICD-Loader 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-ICD-Loader in-SDK consume test in $Config failed." }
+ }
+ & $REG DELETE $KEY_NAME /v $VALUE_NAME /f
+ if ($LASTEXITCODE -ne 0) { throw "Editing registry 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_C_EXTENSIONS=OFF `
+ -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL `
+ -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install;${env:GITHUB_WORKSPACE}\install" `
+ -D DRIVER_STUB_PATH="${env:GITHUB_WORKSPACE}\build\Release\OpenCLDriverStub.dll" `
+ -S "${env:GITHUB_WORKSPACE}\test\pkgconfig\sdk" `
+ -B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk"
+ if ($LASTEXITCODE -ne 0) { throw "Configuring OpenCL-ICD-Loader in-SDK consume test failed." }
+ $REG = if('${{matrix.BIN}}' -eq 'x64') {"reg"} else {"${env:SystemRoot}\Syswow64\reg.exe"}
+ $KEY_NAME = "HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors"
+ $VALUE_NAME = "${env:GITHUB_WORKSPACE}/build/Release/OpenCLDriverStub.dll"
+ & $REG ADD $KEY_NAME /v $VALUE_NAME /t REG_DWORD /d 0
+ if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." }
+ foreach ($Config in 'Release','Debug') {
+ & cmake `
+ --build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk" `
+ --config $Config
+ if ($LASTEXITCODE -ne 0) { throw "Building OpenCL-ICD-Loader 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-ICD-Loader in-SDK consume test in $Config failed." }
+ }
+ & $REG DELETE $KEY_NAME /v $VALUE_NAME /f
+ if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." }
+
+ macos:
+ runs-on: macos-latest
+ defaults:
+ run:
+ shell: bash
+ strategy:
+ matrix:
+ C_COMPILER:
+ - /usr/bin/clang
+ - gcc-11
+ # Disabled due to problems with the __API_AVAILABLE macro
+ # - gcc-13
+ GEN:
+ - Xcode
+ - Ninja Multi-Config
+ exclude:
+ # These entries are excluded, since XCode selects its own compiler
+ - C_COMPILER: gcc-11
+ GEN: Xcode
+ - C_COMPILER: gcc-13
+ GEN: Xcode
+ env:
+ CFLAGS: -Wall -Wextra -pedantic -Werror
+ CC: ${{ matrix.C_COMPILER }}
+
+ steps:
+ - name: Checkout OpenCL-ICD-Loader
+ uses: actions/checkout@v4
+
+ - name: Checkout OpenCL-Headers
+ uses: actions/checkout@v4
+ with:
+ repository: KhronosGroup/OpenCL-Headers
+ path: external/OpenCL-Headers
+
+ - 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: Configure
+ run: cmake
+ -G "${{matrix.GEN}}"
+ -D BUILD_TESTING=ON
+ -D CMAKE_C_EXTENSIONS=OFF
+ -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install
+ -D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/external/OpenCL-Headers/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-ICD-Loader/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_C_EXTENSIONS=OFF
+ -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/install"
+ -S $GITHUB_WORKSPACE/test/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`
+
+ - name: Test pkg-config
+ run: |
+ export PKG_CONFIG_PATH=$GITHUB_WORKSPACE/install/lib/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-Headers/install/share/pkgconfig &&
+ pkg-config OpenCL --cflags | grep -q "\-I$GITHUB_WORKSPACE/external/OpenCL-Headers/install/include" &&
+ pkg-config OpenCL --libs | grep -q "\-L$GITHUB_WORKSPACE/install/lib -lOpenCL"
+
+ - name: Consume pkg-config
+ run: export PKG_CONFIG_PATH=$GITHUB_WORKSPACE/install/lib/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-Headers/install/share/pkgconfig &&
+ cmake
+ -G "${{matrix.GEN}}"
+ -D CMAKE_C_EXTENSIONS=OFF
+ -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install"
+ -D DRIVER_STUB_PATH=$GITHUB_WORKSPACE/build/Release/libOpenCLDriverStub.dylib
+ -B $GITHUB_WORKSPACE/build/downstream/pkgconfig
+ -S $GITHUB_WORKSPACE/test/pkgconfig/pkgconfig &&
+ cmake --build $GITHUB_WORKSPACE/build/downstream/pkgconfig --config Release --parallel `sysctl -n hw.logicalcpu` &&
+ cmake --build $GITHUB_WORKSPACE/build/downstream/pkgconfig --config Debug --parallel `sysctl -n hw.logicalcpu` &&
+ cd $GITHUB_WORKSPACE/build/downstream/pkgconfig &&
+ 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`
+
+ 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
+ steps:
+ - name: Checkout OpenCL-ICD-Loader
+ uses: actions/checkout@v4
+
+ - name: Checkout OpenCL-Headers
+ uses: actions/checkout@v4
+ with:
+ repository: KhronosGroup/OpenCL-Headers
+ path: external/OpenCL-Headers
+
+ - 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
+ run: cmake
+ -G "Unix Makefiles"
+ -D BUILD_TESTING=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
+ -S $GITHUB_WORKSPACE
+ -B $GITHUB_WORKSPACE/build
+
+ - name: Build
+ run: cmake --build $GITHUB_WORKSPACE/build --parallel `nproc`
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000..cf4cf53
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,73 @@
+name: Release
+
+on:
+ push:
+ tags:
+ - "v*"
+env:
+ distroseries: jammy
+
+jobs:
+ release:
+ runs-on: ubuntu-latest
+ defaults:
+ run:
+ shell: bash
+ steps:
+ - name: Add PPA
+ run: sudo add-apt-repository -y ppa:${{ vars.PPA }}
+
+ - name: Install prerequisites
+ run: sudo apt-get update -qq && sudo apt-get install -y cmake devscripts debhelper-compat=13 opencl-c-headers
+
+ - name: Import GPG signing key
+ run: echo "${{ secrets.DEB_SIGNING_KEY }}" | gpg --import
+
+ - name: Download and extract source code
+ run: |
+ wget -O $GITHUB_WORKSPACE/source.orig.tar.gz https://github.com/$GITHUB_REPOSITORY/archive/refs/tags/$GITHUB_REF_NAME.tar.gz
+ tar -xvf $GITHUB_WORKSPACE/source.orig.tar.gz
+
+ - name: Configure project out-of-tree
+ run: cmake
+ -S $GITHUB_WORKSPACE/OpenCL-ICD-Loader*
+ -B $GITHUB_WORKSPACE/../build
+ -D CMAKE_BUILD_TYPE=Release
+ -D CMAKE_INSTALL_PREFIX=/usr
+ -D BUILD_TESTING=OFF
+ -D LATEST_RELEASE_VERSION=$GITHUB_REF_NAME
+ -D CPACK_DEBIAN_PACKAGE_MAINTAINER="${{ vars.DEB_MAINTAINER }}"
+ -D DEBIAN_VERSION_SUFFIX=${{ vars.DEB_VERSION_SUFFIX }}
+
+ - name: Generate packaging scripts
+ run: cmake
+ -D CMAKE_CACHE_PATH=$GITHUB_WORKSPACE/../build/CMakeCache.txt
+ -D ORIG_ARCHIVE=$GITHUB_WORKSPACE/source.orig.tar.gz
+ -D LATEST_RELEASE_VERSION=$GITHUB_REF_NAME
+ -D DEBIAN_DISTROSERIES=${{ env.distroseries }}
+ -D DEBIAN_PACKAGE_MAINTAINER="${{ vars.DEB_MAINTAINER }}"
+ -D DEBIAN_VERSION_SUFFIX=${{ vars.DEB_VERSION_SUFFIX }}
+ -P $GITHUB_WORKSPACE/OpenCL-ICD-Loader*/cmake/DebSourcePkg.cmake
+
+ - name: Build source package
+ run: |
+ cd $GITHUB_WORKSPACE/OpenCL-ICD-Loader*/
+ debuild -S -sa
+
+ - name: Build binary package
+ run: cpack
+ -G DEB
+ -C Release
+ -B $GITHUB_WORKSPACE/../build
+ --config $GITHUB_WORKSPACE/../build/CPackConfig.cmake
+
+ # The following step does not depend on the previous step "Build binary package",
+ # but if the binary package build is unsuccessful, it is better not to push the
+ # source packages to the PPA
+ - name: Push source package to the PPA
+ run: dput ppa:${{ vars.PPA }} $GITHUB_WORKSPACE/*source.changes
+
+ - name: Create GitHub release
+ uses: softprops/action-gh-release@v1
+ with:
+ files: ${{ github.workspace }}/../build/*.deb
diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml
deleted file mode 100644
index 407a7e2..0000000
--- a/.github/workflows/windows.yml
+++ /dev/null
@@ -1,246 +0,0 @@
-name: Windows
-
-on: [push, pull_request]
-
-jobs:
-
- tools:
- runs-on: windows-2022
- strategy:
- matrix:
- CMAKE: [3.22.0]
- NINJA: [1.10.2]
- env:
- CMAKE_URL: https://github.com/Kitware/CMake/releases/download/v${{matrix.CMAKE}}/cmake-${{matrix.CMAKE}}-windows-x86_64.zip
- NINJA_URL: https://github.com/ninja-build/ninja/releases/download/v${{matrix.NINJA}}/ninja-win.zip
-
- steps:
- - name: Cache CMake
- uses: actions/cache@v3
- id: cmake
- env:
- cache-name: cache-cmake
- with:
- path: ~/Downloads/cmake-${{matrix.CMAKE}}-windows-x86_64.zip
- key: ${{ runner.os }}-${{ env.cache-name }}-${{matrix.CMAKE}}
- - name: Cache Ninja
- uses: actions/cache@v3
- id: ninja
- env:
- cache-name: cache-ninja
- with:
- path: ~/Downloads/ninja-win.zip
- key: ${{ runner.os }}-${{ env.cache-name }}-${{matrix.NINJA}}
- - name: Checkout CMake
- if: steps.cmake.outputs.cache-hit != 'true'
- shell: pwsh
- run: Invoke-WebRequest ${env:CMAKE_URL} -OutFile ~\Downloads\cmake-${{matrix.CMAKE}}-windows-x86_64.zip
- - name: Checkout Ninja
- if: steps.ninja.outputs.cache-hit != 'true'
- shell: pwsh
- run: Invoke-WebRequest ${env:NINJA_URL} -OutFile ~\Downloads\ninja-win.zip
-
- msvc:
- needs: [tools]
- 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]
- NINJA: [1.10.2]
- env:
- CMAKE_EXE: C:\Tools\Kitware\CMake\${{matrix.CMAKE}}\bin\cmake.exe
- CTEST_EXE: C:\Tools\Kitware\CMake\${{matrix.CMAKE}}\bin\ctest.exe
- NINJA_EXE: C:\Tools\Ninja\ninja.exe
-
- steps:
- - name: Checkout OpenCL-ICD-Loader
- uses: actions/checkout@v3
-
- - name: Checkout OpenCL-Headers
- uses: actions/checkout@v3
- with:
- repository: KhronosGroup/OpenCL-Headers
- path: external/OpenCL-Headers
-
- - name: Restore CMake
- uses: actions/cache@v3
- id: cmake
- env:
- cache-name: cache-cmake
- with:
- path: ~/Downloads/cmake-${{matrix.CMAKE}}-windows-x86_64.zip
- key: ${{ runner.os }}-${{ env.cache-name }}-${{matrix.CMAKE}}
-
- - name: Restore Ninja
- uses: actions/cache@v3
- id: ninja
- env:
- cache-name: cache-ninja
- with:
- path: ~/Downloads/ninja-win.zip
- key: ${{ runner.os }}-${{ env.cache-name }}-${{matrix.NINJA}}
-
- - name: Create Build Environment
- shell: pwsh
- run: |
- Expand-Archive ~\Downloads\cmake-${{matrix.CMAKE}}-windows-x86_64.zip -DestinationPath C:\Tools\Kitware\CMake\
- Rename-Item C:\Tools\Kitware\CMake\* ${{matrix.CMAKE}}
- Expand-Archive ~\Downloads\ninja-win.zip -DestinationPath C:\Tools\Ninja\
- & ${env:CMAKE_EXE} --version
- & ${env:NINJA_EXE} --version
-
- - name: Build & install OpenCL-Headers (MSBuild)
- if: matrix.GEN == 'Visual Studio 17 2022'
- shell: cmd
- run: |
- set C_FLAGS="/W4 /WX"
- if /I "${{matrix.BIN}}"=="x86" (set BIN=Win32) else (set BIN=x64)
- %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 -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 --config Release -- /verbosity:minimal /maxCpuCount /noLogo
-
- - name: Build & install OpenCL-Headers (Ninja Multi-Config)
- if: matrix.GEN == 'Ninja Multi-Config'
- shell: cmd
- 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 -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 -- -j%NUMBER_OF_PROCESSORS%
-
- - name: Configure (MSBuild)
- if: matrix.GEN == 'Visual Studio 17 2022'
- shell: cmd
- # no /WX during configuration because:
- # warning C4459: declaration of 'platform' hides global declaration
- # warning C4100: 'input_headers': unreferenced formal parameter
- run: |
- set C_FLAGS="/W4"
- if /I "${{matrix.BIN}}"=="x86" (set BIN=Win32) else (set BIN=x64)
- %CMAKE_EXE% -G "${{matrix.GEN}}" -A %BIN% -T ${{matrix.VER}} -D BUILD_TESTING=ON -D CMAKE_C_FLAGS=%C_FLAGS% -D CMAKE_C_STANDARD=${{matrix.STD}} -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} -D CMAKE_INSTALL_PREFIX=%GITHUB_WORKSPACE%\install -D CMAKE_PREFIX_PATH=%GITHUB_WORKSPACE%\external\OpenCL-Headers\install -S %GITHUB_WORKSPACE% -B %GITHUB_WORKSPACE%\build
-
- - name: Configure (Ninja Multi-Config)
- if: matrix.GEN == 'Ninja Multi-Config'
- shell: cmd
- # no /WX during configuration because:
- # warning C4459: declaration of 'platform' hides global declaration
- # warning C4100: 'input_headers': unreferenced formal parameter
- run: |
- set C_FLAGS="/W4"
- 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 BUILD_TESTING=ON -D CMAKE_C_FLAGS=%C_FLAGS% -D CMAKE_C_STANDARD=${{matrix.STD}} -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL -D CMAKE_INSTALL_PREFIX=%GITHUB_WORKSPACE%\install -D CMAKE_PREFIX_PATH=%GITHUB_WORKSPACE%\external\OpenCL-Headers\install -S %GITHUB_WORKSPACE% -B %GITHUB_WORKSPACE%\build
-
- - name: Build (MSBuild)
- if: matrix.GEN == 'Visual Studio 17 2022'
- shell: cmd
- run: |
- %CMAKE_EXE% --build %GITHUB_WORKSPACE%\build --config Release -- /verbosity:minimal /maxCpuCount /noLogo
- %CMAKE_EXE% --build %GITHUB_WORKSPACE%\build --config Debug -- /verbosity:minimal /maxCpuCount /noLogo
-
- - name: Build (Ninja)
- if: matrix.GEN == 'Ninja Multi-Config'
- shell: cmd
- run: |
- 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% --build %GITHUB_WORKSPACE%\build --config Release
- %CMAKE_EXE% --build %GITHUB_WORKSPACE%\build --config Debug
-
- - name: Test
- working-directory: ${{runner.workspace}}/OpenCL-ICD-Loader/build
- shell: cmd
- run: |
- if /I "${{matrix.BIN}}"=="x64" set REG=reg
- if /I "${{matrix.BIN}}"=="x86" set REG=%systemroot%\Syswow64\reg.exe
- %REG% ADD HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors /v %GITHUB_WORKSPACE%/build/Release/OpenCLDriverStub.dll /t REG_DWORD /d 0
- %CTEST_EXE% -C Release --output-on-failure --parallel %NUMBER_OF_PROCESSORS%
- if errorlevel 1 (
- exit /b %errorlevel%
- )
- %REG% DELETE HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors /v %GITHUB_WORKSPACE%/build/Release/OpenCLDriverStub.dll /f
- %REG% ADD HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors /v %GITHUB_WORKSPACE%/build/Debug/OpenCLDriverStub.dll /t REG_DWORD /d 0
- %CTEST_EXE% -C Debug --output-on-failure --parallel %NUMBER_OF_PROCESSORS%
- if errorlevel 1 (
- exit /b %errorlevel%
- )
- %REG% DELETE HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors /v %GITHUB_WORKSPACE%/build/Debug/OpenCLDriverStub.dll /f
-
- - name: Install
- shell: cmd
- run: |
- %CMAKE_EXE% --build %GITHUB_WORKSPACE%/build --config Release --target install
-
- - name: "Consume (MSBuild standalone): Configure/Build/Test"
- shell: cmd
- run: |
- set C_FLAGS="/W4"
- if /I "${{matrix.BIN}}"=="x86" (set BIN=Win32) else (set BIN=x64)
- 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_C_FLAGS=%C_FLAGS% -D CMAKE_C_STANDARD=${{matrix.STD}} -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL -D CMAKE_INSTALL_PREFIX=%GITHUB_WORKSPACE%\install -D CMAKE_PREFIX_PATH="%GITHUB_WORKSPACE%\external\OpenCL-Headers\install;%GITHUB_WORKSPACE%\install" -D DRIVER_STUB_PATH=%GITHUB_WORKSPACE%/build/Release/OpenCLDriverStub.dll -B %GITHUB_WORKSPACE%/build/downstream/bare -S %GITHUB_WORKSPACE%/test/pkgconfig/bare
- %CMAKE_EXE% --build %GITHUB_WORKSPACE%/test/pkgconfig/bare --config Release
- %CMAKE_EXE% --build %GITHUB_WORKSPACE%/test/pkgconfig/bare --config Debug
- cd %GITHUB_WORKSPACE%/test/pkgconfig/bare
- %CTEST_EXE% --output-on-failure -C Release
- %CTEST_EXE% --output-on-failure -C Debug
-
- - name: "Consume (MSBuild SDK): Configure/Build/Test"
- shell: cmd
- run: |
- set C_FLAGS="/W4"
- if /I "${{matrix.BIN}}"=="x86" (set BIN=Win32) else (set BIN=x64)
- %CMAKE_EXE% -E make_directory $GITHUB_WORKSPACE/install/share/cmake/OpenCL
- echo -e 'include("/home/runner/work/OpenCL-ICD-Loader/OpenCL-ICD-Loader/external/OpenCL-Headers/install/share/cmake/OpenCLHeaders/OpenCLHeadersTargets.cmake")\ninclude("${CMAKE_CURRENT_LIST_DIR}/../OpenCLICDLoader/OpenCLICDLoaderTargets.cmake")' > $GITHUB_WORKSPACE/install/share/cmake/OpenCL/OpenCLConfig.cmake
- %CMAKE_EXE% -G "${{matrix.GEN}}" -D CMAKE_C_FLAGS=%C_FLAGS% -D CMAKE_C_STANDARD=${{matrix.STD}} -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL -D CMAKE_INSTALL_PREFIX=%GITHUB_WORKSPACE%\install -D CMAKE_PREFIX_PATH="%GITHUB_WORKSPACE%\external\OpenCL-Headers\install;%GITHUB_WORKSPACE%\install" -D DRIVER_STUB_PATH=%GITHUB_WORKSPACE%/build/Release/OpenCLDriverStub.dll -B %GITHUB_WORKSPACE%/build/downstream/bare -S %GITHUB_WORKSPACE%/test/pkgconfig/bare
- %CMAKE_EXE% --build %GITHUB_WORKSPACE%/test/pkgconfig/bare --config Release
- %CMAKE_EXE% --build %GITHUB_WORKSPACE%/test/pkgconfig/bare --config Debug
- cd %GITHUB_WORKSPACE%/test/pkgconfig/bare
- %CTEST_EXE% --output-on-failure -C Release
- %CTEST_EXE% --output-on-failure -C Debug
-
- - name: "Consume (Ninja-Multi-Config standalone): Configure/Build/Test"
- shell: cmd
- run: |
- set C_FLAGS="/W4"
- 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_EXE_LINKER_FLAGS=/INCREMENTAL -D CMAKE_INSTALL_PREFIX=%GITHUB_WORKSPACE%\install -D CMAKE_PREFIX_PATH="%GITHUB_WORKSPACE%\external\OpenCL-Headers\install;%GITHUB_WORKSPACE%\install" -D DRIVER_STUB_PATH=%GITHUB_WORKSPACE%/build/Release/OpenCLDriverStub.dll -B %GITHUB_WORKSPACE%/build/downstream/bare -S %GITHUB_WORKSPACE%/test/pkgconfig/bare
- %CMAKE_EXE% --build %GITHUB_WORKSPACE%/test/pkgconfig/bare --config Release
- %CMAKE_EXE% --build %GITHUB_WORKSPACE%/test/pkgconfig/bare --config Debug
- cd %GITHUB_WORKSPACE%/test/pkgconfig/bare
- %CTEST_EXE% --output-on-failure -C Release
- %CTEST_EXE% --output-on-failure -C Debug
-
- - name: "Consume (Ninja-Multi-Config SDK): Configure/Build/Test"
- shell: cmd
- run: |
- set C_FLAGS="/W4"
- 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)
- %CMAKE_EXE% -E make_directory $GITHUB_WORKSPACE/install/share/cmake/OpenCL
- echo -e 'include("/home/runner/work/OpenCL-ICD-Loader/OpenCL-ICD-Loader/external/OpenCL-Headers/install/share/cmake/OpenCLHeaders/OpenCLHeadersTargets.cmake")\ninclude("${CMAKE_CURRENT_LIST_DIR}/../OpenCLICDLoader/OpenCLICDLoaderTargets.cmake")' > $GITHUB_WORKSPACE/install/share/cmake/OpenCL/OpenCLConfig.cmake
- %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_EXE_LINKER_FLAGS=/INCREMENTAL -D CMAKE_INSTALL_PREFIX=%GITHUB_WORKSPACE%\install -D CMAKE_PREFIX_PATH="%GITHUB_WORKSPACE%\external\OpenCL-Headers\install;%GITHUB_WORKSPACE%\install" -D DRIVER_STUB_PATH=%GITHUB_WORKSPACE%/build/Release/OpenCLDriverStub.dll -B %GITHUB_WORKSPACE%/build/downstream/bare -S %GITHUB_WORKSPACE%/test/pkgconfig/bare
- %CMAKE_EXE% --build %GITHUB_WORKSPACE%/test/pkgconfig/bare --config Release
- %CMAKE_EXE% --build %GITHUB_WORKSPACE%/test/pkgconfig/bare --config Debug
- cd %GITHUB_WORKSPACE%/test/pkgconfig/bare
- %CTEST_EXE% --output-on-failure -C Release
- %CTEST_EXE% --output-on-failure -C Debug
diff --git a/.gitignore b/.gitignore
index 9bb7c13..8a9dc70 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,22 @@
+# Build dir
+[Bb]uild/
+
+# Install dir
+[Ii]nstall/
+
+# External dir
+[Ee]xternal/
+
+# Package dir
+[Pp]ackage[-_\s\d]*/
+
+# Tackage dir
+[T]esting/
+
+# inc subdirs
inc/CL/
inc/EGL/
inc/KHR/
-build/
+
+# Visual Studio Code
+.vscode
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7cb3079..a1617d0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required (VERSION 3.1)
+cmake_minimum_required (VERSION 3.16)
# Include guard for including this project multiple times
if(TARGET OpenCL)
@@ -6,7 +6,7 @@
endif()
project (OpenCL-ICD-Loader
- VERSION 1.2
+ VERSION 3.0
LANGUAGES C)
find_package (Threads REQUIRED)
@@ -46,7 +46,7 @@
else()
set(OPENCL_ICD_LOADER_BUILD_SHARED_LIBS_DEFAULT ON)
endif()
- option(OPENCL_ICD_LOADER_BUILD_SHARED_LIBS "Build OpenCL ICD Loader as shared library" ${OPENCL_ICD_LOADER_BUILD_SHARED_LIBS_DEFAULT})
+option(OPENCL_ICD_LOADER_BUILD_SHARED_LIBS "Build OpenCL ICD Loader as shared library" ${OPENCL_ICD_LOADER_BUILD_SHARED_LIBS_DEFAULT})
# This option enables/disables support for OpenCL layers in the ICD loader.
# It is currently needed default while the specification is being formalized,
@@ -55,10 +55,13 @@
include(CMakeDependentOption)
cmake_dependent_option(ENABLE_OPENCL_LAYERINFO "Enable building cllayerinfo tool" ON ENABLE_OPENCL_LAYERS OFF)
-set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
-include(JoinPaths)
+include(GNUInstallDirs)
+set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
include(CheckFunctionExists)
+include(JoinPaths)
+include(Package)
+
check_function_exists(secure_getenv HAVE_SECURE_GETENV)
check_function_exists(__secure_getenv HAVE___SECURE_GETENV)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/loader/icd_cmake_config.h.in
@@ -118,7 +121,7 @@
add_library (OpenCL::OpenCL ALIAS OpenCL)
-set_target_properties (OpenCL PROPERTIES VERSION "1.2" SOVERSION "1")
+set_target_properties (OpenCL PROPERTIES VERSION 1\.0\.0 SOVERSION "1")
if (WIN32)
target_link_libraries (OpenCL PRIVATE cfgmgr32.lib runtimeobject.lib)
@@ -219,13 +222,11 @@
add_subdirectory (test)
endif()
-include (GNUInstallDirs)
-
install(
TARGETS OpenCL
EXPORT OpenCLICDLoaderTargets
LIBRARY
- DESTINATION ${CMAKE_INSTALL_LIBDIR} # obtained from GNUInstallDirs
+ DESTINATION ${CMAKE_INSTALL_LIBDIR} # obtained from GNUInstallDirs
)
install(
# FILES $<TARGET_PDB_FILE:OpenCL> is cleanest, but is MSVC link.exe specific. LLVM's lld.exe and lld-link.exe don't support it (configure-time error)
@@ -238,9 +239,9 @@
if (ENABLE_OPENCL_LAYERINFO)
install(
TARGETS cllayerinfo
- EXPORT OpenCLICDLoaderTargets
RUNTIME
DESTINATION ${CMAKE_INSTALL_BINDIR}
+ COMPONENT cllayerinfo
)
endif()
@@ -260,10 +261,12 @@
FILE OpenCLICDLoaderTargets.cmake
NAMESPACE OpenCL::
DESTINATION ${config_package_location}
+ COMPONENT dev
)
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenCLICDLoader/OpenCLICDLoaderConfig.cmake
DESTINATION ${config_package_location}
+ COMPONENT dev
)
unset(CMAKE_SIZEOF_VOID_P)
@@ -276,20 +279,18 @@
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenCLICDLoader/OpenCLICDLoaderConfigVersion.cmake
DESTINATION ${config_package_location}
+ COMPONENT dev
)
+# Separate namelink from shared library and symlink for DEB packaging
install (TARGETS OpenCL
- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
+ LIBRARY
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ COMPONENT runtime
+ NAMELINK_SKIP)
-join_paths(OPENCL_LIBDIR_PC "\${exec_prefix}" "${CMAKE_INSTALL_LIBDIR}")
-join_paths(OPENCL_INCLUDEDIR_PC "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}")
-
-if (NOT MSVC)
- configure_file(OpenCL.pc.in OpenCL.pc @ONLY)
- set(pkg_config_location ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
- install(
- FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenCL.pc
- DESTINATION ${pkg_config_location})
-endif()
+install (TARGETS OpenCL
+ LIBRARY
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ COMPONENT dev
+ NAMELINK_ONLY)
diff --git a/OpenCL.pc.in b/OpenCL.pc.in
index 1b6730c..ef35333 100644
--- a/OpenCL.pc.in
+++ b/OpenCL.pc.in
@@ -1,4 +1,4 @@
-prefix=@CMAKE_INSTALL_PREFIX@
+prefix=@PKGCONFIG_PREFIX@
exec_prefix=${prefix}
libdir=@OPENCL_LIBDIR_PC@
diff --git a/cmake/DebSourcePkg.cmake b/cmake/DebSourcePkg.cmake
new file mode 100644
index 0000000..eb10e6a
--- /dev/null
+++ b/cmake/DebSourcePkg.cmake
@@ -0,0 +1,160 @@
+# This script produces the changelog, control and rules file in the debian
+# directory. These files are needed to build a Debian source package from the repository.
+# Run this in CMake script mode, e.g.
+# $ cd OpenCL-ICD-Loader
+# $ cmake -S . -B ../build -D BUILD_TESTING=OFF
+# $ cmake
+# -DCMAKE_CACHE_PATH=../build/CMakeCache.txt
+# -DCPACK_DEBIAN_PACKAGE_MAINTAINER="Example Name <example@example.com>"
+# -DDEBIAN_DISTROSERIES=jammy
+# -DORIG_ARCHIVE=../OpenCL-ICD-Loader.tar.gz
+# -DLATEST_RELEASE_VERSION=v2023.08.29
+# -P cmake/DebSourcePkg.cmake
+# $ debuild -S -sa
+
+cmake_minimum_required(VERSION 3.21) # file(COPY_FILE) is added in CMake 3.21
+
+if(NOT EXISTS "${CMAKE_CACHE_PATH}")
+ message(FATAL_ERROR "CMAKE_CACHE_PATH is not set or does not exist")
+endif()
+if(NOT DEFINED DEBIAN_PACKAGE_MAINTAINER)
+ message(FATAL_ERROR "DEBIAN_PACKAGE_MAINTAINER is not set")
+endif()
+if(NOT DEFINED DEBIAN_DISTROSERIES)
+ message(FATAL_ERROR "DEBIAN_DISTROSERIES is not set")
+endif()
+if(NOT DEFINED ORIG_ARCHIVE)
+ message(WARNING "ORIG_ARCHIVE is not set")
+elseif(NOT EXISTS "${ORIG_ARCHIVE}")
+ message(FATAL_ERROR "ORIG_ARCHIVE is defined, but the file does not exist at \"${ORIG_ARCHIVE}\"")
+endif()
+if(NOT DEFINED LATEST_RELEASE_VERSION)
+ message(WARNING "LATEST_RELEASE_VERSION is not set")
+endif()
+if(NOT DEFINED DEBIAN_VERSION_SUFFIX)
+ message(WARNING "DEBIAN_VERSION_SUFFIX is not set")
+endif()
+
+# Extracting the project version from the main CMakeLists.txt via regex
+file(READ "${CMAKE_CACHE_PATH}" CMAKE_CACHE)
+string(REGEX MATCH "CMAKE_PROJECT_VERSION[^=]*=([^\n]*)" REGEX_MATCH "${CMAKE_CACHE}")
+if(NOT REGEX_MATCH)
+ message(FATAL_ERROR "Could not extract project version from CMakeLists.txt")
+endif()
+set(PROJECT_VERSION "${CMAKE_MATCH_1}")
+
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}")
+# Package.cmake contains all details for packaging
+include(PackageSetup)
+
+# Append a space after every newline in the description. This format is required
+# in the control file.
+string(REPLACE "\n" "\n " CPACK_DEBIAN_DEV_DESCRIPTION "${CPACK_DEBIAN_DEV_DESCRIPTION}")
+string(REPLACE "\n" "\n " CPACK_DEBIAN_RUNTIME_DESCRIPTION "${CPACK_DEBIAN_RUNTIME_DESCRIPTION}")
+string(REPLACE "\n" "\n " CPACK_DEBIAN_CLLAYERINFO_DESCRIPTION "${CPACK_DEBIAN_CLLAYERINFO_DESCRIPTION}")
+
+set(DEB_SOURCE_PKG_DIR "${CMAKE_CURRENT_LIST_DIR}/../debian")
+# Write debian/control
+file(WRITE "${DEB_SOURCE_PKG_DIR}/control"
+"Source: ${PACKAGE_NAME_PREFIX}
+Section: ${CPACK_DEBIAN_DEV_PACKAGE_SECTION}
+Priority: optional
+Maintainer: ${DEBIAN_PACKAGE_MAINTAINER}
+Build-Depends: cmake, debhelper-compat (=13), opencl-c-headers
+Rules-Requires-Root: no
+Homepage: ${CPACK_DEBIAN_PACKAGE_HOMEPAGE}
+Standards-Version: 4.6.2
+
+Package: ${CPACK_DEBIAN_DEV_PACKAGE_NAME}
+Architecture: any
+Multi-Arch: same
+Depends: ${CPACK_DEBIAN_DEV_PACKAGE_DEPENDS}, ${CPACK_DEBIAN_RUNTIME_PACKAGE_NAME} (=${PACKAGE_VERSION_REVISION})
+Recommends: ${CPACK_DEBIAN_DEV_PACKAGE_RECOMMENDS}
+Conflicts: ${CPACK_DEBIAN_DEV_PACKAGE_CONFLICTS}
+Breaks: ${CPACK_DEBIAN_DEV_PACKAGE_BREAKS}
+Replaces: ${CPACK_DEBIAN_DEV_PACKAGE_REPLACES}
+Provides: ${CPACK_DEBIAN_DEV_PACKAGE_PROVIDES}
+Description: ${CPACK_DEBIAN_DEV_DESCRIPTION}
+
+Package: ${CPACK_DEBIAN_RUNTIME_PACKAGE_NAME}
+Section: ${CPACK_DEBIAN_RUNTIME_PACKAGE_SECTION}
+Architecture: any
+Multi-Arch: same
+Depends: ${CPACK_DEBIAN_RUNTIME_PACKAGE_DEPENDS}
+# Conflicts and replaces deliberately not added
+# The runtime package provides libOpenCL.so.1.0.0 and libOpenCL.so.1 via update-alternatives
+# Conflicts: ${CPACK_DEBIAN_RUNTIME_PACKAGE_CONFLICTS}
+# Replaces: ${CPACK_DEBIAN_RUNTIME_PACKAGE_REPLACES}
+Provides: ${CPACK_DEBIAN_RUNTIME_PACKAGE_PROVIDES}
+Description: ${CPACK_DEBIAN_RUNTIME_DESCRIPTION}
+
+Package: ${CPACK_DEBIAN_CLLAYERINFO_PACKAGE_NAME}
+Section: ${CPACK_DEBIAN_CLLAYERINFO_PACKAGE_SECTION}
+Architecture: any
+Depends: ${CPACK_DEBIAN_CLLAYERINFO_PACKAGE_DEPENDS}, ${CPACK_DEBIAN_RUNTIME_PACKAGE_NAME} (=${PACKAGE_VERSION_REVISION})
+Conflicts: ${CPACK_DEBIAN_CLLAYERINFO_PACKAGE_CONFLICTS}
+Replaces: ${CPACK_DEBIAN_CLLAYERINFO_PACKAGE_REPLACES}
+Provides: ${CPACK_DEBIAN_CLLAYERINFO_PACKAGE_PROVIDES}
+Description: ${CPACK_DEBIAN_CLLAYERINFO_DESCRIPTION}
+"
+)
+# Write debian/changelog
+string(TIMESTAMP CURRENT_TIMESTAMP "%a, %d %b %Y %H:%M:%S +0000" UTC)
+file(WRITE "${DEB_SOURCE_PKG_DIR}/changelog"
+"${PACKAGE_NAME_PREFIX} (${PACKAGE_VERSION_REVISION}) ${DEBIAN_DISTROSERIES}; urgency=medium
+
+ * Released version ${PACKAGE_VERSION_REVISION}
+
+ -- ${DEBIAN_PACKAGE_MAINTAINER} ${CURRENT_TIMESTAMP}
+")
+# Write debian/rules
+file(WRITE "${DEB_SOURCE_PKG_DIR}/rules"
+"#!/usr/bin/make -f
+%:
+\tdh $@
+
+override_dh_auto_configure:
+\tdh_auto_configure -- -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF
+
+GENERATED_MAINTAINER_SCRIPTS := $(patsubst %.in,%,$(wildcard debian/*.alternatives.in))
+
+$(GENERATED_MAINTAINER_SCRIPTS): %: %.in
+\tsed \"s%@DEB_HOST_MULTIARCH@%$(DEB_HOST_MULTIARCH)%g\" < $< > $@
+
+execute_before_dh_install: $(GENERATED_MAINTAINER_SCRIPTS)
+\ttrue # An empty rule would confuse dh
+")
+file(WRITE "${DEB_SOURCE_PKG_DIR}/${CPACK_DEBIAN_DEV_PACKAGE_NAME}.install"
+"usr/lib/*/pkgconfig
+usr/lib/*/lib*.so
+usr/share
+")
+# The .so files are installed to a different directory, and then linked back
+# the the original location via update-alternatives.
+file(WRITE "${DEB_SOURCE_PKG_DIR}/${CPACK_DEBIAN_RUNTIME_PACKAGE_NAME}.install"
+"usr/lib/*/lib*.so.* usr/lib/\${DEB_HOST_MULTIARCH}/KhronosOpenCLICDLoader
+")
+file(WRITE "${DEB_SOURCE_PKG_DIR}/${CPACK_DEBIAN_RUNTIME_PACKAGE_NAME}.alternatives.in"
+"Name: libOpenCL.so.1.0.0-@DEB_HOST_MULTIARCH@
+Link: /usr/lib/@DEB_HOST_MULTIARCH@/libOpenCL.so.1.0.0
+Alternative: /usr/lib/@DEB_HOST_MULTIARCH@/KhronosOpenCLICDLoader/libOpenCL.so.1.0.0
+Dependents:
+ /usr/lib/@DEB_HOST_MULTIARCH@/libOpenCL.so.1 libOpenCL.so.1-@DEB_HOST_MULTIARCH@ /usr/lib/@DEB_HOST_MULTIARCH@/KhronosOpenCLICDLoader/libOpenCL.so.1
+Priority: 100
+")
+file(WRITE "${DEB_SOURCE_PKG_DIR}/${CPACK_DEBIAN_CLLAYERINFO_PACKAGE_NAME}.install"
+"usr/bin
+")
+
+if(DEFINED ORIG_ARCHIVE)
+ # Copy the passed orig.tar.gz file. The target filename is deduced from the version number, as expected by debuild
+ cmake_path(IS_ABSOLUTE ORIG_ARCHIVE IS_ORIG_ARCHIVE_ABSOLUTE)
+ if (NOT IS_ORIG_ARCHIVE_ABSOLUTE)
+ message(FATAL_ERROR "ORIG_ARCHIVE must be an absolute path (passed: \"${ORIG_ARCHIVE}\")")
+ endif()
+ cmake_path(GET ORIG_ARCHIVE EXTENSION ORIG_ARCHIVE_EXT)
+ cmake_path(GET ORIG_ARCHIVE PARENT_PATH ORIG_ARCHIVE_PARENT)
+ set(TARGET_PATH "${ORIG_ARCHIVE_PARENT}/${PACKAGE_NAME_PREFIX}_${CPACK_DEBIAN_PACKAGE_VERSION}${ORIG_ARCHIVE_EXT}")
+ message(STATUS "Copying \"${ORIG_ARCHIVE}\" to \"${TARGET_PATH}\"")
+ file(COPY_FILE "${ORIG_ARCHIVE}" "${TARGET_PATH}")
+endif()
diff --git a/cmake/Package.cmake b/cmake/Package.cmake
new file mode 100644
index 0000000..adfa505
--- /dev/null
+++ b/cmake/Package.cmake
@@ -0,0 +1,40 @@
+include("${CMAKE_CURRENT_LIST_DIR}/PackageSetup.cmake")
+
+# Configuring pkgconfig
+
+# We need two different instances of OpenCL.pc
+# One for installing (cmake --install), which contains CMAKE_INSTALL_PREFIX as prefix
+# And another for the Debian development package, which contains CPACK_PACKAGING_INSTALL_PREFIX as prefix
+
+join_paths(OPENCL_INCLUDEDIR_PC "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}")
+join_paths(OPENCL_LIBDIR_PC "\${exec_prefix}" "${CMAKE_INSTALL_LIBDIR}")
+
+set(pkg_config_location ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
+set(PKGCONFIG_PREFIX "${CMAKE_INSTALL_PREFIX}")
+
+# Configure and install OpenCL.pc for installing the project
+configure_file(
+ OpenCL.pc.in
+ ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_install/OpenCL.pc
+ @ONLY)
+install(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_install/OpenCL.pc
+ DESTINATION ${pkg_config_location}
+ COMPONENT pkgconfig_install)
+
+# Configure and install OpenCL.pc for the Debian package
+set(PKGCONFIG_PREFIX "${CPACK_PACKAGING_INSTALL_PREFIX}")
+configure_file(
+ OpenCL.pc.in
+ ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_package/OpenCL.pc
+ @ONLY)
+
+install(
+ FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_package/OpenCL.pc
+ DESTINATION ${pkg_config_location}
+ COMPONENT dev
+ EXCLUDE_FROM_ALL)
+
+set(CPACK_DEBIAN_PACKAGE_DEBUG ON)
+
+include(CPack)
diff --git a/cmake/PackageSetup.cmake b/cmake/PackageSetup.cmake
new file mode 100644
index 0000000..b4aade8
--- /dev/null
+++ b/cmake/PackageSetup.cmake
@@ -0,0 +1,112 @@
+set(CPACK_PACKAGE_VENDOR "khronos")
+
+set(CPACK_DEBIAN_RUNTIME_DESCRIPTION "Generic OpenCL ICD Loader
+OpenCL (Open Computing Language) is a multivendor open standard for
+general-purpose parallel programming of heterogeneous systems that include
+CPUs, GPUs and other processors.
+.
+This package contains an installable client driver loader (ICD Loader)
+library that can be used to load any (free or non-free) installable client
+driver (ICD) for OpenCL. It acts as a demultiplexer so several ICD can
+be installed and used together.")
+
+set(CPACK_DEBIAN_DEV_DESCRIPTION "OpenCL development files
+OpenCL (Open Computing Language) is a multivendor open standard for
+general-purpose parallel programming of heterogeneous systems that include
+CPUs, GPUs and other processors.
+.
+This package provides the development files: headers and libraries.
+.
+It also ensures that the ocl-icd ICD loader is installed so its additional
+features (compared to the OpenCL norm) can be used: .pc file, ability to
+select an ICD without root privilege, etc.")
+
+set(CPACK_DEBIAN_CLLAYERINFO_DESCRIPTION "Query OpenCL Layer system information
+OpenCL (Open Computing Language) is a multivendor open standard for
+general-purpose parallel programming of heterogeneous systems that include
+CPUs, GPUs and other processors. It supports system and user configured layers
+to intercept OpenCL API calls.
+.
+This package contains a tool that lists the layers loaded by the the ocl-icd
+OpenCL ICD Loader.")
+
+set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
+
+set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
+
+if(NOT CPACK_PACKAGING_INSTALL_PREFIX)
+ set(CPACK_PACKAGING_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
+endif()
+
+# DEB packaging configuration
+set(CPACK_DEBIAN_PACKAGE_MAINTAINER ${CPACK_PACKAGE_VENDOR})
+
+set(CPACK_DEBIAN_PACKAGE_HOMEPAGE
+ "https://github.com/KhronosGroup/OpenCL-ICD-Loader")
+
+# Version number [epoch:]upstream_version[-debian_revision]
+set(CPACK_DEBIAN_PACKAGE_VERSION "${PROJECT_VERSION}") # upstream_version
+if(DEFINED LATEST_RELEASE_VERSION)
+ # Remove leading "v", if exists
+ string(LENGTH "${LATEST_RELEASE_VERSION}" LATEST_RELEASE_VERSION_LENGTH)
+ string(SUBSTRING "${LATEST_RELEASE_VERSION}" 0 1 LATEST_RELEASE_VERSION_FRONT)
+ if(LATEST_RELEASE_VERSION_FRONT STREQUAL "v")
+ string(SUBSTRING "${LATEST_RELEASE_VERSION}" 1 ${LATEST_RELEASE_VERSION_LENGTH} LATEST_RELEASE_VERSION)
+ endif()
+
+ string(APPEND CPACK_DEBIAN_PACKAGE_VERSION "~${LATEST_RELEASE_VERSION}")
+endif()
+set(CPACK_DEBIAN_PACKAGE_RELEASE "1") # debian_revision (because this is a
+ # non-native pkg)
+set(PACKAGE_VERSION_REVISION "${CPACK_DEBIAN_PACKAGE_VERSION}-${CPACK_DEBIAN_PACKAGE_RELEASE}${DEBIAN_VERSION_SUFFIX}")
+
+# Get architecture
+execute_process(COMMAND dpkg "--print-architecture" OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE)
+string(STRIP "${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}" CPACK_DEBIAN_PACKAGE_ARCHITECTURE)
+
+##########################################################
+# Components #
+##########################################################
+
+set(CPACK_DEB_COMPONENT_INSTALL ON)
+set(CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS OFF) # Component dependencies are NOT reflected in package relationships
+set(CPACK_COMPONENTS_ALL runtime dev cllayerinfo)
+
+set(PACKAGE_NAME_PREFIX "khronos-opencl-loader")
+
+## Package runtime component
+set(CPACK_DEBIAN_RUNTIME_PACKAGE_NAME "${PACKAGE_NAME_PREFIX}-libopencl1")
+
+# Package file name in deb format:
+# <PackageName>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb
+set(CPACK_DEBIAN_RUNTIME_FILE_NAME "${CPACK_DEBIAN_RUNTIME_PACKAGE_NAME}_${PACKAGE_VERSION_REVISION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb")
+set(CPACK_DEBIAN_RUNTIME_PACKAGE_SECTION "libs")
+# Dependencies
+set(CPACK_DEBIAN_RUNTIME_PACKAGE_DEPENDS "libc6")
+set(CPACK_DEBIAN_RUNTIME_PACKAGE_SUGGESTS "opencl-icd")
+set(CPACK_DEBIAN_RUNTIME_PACKAGE_CONFLICTS "amd-app, libopencl1, nvidia-libopencl1-dev")
+set(CPACK_DEBIAN_RUNTIME_PACKAGE_REPLACES "amd-app, libopencl1, nvidia-libopencl1-dev")
+set(CPACK_DEBIAN_RUNTIME_PACKAGE_PROVIDES "libopencl-1.1-1, libopencl-1.2-1, libopencl-2.0-1, libopencl-2.1-1, libopencl-2.2-1, libopencl-3.0-1, libopencl1")
+
+## Package dev component
+set(CPACK_DEBIAN_DEV_PACKAGE_NAME "${PACKAGE_NAME_PREFIX}-opencl-dev")
+
+# Package file name in deb format:
+# <PackageName>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb
+set(CPACK_DEBIAN_DEV_FILE_NAME "${CPACK_DEBIAN_DEV_PACKAGE_NAME}_${PACKAGE_VERSION_REVISION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb")
+set(CPACK_DEBIAN_DEV_PACKAGE_SECTION "libdevel")
+
+# Dependencies
+set(CPACK_DEBIAN_DEV_PACKAGE_DEPENDS "opencl-c-headers (>= ${CPACK_DEBIAN_PACKAGE_VERSION}) | opencl-headers (>= ${CPACK_DEBIAN_PACKAGE_VERSION}), ${CPACK_DEBIAN_RUNTIME_PACKAGE_NAME} (>= ${CPACK_DEBIAN_PACKAGE_VERSION}) | libopencl1")
+set(CPACK_DEBIAN_DEV_PACKAGE_RECOMMENDS "libgl1-mesa-dev | libgl-dev")
+set(CPACK_DEBIAN_DEV_PACKAGE_CONFLICTS "opencl-dev")
+set(CPACK_DEBIAN_DEV_PACKAGE_BREAKS "amd-libopencl1, nvidia-libopencl1")
+set(CPACK_DEBIAN_DEV_PACKAGE_REPLACES "amd-libopencl1, nvidia-libopencl1, opencl-dev")
+set(CPACK_DEBIAN_DEV_PACKAGE_PROVIDES "opencl-dev")
+
+## Package cllayerinfo component
+set(CPACK_DEBIAN_CLLAYERINFO_PACKAGE_NAME "${PACKAGE_NAME_PREFIX}-cllayerinfo")
+set(CPACK_DEBIAN_CLLAYERINFO_FILE_NAME "${CPACK_DEBIAN_CLLAYERINFO_PACKAGE_NAME}_${PACKAGE_VERSION_REVISION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb")
+# Dependencies
+set(CPACK_DEBIAN_CLLAYERINFO_PACKAGE_DEPENDS "libc6")
+set(CPACK_DEBIAN_CLLAYERINFO_PACKAGE_SECTION "admin")
diff --git a/loader/windows/icd_windows.c b/loader/windows/icd_windows.c
index d771625..44a8a98 100644
--- a/loader/windows/icd_windows.c
+++ b/loader/windows/icd_windows.c
@@ -185,6 +185,10 @@
// for each vendor encountered
BOOL CALLBACK khrIcdOsVendorsEnumerate(PINIT_ONCE InitOnce, PVOID Parameter, PVOID *lpContext)
{
+ (void)InitOnce;
+ (void)Parameter;
+ (void)lpContext;
+
LONG result;
BOOL status = FALSE, currentStatus = FALSE;
const char* platformsName = "SOFTWARE\\Khronos\\OpenCL\\Vendors";
diff --git a/test/driver_stub/cl.c b/test/driver_stub/cl.c
index 398fee8..ba37a85 100644
--- a/test/driver_stub/cl.c
+++ b/test/driver_stub/cl.c
@@ -93,11 +93,9 @@
}
CL_API_ENTRY cl_int CL_API_CALL
-clGetPlatformInfo(cl_platform_id platform,
- cl_platform_info param_name,
- size_t param_value_size,
- void * param_value,
- size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
+clGetPlatformInfo(cl_platform_id platform_id, cl_platform_info param_name,
+ size_t param_value_size, void *param_value,
+ size_t *param_value_size_ret) CL_API_SUFFIX__VERSION_1_0
{
cl_int ret = CL_SUCCESS;
const char *returnString = NULL;
@@ -116,23 +114,15 @@
}
// select the string to return
switch(param_name) {
- case CL_PLATFORM_PROFILE:
- returnString = platform->profile;
- break;
- case CL_PLATFORM_VERSION:
- returnString = platform->version;
- break;
- case CL_PLATFORM_NAME:
- returnString = platform->name;
- break;
- case CL_PLATFORM_VENDOR:
- returnString = platform->vendor;
- break;
+ case CL_PLATFORM_PROFILE: returnString = platform_id->profile; break;
+ case CL_PLATFORM_VERSION: returnString = platform_id->version; break;
+ case CL_PLATFORM_NAME: returnString = platform_id->name; break;
+ case CL_PLATFORM_VENDOR: returnString = platform_id->vendor; break;
case CL_PLATFORM_EXTENSIONS:
- returnString = platform->extensions;
+ returnString = platform_id->extensions;
break;
case CL_PLATFORM_ICD_SUFFIX_KHR:
- returnString = platform->suffix;
+ returnString = platform_id->suffix;
break;
default:
ret = CL_INVALID_VALUE;
@@ -162,12 +152,9 @@
/* Device APIs */
-CL_API_ENTRY cl_int CL_API_CALL
-clGetDeviceIDs(cl_platform_id platform,
- cl_device_type device_type,
- cl_uint num_entries,
- cl_device_id * devices,
- cl_uint * num_devices) CL_API_SUFFIX__VERSION_1_0
+CL_API_ENTRY cl_int CL_API_CALL clGetDeviceIDs(
+ cl_platform_id platform_id, cl_device_type device_type, cl_uint num_entries,
+ cl_device_id *devices, cl_uint *num_devices) CL_API_SUFFIX__VERSION_1_0
{
cl_int ret = CL_SUCCESS;
@@ -186,12 +173,8 @@
}
done:
- test_icd_stub_log("clGetDeviceIDs(%p, %x, %u, %p, %p)\n",
- platform,
- device_type,
- num_entries,
- devices,
- num_devices);
+ test_icd_stub_log("clGetDeviceIDs(%p, %x, %u, %p, %p)\n", platform_id,
+ device_type, num_entries, devices, num_devices);
test_icd_stub_log("Value returned: %d\n", ret);
return ret;
}
@@ -950,10 +933,10 @@
CL_API_ENTRY cl_int CL_API_CALL
-clUnloadPlatformCompiler(cl_platform_id platform) CL_API_SUFFIX__VERSION_1_2
+clUnloadPlatformCompiler(cl_platform_id platform_id) CL_API_SUFFIX__VERSION_1_2
{
cl_int return_value = CL_OUT_OF_RESOURCES;
- test_icd_stub_log("clUnloadPlatformCompiler(%p)\n", platform);
+ test_icd_stub_log("clUnloadPlatformCompiler(%p)\n", platform_id);
test_icd_stub_log("Value returned: %d\n", return_value);
return return_value;
}
@@ -1837,14 +1820,13 @@
static void extFunc(void) { }
-CL_API_ENTRY void * CL_API_CALL
-clGetExtensionFunctionAddressForPlatform(cl_platform_id platform ,
- const char * func_name) CL_API_SUFFIX__VERSION_1_2
+CL_API_ENTRY void *CL_API_CALL clGetExtensionFunctionAddressForPlatform(
+ cl_platform_id platform_id,
+ const char *func_name) CL_API_SUFFIX__VERSION_1_2
{
void *return_value = (void *)(size_t)&extFunc;
test_icd_stub_log("clGetExtensionFunctionAddressForPlatform(%p, %p)\n",
- platform,
- func_name);
+ platform_id, func_name);
test_icd_stub_log("Value returned: %p\n", return_value);
return return_value;
diff --git a/test/loader_test/icd_test_match.c b/test/loader_test/icd_test_match.c
index b70e741..cf79181 100644
--- a/test/loader_test/icd_test_match.c
+++ b/test/loader_test/icd_test_match.c
@@ -6,7 +6,7 @@
#endif
#include <platform/icd_test_log.h>
-int test_icd_match()
+int test_icd_match(void)
{
int error = 0;
char *app_log = NULL, *stub_log = NULL;
diff --git a/test/loader_test/main.c b/test/loader_test/main.c
index b8b7304..e10bee5 100644
--- a/test/loader_test/main.c
+++ b/test/loader_test/main.c
@@ -3,18 +3,17 @@
#include<platform/icd_test_log.h>
#include "param_struct.h"
-extern int test_create_calls();
-extern int test_platforms();
-extern int test_cl_runtime();
-extern int test_kernel();
-extern int test_buffer_object();
-extern int test_program_objects();
-extern int test_image_objects();
-extern int test_sampler_objects();
-extern int test_OpenGL_share();
-extern int test_release_calls();
-
-extern int test_icd_match();
+extern int test_create_calls(void);
+extern int test_platforms(void);
+extern int test_cl_runtime(void);
+extern int test_kernel(void);
+extern int test_buffer_object(void);
+extern int test_program_objects(void);
+extern int test_image_objects(void);
+extern int test_sampler_objects(void);
+extern int test_OpenGL_share(void);
+extern int test_release_calls(void);
+extern int test_icd_match(void);
int main(int argc, char **argv)
{
diff --git a/test/loader_test/test_buffer_object.c b/test/loader_test/test_buffer_object.c
index 38d5b90..d133875 100644
--- a/test/loader_test/test_buffer_object.c
+++ b/test/loader_test/test_buffer_object.c
@@ -408,7 +408,7 @@
return 0;
}
-int test_buffer_object()
+int test_buffer_object(void)
{
int i;
for (i=0; i<NUM_ITEMS_clEnqueueReadBuffer; i++) {
diff --git a/test/loader_test/test_cl_runtime.c b/test/loader_test/test_cl_runtime.c
index 380627d..c957bac 100644
--- a/test/loader_test/test_cl_runtime.c
+++ b/test/loader_test/test_cl_runtime.c
@@ -50,7 +50,7 @@
}
-int test_cl_runtime()
+int test_cl_runtime(void)
{
int i;
diff --git a/test/loader_test/test_clgl.c b/test/loader_test/test_clgl.c
index 27fa96e..76213f9 100644
--- a/test/loader_test/test_clgl.c
+++ b/test/loader_test/test_clgl.c
@@ -324,7 +324,7 @@
}
-int test_OpenGL_share()
+int test_OpenGL_share(void)
{
int i;
diff --git a/test/loader_test/test_create_calls.c b/test/loader_test/test_create_calls.c
index 7d34386..8dbf3ca 100644
--- a/test/loader_test/test_create_calls.c
+++ b/test/loader_test/test_create_calls.c
@@ -770,7 +770,7 @@
}
-int test_create_calls()
+int test_create_calls(void)
{
test_clGetPlatformIDs(clGetPlatformIDsData);
@@ -830,7 +830,7 @@
}
-int test_release_calls()
+int test_release_calls(void)
{
test_clReleaseSampler(clReleaseSamplerData);
diff --git a/test/loader_test/test_image_objects.c b/test/loader_test/test_image_objects.c
index c6b99e7..f214a30 100644
--- a/test/loader_test/test_image_objects.c
+++ b/test/loader_test/test_image_objects.c
@@ -333,7 +333,7 @@
}
-int test_image_objects()
+int test_image_objects(void)
{
int i;
diff --git a/test/loader_test/test_kernel.c b/test/loader_test/test_kernel.c
index 2382eab..e76c77f 100644
--- a/test/loader_test/test_kernel.c
+++ b/test/loader_test/test_kernel.c
@@ -514,7 +514,7 @@
return 0;
}
-int test_kernel()
+int test_kernel(void)
{
int i;
diff --git a/test/loader_test/test_platforms.c b/test/loader_test/test_platforms.c
index 5700738..ca83628 100644
--- a/test/loader_test/test_platforms.c
+++ b/test/loader_test/test_platforms.c
@@ -189,7 +189,7 @@
return 0;
}
-int test_platforms()
+int test_platforms(void)
{
int i;
diff --git a/test/loader_test/test_program_objects.c b/test/loader_test/test_program_objects.c
index b161d35..ec59da1 100644
--- a/test/loader_test/test_program_objects.c
+++ b/test/loader_test/test_program_objects.c
@@ -123,7 +123,7 @@
int test_clLinkProgram(const struct clLinkProgram_st *data)
{
- cl_program program;
+ cl_program linked_program;
cl_int ret_val;
test_icd_app_log("clLinkProgram(%p, %u, %p, %p, %u, %p, %p, %p, %p)\n",
context,
@@ -136,7 +136,7 @@
data->user_data,
data->errcode_ret);
- program=clLinkProgram(context,
+ linked_program=clLinkProgram(context,
data->num_devices,
data->device_list,
data->options,
@@ -146,10 +146,10 @@
data->user_data,
data->errcode_ret);
- test_icd_app_log("Value returned: %p\n", program);
+ test_icd_app_log("Value returned: %p\n", linked_program);
- test_icd_app_log("clReleaseProgram(%p)\n", program);
- ret_val = clReleaseProgram(program);
+ test_icd_app_log("clReleaseProgram(%p)\n", linked_program);
+ ret_val = clReleaseProgram(linked_program);
test_icd_app_log("Value returned: %d\n", ret_val);
return 0;
@@ -235,7 +235,7 @@
}
-int test_program_objects()
+int test_program_objects(void)
{
int i;
diff --git a/test/loader_test/test_sampler_objects.c b/test/loader_test/test_sampler_objects.c
index afc11be..a7fbcb7 100644
--- a/test/loader_test/test_sampler_objects.c
+++ b/test/loader_test/test_sampler_objects.c
@@ -51,7 +51,7 @@
return 0;
}
-int test_sampler_objects()
+int test_sampler_objects(void)
{
int i;
diff --git a/test/pkgconfig/bare/CMakeLists.txt b/test/pkgconfig/bare/CMakeLists.txt
index 5e4c099..f58f21e 100644
--- a/test/pkgconfig/bare/CMakeLists.txt
+++ b/test/pkgconfig/bare/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.16)
project(PkgConfigTest
LANGUAGES C
@@ -35,7 +35,12 @@
COMMAND ${PROJECT_NAME}
)
-set_tests_properties(${PROJECT_NAME}
- PROPERTIES
- ENVIRONMENT "OCL_ICD_FILENAMES=${DRIVER_STUB_PATH}"
-)
+if(DEFINED DRIVER_STUB_PATH)
+ file(TO_CMAKE_PATH "${DRIVER_STUB_PATH}" DRIVER_STUB_PATH_CMAKE)
+ string(REGEX MATCH ".*/" DRIVER_STUB_DIR "${DRIVER_STUB_PATH_CMAKE}")
+ set_tests_properties(${PROJECT_NAME}
+ PROPERTIES
+ ENVIRONMENT "OCL_ICD_FILENAMES=${DRIVER_STUB_PATH}"
+ WORKING_DIRECTORY "${DRIVER_STUB_DIR}"
+ )
+endif()
diff --git a/test/pkgconfig/pkgconfig.c b/test/pkgconfig/pkgconfig.c
index 7228099..aadd25f 100644
--- a/test/pkgconfig/pkgconfig.c
+++ b/test/pkgconfig/pkgconfig.c
@@ -7,6 +7,7 @@
#include <stdio.h> // printf
#include <stdlib.h> // malloc
#include <stdint.h> // UINTMAX_MAX
+#include <string.h> // strcmp
void checkErr(cl_int err, const char * name)
{
@@ -17,10 +18,11 @@
}
}
-int main()
+int main(void)
{
cl_int CL_err = CL_SUCCESS;
cl_uint numPlatforms = 0;
+ cl_int stub_platform_found = CL_FALSE;
CL_err = clGetPlatformIDs(0, NULL, &numPlatforms);
checkErr(CL_err, "clGetPlatformIDs(numPlatforms)");
@@ -48,9 +50,21 @@
checkErr(CL_err, "clGetPlatformInfo(CL_PLATFORM_VENDOR, vendor_length, platform_name)");
printf("%s\n", platform_name);
+
+ if (strcmp(platform_name, "stubvendorxxx") == 0)
+ {
+ stub_platform_found = CL_TRUE;
+ }
+
fflush(NULL);
free(platform_name);
}
+ if (!stub_platform_found)
+ {
+ printf("Did not locate stub platform\n");
+ return -1;
+ }
+
return 0;
}
diff --git a/test/pkgconfig/pkgconfig/CMakeLists.txt b/test/pkgconfig/pkgconfig/CMakeLists.txt
index cffce75..436fffd 100644
--- a/test/pkgconfig/pkgconfig/CMakeLists.txt
+++ b/test/pkgconfig/pkgconfig/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.1)
+cmake_minimum_required(VERSION 3.16)
find_package(PkgConfig REQUIRED)
project(PkgConfigTest
@@ -49,7 +49,12 @@
COMMAND ${PROJECT_NAME}
)
-set_tests_properties(${PROJECT_NAME}
- PROPERTIES
- ENVIRONMENT "OCL_ICD_FILENAMES=${DRIVER_STUB_PATH}"
-)
+if(DEFINED DRIVER_STUB_PATH)
+ file(TO_CMAKE_PATH "${DRIVER_STUB_PATH}" DRIVER_STUB_PATH_CMAKE)
+ string(REGEX MATCH ".*/" DRIVER_STUB_DIR "${DRIVER_STUB_PATH_CMAKE}")
+ set_tests_properties(${PROJECT_NAME}
+ PROPERTIES
+ ENVIRONMENT "OCL_ICD_FILENAMES=${DRIVER_STUB_PATH}"
+ WORKING_DIRECTORY "${DRIVER_STUB_DIR}"
+ )
+endif()
diff --git a/test/pkgconfig/sdk/CMakeLists.txt b/test/pkgconfig/sdk/CMakeLists.txt
index fced859..83a52b7 100644
--- a/test/pkgconfig/sdk/CMakeLists.txt
+++ b/test/pkgconfig/sdk/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.16)
project(PkgConfigTest
LANGUAGES C
@@ -34,7 +34,12 @@
COMMAND ${PROJECT_NAME}
)
-set_tests_properties(${PROJECT_NAME}
- PROPERTIES
- ENVIRONMENT "OCL_ICD_FILENAMES=${DRIVER_STUB_PATH}"
-)
+if(DEFINED DRIVER_STUB_PATH)
+ file(TO_CMAKE_PATH "${DRIVER_STUB_PATH}" DRIVER_STUB_PATH_CMAKE)
+ string(REGEX MATCH ".*/" DRIVER_STUB_DIR "${DRIVER_STUB_PATH_CMAKE}")
+ set_tests_properties(${PROJECT_NAME}
+ PROPERTIES
+ ENVIRONMENT "OCL_ICD_FILENAMES=${DRIVER_STUB_PATH}"
+ WORKING_DIRECTORY "${DRIVER_STUB_DIR}"
+ )
+endif()