summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNagy-Egri Máté Ferenc <mate@streamhpc.com>2022-05-03 01:35:42 +0200
committerGitHub <noreply@github.com>2022-05-02 16:35:42 -0700
commit3568763309367bc7d7088a1d3f82f2d32c76a7f8 (patch)
treeb81863ab52f4e00cf28bb869ddadd0ba1f77c125
parentdcd5bede6859d26833cd85f0d6bbcee7382dc9b3 (diff)
downloadOpenCL-Headers-3568763309367bc7d7088a1d3f82f2d32c76a7f8.tar.gz
Fix warnings on anonymous structs for MSVC (#198)
* MSVC allows anon structs even in conforming mode * Convert Windows CI to PowerShell * Compile tests in C++ mode * Optionally enable C++ testing * Backpropagate CI from Layers/SDK * Add header to Mac CI * Change to base image * Clang on Windows * Clang using pre-C11 mode * C++ tests without feeding .c files (Clang warning) * Guard Clang macro better * Remove hexadecimal constant * Fix cwd * Fix CWD for Mac too * Clean up MSVC anon struct detection * Remove unused debug macro
-rw-r--r--.github/workflows/cmake.yml363
-rw-r--r--.github/workflows/linux.yml202
-rw-r--r--.github/workflows/macos.yml53
-rw-r--r--.github/workflows/windows.yml247
-rw-r--r--CL/cl.h7
-rw-r--r--CL/cl_d3d10.h1
-rw-r--r--CL/cl_d3d11.h1
-rw-r--r--CL/cl_dx9_media_sharing.h12
-rw-r--r--CL/cl_platform.h37
-rw-r--r--CMakeLists.txt2
-rw-r--r--tests/CMakeLists.txt50
-rw-r--r--tests/lang_c/CMakeLists.txt18
-rw-r--r--tests/lang_cpp/CMakeLists.txt18
-rw-r--r--tests/test_cl_half.h.c4
14 files changed, 609 insertions, 406 deletions
diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml
deleted file mode 100644
index a24ddae..0000000
--- a/.github/workflows/cmake.yml
+++ /dev/null
@@ -1,363 +0,0 @@
-name: Build
-
-on: [push, pull_request]
-
-jobs:
- linux-gcc:
- runs-on: ubuntu-18.04
- strategy:
- matrix:
- #VER: [7, 8, 9]
- VER: [7, 9] # gcc-8 is not installed on the Ubuntu 18.04 image
- EXT: [ON, OFF]
- GEN: [Unix Makefiles, Ninja]
- VAR: [Debug, Release]
- STD: [99, 11] # 90 results in errors
- BIN: [32, 64]
-
- steps:
- - uses: actions/checkout@v2
-
- - name: Create Build Environment
- run: sudo apt-get update -q;
- cmake -E make_directory $GITHUB_WORKSPACE/build;
- cmake -E make_directory $GITHUB_WORKSPACE/install;
- cmake -E make_directory $GITHUB_WORKSPACE/downstream/pkgconfig/bare;
- cmake -E make_directory $GITHUB_WORKSPACE/downstream/pkgconfig/sdk;
- if [[ "${{matrix.GEN}}" == "Ninja" && ! `which ninja` ]]; then sudo apt install -y ninja-build; fi;
- if [[ "${{matrix.BIN}}" == "32" ]]; then sudo apt install -y gcc-multilib gcc-8-multilib gcc-9-multilib; fi
- # Install Ninja only if it's the selected generator and it's not available.
-
- - name: Configure CMake
- shell: bash
- run: cmake
- -G "${{matrix.GEN}}"
- -D BUILD_TESTING=ON
- -D CMAKE_BUILD_TYPE=${{matrix.VAR}}
- -D CMAKE_C_FLAGS="-Wall -Wextra -Werror -pedantic -m${{matrix.BIN}}"
- -D CMAKE_C_COMPILER=gcc-${{matrix.VER}}
- -D CMAKE_C_STANDARD=${{matrix.STD}}
- -D CMAKE_C_EXTENSIONS=${{matrix.EXT}}
- -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install
- -S $GITHUB_WORKSPACE
- -B $GITHUB_WORKSPACE/build
-
- - name: Build
- shell: bash
- run: cmake
- --build $GITHUB_WORKSPACE/build
- --
- -j`nproc`
-
- - name: Test
- working-directory: ${{runner.workspace}}/OpenCL-Headers/build
- shell: bash
- run: ctest --parallel `nproc`
-
- - name: Install
- shell: bash
- run: cmake
- --build $GITHUB_WORKSPACE/build
- --target install
- --
- -j`nproc`
-
- - name: Consume (Configure PkgConfig - bare)
- shell: bash
- run: cmake
- -G "${{matrix.GEN}}"
- -D BUILD_TESTING=ON
- -D CMAKE_BUILD_TYPE=${{matrix.VAR}}
- -D CMAKE_C_FLAGS="-Wall -Wextra -Werror -pedantic -m${{matrix.BIN}}"
- -D CMAKE_C_COMPILER=gcc-${{matrix.VER}}
- -D CMAKE_C_STANDARD=${{matrix.STD}}
- -D CMAKE_C_EXTENSIONS=${{matrix.EXT}}
- -D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/install
- -S $GITHUB_WORKSPACE/tests/pkgconfig/bare
- -B $GITHUB_WORKSPACE/downstream/pkgconfig/bare
-
- - name: Consume (Build PkgConfig - bare)
- shell: bash
- run: cmake
- --build $GITHUB_WORKSPACE/downstream/pkgconfig/bare
- --
- -j`nproc`
-
- - name: Consume (Emulate SDK presence)
- shell: bash
- run: cmake -E make_directory $GITHUB_WORKSPACE/install/share/cmake/OpenCL;
- echo 'include("${CMAKE_CURRENT_LIST_DIR}/../OpenCLHeaders/OpenCLHeadersTargets.cmake")' > $GITHUB_WORKSPACE/install/share/cmake/OpenCL/OpenCLConfig.cmake
-
- - name: Consume (Configure PkgConfig - SDK)
- shell: bash
- run: cmake
- -G "${{matrix.GEN}}"
- -D BUILD_TESTING=ON
- -D CMAKE_BUILD_TYPE=${{matrix.VAR}}
- -D CMAKE_C_FLAGS="-Wall -Wextra -Werror -pedantic -m${{matrix.BIN}}"
- -D CMAKE_C_COMPILER=gcc-${{matrix.VER}}
- -D CMAKE_C_STANDARD=${{matrix.STD}}
- -D CMAKE_C_EXTENSIONS=${{matrix.EXT}}
- -D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/install
- -S $GITHUB_WORKSPACE/tests/pkgconfig/sdk
- -B $GITHUB_WORKSPACE/downstream/pkgconfig/sdk
-
- - name: Consume (Build PkgConfig - SDK)
- shell: bash
- run: cmake
- --build $GITHUB_WORKSPACE/downstream/pkgconfig/sdk
- --
- -j`nproc`
-
- windows-msvc:
- runs-on: windows-latest
- strategy:
- matrix:
- VER: [v140, v141, v142]
- EXT: [ON, OFF]
- GEN: [Visual Studio 16 2019, Ninja Multi-Config]
- BIN: [x64, x86]
- #STD Proper 11, 17 incoming: https://devblogs.microsoft.com/cppblog/c11-and-c17-standard-support-arriving-in-msvc/
-
- steps:
- - uses: actions/checkout@v2
-
- - name: Create Build Environment
- shell: cmd
- run: |
- cmake -E make_directory $GITHUB_WORKSPACE/build;
- cmake -E make_directory $GITHUB_WORKSPACE/install;
-
- - name: Configure (MSBuild)
- if: matrix.GEN == 'Visual Studio 16 2019'
- shell: cmd
- run: |
- if /I "${{matrix.EXT}}"=="ON" (set C_FLAGS="/W4 /WX") else (set C_FLAGS="/W4 /WX /Za /wd4001")
- if /I "${{matrix.BIN}}"=="x86" (set BIN=Win32) else (set BIN=x64)
- cmake -G "${{matrix.GEN}}" -A %BIN% -T ${{matrix.VER}} -D BUILD_TESTING=ON -D CMAKE_C_FLAGS=%C_FLAGS% -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} -D CMAKE_INSTALL_PREFIX=%GITHUB_WORKSPACE%/install -S %GITHUB_WORKSPACE% -B %GITHUB_WORKSPACE%/build
-
- - name: Configure (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.EXT}}"=="ON" (set C_FLAGS="/W4 /WX") else (set C_FLAGS="/W4 /WX /Za /wd4001")
- call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{matrix.BIN}} /vcvars_ver=%VER%
- cmake -G "${{matrix.GEN}}" -D BUILD_TESTING=ON -D CMAKE_C_FLAGS=%C_FLAGS% -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL -D CMAKE_INSTALL_PREFIX=%GITHUB_WORKSPACE%/install -S %GITHUB_WORKSPACE% -B %GITHUB_WORKSPACE%/build
-
- - name: Build (MSBuild)
- if: matrix.GEN == 'Visual Studio 16 2019'
- shell: cmd
- run: |
- cmake --build %GITHUB_WORKSPACE%\build --config Release -- /verbosity:minimal /maxCpuCount /noLogo
- cmake --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
- call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{matrix.BIN}} /vcvars_ver=%VER%
- cmake --build %GITHUB_WORKSPACE%\build --config Release
- cmake --build %GITHUB_WORKSPACE%\build --config Debug
-
- - name: Test
- working-directory: ${{runner.workspace}}/OpenCL-Headers/build
- shell: cmd
- run: |
- ctest -C Release --parallel %NUMBER_OF_PROCESSORS%
-
- - name: Install
- shell: cmd
- run: |
- cmake --build %GITHUB_WORKSPACE%/build --config Release --target install
-
- - name: Consume (Configure PkgConfig - bare MSBuild)
- if: matrix.GEN == 'Visual Studio 16 2019'
- shell: cmd
- run: |
- if /I "${{matrix.EXT}}"=="ON" (set C_FLAGS="/W4 /WX") else (set C_FLAGS="/W4 /WX /Za /wd4001")
- if /I "${{matrix.BIN}}"=="x86" (set BIN=Win32) else (set BIN=x64)
- cmake -G "${{matrix.GEN}}" -A %BIN% -T ${{matrix.VER}} -D BUILD_TESTING=ON -D CMAKE_C_FLAGS=%C_FLAGS% -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} -D CMAKE_PREFIX_PATH=%GITHUB_WORKSPACE%/install -S %GITHUB_WORKSPACE%\tests\pkgconfig\bare -B %GITHUB_WORKSPACE%\downstream\pkgconfig\bare
-
- - name: Consume (Configure PkgConfig - bare 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.EXT}}"=="ON" (set C_FLAGS="/W4 /WX") else (set C_FLAGS="/W4 /WX /Za /wd4001")
- call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{matrix.BIN}} /vcvars_ver=%VER%
- cmake -G "${{matrix.GEN}}" -D BUILD_TESTING=ON -D CMAKE_C_FLAGS=%C_FLAGS% -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL -D CMAKE_PREFIX_PATH=%GITHUB_WORKSPACE%/install -S %GITHUB_WORKSPACE%\tests\pkgconfig\bare -B %GITHUB_WORKSPACE%\downstream\pkgconfig\bare
-
- - name: Consume (Build PkgConfig - bare MSBuild)
- if: matrix.GEN == 'Visual Studio 16 2019'
- shell: cmd
- run: |
- cmake --build %GITHUB_WORKSPACE%\downstream\pkgconfig\bare --config Release -- /verbosity:minimal /maxCpuCount /noLogo
- cmake --build %GITHUB_WORKSPACE%\downstream\pkgconfig\bare --config Debug -- /verbosity:minimal /maxCpuCount /noLogo
-
- - name: Consume (Build PkgConfig - bare 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
- call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{matrix.BIN}} /vcvars_ver=%VER%
- cmake --build %GITHUB_WORKSPACE%\downstream\pkgconfig\bare --config Release
- cmake --build %GITHUB_WORKSPACE%\downstream\pkgconfig\bare --config Debug
-
- - name: Consume (Emulate SDK presence)
- shell: bash
- run: cmake -E make_directory $GITHUB_WORKSPACE/install/share/cmake/OpenCL;
- echo 'include("${CMAKE_CURRENT_LIST_DIR}/../OpenCLHeaders/OpenCLHeadersTargets.cmake")' > $GITHUB_WORKSPACE/install/share/cmake/OpenCL/OpenCLConfig.cmake
-
- - name: Consume (Configure PkgConfig - SDK MSBuild)
- if: matrix.GEN == 'Visual Studio 16 2019'
- shell: cmd
- run: |
- if /I "${{matrix.EXT}}"=="ON" (set C_FLAGS="/W4 /WX") else (set C_FLAGS="/W4 /WX /Za /wd4001")
- if /I "${{matrix.BIN}}"=="x86" (set BIN=Win32) else (set BIN=x64)
- cmake -G "${{matrix.GEN}}" -A %BIN% -T ${{matrix.VER}} -D BUILD_TESTING=ON -D CMAKE_C_FLAGS=%C_FLAGS% -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} -D CMAKE_PREFIX_PATH=%GITHUB_WORKSPACE%/install -S %GITHUB_WORKSPACE%\tests\pkgconfig\sdk -B %GITHUB_WORKSPACE%\downstream\pkgconfig\sdk
-
- - name: Consume (Configure PkgConfig - SDK 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.EXT}}"=="ON" (set C_FLAGS="/W4 /WX") else (set C_FLAGS="/W4 /WX /Za /wd4001")
- call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{matrix.BIN}} /vcvars_ver=%VER%
- cmake -G "${{matrix.GEN}}" -D BUILD_TESTING=ON -D CMAKE_C_FLAGS=%C_FLAGS% -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL -D CMAKE_PREFIX_PATH=%GITHUB_WORKSPACE%/install -S %GITHUB_WORKSPACE%\tests\pkgconfig\sdk -B %GITHUB_WORKSPACE%\downstream\pkgconfig\sdk
-
- - name: Consume (Build PkgConfig - SDK MSBuild)
- if: matrix.GEN == 'Visual Studio 16 2019'
- shell: cmd
- run: |
- cmake --build %GITHUB_WORKSPACE%\downstream\pkgconfig\sdk --config Release -- /verbosity:minimal /maxCpuCount /noLogo
- cmake --build %GITHUB_WORKSPACE%\downstream\pkgconfig\sdk --config Debug -- /verbosity:minimal /maxCpuCount /noLogo
-
- - name: Consume (Build PkgConfig - SDK 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
- call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{matrix.BIN}} /vcvars_ver=%VER%
- cmake --build %GITHUB_WORKSPACE%\downstream\pkgconfig\sdk --config Release
- cmake --build %GITHUB_WORKSPACE%\downstream\pkgconfig\sdk --config Debug
-
- macos-gcc:
- runs-on: macos-latest
- strategy:
- matrix:
- VER: [8, 9]
- EXT: [ON, OFF]
- #GEN: [Xcode, Ninja Multi-Config]
- GEN: [Xcode] # Disabling Ninja - need to investigate setup-ninja?
- STD: [99, 11] # 90 results in errors
-
- steps:
- - uses: actions/checkout@v2
-
- - name: Create Build Environment
- run: |
- cmake -E make_directory $GITHUB_WORKSPACE/build;
- cmake -E make_directory $GITHUB_WORKSPACE/install;
- if [[ "${{matrix.GEN}}" == "Ninja Multi-Config" && ! `which ninja` ]]; then brew install ninja; fi;
- # Install Ninja only if it's the selected generator and it's not available.
-
- - name: Configure CMake
- shell: bash
- run: cmake
- -G "${{matrix.GEN}}"
- -D BUILD_TESTING=ON
- -D CMAKE_C_FLAGS="-Wall -Wextra -Werror -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
- -S $GITHUB_WORKSPACE
- -B $GITHUB_WORKSPACE/build
-
- - name: Build (Xcode)
- if: matrix.GEN == 'Xcode'
- shell: bash
- run: |
- cmake --build $GITHUB_WORKSPACE/build --config Release
- cmake --build $GITHUB_WORKSPACE/build --config Debug
-
- - name: Build (Ninja)
- if: matrix.GEN == 'Ninja Multi-Config'
- shell: bash
- run: |
- cmake --build $GITHUB_WORKSPACE/build --config Release
- cmake --build $GITHUB_WORKSPACE/build --config Debug
-
- - name: Test
- working-directory: ${{runner.workspace}}/OpenCL-Headers/build
- shell: bash
- run: ctest -C Release --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: Consume (Configure PkgConfig - bare)
- shell: bash
- run: cmake
- -G "${{matrix.GEN}}"
- -D BUILD_TESTING=ON
- -D CMAKE_C_FLAGS="-Wall -Wextra -Werror -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_PREFIX_PATH=$GITHUB_WORKSPACE/install
- -S $GITHUB_WORKSPACE/tests/pkgconfig/bare
- -B $GITHUB_WORKSPACE/downstream/pkgconfig/bare
-
- - name: Consume (Build PkgConfig - bare)
- shell: bash
- run: |
- cmake --build $GITHUB_WORKSPACE/downstream/pkgconfig/bare --config Release
- cmake --build $GITHUB_WORKSPACE/downstream/pkgconfig/bare --config Debug
-
- - name: Consume (Emulate SDK presence)
- shell: bash
- run: cmake -E make_directory $GITHUB_WORKSPACE/install/share/cmake/OpenCL;
- echo 'include("${CMAKE_CURRENT_LIST_DIR}/../OpenCLHeaders/OpenCLHeadersTargets.cmake")' > $GITHUB_WORKSPACE/install/share/cmake/OpenCL/OpenCLConfig.cmake
-
- - name: Consume (Configure PkgConfig - SDK)
- shell: bash
- run: cmake
- -G "${{matrix.GEN}}"
- -D BUILD_TESTING=ON
- -D CMAKE_C_FLAGS="-Wall -Wextra -Werror -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_PREFIX_PATH=$GITHUB_WORKSPACE/install
- -S $GITHUB_WORKSPACE/tests/pkgconfig/sdk
- -B $GITHUB_WORKSPACE/downstream/pkgconfig/sdk
-
- - name: Consume (Build PkgConfig - SDK)
- shell: bash
- run: |
- cmake --build $GITHUB_WORKSPACE/downstream/pkgconfig/sdk --config Release
- cmake --build $GITHUB_WORKSPACE/downstream/pkgconfig/sdk --config Debug
diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml
new file mode 100644
index 0000000..1dfeebf
--- /dev/null
+++ b/.github/workflows/linux.yml
@@ -0,0 +1,202 @@
+name: Linux
+
+on: [push, pull_request]
+
+jobs:
+ compatibility:
+ runs-on: ubuntu-18.04
+ container: streamhpc/opencl-sdk-base:ubuntu-18.04-20220127
+ strategy:
+ matrix:
+ # TODO: CMake 3.0.2 is Headers minimum (and ubuntu 18.04 canonical apt repo ver), not this repo's min
+ # Replace once backport to C++14 happened
+ include:
+ # Unix Makefiles
+ # One CMake version
+ # For all compilers
+ # For all configurations
+ # For all target architectures
+ - C_COMPILER: gcc-7
+ CXX_COMPILER: g++-7
+ CMAKE: 3.0.2
+ GEN: Unix Makefiles
+ CONFIG: Debug
+ BIN: 64
+ - C_COMPILER: gcc-7
+ CXX_COMPILER: g++-7
+ CMAKE: 3.0.2
+ GEN: Unix Makefiles
+ CONFIG: Release
+ BIN: 64
+ - C_COMPILER: gcc-7
+ CXX_COMPILER: g++-7
+ CMAKE: 3.0.2
+ GEN: Unix Makefiles
+ CONFIG: Debug
+ BIN: 32
+ - C_COMPILER: gcc-7
+ CXX_COMPILER: g++-7
+ CMAKE: 3.0.2
+ GEN: Unix Makefiles
+ CONFIG: Release
+ BIN: 32
+ - C_COMPILER: gcc-11
+ CXX_COMPILER: g++-11
+ CMAKE: 3.0.2
+ GEN: Unix Makefiles
+ CONFIG: Debug
+ BIN: 64
+ - C_COMPILER: gcc-11
+ CXX_COMPILER: g++-11
+ CMAKE: 3.0.2
+ GEN: Unix Makefiles
+ CONFIG: Release
+ BIN: 64
+ - C_COMPILER: gcc-11
+ CXX_COMPILER: g++-11
+ CMAKE: 3.0.2
+ GEN: Unix Makefiles
+ CONFIG: Debug
+ BIN: 32
+ - C_COMPILER: gcc-11
+ CXX_COMPILER: g++-11
+ CMAKE: 3.0.2
+ GEN: Unix Makefiles
+ CONFIG: Release
+ BIN: 32
+ - C_COMPILER: clang-8
+ CXX_COMPILER: clang++-8
+ CMAKE: 3.0.2
+ GEN: Unix Makefiles
+ CONFIG: Debug
+ BIN: 64
+ - C_COMPILER: clang-8
+ CXX_COMPILER: clang++-8
+ CMAKE: 3.0.2
+ GEN: Unix Makefiles
+ CONFIG: Release
+ BIN: 64
+ - C_COMPILER: clang-8
+ CXX_COMPILER: clang++-8
+ CMAKE: 3.0.2
+ GEN: Unix Makefiles
+ CONFIG: Debug
+ BIN: 32
+ - C_COMPILER: clang-8
+ CXX_COMPILER: clang++-8
+ CMAKE: 3.0.2
+ GEN: Unix Makefiles
+ CONFIG: Release
+ BIN: 32
+ - C_COMPILER: clang-13
+ CXX_COMPILER: clang++-13
+ CMAKE: 3.0.2
+ GEN: Unix Makefiles
+ CONFIG: Debug
+ BIN: 64
+ - C_COMPILER: clang-13
+ CXX_COMPILER: clang++-13
+ CMAKE: 3.0.2
+ GEN: Unix Makefiles
+ CONFIG: Release
+ BIN: 64
+ - C_COMPILER: clang-13
+ CXX_COMPILER: clang++-13
+ CMAKE: 3.0.2
+ GEN: Unix Makefiles
+ CONFIG: Debug
+ BIN: 32
+ - C_COMPILER: clang-13
+ CXX_COMPILER: clang++-13
+ CMAKE: 3.0.2
+ GEN: Unix Makefiles
+ CONFIG: Release
+ BIN: 32
+ # Multi-config generators
+ # One CMake version
+ # For all compilers
+ # For all architectures
+ - C_COMPILER: gcc-7
+ CXX_COMPILER: g++-7
+ CMAKE: 3.22.1
+ GEN: Ninja Multi-Config
+ BIN: 64
+ - C_COMPILER: gcc-7
+ CXX_COMPILER: g++-7
+ CMAKE: 3.22.1
+ GEN: Ninja Multi-Config
+ BIN: 32
+ - C_COMPILER: gcc-11
+ CXX_COMPILER: g++-11
+ CMAKE: 3.22.1
+ GEN: Ninja Multi-Config
+ BIN: 64
+ - C_COMPILER: gcc-11
+ CXX_COMPILER: g++-11
+ CMAKE: 3.22.1
+ GEN: Ninja Multi-Config
+ BIN: 32
+ - C_COMPILER: clang-8
+ CXX_COMPILER: clang++-8
+ CMAKE: 3.22.1
+ GEN: Ninja Multi-Config
+ BIN: 64
+ - C_COMPILER: clang-8
+ CXX_COMPILER: clang++-8
+ CMAKE: 3.22.1
+ GEN: Ninja Multi-Config
+ BIN: 32
+ - C_COMPILER: clang-13
+ CXX_COMPILER: clang++-13
+ CMAKE: 3.22.1
+ GEN: Ninja Multi-Config
+ BIN: 64
+ - C_COMPILER: clang-13
+ CXX_COMPILER: clang++-13
+ CMAKE: 3.22.1
+ GEN: Ninja Multi-Config
+ BIN: 32
+ env:
+ CMAKE_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/cmake
+ CTEST_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/ctest
+
+ steps:
+ - name: Checkout OpenCL-Headers
+ uses: actions/checkout@v2
+
+ - name: Configure
+ shell: bash
+ run: $CMAKE_EXE
+ -G "${{matrix.GEN}}"
+ -D BUILD_TESTING=ON
+ `if [[ "${{matrix.GEN}}" == "Unix Makefiles" ]]; then echo -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}}; fi;`
+ -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -Werror -m${{matrix.BIN}}"
+ -D CMAKE_C_COMPILER=${{matrix.C_COMPILER}}
+ -D CMAKE_C_EXTENSIONS=OFF
+ -D CMAKE_CXX_FLAGS="-Wall -Wextra -pedantic -Werror -m${{matrix.BIN}}"
+ -D CMAKE_CXX_COMPILER=${{matrix.CXX_COMPILER}}
+ -D CMAKE_CXX_EXTENSIONS=OFF
+ -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install
+ -B$GITHUB_WORKSPACE/build
+ -H$GITHUB_WORKSPACE
+
+ - name: Build
+ shell: bash
+ run: if [[ "${{matrix.GEN}}" == "Unix Makefiles" ]];
+ then
+ $CMAKE_EXE --build $GITHUB_WORKSPACE/build -- -j`nproc`;
+ else
+ $CMAKE_EXE --build $GITHUB_WORKSPACE/build --config Debug -- -j`nproc`;
+ $CMAKE_EXE --build $GITHUB_WORKSPACE/build --config Release -- -j`nproc`;
+ fi;
+
+ - name: Test
+ shell: bash
+ working-directory: ${{runner.workspace}}/OpenCL-Headers/build
+ run: if [[ "${{matrix.GEN}}" == "Unix Makefiles" ]];
+ then
+ $CTEST_EXE --output-on-failure --parallel `nproc`;
+ else
+ $CTEST_EXE --output-on-failure -C Debug --parallel `nproc`;
+ $CTEST_EXE --output-on-failure -C Release --parallel `nproc`;
+ fi; \ No newline at end of file
diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml
new file mode 100644
index 0000000..eae6a54
--- /dev/null
+++ b/.github/workflows/macos.yml
@@ -0,0 +1,53 @@
+name: MacOS
+
+on: [push, pull_request]
+
+jobs:
+ compatibility:
+ runs-on: macos-latest
+ strategy:
+ matrix:
+ VER: [9, 11]
+ GEN: [Xcode, Ninja Multi-Config]
+ STD: [11, 17]
+
+ steps:
+ - name: Checkout OpenCL-Headers
+ uses: actions/checkout@v2
+
+ - name: Create Build Environment
+ shell: bash
+ 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.
+ cmake --version
+
+ - name: Configure CMake
+ shell: bash
+ run: cmake
+ -G "${{matrix.GEN}}"
+ -D BUILD_TESTING=ON
+ -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -Werror"
+ -D CMAKE_C_COMPILER=/usr/local/bin/gcc-${{matrix.VER}}
+ -D CMAKE_C_EXTENSIONS=OFF
+ -D CMAKE_CXX_FLAGS="-Wall -Wextra -pedantic -Werror"
+ -D CMAKE_CXX_COMPILER=/usr/local/bin/g++-${{matrix.VER}}
+ -D CMAKE_CXX_EXTENSIONS=OFF
+ -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install
+ -S $GITHUB_WORKSPACE
+ -B $GITHUB_WORKSPACE/build
+
+ - name: Build
+ shell: bash
+ run: |
+ cmake --build $GITHUB_WORKSPACE/build --config Release --parallel `sysctl -n hw.logicalcpu` `if [[ "${{matrix.GEN}}" == "Xcode" ]]; then echo "-- -quiet"; fi;`
+ cmake --build $GITHUB_WORKSPACE/build --config Debug --parallel `sysctl -n hw.logicalcpu` `if [[ "${{matrix.GEN}}" == "Xcode" ]]; then echo "-- -quiet"; fi;`
+
+ - name: Test
+ working-directory: ${{runner.workspace}}/OpenCL-Headers/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` \ No newline at end of file
diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml
new file mode 100644
index 0000000..7fd79c9
--- /dev/null
+++ b/.github/workflows/windows.yml
@@ -0,0 +1,247 @@
+name: Windows
+
+on: [push, pull_request]
+
+jobs:
+ compatibility:
+ runs-on: windows-latest
+ strategy:
+ matrix:
+ VER: [v142, v143]
+ EXT: [ON, OFF]
+ GEN: [Visual Studio 17 2022]
+ BIN: [x64, x86]
+ STD: [99, 11, 17]
+ include:
+ - VER: v141
+ EXT: OFF
+ GEN: Ninja Multi-Config
+ BIN: x64
+ STD: 89 # /Za
+ 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
+
+ steps:
+ - uses: actions/checkout@v2
+
+ - name: Cache Ninja install
+ if: matrix.GEN == 'Ninja Multi-Config'
+ id: ninja-install
+ uses: actions/cache@v2
+ 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'
+ shell: pwsh
+ 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: Configure (MSBuild)
+ if: matrix.GEN == 'Visual Studio 17 2022'
+ shell: pwsh
+ run: |
+ $BIN = if('${{matrix.BIN}}' -eq 'x86') {'Win32'} else {'x64'}
+ $C_FLAGS = '/W4 /WX'
+ & cmake `
+ -G '${{matrix.GEN}}' `
+ -A $BIN `
+ -T ${{matrix.VER}} `
+ -D BUILD_TESTING=ON `
+ -D CMAKE_C_FLAGS="${C_FLAGS}" `
+ -D CMAKE_C_EXTENSIONS='${{matrix.EXT}}' `
+ -S "${env:GITHUB_WORKSPACE}" `
+ -B "${env:GITHUB_WORKSPACE}\build"
+
+ - name: Configure (Ninja Multi-Config)
+ if: matrix.GEN == 'Ninja Multi-Config'
+ shell: pwsh
+ run: |
+ $VER = switch ('${{matrix.VER}}') { `
+ 'v141' {'14.1'} `
+ 'v142' {'14.2'} `
+ 'v143' {'14.3'} }
+ 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}"
+ $C_FLAGS = '/W4 /WX'
+ & cmake `
+ -G '${{matrix.GEN}}' `
+ -D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" `
+ -D BUILD_TESTING=ON `
+ -D CMAKE_C_FLAGS="${C_FLAGS}" `
+ -D CMAKE_C_EXTENSIONS='${{matrix.EXT}}' `
+ -D CMAKE_EXE_LINKER_FLAGS='/INCREMENTAL' `
+ -S "${env:GITHUB_WORKSPACE}" `
+ -B "${env:GITHUB_WORKSPACE}\build"
+
+ - name: Build (MSBuild)
+ if: matrix.GEN == 'Visual Studio 17 2022'
+ shell: pwsh
+ run: |
+ foreach ($Config in 'Release','Debug') { `
+ & cmake `
+ --build "${env:GITHUB_WORKSPACE}\build" `
+ --config ${Config} `
+ -- `
+ /verbosity:minimal `
+ /maxCpuCount `
+ /noLogo
+ }
+
+ - name: Build (Ninja)
+ if: matrix.GEN == 'Ninja Multi-Config'
+ shell: pwsh
+ run: |
+ $VER = switch ('${{matrix.VER}}') { `
+ 'v141' {'14.1'} `
+ 'v142' {'14.2'} `
+ 'v143' {'14.3'} }
+ 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}
+ }
+
+ - name: Test
+ shell: pwsh
+ run: |
+ foreach ($Config in 'Release','Debug') { `
+ & ctest `
+ --test-dir "${env:GITHUB_WORKSPACE}\build" `
+ --build-config ${Config} `
+ --output-on-failure `
+ --parallel ${env:NUMBER_OF_PROCESSORS}
+ }
+
+ - name: Install
+ shell: pwsh
+ run: |
+ & cmake `
+ --install "${env:GITHUB_WORKSPACE}\build" `
+ --prefix "${env:GITHUB_WORKSPACE}\install" `
+ --config Release
+
+ - name: Consume (PkgConfig - bare MSBuild)
+ if: matrix.GEN == 'Visual Studio 17 2022'
+ shell: pwsh
+ run: |
+ $BIN = if('${{matrix.BIN}}' -eq 'x86') {'Win32'} else {'x64'}
+ $C_FLAGS = '/W4 /WX'
+ & cmake `
+ -G '${{matrix.GEN}}' `
+ -A $BIN `
+ -T ${{matrix.VER}} `
+ -D CMAKE_C_FLAGS="${C_FLAGS}" `
+ -D CMAKE_C_EXTENSIONS='${{matrix.EXT}}' `
+ -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\install" `
+ -S "${env:GITHUB_WORKSPACE}\tests\pkgconfig\bare" `
+ -B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare"
+ foreach ($Config in 'Release','Debug') { `
+ & cmake `
+ --build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare" `
+ --config ${Config} `
+ -- `
+ /verbosity:minimal `
+ /maxCpuCount `
+ /noLogo `
+ }
+
+ - name: Consume (PkgConfig - bare Ninja)
+ if: matrix.GEN == 'Ninja Multi-Config'
+ shell: pwsh
+ run: |
+ $VER = switch ('${{matrix.VER}}') { `
+ 'v141' {'14.1'} `
+ 'v142' {'14.2'} `
+ 'v143' {'14.3'} }
+ 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}"
+ $C_FLAGS = '/W4 /WX'
+ & cmake `
+ -G '${{matrix.GEN}}' `
+ -D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" `
+ -D BUILD_TESTING=ON `
+ -D CMAKE_C_FLAGS="${C_FLAGS}" `
+ -D CMAKE_C_EXTENSIONS='${{matrix.EXT}}' `
+ -D CMAKE_EXE_LINKER_FLAGS='/INCREMENTAL' `
+ -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\install" `
+ -S "${env:GITHUB_WORKSPACE}\tests\pkgconfig\bare" `
+ -B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare"
+ foreach ($Config in 'Release','Debug') { `
+ & cmake `
+ --build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare" `
+ --config ${Config} `
+ -- `
+ -j ${env:NUMBER_OF_PROCESSORS} `
+ }
+
+ - name: Consume (Emulate SDK presence)
+ shell: pwsh
+ run: |
+ New-Item -Type Directory -Path ${env:GITHUB_WORKSPACE}\install\share\cmake\OpenCL
+ New-Item -Type File -Path ${env:GITHUB_WORKSPACE}\install\share\cmake\OpenCL\OpenCLConfig.cmake -Value 'include("${CMAKE_CURRENT_LIST_DIR}/../OpenCLHeaders/OpenCLHeadersTargets.cmake")'
+
+ - name: Consume (PkgConfig - SDK MSBuild)
+ if: matrix.GEN == 'Visual Studio 17 2022'
+ shell: pwsh
+ run: |
+ $BIN = if('${{matrix.BIN}}' -eq 'x86') {'Win32'} else {'x64'}
+ $C_FLAGS = '/W4 /WX'
+ & cmake `
+ -G '${{matrix.GEN}}' `
+ -A $BIN `
+ -T ${{matrix.VER}} `
+ -D CMAKE_C_FLAGS="${C_FLAGS}" `
+ -D CMAKE_C_EXTENSIONS='${{matrix.EXT}}' `
+ -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\install" `
+ -S "${env:GITHUB_WORKSPACE}\tests\pkgconfig\sdk" `
+ -B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk"
+ foreach ($Config in 'Release','Debug') { `
+ & cmake `
+ --build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk" `
+ --config ${Config} `
+ -- `
+ /verbosity:minimal `
+ /maxCpuCount `
+ /noLogo `
+ }
+
+ - name: Consume (PkgConfig - SDK Ninja)
+ if: matrix.GEN == 'Ninja Multi-Config'
+ shell: pwsh
+ run: |
+ $VER = switch ('${{matrix.VER}}') { `
+ 'v141' {'14.1'} `
+ 'v142' {'14.2'} `
+ 'v143' {'14.3'} }
+ 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}"
+ $C_FLAGS = '/W4 /WX'
+ & cmake `
+ -G '${{matrix.GEN}}' `
+ -D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" `
+ -D BUILD_TESTING=ON `
+ -D CMAKE_C_FLAGS="${C_FLAGS}" `
+ -D CMAKE_C_EXTENSIONS='${{matrix.EXT}}' `
+ -D CMAKE_EXE_LINKER_FLAGS='/INCREMENTAL' `
+ -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\install" `
+ -S "${env:GITHUB_WORKSPACE}\tests\pkgconfig\sdk" `
+ -B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk"
+ foreach ($Config in 'Release','Debug') { `
+ & cmake `
+ --build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk" `
+ --config ${Config} `
+ -- `
+ -j ${env:NUMBER_OF_PROCESSORS} `
+ } \ No newline at end of file
diff --git a/CL/cl.h b/CL/cl.h
index 0018a0f..6c700ab 100644
--- a/CL/cl.h
+++ b/CL/cl.h
@@ -141,6 +141,10 @@ typedef struct _cl_image_desc {
#pragma warning( push )
#pragma warning( disable : 4201 ) /* Prevents warning about nameless struct/union in /W4 builds */
#endif
+#ifdef __clang__
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wc11-extensions" /* Prevents warning about nameless union being C11 extension*/
+#endif
#if defined(_MSC_VER) && defined(__STDC__)
/* Anonymous unions are not supported in /Za builds */
#else
@@ -158,6 +162,9 @@ typedef struct _cl_image_desc {
#if defined(_MSC_VER) && !defined(__STDC__)
#pragma warning( pop )
#endif
+#ifdef __clang__
+#pragma clang diagnostic pop
+#endif
#endif
} cl_image_desc;
diff --git a/CL/cl_d3d10.h b/CL/cl_d3d10.h
index 9f68770..0d9950b 100644
--- a/CL/cl_d3d10.h
+++ b/CL/cl_d3d10.h
@@ -21,6 +21,7 @@
#if _MSC_VER >=1500
#pragma warning( push )
#pragma warning( disable : 4201 )
+#pragma warning( disable : 5105 )
#endif
#endif
#include <d3d10.h>
diff --git a/CL/cl_d3d11.h b/CL/cl_d3d11.h
index 1de91ac..9393e5c 100644
--- a/CL/cl_d3d11.h
+++ b/CL/cl_d3d11.h
@@ -21,6 +21,7 @@
#if _MSC_VER >=1500
#pragma warning( push )
#pragma warning( disable : 4201 )
+#pragma warning( disable : 5105 )
#endif
#endif
#include <d3d11.h>
diff --git a/CL/cl_dx9_media_sharing.h b/CL/cl_dx9_media_sharing.h
index 0588d00..fd03bbd 100644
--- a/CL/cl_dx9_media_sharing.h
+++ b/CL/cl_dx9_media_sharing.h
@@ -32,7 +32,19 @@ typedef cl_uint cl_dx9_media_adapter_type_khr;
typedef cl_uint cl_dx9_media_adapter_set_khr;
#if defined(_WIN32)
+#if defined(_MSC_VER)
+#if _MSC_VER >=1500
+#pragma warning( push )
+#pragma warning( disable : 4201 )
+#pragma warning( disable : 5105 )
+#endif
+#endif
#include <d3d9.h>
+#if defined(_MSC_VER)
+#if _MSC_VER >=1500
+#pragma warning( pop )
+#endif
+#endif
typedef struct _cl_dx9_surface_info_khr
{
IDirect3DSurface9 *resource;
diff --git a/CL/cl_platform.h b/CL/cl_platform.h
index 68544bb..4f6444e 100644
--- a/CL/cl_platform.h
+++ b/CL/cl_platform.h
@@ -135,6 +135,11 @@ extern "C" {
#if (defined (_WIN32) && defined(_MSC_VER))
+#if defined(__clang__)
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wlanguage-extension-token"
+#endif
+
/* intptr_t is used in cl.h and provided by stddef.h in Visual C++, but not in clang */
/* stdint.h was missing before Visual Studio 2010, include it for later versions and for clang */
#if defined(__clang__) || _MSC_VER >= 1600
@@ -155,6 +160,10 @@ typedef unsigned __int16 cl_half;
typedef float cl_float;
typedef double cl_double;
+#if defined(__clang__)
+#pragma clang diagnostic pop
+#endif
+
/* Macro names and corresponding values defined by OpenCL */
#define CL_CHAR_BIT 8
#define CL_SCHAR_MAX 127
@@ -501,25 +510,23 @@ typedef unsigned int cl_GLenum;
#if !defined(__cplusplus) && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
#define __CL_HAS_ANON_STRUCT__ 1
#define __CL_ANON_STRUCT__
-#elif defined( __GNUC__) && ! defined( __STRICT_ANSI__ )
+#elif defined(_WIN32) && defined(_MSC_VER) && !defined(__STDC__)
+#define __CL_HAS_ANON_STRUCT__ 1
+#define __CL_ANON_STRUCT__
+#elif defined(__GNUC__) && ! defined(__STRICT_ANSI__)
#define __CL_HAS_ANON_STRUCT__ 1
#define __CL_ANON_STRUCT__ __extension__
-#elif defined( _WIN32) && defined(_MSC_VER) && ! defined(__STDC__)
- #if _MSC_VER >= 1500
- /* Microsoft Developer Studio 2008 supports anonymous structs, but
- * complains by default. */
- #define __CL_HAS_ANON_STRUCT__ 1
- #define __CL_ANON_STRUCT__
- /* Disable warning C4201: nonstandard extension used : nameless
- * struct/union */
- #pragma warning( push )
- #pragma warning( disable : 4201 )
- #endif
#else
#define __CL_HAS_ANON_STRUCT__ 0
#define __CL_ANON_STRUCT__
#endif
+#if defined(_WIN32) && defined(_MSC_VER) && __CL_HAS_ANON_STRUCT__
+ /* Disable warning C4201: nonstandard extension used : nameless struct/union */
+ #pragma warning( push )
+ #pragma warning( disable : 4201 )
+#endif
+
/* Define alignment keys */
#if defined( __GNUC__ ) || defined(__INTEGRITY)
#define CL_ALIGNED(_x) __attribute__ ((aligned(_x)))
@@ -1395,12 +1402,8 @@ typedef union
}
#endif
-#if !defined(__cplusplus) && defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
-#elif defined( __GNUC__) && ! defined( __STRICT_ANSI__ )
-#elif defined( _WIN32) && defined(_MSC_VER) && ! defined(__STDC__)
- #if _MSC_VER >=1500
+#if defined(_WIN32) && defined(_MSC_VER) && __CL_HAS_ANON_STRUCT__
#pragma warning( pop )
- #endif
#endif
#endif /* __CL_PLATFORM_H */
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7f66bac..e6ea8b5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,5 @@
cmake_minimum_required(VERSION 3.0)
+cmake_policy(VERSION 3.0...3.22)
# Include guard for including this project multiple times
if(TARGET Headers)
@@ -12,6 +13,7 @@ project(OpenCLHeaders
)
option(OPENCL_HEADERS_BUILD_TESTING "Enable support for OpenCL C headers testing." OFF)
+option(OPENCL_HEADERS_BUILD_CXX_TESTS "Enable support for OpenCL C headers testing in C++ mode." ON)
include(GNUInstallDirs)
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 6c0059a..a2a205a 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -1,14 +1,29 @@
# Add a test for a given source file for each version of OpenCL
function(add_header_test NAME SOURCE)
+ # Some headers include system files which require anonymous structs
+ # so we cannot test them with /Za:
+ set(TEST_SKIP_ANSI_TESTING
+ cl_d3d10_h cl_d3d11_h cl_dx9_media_sharing_h cl_dx9_media_sharing_intel_h cl_icd_h cl_layer_h)
+ get_filename_component(LANG_DIR "${CMAKE_CURRENT_SOURCE_DIR}" NAME)
+ if(LANG_DIR MATCHES cpp)
+ set(CPP_SOURCE_PATH "${CMAKE_CURRENT_BINARY_DIR}/${SOURCE}pp")
+ file(RELATIVE_PATH REL_SOURCE_PATH "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/../${SOURCE}")
+ file(TO_NATIVE_PATH "${REL_SOURCE_PATH}" NATIVE_SOURCE_PATH)
+ file(WRITE
+ "${CPP_SOURCE_PATH}"
+ "#include \"${NATIVE_SOURCE_PATH}\"\n"
+ )
+ set(SOURCE_PATH "${CPP_SOURCE_PATH}")
+ set(LANG cpp)
+ else()
+ set(SOURCE_PATH "../${SOURCE}")
+ set(LANG c)
+ endif()
foreach(VERSION 100 110 120 200 210 220 300)
- set(TEST_EXE ${NAME}_${VERSION})
- # Some headers include system files which require anonymous structs
- # so we cannot test them with /Za:
- list(APPEND TEST_SKIP_ANSI_TESTING
- cl_d3d10_h cl_d3d11_h cl_dx9_media_sharing_h cl_dx9_media_sharing_intel_h cl_icd_h cl_layer_h)
+ set(TEST_EXE ${NAME}_${LANG}_${VERSION})
list(FIND TEST_SKIP_ANSI_TESTING ${NAME} TEST_SKIP_INDEX)
if(NOT (${TEST_SKIP_INDEX} GREATER -1 AND MSVC AND CMAKE_C_FLAGS MATCHES "/Za"))
- add_executable(${TEST_EXE} ${SOURCE})
+ add_executable(${TEST_EXE} "${SOURCE_PATH}")
target_compile_definitions(${TEST_EXE}
PUBLIC -DCL_TARGET_OPENCL_VERSION=${VERSION}
)
@@ -20,21 +35,8 @@ function(add_header_test NAME SOURCE)
endforeach(VERSION)
endfunction(add_header_test)
-# Tests
-add_header_test(cl_h test_cl.h.c)
-add_header_test(cl_d3d10_h test_cl_d3d10.h.c)
-add_header_test(cl_d3d11_h test_cl_d3d11.h.c)
-add_header_test(cl_dx9_media_sharing_h test_cl_dx9_media_sharing.h.c)
-add_header_test(cl_dx9_media_sharing_intel_h test_cl_dx9_media_sharing.h.c)
-add_header_test(cl_egl_h test_cl_egl.h.c)
-add_header_test(cl_ext_h test_cl_ext.h.c)
-add_header_test(cl_ext_intel_h test_cl_ext_intel.h.c)
-add_header_test(cl_gl_h test_cl_gl.h.c)
-add_header_test(cl_gl_ext_h test_cl_gl_ext.h.c)
-add_header_test(cl_half_h test_cl_half.h.c)
-add_header_test(cl_icd_h test_cl_icd.h.c)
-add_header_test(cl_layer_h test_cl_layer.h.c)
-add_header_test(cl_platform_h test_cl_platform.h.c)
-add_header_test(cl_opencl_h test_opencl.h.c)
-add_header_test(cl_version_h test_cl_version.h.c)
-add_header_test(headers test_headers.c)
+add_subdirectory(lang_c)
+if(OPENCL_HEADERS_BUILD_CXX_TESTS)
+ enable_language(CXX)
+ add_subdirectory(lang_cpp)
+endif()
diff --git a/tests/lang_c/CMakeLists.txt b/tests/lang_c/CMakeLists.txt
new file mode 100644
index 0000000..0678dde
--- /dev/null
+++ b/tests/lang_c/CMakeLists.txt
@@ -0,0 +1,18 @@
+# Tests
+add_header_test(cl_h test_cl.h.c)
+add_header_test(cl_d3d10_h test_cl_d3d10.h.c)
+add_header_test(cl_d3d11_h test_cl_d3d11.h.c)
+add_header_test(cl_dx9_media_sharing_h test_cl_dx9_media_sharing.h.c)
+add_header_test(cl_dx9_media_sharing_intel_h test_cl_dx9_media_sharing.h.c)
+add_header_test(cl_egl_h test_cl_egl.h.c)
+add_header_test(cl_ext_h test_cl_ext.h.c)
+add_header_test(cl_ext_intel_h test_cl_ext_intel.h.c)
+add_header_test(cl_gl_h test_cl_gl.h.c)
+add_header_test(cl_gl_ext_h test_cl_gl_ext.h.c)
+add_header_test(cl_half_h test_cl_half.h.c)
+add_header_test(cl_icd_h test_cl_icd.h.c)
+add_header_test(cl_layer_h test_cl_layer.h.c)
+add_header_test(cl_platform_h test_cl_platform.h.c)
+add_header_test(cl_opencl_h test_opencl.h.c)
+add_header_test(cl_version_h test_cl_version.h.c)
+add_header_test(headers test_headers.c)
diff --git a/tests/lang_cpp/CMakeLists.txt b/tests/lang_cpp/CMakeLists.txt
new file mode 100644
index 0000000..0678dde
--- /dev/null
+++ b/tests/lang_cpp/CMakeLists.txt
@@ -0,0 +1,18 @@
+# Tests
+add_header_test(cl_h test_cl.h.c)
+add_header_test(cl_d3d10_h test_cl_d3d10.h.c)
+add_header_test(cl_d3d11_h test_cl_d3d11.h.c)
+add_header_test(cl_dx9_media_sharing_h test_cl_dx9_media_sharing.h.c)
+add_header_test(cl_dx9_media_sharing_intel_h test_cl_dx9_media_sharing.h.c)
+add_header_test(cl_egl_h test_cl_egl.h.c)
+add_header_test(cl_ext_h test_cl_ext.h.c)
+add_header_test(cl_ext_intel_h test_cl_ext_intel.h.c)
+add_header_test(cl_gl_h test_cl_gl.h.c)
+add_header_test(cl_gl_ext_h test_cl_gl_ext.h.c)
+add_header_test(cl_half_h test_cl_half.h.c)
+add_header_test(cl_icd_h test_cl_icd.h.c)
+add_header_test(cl_layer_h test_cl_layer.h.c)
+add_header_test(cl_platform_h test_cl_platform.h.c)
+add_header_test(cl_opencl_h test_opencl.h.c)
+add_header_test(cl_version_h test_cl_version.h.c)
+add_header_test(headers test_headers.c)
diff --git a/tests/test_cl_half.h.c b/tests/test_cl_half.h.c
index ddb9550..49745e0 100644
--- a/tests/test_cl_half.h.c
+++ b/tests/test_cl_half.h.c
@@ -95,7 +95,7 @@ int main(void)
CHECK_FROM_FLOAT(-(CL_HALF_MAX + 1000.f), 0xfbff, RTP);
CHECK_FROM_FLOAT(-(CL_HALF_MAX + 1000.f), 0xfc00, RTN);
CHECK_FROM_FLOAT(-(CL_HALF_MAX + 1000.f), 0xfbff, RTZ);
-#ifndef _MSC_VER
+#if 0 // Hexadecimal float constant is C++17
// Check tiny positive values round properly
CHECK_FROM_FLOAT(0x1.000000p-25, 0x0000, RTE);
CHECK_FROM_FLOAT(0x1.000000p-25, 0x0001, RTP);
@@ -108,7 +108,7 @@ int main(void)
CHECK_FROM_FLOAT(-0x1.000000p-25, 0x8001, RTN);
CHECK_FROM_FLOAT(-0x1.000000p-25, 0x8000, RTZ);
#else
-// Check tiny positive values round properly
+ // Check tiny positive values round properly
CHECK_FROM_FLOAT(2.98023223876953125e-08, 0x0000, RTE);
CHECK_FROM_FLOAT(2.98023223876953125e-08, 0x0001, RTP);
CHECK_FROM_FLOAT(2.98023223876953125e-08, 0x0000, RTN);