xref: /aosp_15_r20/external/OpenCL-ICD-Loader/CMakeLists.txt (revision 1cddb830dba8aa7c1cc1039338e56b3b9fa24952)
1*1cddb830SAndroid Build Coastguard Workercmake_minimum_required (VERSION 3.1)
2*1cddb830SAndroid Build Coastguard Worker
3*1cddb830SAndroid Build Coastguard Worker# Include guard for including this project multiple times
4*1cddb830SAndroid Build Coastguard Workerif(TARGET OpenCL)
5*1cddb830SAndroid Build Coastguard Worker  return()
6*1cddb830SAndroid Build Coastguard Workerendif()
7*1cddb830SAndroid Build Coastguard Worker
8*1cddb830SAndroid Build Coastguard Workerproject (OpenCL-ICD-Loader
9*1cddb830SAndroid Build Coastguard Worker    VERSION 1.2
10*1cddb830SAndroid Build Coastguard Worker    LANGUAGES C)
11*1cddb830SAndroid Build Coastguard Worker
12*1cddb830SAndroid Build Coastguard Workerfind_package (Threads REQUIRED)
13*1cddb830SAndroid Build Coastguard Worker
14*1cddb830SAndroid Build Coastguard Workerset(CMAKE_C_STANDARD 99)
15*1cddb830SAndroid Build Coastguard Workerset(CMAKE_C_STANDARD_REQUIRED ON)
16*1cddb830SAndroid Build Coastguard Worker# The option below allows building the ICD Loader library as a shared library
17*1cddb830SAndroid Build Coastguard Worker# (ON, default) or a static library (OFF).
18*1cddb830SAndroid Build Coastguard Worker#
19*1cddb830SAndroid Build Coastguard Worker# Khronos OpenCL Working Group strongly recommends building and using the ICD
20*1cddb830SAndroid Build Coastguard Worker# loader as a shared library due to the following benefits:
21*1cddb830SAndroid Build Coastguard Worker#
22*1cddb830SAndroid Build Coastguard Worker# 1. The shared library can be updated independent of the application. This
23*1cddb830SAndroid Build Coastguard Worker#    allows releasing new fixes and features in the ICD loader without updating
24*1cddb830SAndroid Build Coastguard Worker#    the application.
25*1cddb830SAndroid Build Coastguard Worker#
26*1cddb830SAndroid Build Coastguard Worker#    In rare cases when there are backward-incompatible changes to the ICD
27*1cddb830SAndroid Build Coastguard Worker#    loader (due to platform requirements, for instance), using a shared
28*1cddb830SAndroid Build Coastguard Worker#    library allows updating the library to make the transition seamless to
29*1cddb830SAndroid Build Coastguard Worker#    installed applications.
30*1cddb830SAndroid Build Coastguard Worker#
31*1cddb830SAndroid Build Coastguard Worker# 2. On platforms that require the ICD mechanism there are multiple vendors
32*1cddb830SAndroid Build Coastguard Worker#    shipping their OpenCL implementations. The vendor installers collaborate
33*1cddb830SAndroid Build Coastguard Worker#    to make sure that the installed ICD shared library version is suitable for
34*1cddb830SAndroid Build Coastguard Worker#    working with all vendor implementations installed on the system.
35*1cddb830SAndroid Build Coastguard Worker#
36*1cddb830SAndroid Build Coastguard Worker#    If applications statically link to ICD Loader then that version of the ICD
37*1cddb830SAndroid Build Coastguard Worker#    loader may not work with one or more installed vendor implementations.
38*1cddb830SAndroid Build Coastguard Worker#
39*1cddb830SAndroid Build Coastguard Worker# Using the OpenCL ICD loader as a static library is NOT recommended for
40*1cddb830SAndroid Build Coastguard Worker# end-user installations in general. However in some controlled environments it
41*1cddb830SAndroid Build Coastguard Worker# may be useful to simplify the build and distribution of the application. E.g.
42*1cddb830SAndroid Build Coastguard Worker# in test farms, or in cases where the end-user system configs are known in
43*1cddb830SAndroid Build Coastguard Worker# advance. Use it with discretion.
44*1cddb830SAndroid Build Coastguard Workerif(DEFINED BUILD_SHARED_LIBS)
45*1cddb830SAndroid Build Coastguard Worker  set(OPENCL_ICD_LOADER_BUILD_SHARED_LIBS_DEFAULT ${BUILD_SHARED_LIBS})
46*1cddb830SAndroid Build Coastguard Workerelse()
47*1cddb830SAndroid Build Coastguard Worker  set(OPENCL_ICD_LOADER_BUILD_SHARED_LIBS_DEFAULT ON)
48*1cddb830SAndroid Build Coastguard Workerendif()
49*1cddb830SAndroid Build Coastguard Worker  option(OPENCL_ICD_LOADER_BUILD_SHARED_LIBS "Build OpenCL ICD Loader as shared library" ${OPENCL_ICD_LOADER_BUILD_SHARED_LIBS_DEFAULT})
50*1cddb830SAndroid Build Coastguard Worker
51*1cddb830SAndroid Build Coastguard Worker# This option enables/disables support for OpenCL layers in the ICD loader.
52*1cddb830SAndroid Build Coastguard Worker# It is currently needed default while the specification is being formalized,
53*1cddb830SAndroid Build Coastguard Worker# and to study the performance impact.
54*1cddb830SAndroid Build Coastguard Workeroption (ENABLE_OPENCL_LAYERS "Enable OpenCL Layers" ON)
55*1cddb830SAndroid Build Coastguard Workerinclude(CMakeDependentOption)
56*1cddb830SAndroid Build Coastguard Workercmake_dependent_option(ENABLE_OPENCL_LAYERINFO "Enable building cllayerinfo tool" ON ENABLE_OPENCL_LAYERS OFF)
57*1cddb830SAndroid Build Coastguard Worker
58*1cddb830SAndroid Build Coastguard Workerset (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
59*1cddb830SAndroid Build Coastguard Workerinclude(JoinPaths)
60*1cddb830SAndroid Build Coastguard Worker
61*1cddb830SAndroid Build Coastguard Workerinclude(CheckFunctionExists)
62*1cddb830SAndroid Build Coastguard Workercheck_function_exists(secure_getenv HAVE_SECURE_GETENV)
63*1cddb830SAndroid Build Coastguard Workercheck_function_exists(__secure_getenv HAVE___SECURE_GETENV)
64*1cddb830SAndroid Build Coastguard Workerconfigure_file(${CMAKE_CURRENT_SOURCE_DIR}/loader/icd_cmake_config.h.in
65*1cddb830SAndroid Build Coastguard Worker    ${CMAKE_CURRENT_BINARY_DIR}/icd_cmake_config.h)
66*1cddb830SAndroid Build Coastguard Worker
67*1cddb830SAndroid Build Coastguard Workerset (OPENCL_ICD_LOADER_SOURCES
68*1cddb830SAndroid Build Coastguard Worker    loader/icd.c
69*1cddb830SAndroid Build Coastguard Worker    loader/icd.h
70*1cddb830SAndroid Build Coastguard Worker    loader/icd_version.h
71*1cddb830SAndroid Build Coastguard Worker    loader/icd_dispatch.c
72*1cddb830SAndroid Build Coastguard Worker    loader/icd_dispatch.h
73*1cddb830SAndroid Build Coastguard Worker    loader/icd_dispatch_generated.c
74*1cddb830SAndroid Build Coastguard Worker    loader/icd_envvars.h
75*1cddb830SAndroid Build Coastguard Worker    loader/icd_platform.h)
76*1cddb830SAndroid Build Coastguard Worker
77*1cddb830SAndroid Build Coastguard Workerif (WIN32)
78*1cddb830SAndroid Build Coastguard Worker    list (APPEND OPENCL_ICD_LOADER_SOURCES
79*1cddb830SAndroid Build Coastguard Worker        loader/windows/adapter.h
80*1cddb830SAndroid Build Coastguard Worker        loader/windows/icd_windows.c
81*1cddb830SAndroid Build Coastguard Worker        loader/windows/icd_windows.h
82*1cddb830SAndroid Build Coastguard Worker        loader/windows/icd_windows_dxgk.c
83*1cddb830SAndroid Build Coastguard Worker        loader/windows/icd_windows_dxgk.h
84*1cddb830SAndroid Build Coastguard Worker        loader/windows/icd_windows_envvars.c
85*1cddb830SAndroid Build Coastguard Worker        loader/windows/icd_windows_hkr.c
86*1cddb830SAndroid Build Coastguard Worker        loader/windows/icd_windows_hkr.h
87*1cddb830SAndroid Build Coastguard Worker        loader/windows/icd_windows_apppackage.c
88*1cddb830SAndroid Build Coastguard Worker        loader/windows/icd_windows_apppackage.h
89*1cddb830SAndroid Build Coastguard Worker        loader/windows/OpenCL.rc)
90*1cddb830SAndroid Build Coastguard Worker    # Only add the DXSDK include directory if the environment variable is
91*1cddb830SAndroid Build Coastguard Worker    # defined.  Since the DXSDK has merged into the Windows SDK, this is
92*1cddb830SAndroid Build Coastguard Worker    # only required in rare cases.
93*1cddb830SAndroid Build Coastguard Worker    if (DEFINED ENV{DXSDK_DIR} AND NOT (MINGW OR MSYS OR CYGWIN))
94*1cddb830SAndroid Build Coastguard Worker        include_directories ($ENV{DXSDK_DIR}/Include)
95*1cddb830SAndroid Build Coastguard Worker    endif ()
96*1cddb830SAndroid Build Coastguard Worker
97*1cddb830SAndroid Build Coastguard Worker    # For mingw-i686 builds only we need a special .def file with stdcall
98*1cddb830SAndroid Build Coastguard Worker    # exports.  In all other cases we can use a standard .def file.
99*1cddb830SAndroid Build Coastguard Worker    if ((CMAKE_SIZEOF_VOID_P EQUAL 4) AND (MINGW OR MSYS OR CYGWIN))
100*1cddb830SAndroid Build Coastguard Worker        list (APPEND OPENCL_ICD_LOADER_SOURCES loader/windows/OpenCL-mingw-i686.def)
101*1cddb830SAndroid Build Coastguard Worker    else ()
102*1cddb830SAndroid Build Coastguard Worker        list (APPEND OPENCL_ICD_LOADER_SOURCES loader/windows/OpenCL.def)
103*1cddb830SAndroid Build Coastguard Worker    endif ()
104*1cddb830SAndroid Build Coastguard Workerelse ()
105*1cddb830SAndroid Build Coastguard Worker    list (APPEND OPENCL_ICD_LOADER_SOURCES
106*1cddb830SAndroid Build Coastguard Worker        loader/linux/icd_linux.c
107*1cddb830SAndroid Build Coastguard Worker        loader/linux/icd_linux_envvars.c
108*1cddb830SAndroid Build Coastguard Worker        loader/linux/icd_exports.map)
109*1cddb830SAndroid Build Coastguard Workerendif ()
110*1cddb830SAndroid Build Coastguard Worker
111*1cddb830SAndroid Build Coastguard Workerset (OPENCL_ICD_LOADER_HEADERS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/inc" CACHE PATH "Path to OpenCL Headers")
112*1cddb830SAndroid Build Coastguard Worker
113*1cddb830SAndroid Build Coastguard Workerif (${OPENCL_ICD_LOADER_BUILD_SHARED_LIBS})
114*1cddb830SAndroid Build Coastguard Worker  add_library (OpenCL SHARED ${OPENCL_ICD_LOADER_SOURCES})
115*1cddb830SAndroid Build Coastguard Workerelse()
116*1cddb830SAndroid Build Coastguard Worker  add_library (OpenCL STATIC ${OPENCL_ICD_LOADER_SOURCES})
117*1cddb830SAndroid Build Coastguard Workerendif()
118*1cddb830SAndroid Build Coastguard Worker
119*1cddb830SAndroid Build Coastguard Workeradd_library (OpenCL::OpenCL ALIAS OpenCL)
120*1cddb830SAndroid Build Coastguard Worker
121*1cddb830SAndroid Build Coastguard Workerset_target_properties (OpenCL PROPERTIES VERSION "1.2" SOVERSION "1")
122*1cddb830SAndroid Build Coastguard Worker
123*1cddb830SAndroid Build Coastguard Workerif (WIN32)
124*1cddb830SAndroid Build Coastguard Worker    target_link_libraries (OpenCL PRIVATE cfgmgr32.lib runtimeobject.lib)
125*1cddb830SAndroid Build Coastguard Worker
126*1cddb830SAndroid Build Coastguard Worker    # Generate a DLL without a "lib" prefix for mingw.
127*1cddb830SAndroid Build Coastguard Worker    if (MINGW OR MSYS OR CYGWIN)
128*1cddb830SAndroid Build Coastguard Worker        set_target_properties(OpenCL PROPERTIES PREFIX "")
129*1cddb830SAndroid Build Coastguard Worker        set_target_properties(OpenCL PROPERTIES LINK_FLAGS "-Wl,-disable-stdcall-fixup")
130*1cddb830SAndroid Build Coastguard Worker    endif()
131*1cddb830SAndroid Build Coastguard Workerelse()
132*1cddb830SAndroid Build Coastguard Worker    target_link_libraries (OpenCL PRIVATE ${CMAKE_THREAD_LIBS_INIT})
133*1cddb830SAndroid Build Coastguard Worker    if (NOT APPLE)
134*1cddb830SAndroid Build Coastguard Worker        set_target_properties (OpenCL PROPERTIES LINK_FLAGS "-Wl,--version-script -Wl,${CMAKE_CURRENT_SOURCE_DIR}/loader/linux/icd_exports.map")
135*1cddb830SAndroid Build Coastguard Worker        if (OPENCL_ICD_LOADER_PIC)
136*1cddb830SAndroid Build Coastguard Worker            set_target_properties(OpenCL PROPERTIES POSITION_INDEPENDENT_CODE ON)
137*1cddb830SAndroid Build Coastguard Worker        endif ()
138*1cddb830SAndroid Build Coastguard Worker    endif ()
139*1cddb830SAndroid Build Coastguard Workerendif ()
140*1cddb830SAndroid Build Coastguard Worker
141*1cddb830SAndroid Build Coastguard Workerif (EXISTS ${OPENCL_ICD_LOADER_HEADERS_DIR}/CL/cl.h)
142*1cddb830SAndroid Build Coastguard Worker    message (STATUS "Defining OpenCL::Headers through OPENCL_ICD_LOADER_HEADERS_DIR")
143*1cddb830SAndroid Build Coastguard Worker    add_library (OpenCLHeaders INTERFACE)
144*1cddb830SAndroid Build Coastguard Worker    add_library (OpenCL::Headers ALIAS OpenCLHeaders)
145*1cddb830SAndroid Build Coastguard Worker    target_include_directories (OpenCLHeaders INTERFACE ${OPENCL_ICD_LOADER_HEADERS_DIR})
146*1cddb830SAndroid Build Coastguard Worker    target_include_directories (OpenCL PUBLIC $<BUILD_INTERFACE:${OPENCL_ICD_LOADER_HEADERS_DIR}>)
147*1cddb830SAndroid Build Coastguard Workerelse ()
148*1cddb830SAndroid Build Coastguard Worker    if (NOT TARGET OpenCL::Headers)
149*1cddb830SAndroid Build Coastguard Worker        find_package (OpenCLHeaders REQUIRED)
150*1cddb830SAndroid Build Coastguard Worker    endif ()
151*1cddb830SAndroid Build Coastguard Worker    target_link_libraries (OpenCL PUBLIC OpenCL::Headers)
152*1cddb830SAndroid Build Coastguard Workerendif ()
153*1cddb830SAndroid Build Coastguard Worker
154*1cddb830SAndroid Build Coastguard Workerset (OPENCL_COMPILE_DEFINITIONS
155*1cddb830SAndroid Build Coastguard Worker    CL_TARGET_OPENCL_VERSION=300
156*1cddb830SAndroid Build Coastguard Worker    CL_NO_NON_ICD_DISPATCH_EXTENSION_PROTOTYPES
157*1cddb830SAndroid Build Coastguard Worker    OPENCL_ICD_LOADER_VERSION_MAJOR=3
158*1cddb830SAndroid Build Coastguard Worker    OPENCL_ICD_LOADER_VERSION_MINOR=0
159*1cddb830SAndroid Build Coastguard Worker    OPENCL_ICD_LOADER_VERSION_REV=6
160*1cddb830SAndroid Build Coastguard Worker    $<$<BOOL:${ENABLE_OPENCL_LAYERS}>:CL_ENABLE_LAYERS>
161*1cddb830SAndroid Build Coastguard Worker)
162*1cddb830SAndroid Build Coastguard Worker
163*1cddb830SAndroid Build Coastguard Workertarget_compile_definitions (OpenCL
164*1cddb830SAndroid Build Coastguard Worker  PRIVATE
165*1cddb830SAndroid Build Coastguard Worker    ${OPENCL_COMPILE_DEFINITIONS}
166*1cddb830SAndroid Build Coastguard Worker)
167*1cddb830SAndroid Build Coastguard Worker
168*1cddb830SAndroid Build Coastguard Workertarget_include_directories (OpenCL
169*1cddb830SAndroid Build Coastguard Worker  PRIVATE
170*1cddb830SAndroid Build Coastguard Worker    ${CMAKE_CURRENT_BINARY_DIR}
171*1cddb830SAndroid Build Coastguard Worker    loader
172*1cddb830SAndroid Build Coastguard Worker)
173*1cddb830SAndroid Build Coastguard Workertarget_link_libraries (OpenCL PUBLIC ${CMAKE_DL_LIBS})
174*1cddb830SAndroid Build Coastguard Worker
175*1cddb830SAndroid Build Coastguard Workerif (ENABLE_OPENCL_LAYERINFO)
176*1cddb830SAndroid Build Coastguard Worker
177*1cddb830SAndroid Build Coastguard Worker  set (OPENCL_LAYER_INFO_SOURCES
178*1cddb830SAndroid Build Coastguard Worker      loader/cllayerinfo.c
179*1cddb830SAndroid Build Coastguard Worker      ${OPENCL_ICD_LOADER_SOURCES}
180*1cddb830SAndroid Build Coastguard Worker  )
181*1cddb830SAndroid Build Coastguard Worker
182*1cddb830SAndroid Build Coastguard Worker  add_executable(cllayerinfo ${OPENCL_LAYER_INFO_SOURCES})
183*1cddb830SAndroid Build Coastguard Worker
184*1cddb830SAndroid Build Coastguard Worker  add_executable(OpenCL::cllayerinfo ALIAS cllayerinfo)
185*1cddb830SAndroid Build Coastguard Worker
186*1cddb830SAndroid Build Coastguard Worker  target_compile_definitions (cllayerinfo
187*1cddb830SAndroid Build Coastguard Worker    PRIVATE
188*1cddb830SAndroid Build Coastguard Worker      CL_LAYER_INFO
189*1cddb830SAndroid Build Coastguard Worker      ${OPENCL_COMPILE_DEFINITIONS}
190*1cddb830SAndroid Build Coastguard Worker  )
191*1cddb830SAndroid Build Coastguard Worker
192*1cddb830SAndroid Build Coastguard Worker  if (EXISTS ${OPENCL_ICD_LOADER_HEADERS_DIR}/CL/cl.h)
193*1cddb830SAndroid Build Coastguard Worker      target_include_directories (cllayerinfo PUBLIC $<BUILD_INTERFACE:${OPENCL_ICD_LOADER_HEADERS_DIR}>)
194*1cddb830SAndroid Build Coastguard Worker  else ()
195*1cddb830SAndroid Build Coastguard Worker      target_link_libraries (cllayerinfo PUBLIC OpenCL::Headers)
196*1cddb830SAndroid Build Coastguard Worker  endif ()
197*1cddb830SAndroid Build Coastguard Worker
198*1cddb830SAndroid Build Coastguard Worker  if (WIN32)
199*1cddb830SAndroid Build Coastguard Worker    target_link_libraries (cllayerinfo PRIVATE cfgmgr32.lib runtimeobject.lib)
200*1cddb830SAndroid Build Coastguard Worker  else ()
201*1cddb830SAndroid Build Coastguard Worker    target_link_libraries (cllayerinfo PRIVATE ${CMAKE_THREAD_LIBS_INIT})
202*1cddb830SAndroid Build Coastguard Worker  endif ()
203*1cddb830SAndroid Build Coastguard Worker
204*1cddb830SAndroid Build Coastguard Worker  target_link_libraries (cllayerinfo PUBLIC ${CMAKE_DL_LIBS})
205*1cddb830SAndroid Build Coastguard Worker
206*1cddb830SAndroid Build Coastguard Worker  target_include_directories (cllayerinfo
207*1cddb830SAndroid Build Coastguard Worker    PRIVATE
208*1cddb830SAndroid Build Coastguard Worker      ${CMAKE_CURRENT_BINARY_DIR}
209*1cddb830SAndroid Build Coastguard Worker      loader
210*1cddb830SAndroid Build Coastguard Worker  )
211*1cddb830SAndroid Build Coastguard Workerendif ()
212*1cddb830SAndroid Build Coastguard Worker
213*1cddb830SAndroid Build Coastguard Workeroption (OPENCL_ICD_LOADER_BUILD_TESTING "Enable support for OpenCL ICD Loader testing." OFF)
214*1cddb830SAndroid Build Coastguard Worker
215*1cddb830SAndroid Build Coastguard Workerif(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME OR OPENCL_ICD_LOADER_BUILD_TESTING)
216*1cddb830SAndroid Build Coastguard Worker    include(CTest)
217*1cddb830SAndroid Build Coastguard Workerendif()
218*1cddb830SAndroid Build Coastguard Workerif((CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME OR OPENCL_ICD_LOADER_BUILD_TESTING) AND BUILD_TESTING)
219*1cddb830SAndroid Build Coastguard Worker    add_subdirectory (test)
220*1cddb830SAndroid Build Coastguard Workerendif()
221*1cddb830SAndroid Build Coastguard Worker
222*1cddb830SAndroid Build Coastguard Workerinclude (GNUInstallDirs)
223*1cddb830SAndroid Build Coastguard Worker
224*1cddb830SAndroid Build Coastguard Workerinstall(
225*1cddb830SAndroid Build Coastguard Worker  TARGETS OpenCL
226*1cddb830SAndroid Build Coastguard Worker  EXPORT OpenCLICDLoaderTargets
227*1cddb830SAndroid Build Coastguard Worker  LIBRARY
228*1cddb830SAndroid Build Coastguard Worker    DESTINATION ${CMAKE_INSTALL_LIBDIR} # obtained from GNUInstallDirs
229*1cddb830SAndroid Build Coastguard Worker)
230*1cddb830SAndroid Build Coastguard Workerinstall(
231*1cddb830SAndroid Build Coastguard Worker# FILES $<TARGET_PDB_FILE:OpenCL> is cleanest, but is MSVC link.exe specific. LLVM's lld.exe and lld-link.exe don't support it (configure-time error)
232*1cddb830SAndroid Build Coastguard Worker# FILES $<TARGET_PROPERTY:OpenCL,COMPILE_PDB_OUTPUT_DIRECTORY>/OpenCL.pdb looks OK, but even though there's a PDB, this prop is empty on non-MSVC toolchains
233*1cddb830SAndroid Build Coastguard Worker  FILES $<TARGET_FILE_DIR:OpenCL>/OpenCL.pdb # is the most implicit (expect PDB be next to the library), yet the only one that universally works
234*1cddb830SAndroid Build Coastguard Worker  DESTINATION ${CMAKE_INSTALL_BINDIR}
235*1cddb830SAndroid Build Coastguard Worker  OPTIONAL
236*1cddb830SAndroid Build Coastguard Worker)
237*1cddb830SAndroid Build Coastguard Worker
238*1cddb830SAndroid Build Coastguard Workerif (ENABLE_OPENCL_LAYERINFO)
239*1cddb830SAndroid Build Coastguard Worker  install(
240*1cddb830SAndroid Build Coastguard Worker    TARGETS cllayerinfo
241*1cddb830SAndroid Build Coastguard Worker    EXPORT OpenCLICDLoaderTargets
242*1cddb830SAndroid Build Coastguard Worker    RUNTIME
243*1cddb830SAndroid Build Coastguard Worker      DESTINATION ${CMAKE_INSTALL_BINDIR}
244*1cddb830SAndroid Build Coastguard Worker  )
245*1cddb830SAndroid Build Coastguard Workerendif()
246*1cddb830SAndroid Build Coastguard Worker
247*1cddb830SAndroid Build Coastguard Workerexport(
248*1cddb830SAndroid Build Coastguard Worker  EXPORT OpenCLICDLoaderTargets
249*1cddb830SAndroid Build Coastguard Worker  FILE ${PROJECT_BINARY_DIR}/OpenCLICDLoader/OpenCLICDLoaderTargets.cmake
250*1cddb830SAndroid Build Coastguard Worker  NAMESPACE OpenCL::
251*1cddb830SAndroid Build Coastguard Worker)
252*1cddb830SAndroid Build Coastguard Workerfile(
253*1cddb830SAndroid Build Coastguard Worker  WRITE ${PROJECT_BINARY_DIR}/OpenCLICDLoader/OpenCLICDLoaderConfig.cmake
254*1cddb830SAndroid Build Coastguard Worker  "include(\"\${CMAKE_CURRENT_LIST_DIR}/OpenCLICDLoaderTargets.cmake\")"
255*1cddb830SAndroid Build Coastguard Worker)
256*1cddb830SAndroid Build Coastguard Worker
257*1cddb830SAndroid Build Coastguard Workerset(config_package_location ${CMAKE_INSTALL_DATADIR}/cmake/OpenCLICDLoader)
258*1cddb830SAndroid Build Coastguard Workerinstall(
259*1cddb830SAndroid Build Coastguard Worker  EXPORT OpenCLICDLoaderTargets
260*1cddb830SAndroid Build Coastguard Worker  FILE OpenCLICDLoaderTargets.cmake
261*1cddb830SAndroid Build Coastguard Worker  NAMESPACE OpenCL::
262*1cddb830SAndroid Build Coastguard Worker  DESTINATION ${config_package_location}
263*1cddb830SAndroid Build Coastguard Worker)
264*1cddb830SAndroid Build Coastguard Workerinstall(
265*1cddb830SAndroid Build Coastguard Worker  FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenCLICDLoader/OpenCLICDLoaderConfig.cmake
266*1cddb830SAndroid Build Coastguard Worker  DESTINATION ${config_package_location}
267*1cddb830SAndroid Build Coastguard Worker)
268*1cddb830SAndroid Build Coastguard Worker
269*1cddb830SAndroid Build Coastguard Workerunset(CMAKE_SIZEOF_VOID_P)
270*1cddb830SAndroid Build Coastguard Workerinclude(CMakePackageConfigHelpers)
271*1cddb830SAndroid Build Coastguard Workerwrite_basic_package_version_file(
272*1cddb830SAndroid Build Coastguard Worker  ${CMAKE_CURRENT_BINARY_DIR}/OpenCLICDLoader/OpenCLICDLoaderConfigVersion.cmake
273*1cddb830SAndroid Build Coastguard Worker  VERSION ${PROJECT_VERSION}
274*1cddb830SAndroid Build Coastguard Worker  COMPATIBILITY AnyNewerVersion
275*1cddb830SAndroid Build Coastguard Worker)
276*1cddb830SAndroid Build Coastguard Workerinstall(
277*1cddb830SAndroid Build Coastguard Worker  FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenCLICDLoader/OpenCLICDLoaderConfigVersion.cmake
278*1cddb830SAndroid Build Coastguard Worker  DESTINATION ${config_package_location}
279*1cddb830SAndroid Build Coastguard Worker)
280*1cddb830SAndroid Build Coastguard Worker
281*1cddb830SAndroid Build Coastguard Workerinstall (TARGETS OpenCL
282*1cddb830SAndroid Build Coastguard Worker    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
283*1cddb830SAndroid Build Coastguard Worker    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
284*1cddb830SAndroid Build Coastguard Worker    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
285*1cddb830SAndroid Build Coastguard Worker
286*1cddb830SAndroid Build Coastguard Workerjoin_paths(OPENCL_LIBDIR_PC "\${exec_prefix}" "${CMAKE_INSTALL_LIBDIR}")
287*1cddb830SAndroid Build Coastguard Workerjoin_paths(OPENCL_INCLUDEDIR_PC "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}")
288*1cddb830SAndroid Build Coastguard Worker
289*1cddb830SAndroid Build Coastguard Workerif (NOT MSVC)
290*1cddb830SAndroid Build Coastguard Worker  configure_file(OpenCL.pc.in OpenCL.pc @ONLY)
291*1cddb830SAndroid Build Coastguard Worker  set(pkg_config_location ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
292*1cddb830SAndroid Build Coastguard Worker  install(
293*1cddb830SAndroid Build Coastguard Worker    FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenCL.pc
294*1cddb830SAndroid Build Coastguard Worker    DESTINATION ${pkg_config_location})
295*1cddb830SAndroid Build Coastguard Workerendif()
296