xref: /aosp_15_r20/external/OpenCL-CLHPP/CMakeLists.txt (revision 6fee86a4f833e4f32f25770a262884407554133d)
1*6fee86a4SJeremy Kempcmake_minimum_required(VERSION 3.1)
2*6fee86a4SJeremy Kemp
3*6fee86a4SJeremy Kempproject(OpenCLHeadersCpp
4*6fee86a4SJeremy Kemp  VERSION 3.0
5*6fee86a4SJeremy Kemp  LANGUAGES CXX # Ideally should be NONE, but GNUInstallDirs detects platform arch using try_compile
6*6fee86a4SJeremy Kemp  # https://stackoverflow.com/questions/43379311/why-does-project-affect-cmakes-opinion-on-cmake-sizeof-void-p
7*6fee86a4SJeremy Kemp)
8*6fee86a4SJeremy Kempenable_testing()
9*6fee86a4SJeremy Kemp
10*6fee86a4SJeremy Kempset(CMAKE_CXX_STANDARD 11)
11*6fee86a4SJeremy Kempset(CMAKE_CXX_STANDARD_REQUIRED ON)
12*6fee86a4SJeremy Kemp
13*6fee86a4SJeremy Kempoption(BUILD_DOCS "Build Documentation" ON)
14*6fee86a4SJeremy Kempoption(BUILD_EXAMPLES "Build Examples" ON)
15*6fee86a4SJeremy Kempoption(OPENCL_CLHPP_BUILD_TESTING "Enable support for OpenCL C++ headers testing." OFF)
16*6fee86a4SJeremy Kempset(THREADS_PREFER_PTHREAD_FLAG ON CACHE BOOL
17*6fee86a4SJeremy Kemp  "find_package(Threads) preference. Recommendation is to keep default value."
18*6fee86a4SJeremy Kemp)
19*6fee86a4SJeremy Kemp# Legacy helper variables, see later at finding headers and ICD Loader
20*6fee86a4SJeremy Kempset(OPENCL_DIST_DIR "" CACHE PATH "OpenCL source dir (legacy helper var)")
21*6fee86a4SJeremy Kempset(OPENCL_LIB_DIR "${OPENCL_DIST_DIR}/lib" CACHE PATH "OpenCL library dir (legacy helper var)" )
22*6fee86a4SJeremy Kempset(OPENCL_INCLUDE_DIR "${OPENCL_DIST_DIR}/include" CACHE PATH "OpenCL source dir (legacy helper var)")
23*6fee86a4SJeremy Kemp# Helper vars with names consistent with OpenCL-ICD-Loader's OPENCL_ICD_LOADER_HEADERS_DIR
24*6fee86a4SJeremy Kemp# Default values taken from legacy defaults
25*6fee86a4SJeremy Kempset(OPENCL_CLHPP_HEADERS_DIR "${OPENCL_INCLUDE_DIR}" CACHE PATH "OpenCL headers dir")
26*6fee86a4SJeremy Kempset(OPENCL_CLHPP_LOADER_DIR "${OPENCL_LIB_DIR}" CACHE PATH "OpenCL library dir")
27*6fee86a4SJeremy Kemp
28*6fee86a4SJeremy Kempadd_library(HeadersCpp INTERFACE)
29*6fee86a4SJeremy Kempadd_library(OpenCL::HeadersCpp ALIAS HeadersCpp)
30*6fee86a4SJeremy Kemp
31*6fee86a4SJeremy Kempif(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME OR OPENCL_CLHPP_BUILD_TESTING)
32*6fee86a4SJeremy Kemp  include(CTest)
33*6fee86a4SJeremy Kempendif()
34*6fee86a4SJeremy Kempif((CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME OR OPENCL_CLHPP_BUILD_TESTING) AND BUILD_TESTING)
35*6fee86a4SJeremy Kemp  set(CLHPP_BUILD_TESTS ON)
36*6fee86a4SJeremy Kempendif()
37*6fee86a4SJeremy Kemp
38*6fee86a4SJeremy Kemp# In the spirit of backward compatibility, to not break existing build automation
39*6fee86a4SJeremy Kemp# we first check if the helper vars refer to existing files. If yes, use them.
40*6fee86a4SJeremy Kemp# Otherwise search using 3.0 installed CMake Package Configs.
41*6fee86a4SJeremy Kempif(EXISTS "${OPENCL_CLHPP_HEADERS_DIR}/CL/cl.h")
42*6fee86a4SJeremy Kemp  if(NOT TARGET OpenCL::Headers)
43*6fee86a4SJeremy Kemp    message(STATUS "Defining OpenCL::Headers through OPENCL_INCLUDE_DIR")
44*6fee86a4SJeremy Kemp    add_library(OpenCLHeaders INTERFACE)
45*6fee86a4SJeremy Kemp    add_library(OpenCL::Headers ALIAS OpenCLHeaders)
46*6fee86a4SJeremy Kemp    target_include_directories(OpenCLHeaders INTERFACE ${OPENCL_INCLUDE_DIR})
47*6fee86a4SJeremy Kemp  endif()
48*6fee86a4SJeremy Kempelse()
49*6fee86a4SJeremy Kemp  if(NOT TARGET OpenCL::Headers)
50*6fee86a4SJeremy Kemp    find_package(OpenCLHeaders REQUIRED)
51*6fee86a4SJeremy Kemp  endif()
52*6fee86a4SJeremy Kempendif()
53*6fee86a4SJeremy Kempif(BUILD_EXAMPLES OR CLHPP_BUILD_TESTS)
54*6fee86a4SJeremy Kemp  enable_language(C)
55*6fee86a4SJeremy Kemp  find_package(Threads REQUIRED)
56*6fee86a4SJeremy Kempendif()
57*6fee86a4SJeremy Kempif(CLHPP_BUILD_TESTS)
58*6fee86a4SJeremy Kemp  find_program(RUBY_EXECUTABLE ruby REQUIRED)
59*6fee86a4SJeremy Kempendif()
60*6fee86a4SJeremy Kemp
61*6fee86a4SJeremy Kemptarget_include_directories(HeadersCpp
62*6fee86a4SJeremy Kemp  INTERFACE
63*6fee86a4SJeremy Kemp    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
64*6fee86a4SJeremy Kemp    $<INSTALL_INTERFACE:include>
65*6fee86a4SJeremy Kemp)
66*6fee86a4SJeremy Kemptarget_link_libraries(HeadersCpp
67*6fee86a4SJeremy Kemp  INTERFACE
68*6fee86a4SJeremy Kemp    OpenCL::Headers
69*6fee86a4SJeremy Kemp)
70*6fee86a4SJeremy Kemp
71*6fee86a4SJeremy Kempinstall(
72*6fee86a4SJeremy Kemp  TARGETS HeadersCpp
73*6fee86a4SJeremy Kemp  EXPORT OpenCLHeadersCppTargets
74*6fee86a4SJeremy Kemp)
75*6fee86a4SJeremy Kemp
76*6fee86a4SJeremy Kempset (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
77*6fee86a4SJeremy Kempinclude(JoinPaths)
78*6fee86a4SJeremy Kemp
79*6fee86a4SJeremy Kempinclude(GNUInstallDirs)
80*6fee86a4SJeremy Kemp
81*6fee86a4SJeremy Kempinstall(
82*6fee86a4SJeremy Kemp  DIRECTORY include/CL
83*6fee86a4SJeremy Kemp  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
84*6fee86a4SJeremy Kemp)
85*6fee86a4SJeremy Kempexport(
86*6fee86a4SJeremy Kemp  EXPORT OpenCLHeadersCppTargets
87*6fee86a4SJeremy Kemp  FILE ${PROJECT_BINARY_DIR}/OpenCLHeadersCpp/OpenCLHeadersCppTargets.cmake
88*6fee86a4SJeremy Kemp  NAMESPACE OpenCL::
89*6fee86a4SJeremy Kemp)
90*6fee86a4SJeremy Kempfile(
91*6fee86a4SJeremy Kemp  WRITE ${PROJECT_BINARY_DIR}/OpenCLHeadersCpp/OpenCLHeadersCppConfig.cmake
92*6fee86a4SJeremy Kemp  "include(\"\${CMAKE_CURRENT_LIST_DIR}/OpenCLHeadersCppTargets.cmake\")"
93*6fee86a4SJeremy Kemp)
94*6fee86a4SJeremy Kemp
95*6fee86a4SJeremy Kempset(config_package_location ${CMAKE_INSTALL_DATADIR}/cmake/OpenCLHeadersCpp)
96*6fee86a4SJeremy Kempinstall(
97*6fee86a4SJeremy Kemp  EXPORT OpenCLHeadersCppTargets
98*6fee86a4SJeremy Kemp  FILE OpenCLHeadersCppTargets.cmake
99*6fee86a4SJeremy Kemp  NAMESPACE OpenCL::
100*6fee86a4SJeremy Kemp  DESTINATION ${config_package_location}
101*6fee86a4SJeremy Kemp)
102*6fee86a4SJeremy Kempinstall(
103*6fee86a4SJeremy Kemp  FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenCLHeadersCpp/OpenCLHeadersCppConfig.cmake
104*6fee86a4SJeremy Kemp  DESTINATION ${config_package_location}
105*6fee86a4SJeremy Kemp)
106*6fee86a4SJeremy Kemp
107*6fee86a4SJeremy Kempunset(CMAKE_SIZEOF_VOID_P)
108*6fee86a4SJeremy Kempinclude(CMakePackageConfigHelpers)
109*6fee86a4SJeremy Kempwrite_basic_package_version_file(
110*6fee86a4SJeremy Kemp  ${CMAKE_CURRENT_BINARY_DIR}/OpenCLHeadersCpp/OpenCLHeadersCppConfigVersion.cmake
111*6fee86a4SJeremy Kemp  VERSION ${PROJECT_VERSION}
112*6fee86a4SJeremy Kemp  COMPATIBILITY AnyNewerVersion
113*6fee86a4SJeremy Kemp)
114*6fee86a4SJeremy Kempinstall(
115*6fee86a4SJeremy Kemp  FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenCLHeadersCpp/OpenCLHeadersCppConfigVersion.cmake
116*6fee86a4SJeremy Kemp  DESTINATION ${config_package_location}
117*6fee86a4SJeremy Kemp)
118*6fee86a4SJeremy Kemp
119*6fee86a4SJeremy Kempset(UNITY_DIR ${PROJECT_SOURCE_DIR}/external/CMock/vendor/unity CACHE PATH "Unity dir")
120*6fee86a4SJeremy Kempset(CMOCK_DIR ${PROJECT_SOURCE_DIR}/external/CMock CACHE PATH "CMock dir")
121*6fee86a4SJeremy Kemp
122*6fee86a4SJeremy Kempif(BUILD_DOCS)
123*6fee86a4SJeremy Kemp  add_subdirectory(docs)
124*6fee86a4SJeremy Kempendif(BUILD_DOCS)
125*6fee86a4SJeremy Kemp
126*6fee86a4SJeremy Kempif(BUILD_EXAMPLES)
127*6fee86a4SJeremy Kemp  add_subdirectory(examples)
128*6fee86a4SJeremy Kempendif(BUILD_EXAMPLES)
129*6fee86a4SJeremy Kemp
130*6fee86a4SJeremy Kempif(CLHPP_BUILD_TESTS)
131*6fee86a4SJeremy Kemp  add_subdirectory(tests)
132*6fee86a4SJeremy Kempendif(CLHPP_BUILD_TESTS)
133*6fee86a4SJeremy Kemp
134*6fee86a4SJeremy Kempjoin_paths(OPENCLHPP_INCLUDEDIR_PC "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}")
135*6fee86a4SJeremy Kemp
136*6fee86a4SJeremy Kempconfigure_file(OpenCL-CLHPP.pc.in OpenCL-CLHPP.pc @ONLY)
137*6fee86a4SJeremy Kempset(pkg_config_location ${CMAKE_INSTALL_DATADIR}/pkgconfig)
138*6fee86a4SJeremy Kempinstall(
139*6fee86a4SJeremy Kemp  FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenCL-CLHPP.pc
140*6fee86a4SJeremy Kemp  DESTINATION ${pkg_config_location})
141