diff --git a/sycl/include/sycl/detail/os_util.hpp b/sycl/include/sycl/detail/os_util.hpp index 0c3efa449a85..936d5be56cc4 100644 --- a/sycl/include/sycl/detail/os_util.hpp +++ b/sycl/include/sycl/detail/os_util.hpp @@ -120,9 +120,13 @@ fn *dynLookupFunction(const char *WinName, const char *LinName, const char *FunName) { return reinterpret_cast(dynLookup(WinName, LinName, FunName)); } +// On Linux, the name of OpenCL that was used to link against may be either +// `OpenCL.so`, `OpenCL.so.1` or possibly anything else. +// `libur_adapter_opencl.so` is a more stable name, since it is hardcoded into +// the loader. #define __SYCL_OCL_CALL(FN, ...) \ (sycl::_V1::detail::dynLookupFunction( \ - "OpenCL", "libOpenCL.so", #FN)(__VA_ARGS__)) + "OpenCL", "libur_adapter_opencl.so", #FN)(__VA_ARGS__)) } // namespace detail } // namespace _V1 diff --git a/sycl/unittests/mock_opencl/CMakeLists.txt b/sycl/unittests/mock_opencl/CMakeLists.txt index 20d45b2f4250..d9508d80a045 100644 --- a/sycl/unittests/mock_opencl/CMakeLists.txt +++ b/sycl/unittests/mock_opencl/CMakeLists.txt @@ -1,9 +1,17 @@ get_target_property(SYCL_BINARY_DIR sycl-toolchain BINARY_DIR) +# Linux looks up ur_adapter_opencl rather than libOpenCL. +# On Windows, this is copied into libOpenCL.dll. +if(WIN32) + set(LIBNAME OpenCL) +else() + set(LIBNAME ur_adapter_opencl) +endif() + add_library(mockOpenCL SHARED EXCLUDE_FROM_ALL mock_opencl.cpp) set_target_properties(mockOpenCL PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${SYCL_BINARY_DIR}/unittests/lib - LIBRARY_OUTPUT_NAME OpenCL + LIBRARY_OUTPUT_NAME ${LIBNAME} RUNTIME_OUTPUT_DIRECTORY ${SYCL_BINARY_DIR}/unittests/lib - RUNTIME_OUTPUT_NAME OpenCL + RUNTIME_OUTPUT_NAME ${LIBNAME} )