1cmake_minimum_required(VERSION 3.0) 2cmake_policy(VERSION 3.0...3.22) 3 4# Include guard for including this project multiple times 5if(TARGET Headers) 6 return() 7endif() 8 9project(OpenCLHeaders 10 VERSION 2.2 11 LANGUAGES C # Ideally should be NONE, but GNUInstallDirs detects platform arch using try_compile 12 # https://stackoverflow.com/questions/43379311/why-does-project-affect-cmakes-opinion-on-cmake-sizeof-void-p 13) 14 15option(OPENCL_HEADERS_BUILD_TESTING "Enable support for OpenCL C headers testing." OFF) 16option(OPENCL_HEADERS_BUILD_CXX_TESTS "Enable support for OpenCL C headers testing in C++ mode." ON) 17 18include(GNUInstallDirs) 19 20add_library(Headers INTERFACE) 21add_library(OpenCL::Headers ALIAS Headers) 22 23if(CMAKE_SYSTEM_NAME MATCHES Darwin) 24 execute_process( 25 COMMAND ln -shf ${CMAKE_CURRENT_SOURCE_DIR}/CL ${CMAKE_CURRENT_BINARY_DIR}/CL 26 COMMAND ln -shf ${CMAKE_CURRENT_SOURCE_DIR}/CL ${CMAKE_CURRENT_BINARY_DIR}/OpenCL 27 ) 28 target_include_directories(Headers 29 INTERFACE 30 $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}> 31 $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}> 32 ) 33 install(CODE " 34 file(MAKE_DIRECTORY ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}/CL) 35 execute_process( 36 COMMAND ln -shf CL ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}/OpenCL 37 )" 38 ) 39else() 40 target_include_directories(Headers 41 INTERFACE 42 $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}> 43 $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}> 44 ) 45endif() 46 47install( 48 TARGETS Headers 49 EXPORT OpenCLHeadersTargets 50) 51install( 52 DIRECTORY CL 53 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} 54) 55 56export( 57 EXPORT OpenCLHeadersTargets 58 FILE ${PROJECT_BINARY_DIR}/OpenCLHeaders/OpenCLHeadersTargets.cmake 59 NAMESPACE OpenCL:: 60) 61file( 62 WRITE ${PROJECT_BINARY_DIR}/OpenCLHeaders/OpenCLHeadersConfig.cmake 63 "include(\"\${CMAKE_CURRENT_LIST_DIR}/OpenCLHeadersTargets.cmake\")" 64) 65 66set(config_package_location ${CMAKE_INSTALL_DATADIR}/cmake/OpenCLHeaders) 67install( 68 EXPORT OpenCLHeadersTargets 69 FILE OpenCLHeadersTargets.cmake 70 NAMESPACE OpenCL:: 71 DESTINATION ${config_package_location} 72) 73install( 74 FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenCLHeaders/OpenCLHeadersConfig.cmake 75 DESTINATION ${config_package_location} 76) 77 78unset(CMAKE_SIZEOF_VOID_P) 79include(CMakePackageConfigHelpers) 80write_basic_package_version_file( 81 ${CMAKE_CURRENT_BINARY_DIR}/OpenCLHeaders/OpenCLHeadersConfigVersion.cmake 82 VERSION ${PROJECT_VERSION} 83 COMPATIBILITY AnyNewerVersion 84) 85install( 86 FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenCLHeaders/OpenCLHeadersConfigVersion.cmake 87 DESTINATION ${config_package_location} 88) 89 90if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME OR OPENCL_HEADERS_BUILD_TESTING) 91 include(CTest) 92endif() 93if((CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME OR OPENCL_HEADERS_BUILD_TESTING) AND BUILD_TESTING) 94 add_subdirectory(tests) 95endif() 96