if with_osmesa
install_headers('GL/osmesa.h', subdir : 'GL')
endif
+
+if with_egl
+ install_headers(
+ 'EGL/eglext.h', 'EGL/egl.h', 'EGL/eglextchromium.h', 'EGL/eglmesaext.h',
+ 'EGL/eglplatform.h',
+ subdir : 'EGL',
+ )
+endif
# TODO: other OSes
with_dri_platform = 'drm'
-# TODO: there are more platforms required for non-vulkan drivers
+# TODO: android platform
with_platform_wayland = false
with_platform_x11 = false
with_platform_drm = false
+with_platform_surfaceless = false
+egl_native_platform = ''
_platforms = get_option('platforms')
if _platforms != ''
_split = _platforms.split(',')
with_platform_x11 = _split.contains('x11')
with_platform_wayland = _split.contains('wayland')
with_platform_drm = _split.contains('drm')
+ with_platform_surfaceless = _split.contains('surfaceless')
+ egl_native_platform = _split[0]
endif
with_gbm = get_option('gbm')
with_gbm = false
endif
+_egl = get_option('egl')
+if _egl == 'auto'
+ with_egl = with_dri and with_shared_glapi and egl_native_platform != ''
+elif _egl == 'yes'
+ if not with_dri
+ error('EGL requires dri')
+ elif not with_shared_glapi
+ error('EGL requires shared-glapi')
+ elif egl_native_platform == ''
+ error('No platforms specified, consider -Dplatforms=drm,x11 at least')
+ endif
+ with_egl = true
+else
+ with_egl = false
+endif
+
+# TODO: or virgl
+if with_egl and with_gallium_radeonsi and not (with_platform_drm or with_platform_surfaceless)
+ error('RadeonSI requires drm or surfaceless platform when using EGL')
+endif
+
pre_args += '-DGLX_USE_TLS'
with_glx = get_option('glx')
if with_glx != 'disabled'
error('Vulkan drivers require dri3 for X11 support')
endif
if with_dri or with_gallium
- if with_glx == 'disabled' # TODO: or egl
+ if with_glx == 'disabled' and not with_egl
error('building dri or gallium drivers require at least one window system')
endif
endif
with_gallium_omx or with_gallium_va)
endif
+gl_pkgconfig_c_flags = []
if with_platform_x11
if with_any_vk or (with_glx == 'dri' and with_dri_platform == 'drm')
pre_args += '-DHAVE_X11_PLATFORM'
pre_args += '-DGLX_USE_DRM'
endif
endif
+else
+ pre_args += '-DMESA_EGL_NO_X11_HEADERS'
+ gl_pkgconfig_c_flags += '-DMESA_EGL_NO_X11_HEADERS'
+endif
+if with_platform_drm
+ if with_egl and not with_gbm
+ error('EGL drm platform requires gbm')
+ endif
+ pre_args += '-DHAVE_DRM_PLATFORM'
+endif
+if with_platform_surfaceless
+ pre_args += '-DHAVE_SURFACELESS_PLATFORM'
endif
prog_python2 = find_program('python2')
# TODO: symbol mangling
-# TODO: egl configuration
-
if with_platform_wayland
prog_wl_scanner = find_program('wayland-scanner')
dep_wl_protocols = dependency('wayland-protocols', version : '>= 1.8')
dep_wayland_client = dependency('wayland-client', version : '>=1.11')
dep_wayland_server = dependency('wayland-server', version : '>=1.11')
+ wayland_dmabuf_xml = join_paths(
+ dep_wl_protocols.get_pkgconfig_variable('pkgdatadir'), 'unstable',
+ 'linux-dmabuf', 'linux-dmabuf-unstable-v1.xml'
+ )
+ pre_args += ['-DHAVE_WAYLAND_PLATFORM', '-DWL_HIDE_DEPRECATED']
else
prog_wl_scanner = []
dep_wl_protocols = []
dep_wayland_client = []
dep_wayland_server = []
+ wayland_dmabuf_xml = ''
endif
dep_x11 = []
dep_xcb_dri3 = []
dep_xcb_present = []
dep_xcb_sync = []
+dep_xcb_xfixes = []
dep_xshmfence = []
if with_platform_x11
if with_glx == 'dri' and with_dri_platform == 'drm'
dep_dri2proto = dependency('dri2proto', version : '>= 2.8')
dep_glproto = dependency('glproto', version : '>= 1.4.14')
endif
+ if with_egl
+ dep_xcb_xfixes = dependency('xcb-xfixes')
+ endif
endif
-# TODO: platforms for !vulkan
-
# TODO: osmesa
-# TODO: egl
-
# TODO: vallium G3DVL
# TODO: nine
# TODO: clover
-# TODO: egl sans x11
# TODO: gallium tests
# TODO: various libdirs
inc_include = include_directories('include')
+gl_priv_reqs = [
+ 'x11', 'xext', 'xdamage >= 1.1', 'xfixes', 'x11-xcb', 'xcb',
+ 'xcb-glx >= 1.8.1', 'libdrm >= 2.4.75',
+]
+if dep_xf86vm != [] and dep_xf86vm.found()
+ gl_priv_reqs += 'xf86vm'
+endif
+if with_dri_platform == 'drm'
+ gl_priv_reqs += 'xcb-dri2 >= 1.8'
+endif
+
+gl_priv_libs = []
+if dep_thread.found()
+ gl_priv_libs += ['-lpthread', '-pthread']
+endif
+if dep_m.found()
+ gl_priv_libs += '-lm'
+endif
+if dep_dl.found()
+ gl_priv_libs += '-ldl'
+endif
+
pkg = import('pkgconfig')
subdir('include')
option(
'platforms',
type : 'string',
- value : 'x11,wayland,drm',
+ value : 'x11,wayland,drm,surfaceless',
description : 'comma separated list of window systems to support. wayland, x11, surfaceless, drm, etc.'
)
option(
choices : ['auto', 'disabled', 'dri', 'xlib', 'gallium-xlib'],
description : 'Build support for GLX platform'
)
+option(
+ 'egl',
+ type : 'combo',
+ value : 'auto',
+ choices : ['auto', 'yes', 'no'],
+ description : 'Build support for EGL platform'
+)
option(
'glvnd',
type : 'boolean',
--- /dev/null
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+c_args_for_egl = []
+link_for_egl = []
+deps_for_egl = []
+incs_for_egl = []
+files_egl = files(
+ 'main/eglapi.c',
+ 'main/eglapi.h',
+ 'main/eglarray.c',
+ 'main/eglarray.h',
+ 'main/eglconfig.c',
+ 'main/eglconfig.h',
+ 'main/eglcontext.c',
+ 'main/eglcontext.h',
+ 'main/eglcurrent.c',
+ 'main/eglcurrent.h',
+ 'main/egldefines.h',
+ 'main/egldisplay.c',
+ 'main/egldisplay.h',
+ 'main/egldriver.c',
+ 'main/egldriver.h',
+ 'main/eglfallbacks.c',
+ 'main/eglglobals.c',
+ 'main/eglglobals.h',
+ 'main/eglimage.c',
+ 'main/eglimage.h',
+ 'main/egllog.c',
+ 'main/egllog.h',
+ 'main/eglsurface.c',
+ 'main/eglsurface.h',
+ 'main/eglsync.c',
+ 'main/eglsync.h',
+ 'main/eglentrypoint.h',
+ 'main/egltypedefs.h',
+ 'drivers/dri2/egl_dri2.c',
+ 'drivers/dri2/egl_dri2.h',
+ 'drivers/dri2/egl_dri2_fallbacks.h',
+)
+
+linux_dmabuf_unstable_v1_protocol_c = custom_target(
+ 'linux-dmabuf-unstable-v1-protocol.c',
+ input : wayland_dmabuf_xml,
+ output : 'linux-dmabuf-unstable-v1-protocol.c',
+ command : [prog_wl_scanner, 'code', '@INPUT@', '@OUTPUT@'],
+)
+
+linux_dmabuf_unstable_v1_client_protocol_h = custom_target(
+ 'linux-dmabuf-unstable-v1-client-protocol.h',
+ input : wayland_dmabuf_xml,
+ output : 'linux-dmabuf-unstable-v1-client-protocol.h',
+ command : [prog_wl_scanner, 'client-header', '@INPUT@', '@OUTPUT@'],
+)
+
+if with_platform_x11
+ files_egl += files('drivers/dri2/platform_x11.c')
+ if with_dri3
+ files_egl += files('drivers/dri2/platform_x11_dri3.c')
+ link_for_egl += libloader_dri3_helper
+ endif
+ deps_for_egl += [dep_xcb_dri2, dep_xcb_xfixes]
+endif
+if with_platform_drm
+ files_egl += files('drivers/dri2/platform_drm.c')
+ link_for_egl += libgbm
+ incs_for_egl += include_directories('../gbm/main')
+endif
+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]
+ link_for_egl += libwayland_drm
+ files_egl += files('drivers/dri2/platform_wayland.c')
+ files_egl += [
+ linux_dmabuf_unstable_v1_protocol_c,
+ linux_dmabuf_unstable_v1_client_protocol_h,
+ wayland_drm_client_protocol_h,
+ ]
+ incs_for_egl += include_directories(
+ 'wayland/wayland-egl', 'wayland/wayland-drm',
+ )
+endif
+# TODO: android
+
+# TODO: glvnd
+
+if cc.has_function('mincore')
+ c_args_for_egl += '-DHAVE_MINCORE'
+endif
+
+libegl = shared_library(
+ 'EGL',
+ files_egl,
+ c_args : [
+ c_vis_args,
+ c_args_for_egl,
+ '-DDEFAULT_DRIVER_DIR="@0@"'.format(dri_driver_dir),
+ '-D_EGL_BUILT_IN_DRIVER_DRI2',
+ '-D_EGL_NATIVE_PLATFORM=_EGL_PLATFORM_@0@'.format(egl_native_platform.to_upper()),
+ ],
+ include_directories : [
+ incs_for_egl, inc_include, inc_src, inc_loader, inc_gbm,
+ include_directories('main'),
+ ],
+ link_with : [link_for_egl, libloader, libxmlconfig, libglapi, libmesa_util],
+ link_args : [ld_args_bsymbolic, ld_args_gc_sections],
+ dependencies : [deps_for_egl, dep_dl, dep_libdrm, dep_clock, dep_thread],
+ install : true,
+ version : '1.0.0',
+)
+
+pkg.generate(
+ name : 'egl',
+ description : 'Mesa EGL Library',
+ version : meson.project_version(),
+ libraries : libegl,
+ libraries_private: gl_priv_libs,
+ requires_private : gl_priv_reqs,
+ extra_cflags : gl_pkgconfig_c_flags,
+)
+
+if with_tests
+ test('egl-symbols-check', find_program('egl-symbols-check'))
+ test('egl-entrypoint-check', find_program('egl-entrypoint-check'))
+endif
output : 'wayland-drm-client-protocol.h',
command : [prog_wl_scanner, 'client-header', '@INPUT@', '@OUTPUT@'],
)
+
+wayland_drm_server_protocol_h = custom_target(
+ 'wayland-drm-server-protocol.h',
+ input : 'wayland-drm.xml',
+ output : 'wayland-drm-server-protocol.h',
+ command : [prog_wl_scanner, 'server-header', '@INPUT@', '@OUTPUT@'],
+)
+
+libwayland_drm = static_library(
+ 'wayland_drm',
+ ['wayland-drm.c', wayland_drm_protocol_c, wayland_drm_server_protocol_h],
+ dependencies : [dep_wayland_server],
+ build_by_default : false,
+)
--- /dev/null
+# Copyright © 2017 Intel Corporation
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+
+
+libwayland_egl = shared_library(
+ 'wayland-egl',
+ 'wayland-egl.c',
+ c_args : [c_vis_args],
+ link_args : ld_args_gc_sections,
+ version : '1.0.0',
+ install : true,
+)
+
+pkg.generate(
+ name : 'wayland-egl',
+ description : 'Mesa wayland-egl library',
+ libraries : libwayland_egl,
+ version : meson.project_version(),
+ requires : 'wayland-client',
+)
+
+if with_tests
+ test('wayland-egl-symbols-check', find_program('wayland-egl-symbols-check'))
+ test('wayland-egl-abi-check', executable('wayland-egl-abi-check', 'wayland-egl-abi-check.c'))
+endif
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
+inc_gbm = include_directories('.', 'backends/dri')
+
files_gbm = files(
'main/backend.c',
'main/backend.h',
deps_gbm = []
args_gbm = []
links_gbm = []
+deps_gbm = []
if with_dri2
files_gbm += files('backends/dri/gbm_dri.c', 'backends/dri/gbm_driint.h')
deps_gbm += [dep_libdrm, dep_thread]
args_gbm += '-DDEFAULT_DRIVER_DIR="@0@"'.format(dri_driver_dir)
endif
+if with_platform_wayland
+ deps_gbm += dep_wayland_server
+ links_gbm += libwayland_drm
+endif
# TODO: wayland support (requires egl)
'gbm',
files_gbm,
include_directories : [
- include_directories('main'), inc_include, inc_src, inc_loader],
+ include_directories('main'), inc_include, inc_src, inc_loader,
+ include_directories('../egl/wayland/wayland-drm')],
c_args : args_gbm,
link_args : [ld_args_gc_sections],
- link_with : [libloader, libmesa_util, libxmlconfig],
+ link_with : [links_gbm, libloader, libmesa_util, libxmlconfig],
dependencies : [deps_gbm, dep_dl],
version : '1.0',
install : true,
install : true,
)
- gl_priv_reqs = [
- 'x11', 'xext', 'xdamage >= 1.1', 'xfixes', 'x11-xcb', 'xcb',
- 'xcb-glx >= 1.8.1', 'libdrm >= 2.4.75',
- ]
- if dep_xf86vm.found()
- gl_priv_reqs += 'xf86vm'
- endif
- if with_dri_platform == 'drm'
- gl_priv_reqs += 'xcb-dri2 >= 1.8'
- endif
-
- gl_priv_libs = []
- if dep_thread.found()
- gl_priv_libs += ['-lpthread', '-pthread']
- endif
- if dep_m.found()
- gl_priv_libs += '-lm'
- endif
- if dep_dl.found()
- gl_priv_libs += '-ldl'
- endif
-
pkg.generate(
name : 'gl',
filebase : 'gl',
subdir('mesa')
subdir('loader')
subdir('glx')
+if with_platform_wayland
+ subdir('egl/wayland/wayland-egl')
+endif
if with_gbm
subdir('gbm')
endif
-# TODO: egl
+if with_egl
+ subdir('egl')
+endif
subdir('gallium')