From b0d6d609d64dcf71845801233d1d3680b9d50288 Mon Sep 17 00:00:00 2001 From: Akihiko Odaki Date: Wed, 8 Dec 2021 15:24:55 +0900 Subject: [PATCH] Improve library detections Now it automatically finds files from Qt 5 and supports the upstream ANGLE on Windows and macOS. --- meson.build | 36 +++++++++++++++++++++++++++++------- src/dispatch_common.c | 5 +++-- src/dispatch_common.h | 2 +- src/meson.build | 2 +- 4 files changed, 34 insertions(+), 11 deletions(-) diff --git a/meson.build b/meson.build index 76af8c59..c5a589b0 100644 --- a/meson.build +++ b/meson.build @@ -165,25 +165,47 @@ endif # Dependencies dl_dep = cc.find_library('dl', required: false) gl_dep = dependency('gl', required: false) -egl_dep = dependency('egl', required: false) -elg_headers_dep = egl_dep.partial_dependency(compile_args: true, includes: true) # Optional dependencies for tests x11_dep = dependency('x11', required: false) x11_headers_dep = x11_dep.partial_dependency(compile_args: true, includes: true) -# GLES v2 and v1 may have pkg-config files, courtesy of downstream -# packagers; let's check those first, and fall back to find_library() -# if we fail +# We have multiple checks for EGL and GLES v2/v1 to support different providers: +# 1. pkg-config for Mesa +# 2. find_library() for ANGLE, which do not support pkg-config nor CMake. +# Note that Microsoft's "link" requires "lib" prefix. +# 3. CMake for Qt 5, which bundles ANGLE. +egl_dep = dependency('egl', required: false) +if not egl_dep.found() + egl_dep = cc.find_library('EGL', required: false) +endif +if not egl_dep.found() and host_machine == 'windows' + egl_dep = cc.find_library('libEGL.dll', required: false) +endif +if not egl_dep.found() + egl_dep = dependency('Qt5Gui', modules: 'Qt5::Gui_EGL', required: false) +endif + gles2_dep = dependency('glesv2', required: false) if not gles2_dep.found() - gles2_dep = cc.find_library('libGLESv2', required: false) + gles2_dep = cc.find_library('GLESv2', required: false) +endif +if not gles2_dep.found() and host_machine == 'windows' + gles2_dep = cc.find_library('libGLESv2.dll', required: false) +endif +if not gles2_dep.found() + egl_dep = dependency('Qt5Gui', modules: 'Qt5::Gui_GLESv2', required: false) endif gles1_dep = dependency('glesv1_cm', required: false) if not gles1_dep.found() - gles1_dep = cc.find_library('libGLESv1_CM', required: false) + gles1_dep = cc.find_library('GLESv1_CM', required: false) endif +if not gles1_dep.found() and host_machine == 'windows' + gles1_dep = cc.find_library('libGLESv1_CM.dll', required: false) +endif + +elg_headers_dep = egl_dep.partial_dependency(compile_args: true, includes: true) # On windows, the DLL has to have all of its functions # resolved at link time, so we have to link directly against diff --git a/src/dispatch_common.c b/src/dispatch_common.c index 153eb7c5..5841a7ed 100644 --- a/src/dispatch_common.c +++ b/src/dispatch_common.c @@ -175,9 +175,10 @@ #if defined(__APPLE__) #define GLX_LIB "/opt/X11/lib/libGL.1.dylib" +#define EGL_LIB "libEGL.dylib" #define OPENGL_LIB "/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL" -#define GLES1_LIB "libGLESv1_CM.so" -#define GLES2_LIB "libGLESv2.so" +#define GLES1_LIB "libGLESv1_CM.dylib" +#define GLES2_LIB "libGLESv2.dylib" #elif defined(__ANDROID__) #define GLX_LIB "libGLESv2.so" #define EGL_LIB "libEGL.so" diff --git a/src/dispatch_common.h b/src/dispatch_common.h index a1369431..55388a82 100644 --- a/src/dispatch_common.h +++ b/src/dispatch_common.h @@ -28,7 +28,7 @@ #define PLATFORM_HAS_GLX ENABLE_GLX #define PLATFORM_HAS_WGL 1 #elif defined(__APPLE__) -#define PLATFORM_HAS_EGL 0 +#define PLATFORM_HAS_EGL ENABLE_EGL #define PLATFORM_HAS_GLX ENABLE_GLX #define PLATFORM_HAS_WGL 0 #elif defined(ANDROID) diff --git a/src/meson.build b/src/meson.build index da581ee9..177022a1 100644 --- a/src/meson.build +++ b/src/meson.build @@ -55,7 +55,7 @@ endif # Maintain compatibility with autotools; see: https://github.com/anholt/libepoxy/issues/108 darwin_versions = [1, '1.0'] -epoxy_deps = [ dl_dep, ] +epoxy_deps = [ dl_dep, egl_dep ] if host_system == 'windows' epoxy_deps += [ opengl32_dep, gdi32_dep ] endif