• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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