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