From b66d4739b5e0944a58d4a94431ed7ad042fad05d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matth=C3=A4us=20G=2E=20Chajdas?= Date: Tue, 31 May 2016 21:10:40 +0200 Subject: [PATCH] FindOpenCL: Add an imported target --- .../dev/FindOpenCL-imported-target.rst | 4 ++++ Modules/FindOpenCL.cmake | 20 +++++++++++++++++-- Tests/CMakeLists.txt | 4 ++++ Tests/FindOpenCL/CMakeLists.txt | 10 ++++++++++ Tests/FindOpenCL/Test/CMakeLists.txt | 14 +++++++++++++ Tests/FindOpenCL/Test/main.c | 16 +++++++++++++++ 6 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 Help/release/dev/FindOpenCL-imported-target.rst create mode 100644 Tests/FindOpenCL/CMakeLists.txt create mode 100644 Tests/FindOpenCL/Test/CMakeLists.txt create mode 100644 Tests/FindOpenCL/Test/main.c diff --git a/Help/release/dev/FindOpenCL-imported-target.rst b/Help/release/dev/FindOpenCL-imported-target.rst new file mode 100644 index 000000000..259c745b0 --- /dev/null +++ b/Help/release/dev/FindOpenCL-imported-target.rst @@ -0,0 +1,4 @@ +FindOpenCL-imported-target +-------------------------- + +* The :module:`FindOpenCL` module now provides imported targets. diff --git a/Modules/FindOpenCL.cmake b/Modules/FindOpenCL.cmake index 4d3ed842c..feda31565 100644 --- a/Modules/FindOpenCL.cmake +++ b/Modules/FindOpenCL.cmake @@ -4,7 +4,16 @@ # # Try to find OpenCL # -# Once done this will define:: +# IMPORTED Targets +# ^^^^^^^^^^^^^^^^ +# +# This module defines :prop_tgt:`IMPORTED` target ``OpenCL::OpenCL``, if +# OpenCL has been found. +# +# Result Variables +# ^^^^^^^^^^^^^^^^ +# +# This module defines the following variables:: # # OpenCL_FOUND - True if OpenCL was found # OpenCL_INCLUDE_DIRS - include directories for OpenCL @@ -20,7 +29,7 @@ # #============================================================================= -# Copyright 2014 Matthaeus G. Chajdas +# Copyright 2014-2016 Matthaeus G. Chajdas # # Distributed under the OSI-approved BSD License (the "License"); # see accompanying file Copyright.txt for details. @@ -134,3 +143,10 @@ find_package_handle_standard_args( mark_as_advanced( OpenCL_INCLUDE_DIR OpenCL_LIBRARY) + +if(OpenCL_FOUND AND NOT TARGET OpenCL::OpenCL) + add_library(OpenCL::OpenCL UNKNOWN IMPORTED) + set_target_properties(OpenCL::OpenCL PROPERTIES + IMPORTED_LOCATION "${OpenCL_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${OpenCL_INCLUDE_DIRS}") +endif() diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 2db5deda3..b72ecf5da 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -1378,6 +1378,10 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P ${CMake_SOURCE_DIR}/Utilities/Release add_subdirectory(FindLTTngUST) endif() + if(CMake_TEST_FindOpenCL) + add_subdirectory(FindOpenCL) + endif() + if(CMake_TEST_FindOpenSSL) add_subdirectory(FindOpenSSL) endif() diff --git a/Tests/FindOpenCL/CMakeLists.txt b/Tests/FindOpenCL/CMakeLists.txt new file mode 100644 index 000000000..88d2eaee0 --- /dev/null +++ b/Tests/FindOpenCL/CMakeLists.txt @@ -0,0 +1,10 @@ +add_test(NAME FindOpenCL.Test COMMAND + ${CMAKE_CTEST_COMMAND} -C $ + --build-and-test + "${CMake_SOURCE_DIR}/Tests/FindOpenCL/Test" + "${CMake_BINARY_DIR}/Tests/FindOpenCL/Test" + ${build_generator_args} + --build-project TestFindOpenCL + --build-options ${build_options} + --test-command ${CMAKE_CTEST_COMMAND} -V -C $ + ) diff --git a/Tests/FindOpenCL/Test/CMakeLists.txt b/Tests/FindOpenCL/Test/CMakeLists.txt new file mode 100644 index 000000000..f8a65877b --- /dev/null +++ b/Tests/FindOpenCL/Test/CMakeLists.txt @@ -0,0 +1,14 @@ +cmake_minimum_required(VERSION 3.4) +project(TestFindOpenCL C) +include(CTest) + +find_package(OpenCL REQUIRED) + +add_executable(test_tgt main.c) +target_link_libraries(test_tgt OpenCL::OpenCL) +add_test(NAME test_tgt COMMAND test_tgt) + +add_executable(test_var main.c) +target_include_directories(test_var PRIVATE ${OpenCL_INCLUDE_DIRS}) +target_link_libraries(test_var PRIVATE ${OpenCL_LIBRARIES}) +add_test(NAME test_var COMMAND test_var) diff --git a/Tests/FindOpenCL/Test/main.c b/Tests/FindOpenCL/Test/main.c new file mode 100644 index 000000000..b075caf19 --- /dev/null +++ b/Tests/FindOpenCL/Test/main.c @@ -0,0 +1,16 @@ +#ifdef __APPLE__ + #include +#else + #include +#endif + +int main() +{ + cl_uint platformIdCount; + + // We can't assert on the result because this may return an error if no ICD is + // found + clGetPlatformIDs (0, NULL, &platformIdCount); + + return 0; +}