Skip to content

Commit c93a374

Browse files
committed
update cmake files in preparation for header and ICD loader updates
There are updates in flight for the headers and the ICD loader that require corresponding updates to the extension loader. This change still works with older headers and ICD loaders, but will also work with the updates in flight.
1 parent d962644 commit c93a374

File tree

2 files changed

+54
-20
lines changed

2 files changed

+54
-20
lines changed

CMakeLists.txt

Lines changed: 52 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,24 +18,28 @@
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+
cmake_minimum_required(VERSION 3.7 FATAL_ERROR)
2223
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
2324

2425
set(CMAKE_CXX_STANDARD 11)
2526

26-
project(OpenCLExtensionLoader LANGUAGES C CXX)
27+
project(OpenCLExtensionLoader
28+
VERSION 0.9
29+
LANGUAGES C CXX)
2730

2831
option (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)
32+
option (OPENCL_EXTENSION_LOADER_FORCE_STATIC_LIB "Unconditionally Build a Static Library" ON)
3033
option (OPENCL_EXTENSION_LOADER_SINGLE_PLATFORM_ONLY "Only Support Extensions from a Single OpenCL Platform" OFF)
34+
option (OPENCL_EXTENSION_LOADER_INSTALL "Generate Installation Target" ON)
3135
option (OPENCL_EXTENSION_LOADER_INCLUDE_GL "Include OpenGL Extension APIs" ON)
3236
option (OPENCL_EXTENSION_LOADER_INCLUDE_EGL "Include EGL Extension APIs" ON)
3337
option (OPENCL_EXTENSION_LOADER_INCLUDE_DX9 "Include DirectX 9 Extension APIs" OFF)
3438
option (OPENCL_EXTENSION_LOADER_INCLUDE_D3D10 "Include Direct3D 10 Extension APIs" OFF)
3539
option (OPENCL_EXTENSION_LOADER_INCLUDE_D3D11 "Include Direct3D 11 Extension APIs" OFF)
3640
option (OPENCL_EXTENSION_LOADER_INCLUDE_VA_API "Include VA_API Extension APIs" OFF)
3741

38-
if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
42+
if (CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
3943
include(CTest)
4044
find_package(Python3 COMPONENTS Interpreter)
4145
set(OPENCL_EXTENSION_LOADER_XML_PATH CACHE FILEPATH "Path to cl.xml for OpenCL Extension Loader genereration")
@@ -59,7 +63,7 @@ if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
5963
set_target_properties(extension_loader_copy PROPERTIES FOLDER "OpenCLExtensionLoader/Generation")
6064
endif()
6165

62-
if(NOT DEFINED OpenCL_INCLUDE_DIRS)
66+
if (NOT TARGET OpenCL::OpenCL)
6367
find_package(OpenCL)
6468
endif()
6569

@@ -74,9 +78,9 @@ if (OPENCL_EXTENSION_LOADER_FORCE_STATIC_LIB)
7478
else()
7579
add_library(OpenCLExt ${OpenCLExtensionLoader_SOURCE_FILES})
7680
endif()
81+
add_library(OpenCL::OpenCLExt ALIAS OpenCLExt)
7782
set_target_properties(OpenCLExt PROPERTIES FOLDER "OpenCLExtensionLoader")
7883
set_target_properties(OpenCLExt PROPERTIES VERSION "0.9" SOVERSION "0")
79-
target_include_directories(OpenCLExt SYSTEM PUBLIC ${OpenCL_INCLUDE_DIRS})
8084
target_compile_definitions(OpenCLExt PRIVATE CL_TARGET_OPENCL_VERSION=300)
8185
if (OPENCL_EXTENSION_LOADER_SINGLE_PLATFORM_ONLY)
8286
target_compile_definitions(OpenCLExt PRIVATE CLEXT_SINGLE_PLATFORM_ONLY)
@@ -99,9 +103,9 @@ endif()
99103
if (OPENCL_EXTENSION_LOADER_INCLUDE_VA_API)
100104
target_compile_definitions(OpenCLExt PRIVATE CLEXT_INCLUDE_VA_API)
101105
endif()
102-
target_link_libraries(OpenCLExt PRIVATE ${OpenCL_LIBRARIES})
106+
target_link_libraries(OpenCLExt PRIVATE OpenCL::OpenCL)
103107

104-
if(MSVC)
108+
if (MSVC)
105109
#/EHs enable C++ EH (no SEH exceptions)
106110
#/EHc extern "C" defaults to nothrow
107111
target_compile_options(OpenCLExt PRIVATE /EHs- /EHc-)
@@ -110,17 +114,49 @@ else()
110114
endif()
111115

112116
include(GNUInstallDirs)
113-
install(TARGETS OpenCLExt
114-
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
115-
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
116-
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
117-
)
117+
include(CMakePackageConfigHelpers)
118+
119+
if (OPENCL_EXTENSION_LOADER_INSTALL)
120+
set(OPENCL_EXTENSION_LOADER_CONFIG_PATH "${CMAKE_INSTALL_DATADIR}/cmake/OpenCLExtensionLoader")
121+
122+
install(TARGETS OpenCLExt
123+
EXPORT OpenCLExtensionLoaderTargets
124+
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
125+
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
126+
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
127+
)
118128

119-
if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME AND BUILD_TESTING)
129+
export(EXPORT OpenCLExtensionLoaderTargets
130+
FILE ${CMAKE_CURRENT_BINARY_DIR}/OpenCLExtensionLoader/OpenCLExtensionLoaderTargets.cmake
131+
NAMESPACE OpenCL::
132+
)
133+
install(EXPORT OpenCLExtensionLoaderTargets
134+
FILE OpenCLExtensionLoaderTargets.cmake
135+
NAMESPACE OpenCL::
136+
DESTINATION ${OPENCL_EXTENSION_LOADER_CONFIG_PATH}
137+
)
138+
139+
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/OpenCLExtensionLoader/OpenCLExtensionLoaderConfig.cmake
140+
"include(\"\${CMAKE_CURRENT_LIST_DIR}/OpenCLExtensionLoaderTargets.cmake\")"
141+
)
142+
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenCLExtensionLoader/OpenCLExtensionLoaderConfig.cmake
143+
DESTINATION ${OPENCL_EXTENSION_LOADER_CONFIG_PATH}
144+
)
145+
146+
write_basic_package_version_file(
147+
${CMAKE_CURRENT_BINARY_DIR}/OpenCLExtensionLoader/OpenCLExtensionLoaderConfigVersion.cmake
148+
VERSION ${PROJECT_VERSION}
149+
COMPATIBILITY AnyNewerVersion
150+
)
151+
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenCLExtensionLoader/OpenCLExtensionLoaderConfigVersion.cmake
152+
DESTINATION ${OPENCL_EXTENSION_LOADER_CONFIG_PATH}
153+
)
154+
endif()
155+
156+
if (CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME AND BUILD_TESTING)
120157
add_subdirectory(tests)
121158
endif()
122159

