diff options
-rw-r--r-- | include/meson.build | 8 | ||||
-rw-r--r-- | meson.build | 81 | ||||
-rw-r--r-- | meson_options.txt | 9 | ||||
-rw-r--r-- | src/egl/meson.build | 144 | ||||
-rw-r--r-- | src/egl/wayland/wayland-drm/meson.build | 14 | ||||
-rw-r--r-- | src/egl/wayland/wayland-egl/meson.build | 42 | ||||
-rw-r--r-- | src/gbm/meson.build | 12 | ||||
-rw-r--r-- | src/glx/meson.build | 22 | ||||
-rw-r--r-- | src/meson.build | 7 |
9 files changed, 304 insertions, 35 deletions
diff --git a/include/meson.build b/include/meson.build index e33a8569d76..88e66a1a8f4 100644 --- a/include/meson.build +++ b/include/meson.build @@ -58,3 +58,11 @@ endif 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 diff --git a/meson.build b/meson.build index a8bcaf7621b..92b875b1a10 100644 --- a/meson.build +++ b/meson.build @@ -130,16 +130,20 @@ 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') @@ -154,6 +158,27 @@ else 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' @@ -228,7 +253,7 @@ if with_any_vk and (with_platform_x11 and not with_dri3) 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 @@ -250,6 +275,7 @@ if _drivers != '' 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' @@ -269,6 +295,18 @@ if with_platform_x11 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') @@ -646,18 +684,22 @@ endif # 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 = [] @@ -674,6 +716,7 @@ dep_xf86vm = [] 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' @@ -701,21 +744,19 @@ if with_platform_x11 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 @@ -744,6 +785,28 @@ endforeach 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') diff --git a/meson_options.txt b/meson_options.txt index 8fd00d41b45..87aef95198b 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -21,7 +21,7 @@ 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( @@ -112,6 +112,13 @@ option( 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', value : false, diff --git a/src/egl/meson.build b/src/egl/meson.build new file mode 100644 index 00000000000..ade6810bf91 --- /dev/null +++ b/src/egl/meson.build @@ -0,0 +1,144 @@ +# 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 diff --git a/src/egl/wayland/wayland-drm/meson.build b/src/egl/wayland/wayland-drm/meson.build index 92adc295531..12b49ca4f06 100644 --- a/src/egl/wayland/wayland-drm/meson.build +++ b/src/egl/wayland/wayland-drm/meson.build @@ -31,3 +31,17 @@ wayland_drm_client_protocol_h = custom_target( 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, +) diff --git a/src/egl/wayland/wayland-egl/meson.build b/src/egl/wayland/wayland-egl/meson.build new file mode 100644 index 00000000000..5e7c3103843 --- /dev/null +++ b/src/egl/wayland/wayland-egl/meson.build @@ -0,0 +1,42 @@ +# 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 diff --git a/src/gbm/meson.build b/src/gbm/meson.build index f9665aa2d2f..1bb3c94c387 100644 --- a/src/gbm/meson.build +++ b/src/gbm/meson.build @@ -18,6 +18,8 @@ # 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', @@ -28,12 +30,17 @@ files_gbm = files( 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) @@ -41,10 +48,11 @@ libgbm = shared_library( '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, diff --git a/src/glx/meson.build b/src/glx/meson.build index 6853f5b3a16..3fe5fcf0cd6 100644 --- a/src/glx/meson.build +++ b/src/glx/meson.build @@ -168,28 +168,6 @@ if with_glx == 'dri' 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', diff --git a/src/meson.build b/src/meson.build index 0326be0bfef..9b1b0ae594d 100644 --- a/src/meson.build +++ b/src/meson.build @@ -56,8 +56,13 @@ subdir('intel') 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') |