[Mesa-dev] [PATCH 1/5] wayland-egl: allow shipping the library or not

Eric Engestrom eric.engestrom at intel.com
Tue Jun 5 15:07:21 UTC 2018


On Tuesday, 2018-06-05 15:14:30 +0100, Emil Velikov wrote:
> From: Emil Velikov <emil.velikov at collabora.com>
> 
> Recently the wayland-egl library and pkg-config file were moved to the
> Wayland repository. With that a strange conflict came to be - which one
> should be used and when.
> 
> The long term goal is to remove the Mesa copies, but with this patch we
> allow builders to explicitly select if they want it.
> 
> Note: since the header (wayland-egl-backend.h) is now used by C++
> people, s/private/driver_private/ was applied.
> 
> Cc: Eric Engestrom <eric.engestrom at intel.com>
> CC: 18.0 18.1 <mesa-stable at freedesktop.org>
> Signed-off-by: Emil Velikov <emil.velikov at collabora.com>
> ---
>  configure.ac                            | 17 +++++++++++++++++
>  meson.build                             | 12 ++++++++++++
>  meson_options.txt                       |  6 ++++++
>  src/Makefile.am                         |  2 ++
>  src/egl/Makefile.am                     |  1 +
>  src/egl/drivers/dri2/platform_wayland.c | 12 ++++++++++++
>  src/egl/meson.build                     |  2 +-
>  src/meson.build                         |  2 +-
>  8 files changed, 52 insertions(+), 2 deletions(-)
> 
> diff --git a/configure.ac b/configure.ac
> index 02dca4547c8..5ea52242bd1 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -89,6 +89,7 @@ LIBOMXIL_BELLAGIO_REQUIRED=0.0
>  LIBOMXIL_TIZONIA_REQUIRED=0.10.0
>  LIBVA_REQUIRED=0.39.0
>  VDPAU_REQUIRED=1.1
> +# TODO: Bump to 1.15 -> the first version that ships wayland-egl-backend
>  WAYLAND_REQUIRED=1.11
>  WAYLAND_PROTOCOLS_REQUIRED=1.8
>  XCB_REQUIRED=1.9.3
> @@ -1766,6 +1767,18 @@ if test "x$enable_glx_read_only_text" = xyes; then
>      DEFINES="$DEFINES -DGLX_X86_READONLY_TEXT"
>  fi
>  
> +dnl
> +dnl TEMPORARY: mostly for stable releases
> +dnl
> +dnl It will allow easier management as the wayland-egl library was
> +dnl moved to the Wayland project
> +dnl
> +AC_ARG_ENABLE(bundled-wayland-egl,
> +   [AS_HELP_STRING([--disable-bundled-wayland-egl],
> +		   [disable shipping of the wayland-egl library and pkg-config file @<:@default=enabled@:>@])],
> +   [enable_wayland_egl=$enableval], [enable_wayland_egl=yes])
> +AM_CONDITIONAL(BUILD_WAYLAND_EGL, test "x$enable_wayland_egl" = xyes)

I'm not sure I see the benefit of your variant of adding all the
complexity of a new option and immediately making it an error to use it.
Could you explain your logic?