123-
if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME AND CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
160+
if (CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME AND CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
124161
set(CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/install" CACHE PATH "Install Path" FORCE)
125162
endif()
126-

tests/CMakeLists.txt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ foreach(VERSION 120 200 210 220 300)
22
set(TEST_EXE test_extension_loader_cpp_${VERSION})
33
add_executable(${TEST_EXE} test_extension_loader.cpp)
44
set_target_properties(${TEST_EXE} PROPERTIES FOLDER "OpenCLExtensionLoader/Tests")
5-
target_include_directories(${TEST_EXE} PUBLIC ${OpenCL_INCLUDE_DIRS})
65
target_compile_definitions(${TEST_EXE} PUBLIC -DCL_TARGET_OPENCL_VERSION=${VERSION})
76
if (OPENCL_EXTENSION_LOADER_INCLUDE_GL)
87
target_compile_definitions(${TEST_EXE} PRIVATE CLEXT_INCLUDE_GL)
@@ -22,15 +21,14 @@ foreach(VERSION 120 200 210 220 300)
2221
if (OPENCL_EXTENSION_LOADER_INCLUDE_VA_API)
2322
target_compile_definitions(${TEST_EXE} PRIVATE CLEXT_INCLUDE_VA_API)
2423
endif()
25-
target_link_libraries(${TEST_EXE} PUBLIC ${OpenCL_LIBRARY} OpenCLExt)
24+
target_link_libraries(${TEST_EXE} PUBLIC OpenCL::OpenCL OpenCLExt)
2625
add_test(NAME ${TEST_EXE} COMMAND ${TEST_EXE})
2726
endforeach(VERSION)
2827

2928
foreach(VERSION 120 200 210 220 300)
3029
set(TEST_EXE test_extension_loader_c_${VERSION})
3130
add_executable(${TEST_EXE} test_extension_loader.c)
3231
set_target_properties(${TEST_EXE} PROPERTIES FOLDER "OpenCLExtensionLoader/Tests")
33-
target_include_directories(${TEST_EXE} PUBLIC ${OpenCL_INCLUDE_DIRS})
3432
target_compile_definitions(${TEST_EXE} PUBLIC -DCL_TARGET_OPENCL_VERSION=${VERSION})
3533
if (OPENCL_EXTENSION_LOADER_INCLUDE_GL)
3634
target_compile_definitions(${TEST_EXE} PRIVATE CLEXT_INCLUDE_GL)
@@ -50,7 +48,7 @@ foreach(VERSION 120 200 210 220 300)
5048
if (OPENCL_EXTENSION_LOADER_INCLUDE_VA_API)
5149
target_compile_definitions(${TEST_EXE} PRIVATE CLEXT_INCLUDE_VA_API)
5250
endif()
53-
target_link_libraries(${TEST_EXE} PUBLIC ${OpenCL_LIBRARY} OpenCLExt)
51+
target_link_libraries(${TEST_EXE} PUBLIC OpenCL::OpenCL OpenCLExt)
5452
add_test(NAME ${TEST_EXE} COMMAND ${TEST_EXE})
5553
endforeach(VERSION)
5654

0 commit comments

Comments
 (0)