Skip to content

Commit 75ff9df

Browse files
authored
update cmake files in preparation for header and ICD loader updates (#10)
* 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. * don't try to find OpenCL if header and lib variables already exist * fix include type for OpenCL headers
1 parent d962644 commit 75ff9df

File tree

2 files changed

+69
-21
lines changed

2 files changed

+69
-21
lines changed

CMakeLists.txt

Lines changed: 65 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,24 +18,29 @@
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)
2224
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
2325

2426
set(CMAKE_CXX_STANDARD 11)
2527

26-
project(OpenCLExtensionLoader LANGUAGES C CXX)
28+
project(OpenCLExtensionLoader
29+
VERSION 0.9
30+
LANGUAGES C CXX)
2731

2832
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)
33+
option (OPENCL_EXTENSION_LOADER_FORCE_STATIC_LIB "Unconditionally Build a Static Library" ON)
3034
option (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)
3136
option (OPENCL_EXTENSION_LOADER_INCLUDE_GL "Include OpenGL Extension APIs" ON)
3237
option (OPENCL_EXTENSION_LOADER_INCLUDE_EGL "Include EGL Extension APIs" ON)
3338
option (OPENCL_EXTENSION_LOADER_INCLUDE_DX9 "Include DirectX 9 Extension APIs" OFF)
3439
option (OPENCL_EXTENSION_LOADER_INCLUDE_D3D10 "Include Direct3D 10 Extension APIs" OFF)
3540
option (OPENCL_EXTENSION_LOADER_INCLUDE_D3D11 "Include Direct3D 11 Extension APIs" OFF)
3641
option (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")
6065
endif()
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)
6479
endif()
6580

6681
set( OpenCLExtensionLoader_SOURCE_FILES
@@ -74,9 +89,10 @@ if (OPENCL_EXTENSION_LOADER_FORCE_STATIC_LIB)
7489
else()
7590
add_library(OpenCLExt ${OpenCLExtensionLoader_SOURCE_FILES})
7691
endif()
92+
add_library(OpenCL::OpenCLExt ALIAS OpenCLExt)
7793
set_target_properties(OpenCLExt PROPERTIES FOLDER "OpenCLExtensionLoader")
7894
set_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})
8096
target_compile_definitions(OpenCLExt PRIVATE CL_TARGET_OPENCL_VERSION=300)
8197
if (OPENCL_EXTENSION_LOADER_SINGLE_PLATFORM_ONLY)
8298
target_compile_definitions(OpenCLExt PRIVATE CLEXT_SINGLE_PLATFORM_ONLY)
@@ -99,9 +115,9 @@ endif()
99115
if (OPENCL_EXTENSION_LOADER_INCLUDE_VA_API)
100116
target_compile_definitions(OpenCLExt PRIVATE CLEXT_INCLUDE_VA_API)
101117
endif()
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()
110126
endif()
111127

112128
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-
)
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)
121170
endif()
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)
125174
endif()
126-

tests/CMakeLists.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ 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})
5+
target_include_directories(${TEST_EXE} PUBLIC ${OPENCL_EXTENSION_LOADER_INCLUDE_DIRS})
66
target_compile_definitions(${TEST_EXE} PUBLIC -DCL_TARGET_OPENCL_VERSION=${VERSION})
77
if (OPENCL_EXTENSION_LOADER_INCLUDE_GL)
88
target_compile_definitions(${TEST_EXE} PRIVATE CLEXT_INCLUDE_GL)
@@ -22,15 +22,15 @@ foreach(VERSION 120 200 210 220 300)
2222
if (OPENCL_EXTENSION_LOADER_INCLUDE_VA_API)
2323
target_compile_definitions(${TEST_EXE} PRIVATE CLEXT_INCLUDE_VA_API)
2424
endif()
25-
target_link_libraries(${TEST_EXE} PUBLIC ${OpenCL_LIBRARY} OpenCLExt)
25+
target_link_libraries(${TEST_EXE} PUBLIC ${OPENCL_EXTENSION_LOADER_LIBRARIES} OpenCLExt)
2626
add_test(NAME ${TEST_EXE} COMMAND ${TEST_EXE})
2727
endforeach(VERSION)
2828

2929
foreach(VERSION 120 200 210 220 300)
3030
set(TEST_EXE test_extension_loader_c_${VERSION})
3131
add_executable(${TEST_EXE} test_extension_loader.c)
3232
set_target_properties(${TEST_EXE} PROPERTIES FOLDER "OpenCLExtensionLoader/Tests")
33-
target_include_directories(${TEST_EXE} PUBLIC ${OpenCL_INCLUDE_DIRS})
33+
target_include_directories(${TEST_EXE} PUBLIC ${OPENCL_EXTENSION_LOADER_INCLUDE_DIRS})
3434
target_compile_definitions(${TEST_EXE} PUBLIC -DCL_TARGET_OPENCL_VERSION=${VERSION})
3535
if (OPENCL_EXTENSION_LOADER_INCLUDE_GL)
3636
target_compile_definitions(${TEST_EXE} PRIVATE CLEXT_INCLUDE_GL)
@@ -50,7 +50,7 @@ foreach(VERSION 120 200 210 220 300)
5050
if (OPENCL_EXTENSION_LOADER_INCLUDE_VA_API)
5151
target_compile_definitions(${TEST_EXE} PRIVATE CLEXT_INCLUDE_VA_API)
5252
endif()
53-
target_link_libraries(${TEST_EXE} PUBLIC ${OpenCL_LIBRARY} OpenCLExt)
53+
target_link_libraries(${TEST_EXE} PUBLIC ${OPENCL_EXTENSION_LOADER_LIBRARIES} OpenCLExt)
5454
add_test(NAME ${TEST_EXE} COMMAND ${TEST_EXE})
5555
endforeach(VERSION)
5656

0 commit comments

Comments
 (0)