diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2016-08-23 13:23:37 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2016-08-23 13:23:37 +0300 |
commit | f7322931471a3161ca32dc0ca47fe013d56cf566 (patch) | |
tree | da913b12faf68173630557cd45a77483422d1e40 /extern | |
parent | e2f323c3ec2352c11d16a4fb2920184491300166 (diff) |
OpenCL: Support multiple ABI libraries on Linux
Solves issue reported in T49144.
Diffstat (limited to 'extern')
-rw-r--r-- | extern/clew/README.blender | 2 | ||||
-rw-r--r-- | 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) |