1818# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
1919# SOFTWARE.
2020
21- cmake_minimum_required (VERSION 3.4 FATAL_ERROR)
21+ # Note: cmake 3.7 is needed to use OpenCL::OpenCL.
22+ # Older versions may work by explicitly specifying OpenCL_INCLUDE_DIRS and OpenCL_LIBRARIES.
23+ cmake_minimum_required (VERSION 3.7 FATAL_ERROR)
2224set_property (GLOBAL PROPERTY USE_FOLDERS ON )
2325
2426set (CMAKE_CXX_STANDARD 11)
2527
26- project (OpenCLExtensionLoader LANGUAGES C CXX)
28+ project (OpenCLExtensionLoader
29+ VERSION 0.9
30+ LANGUAGES C CXX)
2731
2832option (BUILD_SHARED_LIBS "Build shared libs" ON )
29- option (OPENCL_EXTENSION_LOADER_FORCE_STATIC_LIB "Unconditionally build a static library for the OpenCL Extension Loader " ON )
33+ option (OPENCL_EXTENSION_LOADER_FORCE_STATIC_LIB "Unconditionally Build a Static Library " ON )
3034option (OPENCL_EXTENSION_LOADER_SINGLE_PLATFORM_ONLY "Only Support Extensions from a Single OpenCL Platform" OFF )
35+ option (OPENCL_EXTENSION_LOADER_INSTALL "Generate Installation Target" ON )
3136option (OPENCL_EXTENSION_LOADER_INCLUDE_GL "Include OpenGL Extension APIs" ON )
3237option (OPENCL_EXTENSION_LOADER_INCLUDE_EGL "Include EGL Extension APIs" ON )
3338option (OPENCL_EXTENSION_LOADER_INCLUDE_DX9 "Include DirectX 9 Extension APIs" OFF )
3439option (OPENCL_EXTENSION_LOADER_INCLUDE_D3D10 "Include Direct3D 10 Extension APIs" OFF )
3540option (OPENCL_EXTENSION_LOADER_INCLUDE_D3D11 "Include Direct3D 11 Extension APIs" OFF )
3641option (OPENCL_EXTENSION_LOADER_INCLUDE_VA_API "Include VA_API Extension APIs" OFF )
3742
38- if (CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME )
43+ if (CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME )
3944 include (CTest)
4045 find_package (Python3 COMPONENTS Interpreter)
4146 set (OPENCL_EXTENSION_LOADER_XML_PATH CACHE FILEPATH "Path to cl.xml for OpenCL Extension Loader genereration" )
@@ -59,8 +64,18 @@ if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
5964 set_target_properties (extension_loader_copy PROPERTIES FOLDER "OpenCLExtensionLoader/Generation" )
6065endif ()
6166
62- if (NOT DEFINED OpenCL_INCLUDE_DIRS)
63- find_package (OpenCL)
67+ if (OpenCL_INCLUDE_DIRS AND OpenCL_LIBRARIES)
68+ message (STATUS "Using inherited OpenCL_INCLUDE_DIRS and OpenCL_LIBRARIES" )
69+ set (OPENCL_EXTENSION_LOADER_INCLUDE_DIRS ${OpenCL_INCLUDE_DIRS} )
70+ set (OPENCL_EXTENSION_LOADER_LIBRARIES ${OpenCL_LIBRARIES} )
71+ else ()
72+ if (NOT TARGET OpenCL::OpenCL)
73+ find_package (OpenCL)
74+ endif ()
75+ if (NOT TARGET OpenCL::OpenCL)
76+ message (STATUS "OpenCL was not found!" )
77+ endif ()
78+ set (OPENCL_EXTENSION_LOADER_LIBRARIES OpenCL::OpenCL)
6479endif ()
6580
6681set ( OpenCLExtensionLoader_SOURCE_FILES
@@ -74,9 +89,10 @@ if (OPENCL_EXTENSION_LOADER_FORCE_STATIC_LIB)
7489else ()
7590 add_library (OpenCLExt ${OpenCLExtensionLoader_SOURCE_FILES} )
7691endif ()
92+ add_library (OpenCL::OpenCLExt ALIAS OpenCLExt)
7793set_target_properties (OpenCLExt PROPERTIES FOLDER "OpenCLExtensionLoader" )
7894set_target_properties (OpenCLExt PROPERTIES VERSION "0.9" SOVERSION "0" )
79- target_include_directories (OpenCLExt SYSTEM PUBLIC ${OpenCL_INCLUDE_DIRS } )
95+ target_include_directories (OpenCLExt PRIVATE ${OPENCL_EXTENSION_LOADER_INCLUDE_DIRS } )
8096target_compile_definitions (OpenCLExt PRIVATE CL_TARGET_OPENCL_VERSION=300)
8197if (OPENCL_EXTENSION_LOADER_SINGLE_PLATFORM_ONLY)
8298 target_compile_definitions (OpenCLExt PRIVATE CLEXT_SINGLE_PLATFORM_ONLY)
@@ -99,9 +115,9 @@ endif()
99115if (OPENCL_EXTENSION_LOADER_INCLUDE_VA_API)
100116 target_compile_definitions (OpenCLExt PRIVATE CLEXT_INCLUDE_VA_API)
101117endif ()
102- target_link_libraries (OpenCLExt PRIVATE ${OpenCL_LIBRARIES } )
118+ target_link_libraries (OpenCLExt PRIVATE ${OPENCL_EXTENSION_LOADER_LIBRARIES } )
103119
104- if (MSVC )
120+ if (MSVC )
105121 #/EHs enable C++ EH (no SEH exceptions)
106122 #/EHc extern "C" defaults to nothrow
107123 target_compile_options (OpenCLExt PRIVATE /EHs- /EHc-)
@@ -110,17 +126,49 @@ else()
110126endif ()
111127
112128include (GNUInstallDirs)
113- install (TARGETS OpenCLExt
114- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
115- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
116- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
117- )
129+ include (CMakePackageConfigHelpers)
130+
131+ if (OPENCL_EXTENSION_LOADER_INSTALL)
132+ set (OPENCL_EXTENSION_LOADER_CONFIG_PATH "${CMAKE_INSTALL_DATADIR} /cmake/OpenCLExtensionLoader" )
133+
134+ install (TARGETS OpenCLExt
135+ EXPORT OpenCLExtensionLoaderTargets
136+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
137+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
138+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
139+ )
140+
141+ export (EXPORT OpenCLExtensionLoaderTargets
142+ FILE ${CMAKE_CURRENT_BINARY_DIR} /OpenCLExtensionLoader/OpenCLExtensionLoaderTargets.cmake
143+ NAMESPACE OpenCL::
144+ )
145+ install (EXPORT OpenCLExtensionLoaderTargets
146+ FILE OpenCLExtensionLoaderTargets.cmake
147+ NAMESPACE OpenCL::
148+ DESTINATION ${OPENCL_EXTENSION_LOADER_CONFIG_PATH}
149+ )
118150
119- if (CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME AND BUILD_TESTING)
151+ file (WRITE ${CMAKE_CURRENT_BINARY_DIR} /OpenCLExtensionLoader/OpenCLExtensionLoaderConfig.cmake
152+ "include(\"\$ {CMAKE_CURRENT_LIST_DIR}/OpenCLExtensionLoaderTargets.cmake\" )"
153+ )
154+ install (FILES ${CMAKE_CURRENT_BINARY_DIR} /OpenCLExtensionLoader/OpenCLExtensionLoaderConfig.cmake
155+ DESTINATION ${OPENCL_EXTENSION_LOADER_CONFIG_PATH}
156+ )
157+
158+ write_basic_package_version_file(
159+ ${CMAKE_CURRENT_BINARY_DIR} /OpenCLExtensionLoader/OpenCLExtensionLoaderConfigVersion.cmake
160+ VERSION ${PROJECT_VERSION}
161+ COMPATIBILITY AnyNewerVersion
162+ )
163+ install (FILES ${CMAKE_CURRENT_BINARY_DIR} /OpenCLExtensionLoader/OpenCLExtensionLoaderConfigVersion.cmake
164+ DESTINATION ${OPENCL_EXTENSION_LOADER_CONFIG_PATH}
165+ )
166+ endif ()
167+
168+ if (CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME AND BUILD_TESTING)
120169 add_subdirectory (tests)
121170endif ()
122171
123- if (CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME AND CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
172+ if (CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME AND CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
124173 set (CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_SOURCE_DIR} /install" CACHE PATH "Install Path" FORCE)
125174endif ()
126-
0 commit comments