xref: /aosp_15_r20/external/OpenCL-Headers/CMakeLists.txt (revision 3cc257528f335c5672e46865a03b8ee020e5fe2d)
1*3cc25752SFrank Pivacmake_minimum_required(VERSION 3.0)
2*3cc25752SFrank Pivacmake_policy(VERSION 3.0...3.22)
3*3cc25752SFrank Piva
4*3cc25752SFrank Piva# Include guard for including this project multiple times
5*3cc25752SFrank Pivaif(TARGET Headers)
6*3cc25752SFrank Piva  return()
7*3cc25752SFrank Pivaendif()
8*3cc25752SFrank Piva
9*3cc25752SFrank Pivaproject(OpenCLHeaders
10*3cc25752SFrank Piva  VERSION 2.2
11*3cc25752SFrank Piva  LANGUAGES C # Ideally should be NONE, but GNUInstallDirs detects platform arch using try_compile
12*3cc25752SFrank Piva  # https://stackoverflow.com/questions/43379311/why-does-project-affect-cmakes-opinion-on-cmake-sizeof-void-p
13*3cc25752SFrank Piva)
14*3cc25752SFrank Piva
15*3cc25752SFrank Pivaoption(OPENCL_HEADERS_BUILD_TESTING "Enable support for OpenCL C headers testing." OFF)
16*3cc25752SFrank Pivaoption(OPENCL_HEADERS_BUILD_CXX_TESTS "Enable support for OpenCL C headers testing in C++ mode." ON)
17*3cc25752SFrank Piva
18*3cc25752SFrank Pivaset (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
19*3cc25752SFrank Pivainclude(JoinPaths)
20*3cc25752SFrank Piva
21*3cc25752SFrank Pivainclude(GNUInstallDirs)
22*3cc25752SFrank Piva
23*3cc25752SFrank Pivaadd_library(Headers INTERFACE)
24*3cc25752SFrank Pivaadd_library(OpenCL::Headers ALIAS Headers)
25*3cc25752SFrank Piva
26*3cc25752SFrank Pivaif(CMAKE_SYSTEM_NAME MATCHES Darwin)
27*3cc25752SFrank Piva  execute_process(
28*3cc25752SFrank Piva    COMMAND ln -snf ${CMAKE_CURRENT_SOURCE_DIR}/CL ${CMAKE_CURRENT_BINARY_DIR}/CL
29*3cc25752SFrank Piva    COMMAND ln -snf ${CMAKE_CURRENT_SOURCE_DIR}/CL ${CMAKE_CURRENT_BINARY_DIR}/OpenCL
30*3cc25752SFrank Piva  )
31*3cc25752SFrank Piva  target_include_directories(Headers
32*3cc25752SFrank Piva    INTERFACE
33*3cc25752SFrank Piva      $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
34*3cc25752SFrank Piva      $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
35*3cc25752SFrank Piva  )
36*3cc25752SFrank Piva  install(CODE "
37*3cc25752SFrank Piva    file(MAKE_DIRECTORY  ${CMAKE_INSTALL_FULL_INCLUDEDIR}/CL)
38*3cc25752SFrank Piva    execute_process(
39*3cc25752SFrank Piva      COMMAND ln -snf CL ${CMAKE_INSTALL_FULL_INCLUDEDIR}/OpenCL
40*3cc25752SFrank Piva    )"
41*3cc25752SFrank Piva  )
42*3cc25752SFrank Pivaelse()
43*3cc25752SFrank Piva  target_include_directories(Headers
44*3cc25752SFrank Piva    INTERFACE
45*3cc25752SFrank Piva      $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
46*3cc25752SFrank Piva      $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
47*3cc25752SFrank Piva  )
48*3cc25752SFrank Pivaendif()
49*3cc25752SFrank Piva
50*3cc25752SFrank Pivainstall(
51*3cc25752SFrank Piva  TARGETS Headers
52*3cc25752SFrank Piva  EXPORT OpenCLHeadersTargets
53*3cc25752SFrank Piva)
54*3cc25752SFrank Pivainstall(
55*3cc25752SFrank Piva  DIRECTORY CL
56*3cc25752SFrank Piva  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
57*3cc25752SFrank Piva)
58*3cc25752SFrank Piva
59*3cc25752SFrank Pivaexport(
60*3cc25752SFrank Piva  EXPORT OpenCLHeadersTargets
61*3cc25752SFrank Piva  FILE ${PROJECT_BINARY_DIR}/OpenCLHeaders/OpenCLHeadersTargets.cmake
62*3cc25752SFrank Piva  NAMESPACE OpenCL::
63*3cc25752SFrank Piva)
64*3cc25752SFrank Pivafile(
65*3cc25752SFrank Piva  WRITE ${PROJECT_BINARY_DIR}/OpenCLHeaders/OpenCLHeadersConfig.cmake
66*3cc25752SFrank Piva  "include(\"\${CMAKE_CURRENT_LIST_DIR}/OpenCLHeadersTargets.cmake\")"
67*3cc25752SFrank Piva)
68*3cc25752SFrank Piva
69*3cc25752SFrank Pivaset(config_package_location ${CMAKE_INSTALL_DATADIR}/cmake/OpenCLHeaders)
70*3cc25752SFrank Pivainstall(
71*3cc25752SFrank Piva  EXPORT OpenCLHeadersTargets
72*3cc25752SFrank Piva  FILE OpenCLHeadersTargets.cmake
73*3cc25752SFrank Piva  NAMESPACE OpenCL::
74*3cc25752SFrank Piva  DESTINATION ${config_package_location}
75*3cc25752SFrank Piva)
76*3cc25752SFrank Pivainstall(
77*3cc25752SFrank Piva  FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenCLHeaders/OpenCLHeadersConfig.cmake
78*3cc25752SFrank Piva  DESTINATION ${config_package_location}
79*3cc25752SFrank Piva)
80*3cc25752SFrank Piva
81*3cc25752SFrank Pivaunset(CMAKE_SIZEOF_VOID_P)
82*3cc25752SFrank Pivainclude(CMakePackageConfigHelpers)
83*3cc25752SFrank Pivawrite_basic_package_version_file(
84*3cc25752SFrank Piva  ${CMAKE_CURRENT_BINARY_DIR}/OpenCLHeaders/OpenCLHeadersConfigVersion.cmake
85*3cc25752SFrank Piva  VERSION ${PROJECT_VERSION}
86*3cc25752SFrank Piva  COMPATIBILITY AnyNewerVersion
87*3cc25752SFrank Piva)
88*3cc25752SFrank Pivainstall(
89*3cc25752SFrank Piva  FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenCLHeaders/OpenCLHeadersConfigVersion.cmake
90*3cc25752SFrank Piva  DESTINATION ${config_package_location}
91*3cc25752SFrank Piva)
92*3cc25752SFrank Piva
93*3cc25752SFrank Pivaif(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME OR OPENCL_HEADERS_BUILD_TESTING)
94*3cc25752SFrank Piva  include(CTest)
95*3cc25752SFrank Pivaendif()
96*3cc25752SFrank Pivaif((CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME OR OPENCL_HEADERS_BUILD_TESTING) AND BUILD_TESTING)
97*3cc25752SFrank Piva  add_subdirectory(tests)
98*3cc25752SFrank Pivaendif()
99*3cc25752SFrank Piva
100*3cc25752SFrank Pivaif(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
101*3cc25752SFrank Piva    find_package(Python3 COMPONENTS Interpreter)
102*3cc25752SFrank Piva    set(OPENCL_HEADERS_XML_PATH CACHE FILEPATH "Path to cl.xml for OpenCL Header genereration")
103*3cc25752SFrank Piva    set(OPENCL_HEADERS_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/generated)
104*3cc25752SFrank Piva    add_custom_target(headers_generate
105*3cc25752SFrank Piva        COMMAND ${CMAKE_COMMAND} -E make_directory ${OPENCL_HEADERS_OUTPUT_DIRECTORY}
106*3cc25752SFrank Piva        COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_CURRENT_SOURCE_DIR}/scripts
107*3cc25752SFrank Piva            ${Python3_EXECUTABLE} gen_headers.py
108*3cc25752SFrank Piva            -registry ${OPENCL_HEADERS_XML_PATH}
109*3cc25752SFrank Piva            -o ${OPENCL_HEADERS_OUTPUT_DIRECTORY}
110*3cc25752SFrank Piva    )
111*3cc25752SFrank Piva    add_custom_target(headers_copy
112*3cc25752SFrank Piva        COMMAND ${CMAKE_COMMAND} -E copy
113*3cc25752SFrank Piva            ${OPENCL_HEADERS_OUTPUT_DIRECTORY}/cl_d3d10.h
114*3cc25752SFrank Piva            ${CMAKE_CURRENT_SOURCE_DIR}/CL
115*3cc25752SFrank Piva        COMMAND ${CMAKE_COMMAND} -E copy
116*3cc25752SFrank Piva            ${OPENCL_HEADERS_OUTPUT_DIRECTORY}/cl_d3d11.h
117*3cc25752SFrank Piva            ${CMAKE_CURRENT_SOURCE_DIR}/CL
118*3cc25752SFrank Piva        COMMAND ${CMAKE_COMMAND} -E copy
119*3cc25752SFrank Piva            ${OPENCL_HEADERS_OUTPUT_DIRECTORY}/cl_dx9_media_sharing.h
120*3cc25752SFrank Piva            ${CMAKE_CURRENT_SOURCE_DIR}/CL
121*3cc25752SFrank Piva        COMMAND ${CMAKE_COMMAND} -E copy
122*3cc25752SFrank Piva            ${OPENCL_HEADERS_OUTPUT_DIRECTORY}/cl_egl.h
123*3cc25752SFrank Piva            ${CMAKE_CURRENT_SOURCE_DIR}/CL
124*3cc25752SFrank Piva        COMMAND ${CMAKE_COMMAND} -E copy
125*3cc25752SFrank Piva            ${OPENCL_HEADERS_OUTPUT_DIRECTORY}/cl_ext.h
126*3cc25752SFrank Piva            ${CMAKE_CURRENT_SOURCE_DIR}/CL
127*3cc25752SFrank Piva        COMMAND ${CMAKE_COMMAND} -E copy
128*3cc25752SFrank Piva            ${OPENCL_HEADERS_OUTPUT_DIRECTORY}/cl_gl.h
129*3cc25752SFrank Piva            ${CMAKE_CURRENT_SOURCE_DIR}/CL
130*3cc25752SFrank Piva        COMMAND ${CMAKE_COMMAND} -E copy
131*3cc25752SFrank Piva            ${OPENCL_HEADERS_OUTPUT_DIRECTORY}/cl_layer.h
132*3cc25752SFrank Piva            ${CMAKE_CURRENT_SOURCE_DIR}/CL
133*3cc25752SFrank Piva        COMMAND ${CMAKE_COMMAND} -E copy
134*3cc25752SFrank Piva            ${OPENCL_HEADERS_OUTPUT_DIRECTORY}/cl_va_api_media_sharing_intel.h
135*3cc25752SFrank Piva            ${CMAKE_CURRENT_SOURCE_DIR}/CL
136*3cc25752SFrank Piva        COMMAND ${CMAKE_COMMAND} -E copy
137*3cc25752SFrank Piva            ${OPENCL_HEADERS_OUTPUT_DIRECTORY}/cl_function_types.h
138*3cc25752SFrank Piva            ${CMAKE_CURRENT_SOURCE_DIR}/CL
139*3cc25752SFrank Piva    )
140*3cc25752SFrank Piva    set_target_properties(headers_generate PROPERTIES FOLDER "Generation")
141*3cc25752SFrank Piva    set_target_properties(headers_copy PROPERTIES FOLDER "Generation")
142*3cc25752SFrank Pivaendif()
143*3cc25752SFrank Piva
144*3cc25752SFrank Pivajoin_paths(OPENCL_INCLUDEDIR_PC "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}")
145*3cc25752SFrank Piva
146*3cc25752SFrank Pivaconfigure_file(OpenCL-Headers.pc.in OpenCL-Headers.pc @ONLY)
147*3cc25752SFrank Pivaset(pkg_config_location ${CMAKE_INSTALL_DATADIR}/pkgconfig)
148*3cc25752SFrank Pivainstall(
149*3cc25752SFrank Piva  FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenCL-Headers.pc
150*3cc25752SFrank Piva  DESTINATION ${pkg_config_location})
151