default_options : ['buildtype=debugoptimized', 'c_std=c99', 'cpp_std=c++11']
)
+null_dep = dependency('', required : false)
+
system_has_kms_drm = ['openbsd', 'netbsd', 'freebsd', 'dragonfly', 'linux'].contains(host_machine.system())
# Arguments for the preprocessor, put these in a separate array from the C and
error('tegra driver requires nouveau driver')
endif
-dep_libdrm_intel = []
-if with_dri_i915 or with_gallium_i915
- dep_libdrm_intel = dependency('libdrm_intel', version : '>= 2.4.75')
-endif
-
if host_machine.system() == 'darwin'
with_dri_platform = 'apple'
elif ['windows', 'cygwin'].contains(host_machine.system())
_vdpau = 'true'
endif
with_gallium_vdpau = _vdpau == 'true'
-dep_vdpau = []
+dep_vdpau = null_dep
if with_gallium_vdpau
dep_vdpau = dependency('vdpau', version : '>= 1.1')
dep_vdpau = declare_dependency(
_xvmc = 'true'
endif
with_gallium_xvmc = _xvmc == 'true'
-dep_xvmc = []
+dep_xvmc = null_dep
if with_gallium_xvmc
dep_xvmc = dependency('xvmc', version : '>= 1.0.6')
endif
error('OMX state tracker requires at least one of the following gallium drivers: r600, radeonsi, nouveau.')
endif
endif
-dep_omx = []
+with_gallium_omx = _omx
+dep_omx = null_dep
dep_omx_other = []
if ['auto', 'bellagio'].contains(_omx)
dep_omx = dependency(
_va = 'true'
endif
with_gallium_va = _va == 'true'
-dep_va = []
+dep_va = null_dep
if with_gallium_va
dep_va = dependency('libva', version : '>= 0.38.0')
dep_va_headers = declare_dependency(
with_gallium_opencl = true
with_opencl_icd = _opencl == 'icd'
else
- dep_clc = []
+ dep_clc = null_dep
with_gallium_opencl = false
with_gallium_icd = false
endif
pre_args += '-D_GNU_SOURCE'
endif
-# Check for generic C/C++ arguments
-cpp = meson.get_compiler('cpp')
-cpp_args = []
+# Check for generic C arguments
c_args = []
foreach a : ['-Wall', '-Werror=implicit-function-declaration',
'-Werror=missing-prototypes', '-fno-math-errno',
if cc.has_argument(a)
c_args += a
endif
- if cpp.has_argument(a)
- cpp_args += a
- endif
endforeach
c_vis_args = []
if cc.has_argument('-fvisibility=hidden')
c_vis_args += '-fvisibility=hidden'
endif
+# Check for generic C++ arguments
+cpp = meson.get_compiler('cpp')
+cpp_args = []
+foreach a : ['-Wall', '-fno-math-errno', '-fno-trapping-math',
+ '-Qunused-arguments']
+ if cpp.has_argument(a)
+ cpp_args += a
+ endif
+endforeach
+
# For some reason, the test for -Wno-foo always succeeds with gcc, even if the
# option is not supported. Hence, check for -Wfoo instead.
if cpp.has_argument('-Wnon-virtual-dtor')
endif
# Check for GCC style atomics
-dep_atomic = declare_dependency()
+dep_atomic = null_dep
if cc.compiles('int main() { int n; return __atomic_load_n(&n, __ATOMIC_ACQUIRE); }',
name : 'GCC atomic builtins')
pre_args += '-DMAJOR_IN_MKDEV'
endif
-foreach h : ['xlocale.h', 'sys/sysctl.h', 'linux/futex.h']
- if cc.compiles('#include <@0@>'.format(h), name : '@0@ works'.format(h))
+foreach h : ['xlocale.h', 'sys/sysctl.h', 'linux/futex.h', 'endian.h']
+ if cc.compiles('#include <@0@>'.format(h), name : '@0@'.format(h))
pre_args += '-DHAVE_@0@'.format(h.to_upper().underscorify())
endif
endforeach
# check for dl support
if cc.has_function('dlopen')
- dep_dl = []
+ dep_dl = null_dep
else
dep_dl = cc.find_library('dl')
endif
# Determine whether or not the rt library is needed for time functions
if cc.has_function('clock_gettime')
- dep_clock = []
+ dep_clock = null_dep
else
dep_clock = cc.find_library('rt')
endif
-with_gallium_drisw_kms = false
-dep_libdrm = dependency('libdrm', version : '>= 2.4.75',
- required : with_dri2 or with_dri3)
-if dep_libdrm.found()
- pre_args += '-DHAVE_LIBDRM'
- if with_dri_platform == 'drm' and with_dri
- with_gallium_drisw_kms = true
- endif
-endif
-
# TODO: some of these may be conditional
dep_zlib = dependency('zlib', version : '>= 1.2.3')
pre_args += '-DHAVE_ZLIB'
dep_elf = cc.find_library('elf')
endif
else
- dep_elf = []
+ dep_elf = null_dep
endif
dep_expat = dependency('expat')
# this only exists on linux so either this is linux and it will be found, or
# its not linux and and wont
dep_m = cc.find_library('m', required : false)
-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.91')
-endif
-if (with_gallium_radeonsi or with_dri_r100 or with_dri_r200 or
- with_gallium_r300 or with_gallium_r600)
- dep_libdrm_radeon = dependency('libdrm_radeon', version : '>= 2.4.71')
-endif
-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.91')
+# Check for libdrm. various drivers have different libdrm version requirements,
+# but we always want to use the same version for all libdrm modules. That means
+# even if driver foo requires 2.4.0 and driver bar requires 2.4.3, if foo and
+# bar are both on use 2.4.3 for both of them
+dep_libdrm_amdgpu = null_dep
+dep_libdrm_radeon = null_dep
+dep_libdrm_nouveau = null_dep
+dep_libdrm_etnaviv = null_dep
+dep_libdrm_freedreno = null_dep
+dep_libdrm_intel = null_dep
+
+_drm_amdgpu_ver = '2.4.91'
+_drm_radeon_ver = '2.4.71'
+_drm_nouveau_ver = '2.4.66'
+_drm_etnaviv_ver = '2.4.89'
+_drm_freedreno_ver = '2.4.91'
+_drm_intel_ver = '2.4.75'
+_drm_ver = '2.4.75'
+
+_libdrm_checks = [
+ ['intel', with_dri_i915 or with_gallium_i915],
+ ['amdgpu', with_amd_vk or with_gallium_radeonsi],
+ ['radeon', (with_gallium_radeonsi or with_dri_r100 or with_dri_r200 or
+ with_gallium_r300 or with_gallium_r600)],
+ ['nouveau', (with_gallium_nouveau or with_dri_nouveau)],
+ ['etnaviv', with_gallium_etnaviv],
+ ['freedreno', with_gallium_freedreno],
+]
+
+# Loop over the enables versions and get the highest libdrm requirement for all
+# active drivers.
+foreach d : _libdrm_checks
+ ver = get_variable('_drm_@0@_ver'.format(d[0]))
+ if d[1] and ver.version_compare('>' + _drm_ver)
+ _drm_ver = ver
+ endif
+endforeach
+
+# Then get each libdrm module
+foreach d : _libdrm_checks
+ if d[1]
+ set_variable(
+ 'dep_libdrm_' + d[0],
+ dependency('libdrm_' + d[0], version : '>=' + _drm_ver)
+ )
+ endif
+endforeach
+
+with_gallium_drisw_kms = false
+dep_libdrm = dependency(
+ 'libdrm', version : '>=' + _drm_ver,
+ required : with_dri2 or with_dri3
+)
+if dep_libdrm.found()
+ pre_args += '-DHAVE_LIBDRM'
+ if with_dri_platform == 'drm' and with_dri
+ with_gallium_drisw_kms = true
+ endif
endif
llvm_modules = ['bitwriter', 'engine', 'mcdisassembler', 'mcjit']
dep_llvm = dependency('llvm', version : _llvm_version, modules : llvm_modules)
with_llvm = true
else
- dep_llvm = []
+ dep_llvm = null_dep
with_llvm = false
endif
if with_llvm
error('The following drivers require LLVM: Radv, RadeonSI, SWR. One of these is enabled, but LLVM is disabled.')
endif
-dep_glvnd = []
+dep_glvnd = null_dep
if with_glvnd
dep_glvnd = dependency('libglvnd', version : '>= 0.2.0')
pre_args += '-DUSE_LIBGLVND=1'
pre_args += '-DHAVE_VALGRIND'
endif
else
- dep_valgrind = []
+ dep_valgrind = null_dep
endif
# pthread stubs. Lets not and say we didn't
prog_bison = find_program('bison', required : with_any_opengl)
prog_flex = find_program('flex', required : with_any_opengl)
-dep_selinux = []
+dep_selinux = null_dep
if get_option('selinux')
dep_selinux = dependency('libselinux')
pre_args += '-DMESA_SELINUX'
pre_args += '-DHAVE_LIBUNWIND'
endif
else
- dep_unwind = []
+ dep_unwind = null_dep
endif
# TODO: gallium-hud
pre_args += ['-DHAVE_WAYLAND_PLATFORM', '-DWL_HIDE_DEPRECATED']
else
prog_wl_scanner = []
- dep_wl_protocols = []
- dep_wayland_client = []
- dep_wayland_server = []
+ dep_wl_protocols = null_dep
+ dep_wayland_client = null_dep
+ dep_wayland_server = null_dep
wayland_dmabuf_xml = ''
endif
-dep_x11 = []
-dep_xext = []
-dep_xdamage = []
-dep_xfixes = []
-dep_x11_xcb = []
-dep_xcb = []
-dep_xcb_glx = []
-dep_xcb_dri2 = []
-dep_xcb_dri3 = []
-dep_dri2proto = []
-dep_glproto = []
-dep_xxf86vm = []
-dep_xcb_dri3 = []
-dep_xcb_present = []
-dep_xcb_sync = []
-dep_xcb_xfixes = []
-dep_xshmfence = []
+dep_x11 = null_dep
+dep_xext = null_dep
+dep_xdamage = null_dep
+dep_xfixes = null_dep
+dep_x11_xcb = null_dep
+dep_xcb = null_dep
+dep_xcb_glx = null_dep
+dep_xcb_dri2 = null_dep
+dep_xcb_dri3 = null_dep
+dep_dri2proto = null_dep
+dep_glproto = null_dep
+dep_xxf86vm = null_dep
+dep_xcb_dri3 = null_dep
+dep_xcb_present = null_dep
+dep_xcb_sync = null_dep
+dep_xcb_xfixes = null_dep
+dep_xshmfence = null_dep
if with_platform_x11
if with_glx == 'xlib' or with_glx == 'gallium-xlib'
dep_x11 = dependency('x11')
pre_args += '-DHAVE_LIBSENSORS=1'
endif
else
- dep_lmsensors = []
+ dep_lmsensors = null_dep
endif
# TODO: gallium tests
if dep_libdrm.found()
gl_priv_reqs += 'libdrm >= 2.4.75'
endif
-if dep_xxf86vm != [] and dep_xxf86vm.found()
+if dep_xxf86vm.found()
gl_priv_reqs += 'xxf86vm'
endif
if with_dri_platform == 'drm'
if dep_m.found()
gl_priv_libs += '-lm'
endif
-if dep_dl != [] and dep_dl.found()
+if dep_dl.found()
gl_priv_libs += '-ldl'
endif