> +
>  dnl
>  dnl DEPRECATED: EGL Platforms configuration
>  dnl
> @@ -1807,6 +1820,10 @@ for plat in $platforms; do
>  
>          PKG_CHECK_MODULES([WAYLAND_CLIENT], [wayland-client >= $WAYLAND_REQUIRED])
>          PKG_CHECK_MODULES([WAYLAND_SERVER], [wayland-server >= $WAYLAND_REQUIRED])
> +        if test "x$enable_egl" = xyes -a "x$enable_wayland_egl" != xyes; then
> +            PKG_CHECK_MODULES([WAYLAND_EGL], [wayland-egl-backend >= 3])
> +            DEFINES="$DEFINES -DUSE_EXTERNAL_WAYLAND_EGL"
> +        fi
>          PKG_CHECK_MODULES([WAYLAND_PROTOCOLS], [wayland-protocols >= $WAYLAND_PROTOCOLS_REQUIRED])
>          WAYLAND_PROTOCOLS_DATADIR=`$PKG_CONFIG --variable=pkgdatadir wayland-protocols`
>  
> diff --git a/meson.build b/meson.build
> index 4aafba802a5..a4c72dad41a 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -1229,8 +1229,19 @@ endif
>  if with_platform_wayland
>    prog_wl_scanner = find_program('wayland-scanner')
>    dep_wl_protocols = dependency('wayland-protocols', version : '>= 1.8')
> +  # TODO: Bump to 1.15 -> the first version that ships wayland-egl-backend
>    dep_wayland_client = dependency('wayland-client', version : '>=1.11')
>    dep_wayland_server = dependency('wayland-server', version : '>=1.11')
> +  build_wayland_egl = get_option('bundled-wayland-egl')
> +  if with_egl and not build_wayland_egl
> +    dep_wayland_egl = dependency('wayland-egl-backend', version : '>= 3')
> +    dep_wayland_egl_headers = declare_dependency(
> +      compile_args : run_command(prog_pkgconfig, ['wayland-egl-backend', '--cflags']).stdout().split()
> +    )
> +    pre_args += ['-DUSE_EXTERNAL_WAYLAND_EGL']
> +  else
> +    dep_wayland_egl_headers = null_dep
> +  endif
>    wayland_dmabuf_xml = join_paths(
>      dep_wl_protocols.get_pkgconfig_variable('pkgdatadir'), 'unstable',
>      'linux-dmabuf', 'linux-dmabuf-unstable-v1.xml'
> @@ -1241,6 +1252,7 @@ else
>    dep_wl_protocols = null_dep
>    dep_wayland_client = null_dep
>    dep_wayland_server = null_dep
> +  dep_wayland_egl_headers = null_dep
>    wayland_dmabuf_xml = ''
>  endif
>  
> diff --git a/meson_options.txt b/meson_options.txt
> index 2c1f514debe..77d7c283fc9 100644
> --- a/meson_options.txt
> +++ b/meson_options.txt
> @@ -212,6 +212,12 @@ option(
>    choices : ['auto', 'true', 'false'],
>    description : 'Build support for EGL platform'
>  )
> +option(
> +  'bundled-wayland-egl',
> +  type : 'boolean',
> +  value : true,
> +  description : 'Build/ship the wayland-egl library and pkg-config file'
> +)
>  option(
>    'glvnd',
>    type : 'boolean',
> diff --git a/src/Makefile.am b/src/Makefile.am
> index fd5ae445502..d91ecb3e239 100644
> --- a/src/Makefile.am
> +++ b/src/Makefile.am
> @@ -97,8 +97,10 @@ endif
>  
>  ## Optionally required by EGL
>  if HAVE_PLATFORM_WAYLAND
> +if BUILD_WAYLAND_EGL
>  SUBDIRS += egl/wayland/wayland-egl
>  endif
> +endif
>  
>  if HAVE_EGL
>  SUBDIRS += egl
> diff --git a/src/egl/Makefile.am b/src/egl/Makefile.am
> index 086a4a1e630..bde400bb47f 100644
> --- a/src/egl/Makefile.am
> +++ b/src/egl/Makefile.am
> @@ -87,6 +87,7 @@ libEGL_common_la_LIBADD += $(LIBDRM_LIBS)
>  AM_CFLAGS += $(WAYLAND_SERVER_CFLAGS)
>  libEGL_common_la_LIBADD += $(top_builddir)/src/egl/wayland/wayland-drm/libwayland-drm.la
>  libEGL_common_la_LIBADD += $(WAYLAND_SERVER_LIBS)
> +AM_CFLAGS += $(WAYLAND_EGL_CFLAGS)
>  dri2_backend_FILES += \
>  	drivers/dri2/platform_wayland.c
>  dri2_backend_GENERATED_FILES += \
> diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c
> index 63da21cdf55..c49041f1174 100644
> --- a/src/egl/drivers/dri2/platform_wayland.c
> +++ b/src/egl/drivers/dri2/platform_wayland.c
> @@ -49,7 +49,11 @@
>  #include "wayland-drm-client-protocol.h"
>  #include "linux-dmabuf-unstable-v1-client-protocol.h"
>  
> +#ifdef USE_EXTERNAL_WAYLAND_EGL
> +#include <wayland-egl-backend.h>
> +#else
>  #include "wayland/wayland-egl/wayland-egl-backend.h"
> +#endif
>  
>  #ifndef DRM_FORMAT_MOD_INVALID
>  #define DRM_FORMAT_MOD_INVALID ((1ULL << 56) - 1)
> @@ -298,7 +302,11 @@ dri2_wl_create_window_surface(_EGLDriver *drv, _EGLDisplay *disp,
>                        dri2_surf->wl_queue);
>  
>     dri2_surf->wl_win = window;
> +#ifdef USE_EXTERNAL_WAYLAND_EGL
> +   dri2_surf->wl_win->driver_private = dri2_surf;
> +#else
>     dri2_surf->wl_win->private = dri2_surf;
> +#endif
>     dri2_surf->wl_win->destroy_window_callback = destroy_window_callback;
>     if (dri2_dpy->flush)
>        dri2_surf->wl_win->resize_callback = resize_callback;
> @@ -384,7 +392,11 @@ dri2_wl_destroy_surface(_EGLDriver *drv, _EGLDisplay *disp, _EGLSurface *surf)
>        wl_callback_destroy(dri2_surf->throttle_callback);
>  
>     if (dri2_surf->wl_win) {
> +#ifdef USE_EXTERNAL_WAYLAND_EGL
> +      dri2_surf->wl_win->driver_private = NULL;
> +#else
>        dri2_surf->wl_win->private = NULL;
> +#endif
>        dri2_surf->wl_win->resize_callback = NULL;
>        dri2_surf->wl_win->destroy_window_callback = NULL;
>     }
> diff --git a/src/egl/meson.build b/src/egl/meson.build
> index 9050d763a6c..be5a09106c6 100644
> --- a/src/egl/meson.build
> +++ b/src/egl/meson.build
> @@ -116,7 +116,7 @@ if with_platform_surfaceless
>    files_egl += files('drivers/dri2/platform_surfaceless.c')
>  endif
>  if with_platform_wayland
> -  deps_for_egl += [dep_wayland_client, dep_wayland_server]
> +  deps_for_egl += [dep_wayland_client, dep_wayland_server, dep_wayland_egl_headers]
>    link_for_egl += libwayland_drm
>    files_egl += files('drivers/dri2/platform_wayland.c')
>    files_egl += [
> diff --git a/src/meson.build b/src/meson.build
> index c2566b7a687..50af466c2ad 100644
> --- a/src/meson.build
> +++ b/src/meson.build
> @@ -75,7 +75,7 @@ if with_gbm
>  else
>    inc_gbm = []
>  endif
> -if with_egl
> +if with_egl and build_wayland_egl
>    subdir('egl')
>  endif
>  if with_gallium
> -- 
> 2.16.0
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list