180d59932Sopenharmony_cicmake_minimum_required(VERSION 3.0)
280d59932Sopenharmony_cicmake_policy(VERSION 3.0...3.22)
380d59932Sopenharmony_ci
480d59932Sopenharmony_ci# Include guard for including this project multiple times
580d59932Sopenharmony_ciif(TARGET Headers)
680d59932Sopenharmony_ci  return()
780d59932Sopenharmony_ciendif()
880d59932Sopenharmony_ci
980d59932Sopenharmony_ciproject(OpenCLHeaders
1080d59932Sopenharmony_ci  VERSION 2.2
1180d59932Sopenharmony_ci  LANGUAGES C # Ideally should be NONE, but GNUInstallDirs detects platform arch using try_compile
1280d59932Sopenharmony_ci  # https://stackoverflow.com/questions/43379311/why-does-project-affect-cmakes-opinion-on-cmake-sizeof-void-p
1380d59932Sopenharmony_ci)
1480d59932Sopenharmony_ci
1580d59932Sopenharmony_cioption(OPENCL_HEADERS_BUILD_TESTING "Enable support for OpenCL C headers testing." OFF)
1680d59932Sopenharmony_cioption(OPENCL_HEADERS_BUILD_CXX_TESTS "Enable support for OpenCL C headers testing in C++ mode." ON)
1780d59932Sopenharmony_ci
1880d59932Sopenharmony_ciinclude(GNUInstallDirs)
1980d59932Sopenharmony_ci
2080d59932Sopenharmony_ciadd_library(Headers INTERFACE)
2180d59932Sopenharmony_ciadd_library(OpenCL::Headers ALIAS Headers)
2280d59932Sopenharmony_ci
2380d59932Sopenharmony_ciif(CMAKE_SYSTEM_NAME MATCHES Darwin)
2480d59932Sopenharmony_ci  execute_process(
2580d59932Sopenharmony_ci    COMMAND ln -shf ${CMAKE_CURRENT_SOURCE_DIR}/CL ${CMAKE_CURRENT_BINARY_DIR}/CL
2680d59932Sopenharmony_ci    COMMAND ln -shf ${CMAKE_CURRENT_SOURCE_DIR}/CL ${CMAKE_CURRENT_BINARY_DIR}/OpenCL
2780d59932Sopenharmony_ci  )
2880d59932Sopenharmony_ci  target_include_directories(Headers
2980d59932Sopenharmony_ci    INTERFACE
3080d59932Sopenharmony_ci      $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
3180d59932Sopenharmony_ci      $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
3280d59932Sopenharmony_ci  )
3380d59932Sopenharmony_ci  install(CODE "
3480d59932Sopenharmony_ci    file(MAKE_DIRECTORY  ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}/CL)
3580d59932Sopenharmony_ci    execute_process(
3680d59932Sopenharmony_ci      COMMAND ln -shf CL ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}/OpenCL
3780d59932Sopenharmony_ci    )"
3880d59932Sopenharmony_ci  )
3980d59932Sopenharmony_cielse()
4080d59932Sopenharmony_ci  target_include_directories(Headers
4180d59932Sopenharmony_ci    INTERFACE
4280d59932Sopenharmony_ci      $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
4380d59932Sopenharmony_ci      $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
4480d59932Sopenharmony_ci  )
4580d59932Sopenharmony_ciendif()
4680d59932Sopenharmony_ci
4780d59932Sopenharmony_ciinstall(
4880d59932Sopenharmony_ci  TARGETS Headers
4980d59932Sopenharmony_ci  EXPORT OpenCLHeadersTargets
5080d59932Sopenharmony_ci)
5180d59932Sopenharmony_ciinstall(
5280d59932Sopenharmony_ci  DIRECTORY CL
5380d59932Sopenharmony_ci  DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
5480d59932Sopenharmony_ci)
5580d59932Sopenharmony_ci
5680d59932Sopenharmony_ciexport(
5780d59932Sopenharmony_ci  EXPORT OpenCLHeadersTargets
5880d59932Sopenharmony_ci  FILE ${PROJECT_BINARY_DIR}/OpenCLHeaders/OpenCLHeadersTargets.cmake
5980d59932Sopenharmony_ci  NAMESPACE OpenCL::
6080d59932Sopenharmony_ci)
6180d59932Sopenharmony_cifile(
6280d59932Sopenharmony_ci  WRITE ${PROJECT_BINARY_DIR}/OpenCLHeaders/OpenCLHeadersConfig.cmake
6380d59932Sopenharmony_ci  "include(\"\${CMAKE_CURRENT_LIST_DIR}/OpenCLHeadersTargets.cmake\")"
6480d59932Sopenharmony_ci)
6580d59932Sopenharmony_ci
6680d59932Sopenharmony_ciset(config_package_location ${CMAKE_INSTALL_DATADIR}/cmake/OpenCLHeaders)
6780d59932Sopenharmony_ciinstall(
6880d59932Sopenharmony_ci  EXPORT OpenCLHeadersTargets
6980d59932Sopenharmony_ci  FILE OpenCLHeadersTargets.cmake
7080d59932Sopenharmony_ci  NAMESPACE OpenCL::
7180d59932Sopenharmony_ci  DESTINATION ${config_package_location}
7280d59932Sopenharmony_ci)
7380d59932Sopenharmony_ciinstall(
7480d59932Sopenharmony_ci  FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenCLHeaders/OpenCLHeadersConfig.cmake
7580d59932Sopenharmony_ci  DESTINATION ${config_package_location}
7680d59932Sopenharmony_ci)
7780d59932Sopenharmony_ci
7880d59932Sopenharmony_ciunset(CMAKE_SIZEOF_VOID_P)
7980d59932Sopenharmony_ciinclude(CMakePackageConfigHelpers)
8080d59932Sopenharmony_ciwrite_basic_package_version_file(
8180d59932Sopenharmony_ci  ${CMAKE_CURRENT_BINARY_DIR}/OpenCLHeaders/OpenCLHeadersConfigVersion.cmake
8280d59932Sopenharmony_ci  VERSION ${PROJECT_VERSION}
8380d59932Sopenharmony_ci  COMPATIBILITY AnyNewerVersion
8480d59932Sopenharmony_ci)
8580d59932Sopenharmony_ciinstall(
8680d59932Sopenharmony_ci  FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenCLHeaders/OpenCLHeadersConfigVersion.cmake
8780d59932Sopenharmony_ci  DESTINATION ${config_package_location}
8880d59932Sopenharmony_ci)
8980d59932Sopenharmony_ci
9080d59932Sopenharmony_ciif(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME OR OPENCL_HEADERS_BUILD_TESTING)
9180d59932Sopenharmony_ci  include(CTest)
9280d59932Sopenharmony_ciendif()
9380d59932Sopenharmony_ciif((CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME OR OPENCL_HEADERS_BUILD_TESTING) AND BUILD_TESTING)
9480d59932Sopenharmony_ci  add_subdirectory(tests)
9580d59932Sopenharmony_ciendif()
96