From f7322931471a3161ca32dc0ca47fe013d56cf566 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Tue, 23 Aug 2016 12:23:37 +0200 Subject: OpenCL: Support multiple ABI libraries on Linux Solves issue reported in T49144. --- extern/clew/README.blender | 2 +- extern/clew/src/clew.c | 23 +++++++++++++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/extern/clew/README.blender b/extern/clew/README.blender index e500a1bef7d..8355a96db8e 100644 --- a/extern/clew/README.blender +++ b/extern/clew/README.blender @@ -1,5 +1,5 @@ Project: OpenCL Wrangler URL: https://github.com/OpenCLWrangler/clew License: Apache 2.0 -Upstream version: 277db43 +Upstream version: 309a653 Local modifications: None diff --git a/extern/clew/src/clew.c b/extern/clew/src/clew.c index e3adabd829c..3717c74f1a0 100644 --- a/extern/clew/src/clew.c +++ b/extern/clew/src/clew.c @@ -137,6 +137,17 @@ PFNCLCREATEFROMGLTEXTURE3D __clewCreateFromGLTexture3D = NULL; #endif PFNCLGETGLCONTEXTINFOKHR __clewGetGLContextInfoKHR = NULL; +static CLEW_DYNLIB_HANDLE dynamic_library_open_find(const char **paths) { + int i = 0; + while (paths[i] != NULL) { + CLEW_DYNLIB_HANDLE lib = CLEW_DYNLIB_OPEN(paths[i]); + if (lib != NULL) { + return lib; + } + ++i; + } + return NULL; +} static void clewExit(void) { @@ -151,11 +162,15 @@ static void clewExit(void) int clewInit() { #ifdef _WIN32 - const char *path = "OpenCL.dll"; + const char *paths[] = {"OpenCL.dll", NULL}; #elif defined(__APPLE__) - const char *path = "/Library/Frameworks/OpenCL.framework/OpenCL"; + const char *paths[] = {"/Library/Frameworks/OpenCL.framework/OpenCL", NULL}; #else - const char *path = "libOpenCL.so"; + const char *paths[] = {"libOpenCL.so", + "libOpenCL.so.0", + "libOpenCL.so.1", + "libOpenCL.so.2", + NULL}; #endif int error = 0; @@ -167,7 +182,7 @@ int clewInit() } // Load library - module = CLEW_DYNLIB_OPEN(path); + module = dynamic_library_open_find(paths); // Check for errors if (module == NULL) -- cgit v1.2.3