project(
'mesa',
['c', 'cpp'],
- version : '17.3.0-devel',
+ version : run_command(
+ [find_program('python', 'python2', 'python3'), 'bin/meson_get_version.py']
+ ).stdout(),
license : 'MIT',
meson_version : '>= 0.42',
- default_options : ['c_std=c99', 'cpp_std=c++11']
+ default_options : ['buildtype=debugoptimized', 'c_std=c99', 'cpp_std=c++11']
)
# Arguments for the preprocessor, put these in a separate array from the C and
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.')
# 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
with_dri_nouveau = false
with_dri_swrast = false
_drivers = get_option('dri-drivers')
+if _drivers == 'auto'
+ # TODO: PPC, Sparc
+ if not ['darwin', 'windows'].contains(host_machine.system())
+ if ['x86', 'x86_64'].contains(host_machine.cpu_family())
+ _drivers = 'i915,i965,r100,r200,nouveau'
+ else
+ error('Unknown architecture. Please pass -Ddri-drivers to set driver options. Patches gladly accepted to fix this.')
+ endif
+ else
+ error('Unknown OS. Please pass -Ddri-drivers to set driver options. Patches gladly accepted to fix this.')
+ endif
+endif
if _drivers != ''
_split = _drivers.split(',')
with_dri_i915 = _split.contains('i915')
with_gallium_etnaviv = false
with_gallium_imx = false
_drivers = get_option('gallium-drivers')
+if _drivers == 'auto'
+ if not ['darwin', 'windows'].contains(host_machine.system())
+ # TODO: PPC, Sparc
+ if ['x86', 'x86_64'].contains(host_machine.cpu_family())
+ _drivers = 'radeonsi,nouveau,swrast'
+ elif ['arm', 'aarch64'].contains(host_machine.cpu_family())
+ _drivers = 'pl111,vc4,vc5,freedreno,etnaviv,imx,swrast'
+ else
+ error('Unknown architecture. Please pass -Dgallium-drivers to set driver options. Patches gladly accepted to fix this.')
+ endif
+ else
+ error('Unknown OS. Please pass -Dgallium-drivers to set driver options. Patches gladly accepted to fix this.')
+ endif
+endif
if _drivers != ''
_split = _drivers.split(',')
with_gallium_pl111 = _split.contains('pl111')
# TODO: other OSes
with_dri_platform = 'drm'
-# TODO: android platform
+with_platform_android = false
with_platform_wayland = false
with_platform_x11 = false
with_platform_drm = false
_platforms = get_option('platforms')
if _platforms != ''
_split = _platforms.split(',')
+ with_platform_android = _split.contains('android')
with_platform_x11 = _split.contains('x11')
with_platform_wayland = _split.contains('wayland')
with_platform_drm = _split.contains('drm')
with_gbm = get_option('gbm')
if with_gbm == 'auto' and with_dri # TODO: or gallium
with_gbm = host_machine.system() == 'linux'
-elif with_gbm == 'yes'
+elif with_gbm == 'true'
if not ['linux', 'bsd'].contains(host_machine.system())
error('GBM only supports unix-like platforms')
endif
_egl = get_option('egl')
if _egl == 'auto'
with_egl = with_dri and with_shared_glapi and egl_native_platform != ''
-elif _egl == 'yes'
+elif _egl == 'true'
if not with_dri
error('EGL requires dri')
elif not with_shared_glapi
endif
with_glvnd = get_option('glvnd')
-if with_glvnd and with_glx != 'dri'
- message('glvnd requires dri based glx')
+if with_glvnd
+ if with_glx == 'xlib' or with_glx == 'gallium-xlib'
+ error('Cannot build glvnd support for GLX that is not DRI based.')
+ elif with_glx == 'disabled' and not with_egl
+ error('glvnd requires DRI based GLX and/or EGL')
+ endif
endif
# TODO: toggle for this
with_amd_vk = false
with_any_vk = false
_vulkan_drivers = get_option('vulkan-drivers')
+if _vulkan_drivers == 'auto'
+ if not ['darwin', 'windows'].contains(host_machine.system())
+ if host_machine.cpu_family().startswith('x86')
+ _vulkan_drivers = 'amd,intel'
+ else
+ error('Unknown architecture. Please pass -Dvulkan-drivers to set driver options. Patches gladly accepted to fix this.')
+ endif
+ else
+ # No vulkan driver supports windows or macOS currently
+ _vulkan_drivers = ''
+ endif
+endif
if _vulkan_drivers != ''
_split = _vulkan_drivers.split(',')
with_intel_vk = _split.contains('intel')
with_amd_vk = _split.contains('amd')
with_any_vk = with_amd_vk or with_intel_vk
- if not (with_platform_x11 or with_platform_wayland)
- error('Vulkan requires at least one platform (x11, wayland)')
+ if not (with_platform_x11 or with_platform_wayland or with_platform_android)
+ error('Vulkan requires at least one platform (x11, wayland, android)')
endif
endif
else
with_dri3 = false
endif
-elif with_dri3 == 'yes'
+elif with_dri3 == 'true'
with_dri3 = true
else
with_dri3 = false
if with_platform_surfaceless
pre_args += '-DHAVE_SURFACELESS_PLATFORM'
endif
+if with_platform_android
+ dep_android = [
+ dependency('cutils'),
+ dependency('hardware'),
+ dependency('sync'),
+ ]
+ pre_args += '-DHAVE_ANDROID_PLATFORM'
+endif
prog_python2 = find_program('python2')
has_mako = run_command(prog_python2, '-c', 'import mako')
error('When using GCC, version 4.4.6 or later is required.')
endif
-# Define DEBUG for debug and debugoptimized builds
-if get_option('buildtype').startswith('debug')
+# Define DEBUG for debug builds only (debugoptimized is not included on this one)
+if get_option('buildtype') == 'debug'
pre_args += '-DDEBUG'
endif
# FIXME: enable asm when cross compiler
# This is doable (autotools does it), but it's not of immediate concern
-if meson.is_cross_build()
- message('Cross compiling, disabling asm')
+if meson.is_cross_build() and host_machine.cpu_family().startswith('x86')
+ message('Cross compiling, disabling x86/x86_64 asm')
with_asm = false
endif
pre_args += '-DMAJOR_IN_MKDEV'
endif
-foreach h : ['xlocale.h', 'sys/sysctl.h']
+foreach h : ['xlocale.h', 'sys/sysctl.h', 'linux/futex.h']
if cc.has_header(h)
pre_args += '-DHAVE_@0@'.format(h.to_upper().underscorify())
endif
dep_libdrm_etnaviv = []
dep_libdrm_freedreno = []
if with_amd_vk or with_gallium_radeonsi
- dep_libdrm_amdgpu = dependency('libdrm_amdgpu', version : '>= 2.4.85')
+ dep_libdrm_amdgpu = dependency('libdrm_amdgpu', version : '>= 2.4.88')
endif
if with_gallium_radeonsi or with_dri_r100 or with_dri_r200
dep_libdrm_radeon = dependency('libdrm_radeon', version : '>= 2.4.71')
if with_amd_vk
llvm_modules += ['amdgpu', 'bitreader', 'ipo']
endif
-dep_llvm = dependency(
- 'llvm', version : '>= 3.9.0', required : with_amd_vk, modules : llvm_modules,
-)
+dep_llvm = []
if with_llvm
+ dep_llvm = dependency(
+ 'llvm', version : '>= 3.9.0', required : with_amd_vk, modules : llvm_modules,
+ )
if dep_llvm.found()
_llvm_version = dep_llvm.version().split('.')
# Development versions of LLVM have an 'svn' suffix, we don't want that for
pre_args += '-DUSE_LIBGLVND=1'
endif
-# TODO: make this conditional
-dep_valgrind = dependency('valgrind', required : false)
-if dep_valgrind.found() and with_valgrind
- pre_args += '-DHAVE_VALGRIND'
+if with_valgrind != 'false'
+ dep_valgrind = dependency('valgrind', required : with_valgrind == 'true')
+ if dep_valgrind.found()
+ pre_args += '-DHAVE_VALGRIND'
+ endif
+else
+ dep_valgrind = []
endif
# pthread stubs. Lets not and say we didn't
# TODO: llvm-prefix and llvm-shared-libs
-dep_unwind = dependency('libunwind', required : false)
-if dep_unwind.found() and with_libunwind
- pre_args += '-DHAVE_LIBUNWIND'
+if with_libunwind != 'false'
+ dep_unwind = dependency('libunwind', required : with_libunwind == 'true')
+ if dep_unwind.found()
+ pre_args += '-DHAVE_LIBUNWIND'
+ endif
+else
+ dep_unwind = []
endif
# TODO: flags for opengl, gles, dri
# 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
+ if with_osmesa == 'gallium' and not with_gallium_softpipe
+ error('OSMesa gallium requires gallium softpipe or llvmpipe.')
+ 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
dep_xdamage = []
dep_xfixes = []
dep_x11_xcb = []
+dep_xcb = []
dep_xcb_glx = []
dep_xcb_dri2 = []
dep_xcb_dri3 = []
dep_dri2proto = []
dep_glproto = []
-dep_xf86vm = []
+dep_xxf86vm = []
dep_xcb_dri3 = []
dep_xcb_present = []
dep_xcb_sync = []
dep_xdamage = dependency('xdamage', version : '>= 1.1')
dep_xfixes = dependency('xfixes')
dep_xcb_glx = dependency('xcb-glx', version : '>= 1.8.1')
- dep_xf86vm = dependency('xxf86vm', required : false)
+ dep_xxf86vm = dependency('xxf86vm', required : false)
endif
if with_any_vk or (with_glx == 'dri' and with_dri_platform == 'drm')
dep_xcb = dependency('xcb')
'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'
+if dep_xxf86vm != [] and dep_xxf86vm.found()
+ gl_priv_reqs += 'xxf86vm'
endif
if with_dri_platform == 'drm'
gl_priv_reqs += 'xcb-dri2 >= 1.8'
pkg = import('pkgconfig')
subdir('include')
+subdir('bin')
subdir('src')