Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Merge pull request #8072 from dakcarto/opencl-clhpp
[opencl] Add FindOpenCLhpp CMake module; vendor cl2.hpp; fixup includes
- Loading branch information
Showing
with
9,844 additions
and 5 deletions.
- +15 −3 CMakeLists.txt
- +48 −0 cmake/FindOpenCLhpp.cmake
- +25 −0 external/opencl-clhpp/LICENSE.txt
- +63 −0 external/opencl-clhpp/README.txt
- +9,679 −0 external/opencl-clhpp/include/CL/cl2.hpp
- +1 −1 src/analysis/CMakeLists.txt
- +4 −0 src/app/CMakeLists.txt
- +1 −1 src/core/CMakeLists.txt
- +4 −0 tests/src/analysis/CMakeLists.txt
- +4 −0 tests/src/core/CMakeLists.txt
@@ -0,0 +1,48 @@ | ||
# Find OpenCLhpp | ||
# ~~~~~~~~~~~~~~~ | ||
# CMake module to search for OpenCL headers for C++ bindings from: | ||
# https://github.com/KhronosGroup/OpenCL-CLHPP | ||
# | ||
# Specifically, it finds the cpl2 header. | ||
# | ||
# If it's found it sets OPENCL_HPP_FOUND to TRUE | ||
# and following variables are set: | ||
# OPENCL_HPP_INCLUDE_DIR | ||
# | ||
# Copyright (c) 2018, Boundless Spatial | ||
# Author: Larry Shaffer <lshaffer (at) boundlessgeo (dot) com> | ||
# | ||
# Redistribution and use is allowed according to the terms of the BSD license. | ||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file. | ||
|
||
if (OPENCL_HPP_INCLUDE_DIR) | ||
SET(OPENCL_HPP_FOUND TRUE) | ||
else () | ||
find_path(OPENCL_HPP_INCLUDE_DIR | ||
NAMES CL/cl2.hpp | ||
PATHS | ||
${LIB_DIR}/include | ||
"$ENV{LIB_DIR}/include" | ||
$ENV{INCLUDE} | ||
/usr/local/include | ||
/usr/include | ||
) | ||
if (OPENCL_HPP_INCLUDE_DIR) | ||
SET(OPENCL_HPP_FOUND TRUE) | ||
else () | ||
SET(OPENCL_HPP_FOUND FALSE) | ||
endif () | ||
endif () | ||
|
||
|
||
if (OPENCL_HPP_FOUND) | ||
if (NOT OPENCLHPP_FIND_QUIETLY) | ||
message(STATUS "Found OpenCL C++ headers: ${OPENCL_HPP_INCLUDE_DIR}") | ||
endif () | ||
else () | ||
if (OPENCLHPP_FIND_REQUIRED) | ||
message(FATAL_ERROR "Could not find OpenCL C++ headers") | ||
endif () | ||
endif () | ||
|
||
mark_as_advanced(OPENCL_HPP_INCLUDE_DIR) |
@@ -0,0 +1,25 @@ | ||
Copyright (c) 2008-2015 The Khronos Group Inc. | ||
|
||
Permission is hereby granted, free of charge, to any person obtaining a | ||
copy of this software and/or associated documentation files (the | ||
"Materials"), to deal in the Materials without restriction, including | ||
without limitation the rights to use, copy, modify, merge, publish, | ||
distribute, sublicense, and/or sell copies of the Materials, and to | ||
permit persons to whom the Materials are furnished to do so, subject to | ||
the following conditions: | ||
|
||
The above copyright notice and this permission notice shall be included | ||
in all copies or substantial portions of the Materials. | ||
|
||
MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS | ||
KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS | ||
SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT | ||
https://www.khronos.org/registry/ | ||
|
||
THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | ||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY | ||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, | ||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE | ||
MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. |
@@ -0,0 +1,63 @@ | ||
Output cl2.hpp Header from OpenCL-CLHPP Project | ||
=============================================== | ||
|
||
Copied here to QGIS project on 2018-09-30 from source tree bbccc50 commit. | ||
|
||
https://github.com/KhronosGroup/OpenCL-CLHPP | ||
|
||
During CMake build, header is directly copied from source's 'input_cl2.hpp'. | ||
|
||
Useful for platforms where v2 C++ bindings are not provided with the default | ||
OpenCL installation, e.g. Mac. | ||
|
||
|
||
|
||
OpenCL-CLHPP Project README (below) | ||
=================================== | ||
|
||
Sources for the OpenCL Host API C++ bindings (cl.hpp and cl2.hpp). | ||
|
||
Doxgen documentation for the cl2.hpp header is available here: | ||
|
||
http://khronosgroup.github.io/OpenCL-CLHPP/ | ||
|
||
|
||
Components: | ||
input_cl.hpp: | ||
Acts as the master source for the 1.x version of the header. | ||
The reason for doing it this way is to generate an appropriate set of functors with varying argument counts without assuming variadic template support in the header. | ||
|
||
input_cl2.hpp: | ||
Acts as the master source for the 2.x version of the header. | ||
Directly copied as cl2.hpp | ||
|
||
gen_cl_hpp.py: | ||
A generator script written in python to convert input_cl.hpp into cl.hpp, generating the functor expansions as necessary. | ||
cl2.hpp does not require this as it uses variadic templates expanded in the compiler. | ||
|
||
docs: | ||
Doxygen file used to generate HTML documentation for cl2.hpp. | ||
|
||
examples: | ||
A simple example application using the very basic features of the header and generating cl.hpp dynamically through the build system. | ||
|
||
tests: | ||
A (very small, incomplete) set of regression tests. Building the tests requires Python, Ruby, Unity and CMock. For the last two I've used Unity 2.1.0 [1] and CMock top-of-tree from Github [2] (the version 2.0.204 on Sourceforge does not work). At the moment there is no way to skip building the tests. | ||
|
||
CMake scripts: | ||
A build system that both generates the example and drives generation of cl.hpp. | ||
|
||
You need to tell cmake where to find external dependencies, using the variables OPENCL_DIST_DIR, UNITY_DIR and CMOCK_DIR. These can be set either as environment variables, or on the cmake command line using the syntax -D<VAR>=<VALUE>. For the lazy, I use the following commands to build and test (you'll need to adapt your paths): | ||
|
||
mkdir build | ||
cd build | ||
cmake -DUNITY_DIR=$HOME/src/unity -DCMOCK_DIR=$HOME/src/cmock -DOPENCL_DIST_DIR=/opt/AMD-APP-SDK-v2.7-RC-lnx64/ .. | ||
make | ||
tests/test_clhpp | ||
tests/test_clhpp_cxx11 | ||
tests/test_clhpp_deprecated_1_1 | ||
|
||
After building, the headers appear in build/include/CL/. If Doxygen is available, you can generate HTML documentation by typing `make docs`. | ||
|
||
[1] https://github.com/ThrowTheSwitch/Unity/releases/tag/v2.1.0 | ||
[2] https://github.com/ThrowTheSwitch/CMock |
Oops, something went wrong.