From cbbd5bb889a2c271a504c379f36a7cb717a85af4 Mon Sep 17 00:00:00 2001 From: Dylan Baker Date: Fri, 20 Oct 2017 21:48:18 -0700 Subject: [PATCH] meson: build classic osmesa This builds the classic (non-gallium) osmesa with meson. This has been tested with the osdemo application from mesa-demos. v2: - Remove unrelated change - Add SELinux dependency to osmesa Signed-off-by: Dylan Baker Reviewed-by: Eric Engestrom --- include/meson.build | 2 +- meson.build | 22 ++++++++++--- meson_options.txt | 14 +++++++++ src/mapi/glapi/meson.build | 2 +- src/mesa/drivers/osmesa/meson.build | 48 +++++++++++++++++++++++++++++ src/mesa/meson.build | 3 ++ src/meson.build | 1 - 7 files changed, 85 insertions(+), 7 deletions(-) create mode 100644 src/mesa/drivers/osmesa/meson.build diff --git a/include/meson.build b/include/meson.build index 88e66a1a8f4..b5f533bd185 100644 --- a/include/meson.build +++ b/include/meson.build @@ -55,7 +55,7 @@ if with_glx != 'disabled' install_headers('GL/glx.h', 'GL/glext.h', 'GL/glx_mangle.h', subdir : 'GL') endif -if with_osmesa +if with_osmesa != 'none' install_headers('GL/osmesa.h', subdir : 'GL') endif diff --git a/meson.build b/meson.build index 33abdac7ee9..ef06ea8f6b7 100644 --- a/meson.build +++ b/meson.build @@ -46,6 +46,7 @@ with_valgrind = get_option('valgrind') with_libunwind = get_option('libunwind') with_asm = get_option('asm') with_llvm = get_option('llvm') +with_osmesa = get_option('osmesa') if get_option('texture-float') pre_args += '-DTEXTURE_FLOAT_ENABLED' message('WARNING: Floating-point texture enabled. Please consult docs/patents.txt and your lawyer before building mesa.') @@ -67,9 +68,6 @@ with_any_opengl = with_opengl or with_gles1 or with_gles2 # Only build shared_glapi if at least one OpenGL API is enabled with_shared_glapi = get_option('shared-glapi') and with_any_opengl -# TODO: these will need options, but at the moment they just control header -# installs -with_osmesa = false # shared-glapi is required if at least two OpenGL APIs are being built if not with_shared_glapi @@ -713,7 +711,22 @@ endif # TODO: glx provider -# TODO: osmesa provider +if with_osmesa != 'none' + if with_osmesa == 'classic' and not with_dri_swrast + error('OSMesa classic requires dri (classic) swrast.') + endif + osmesa_lib_name = 'OSMesa' + osmesa_bits = get_option('osmesa-bits') + if osmesa_bits != '8' + if with_dri or with_glx != 'disabled' + error('OSMesa bits must be 8 if building glx or dir based drivers') + endif + osmesa_lib_name = osmesa_lib_name + osmesa_bits + pre_args += [ + '-DCHAN_BITS=@0@'.format(osmesa_bits), '-DDEFAULT_SOFTWARE_DEPTH_BITS=31' + ] + endif +endif # TODO: symbol mangling @@ -740,6 +753,7 @@ dep_xext = [] dep_xdamage = [] dep_xfixes = [] dep_x11_xcb = [] +dep_xcb = [] dep_xcb_glx = [] dep_xcb_dri2 = [] dep_xcb_dri3 = [] diff --git a/meson_options.txt b/meson_options.txt index b6af507bb5c..84feb630026 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -166,3 +166,17 @@ option( value : false, description : 'Build an SELinux-aware Mesa' ) +option( + 'osmesa', + type : 'combo', + value : 'none', + choices : ['none', 'classic'], + description : 'Build OSmesa.' +) +option( + 'osmesa-bits', + type : 'combo', + value : '8', + choices : ['8', '16', '32'], + description : 'Number of channel bits for OSMesa.' +) diff --git a/src/mapi/glapi/meson.build b/src/mapi/glapi/meson.build index 74f84d289ba..d2d86afd6c1 100644 --- a/src/mapi/glapi/meson.build +++ b/src/mapi/glapi/meson.build @@ -69,7 +69,7 @@ endif libglapi_static = static_library( 'glapi_static', static_glapi_files, - include_directories : [inc_mesa, inc_include, inc_src], + include_directories : [inc_mesa, inc_include, inc_src, inc_mapi], c_args : [c_msvc_compat_args, static_glapi_args], dependencies : [dep_thread, dep_selinux], build_by_default : false, diff --git a/src/mesa/drivers/osmesa/meson.build b/src/mesa/drivers/osmesa/meson.build new file mode 100644 index 00000000000..407cda7e94b --- /dev/null +++ b/src/mesa/drivers/osmesa/meson.build @@ -0,0 +1,48 @@ +# Copyright © 2017 Dylan Baker + +# 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. + +osmesa_link_with = [] + +if with_shared_glapi + osmesa_link_with += libglapi +endif + +libosmesa = shared_library( + osmesa_lib_name, + ['osmesa.c', glapitable_h, glapitemp_h], + c_args : c_vis_args, + cpp_args : cpp_vis_args, + link_args : ld_args_gc_sections, + include_directories : [ + inc_include, inc_src, inc_mapi, inc_mesa, inc_gallium, inc_gallium_aux, + ], + link_with : [libmesa_classic, libglapi_static, osmesa_link_with], + dependencies : [dep_thread, dep_selinux], + version : '8.0.0', + install : true, +) + +pkg.generate( + name : 'osmesa', + description : 'Mesa Off-screen Rendering Library', + version : '8', + libraries : libosmesa, + libraries_private : gl_priv_libs, +) diff --git a/src/mesa/meson.build b/src/mesa/meson.build index 846a40da822..20d06aad4dd 100644 --- a/src/mesa/meson.build +++ b/src/mesa/meson.build @@ -718,6 +718,9 @@ libmesa_gallium = static_library( ) subdir('drivers/dri') +if with_osmesa == 'classic' + subdir('drivers/osmesa') +endif if with_tests subdir('main/tests') endif diff --git a/src/meson.build b/src/meson.build index 6dc9abeb0bd..cc8f5953c51 100644 --- a/src/meson.build +++ b/src/meson.build @@ -48,7 +48,6 @@ subdir('util') subdir('mapi/glapi/gen') subdir('mapi') # TODO: opengl -# TODO: osmesa subdir('compiler') subdir('egl/wayland/wayland-drm') subdir('vulkan') -- 2.30.2