# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
-project('mesa', ['c', 'cpp'], version : '17.3.0-devel', license : 'MIT',
- default_options : ['c_std=c99', 'cpp_std=c++11'])
+project(
+ 'mesa',
+ ['c', 'cpp'],
+ version : '17.3.0-devel',
+ license : 'MIT',
+ meson_version : '>= 0.42',
+ default_options : ['c_std=c99', 'cpp_std=c++11']
+)
# Arguments for the preprocessor, put these in a separate array from the C and
# C++ (cpp in meson terminology) arguments since they need to be added to the
with_vulkan_icd_dir = get_option('vulkan-icd-dir')
with_tests = get_option('build-tests')
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.')
# 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 = false
with_dri_i915 = false
with_dri_i965 = false
+with_dri_r100 = false
+with_dri_r200 = false
+with_dri_nouveau = false
with_dri_swrast = false
_drivers = get_option('dri-drivers')
if _drivers != ''
_split = _drivers.split(',')
with_dri_i915 = _split.contains('i915')
with_dri_i965 = _split.contains('i965')
+ with_dri_r100 = _split.contains('r100')
+ with_dri_r200 = _split.contains('r200')
+ with_dri_nouveau = _split.contains('nouveau')
with_dri_swrast = _split.contains('swrast')
with_dri = true
endif
with_gallium = false
+with_gallium_pl111 = false
with_gallium_radeonsi = false
with_gallium_nouveau = false
+with_gallium_freedreno = false
with_gallium_softpipe = false
+with_gallium_vc4 = false
+with_gallium_vc5 = false
+with_gallium_etnaviv = false
+with_gallium_imx = false
_drivers = get_option('gallium-drivers')
if _drivers != ''
_split = _drivers.split(',')
+ with_gallium_pl111 = _split.contains('pl111')
with_gallium_radeonsi = _split.contains('radeonsi')
with_gallium_nouveau = _split.contains('nouveau')
+ with_gallium_freedreno = _split.contains('freedreno')
+ with_gallium_softpipe = _split.contains('swrast')
+ with_gallium_vc4 = _split.contains('vc4')
+ with_gallium_vc5 = _split.contains('vc5')
+ with_gallium_etnaviv = _split.contains('etnaviv')
+ with_gallium_imx = _split.contains('imx')
with_gallium = true
with_dri = true
endif
with_shared_glapi = false
endif
+if with_dri_swrast and with_gallium_softpipe
+ error('Only one swrast provider can be built')
+endif
+if with_gallium_imx and not with_gallium_etnaviv
+ error('IMX driver requires etnaviv driver')
+endif
+
dep_libdrm_intel = []
if with_dri_i915
dep_libdrm_intel = dependency('libdrm_intel', version : '>= 2.4.75')
# 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'
- if not (with_platform_x11 and with_any_opengl) and with_glx != 'auto'
- error('Cannot build GLX support without X11 platform support and at least one OpenGL API')
+ if not (with_platform_x11 and with_any_opengl)
+ if with_glx == 'auto'
+ with_glx = 'disabled'
+ else
+ error('Cannot build GLX support without X11 platform support and at least one OpenGL API')
+ endif
elif with_glx == 'gallium-xlib'
if not with_gallium
error('Gallium-xlib based GLX requires at least one gallium driver')
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')
dep_libdrm_amdgpu = []
dep_libdrm_radeon = []
dep_libdrm_nouveau = []
+dep_libdrm_etnaviv = []
+dep_libdrm_freedreno = []
if with_amd_vk or with_gallium_radeonsi
- dep_libdrm_amdgpu = dependency('libdrm_amdgpu', version : '>= 2.4.84')
+ dep_libdrm_amdgpu = dependency('libdrm_amdgpu', version : '>= 2.4.85')
endif
-if with_gallium_radeonsi # older radeon too
+if with_gallium_radeonsi or with_dri_r100 or with_dri_r200
dep_libdrm_radeon = dependency('libdrm_radeon', version : '>= 2.4.71')
endif
-if with_gallium_nouveau
+if with_gallium_nouveau or with_dri_nouveau
dep_libdrm_nouveau = dependency('libdrm_nouveau', version : '>= 2.4.66')
endif
+if with_gallium_etnaviv
+ dep_libdrm_etnaviv = dependency('libdrm_etnaviv', version : '>= 2.4.82')
+endif
+if with_gallium_freedreno
+ dep_libdrm_freedreno = dependency('libdrm_freedreno', version : '>= 2.4.74')
+endif
llvm_modules = ['bitwriter', 'engine', 'mcdisassembler', 'mcjit']
if with_amd_vk
'-DMESA_LLVM_VERSION_PATCH=@0@'.format(_llvm_patch),
]
else
- if with_amd_vk or with_gallium_radeonsi
+ if with_gallium_softpipe
+ error('Cannot find LLVM to build LLVMPipe. If you wanted softpipe pass -Dllvm=false to meson')
+ elif with_amd_vk or with_gallium_radeonsi # etc
error('The following drivers requires LLVM: Radv, RadeonSI. One of these is enabled, but LLVM was not found.')
endif
endif
prog_bison = find_program('bison', required : with_any_opengl)
prog_flex = find_program('flex', required : with_any_opengl)
-# TODO: selinux
dep_selinux = []
+if get_option('selinux')
+ dep_selinux = dependency('libselinux')
+ pre_args += '-DMESA_SELINUX'
+endif
# TODO: llvm-prefix and llvm-shared-libs
dep_unwind = dependency('libunwind', required : false)
-if dep_unwind.found()
+if dep_unwind.found() and with_libunwind
pre_args += '-DHAVE_LIBUNWIND'
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
+ 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
-# 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_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_xcb_xfixes = []
dep_xshmfence = []
if with_platform_x11
if with_glx == 'dri' and with_dri_platform == 'drm'
dep_xdamage = dependency('xdamage', version : '>= 1.1')
dep_xfixes = dependency('xfixes')
dep_xcb_glx = dependency('xcb-glx', version : '>= 1.8.1')
- dep_xf86vm = dependency('xf86vm', 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')
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_xxf86vm != [] and dep_xxf86vm.found()
+ gl_priv_reqs += 'xxf86vm'
+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')
+subdir('bin')
subdir('src')