# TODO: PPC, Sparc
if ['x86', 'x86_64'].contains(host_machine.cpu_family())
_drivers = 'i915,i965,r100,r200,nouveau'
+ elif ['arm', 'aarch64'].contains(host_machine.cpu_family())
+ _drivers = ''
else
error('Unknown architecture. Please pass -Ddri-drivers to set driver options. Patches gladly accepted to fix this.')
endif
if ['x86', 'x86_64'].contains(host_machine.cpu_family())
_drivers = 'r300,r600,radeonsi,nouveau,virgl,svga,swrast'
elif ['arm', 'aarch64'].contains(host_machine.cpu_family())
- _drivers = 'pl111,vc4,vc5,freedreno,etnaviv,imx,nouveau,tegra,virgl,svga,swrast'
+ _drivers = 'pl111,vc4,vc5,freedreno,etnaviv,imx,nouveau,tegra,virgl,swrast'
else
error('Unknown architecture. Please pass -Dgallium-drivers to set driver options. Patches gladly accepted to fix this.')
endif
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())
error('OMX state tracker requires at least one of the following gallium drivers: r600, radeonsi, nouveau.')
endif
endif
-with_gallium_omx = _omx
dep_omx = []
dep_omx_other = []
-if with_gallium_omx == 'bellagio' or with_gallium_omx == 'auto'
+if ['auto', 'bellagio'].contains(_omx)
dep_omx = dependency(
- 'libomxil-bellagio', required : with_gallium_omx == 'bellagio'
+ 'libomxil-bellagio', required : _omx == 'bellagio'
)
if dep_omx.found()
- pre_args += '-DENABLE_ST_OMX_BELLAGIO'
with_gallium_omx = 'bellagio'
endif
endif
-if with_gallium_omx == 'tizonia' or with_gallium_omx == 'auto'
- if not (with_dri and with_egl)
- if with_gallium_omx == 'tizonia'
- error('OMX-Tizonia state tracker requires dri and egl')
- else
- with_gallium_omx == 'disabled'
- endif
- else
+if ['auto', 'tizonia'].contains(_omx)
+ if with_dri and with_egl
dep_omx = dependency(
'libtizonia', version : '>= 0.10.0',
- required : with_gallium_omx == 'tizonia',
+ required : _omx == 'tizonia',
)
dep_omx_other = [
- dependency('libtizplatform', required : with_gallium_omx == 'tizonia'),
- dependency('tizilheaders', required : with_gallium_omx == 'tizonia'),
+ dependency('libtizplatform', required : _omx == 'tizonia'),
+ dependency('tizilheaders', required : _omx == 'tizonia'),
]
if dep_omx.found() and dep_omx_other[0].found() and dep_omx_other[1].found()
- pre_args += '-DENABLE_ST_OMX_TIZONIA'
with_gallium_omx = 'tizonia'
- else
- with_gallium_omx = 'disabled'
endif
+ elif _omx == 'tizonia'
+ error('OMX-Tizonia state tracker requires dri and egl')
endif
endif
+if _omx == 'auto'
+ with_gallium_omx = 'disabled'
+else
+ with_gallium_omx = _omx
+endif
+
+pre_args += [
+ '-DENABLE_ST_OMX_BELLAGIO=' + (with_gallium_omx == 'bellagio' ? '1' : '0'),
+ '-DENABLE_ST_OMX_TIZONIA=' + (with_gallium_omx == 'tizonia' ? '1' : '0'),
+]
+
omx_drivers_path = get_option('omx-libs-path')
+
if with_gallium_omx != 'disabled'
# Figure out where to put the omx driver.
# FIXME: this could all be vastly simplified by adding a 'defined_variable'
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
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'
# its not linux and and wont
dep_m = cc.find_library('m', required : false)
+# 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 = []
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')
+dep_libdrm_intel = []
+
+_drm_amdgpu_ver = '2.4.91'
+_drm_radeon_ver = '2.4.71'
+_drm_nouveau_ver = '2.4.66'
+_drm_etnaviv_ver = '2.4.82'
+_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']
if with_dri3
pre_args += '-DHAVE_DRI3'
- dep_xcb_dri3 = dependency('xcb-dri3', version : '>= 1.13')
- dep_xcb_present = dependency('xcb-present', version: '>= 1.13')
+ dep_xcb_dri3 = dependency('xcb-dri3')
+ dep_xcb_present = dependency('xcb-present')
+ # until xcb-dri3 has been around long enough to make a hard-dependency:
+ if (dep_xcb_dri3.version().version_compare('>= 1.13') and
+ dep_xcb_present.version().version_compare('>= 1.13'))
+ pre_args += '-DHAVE_DRI3_MODIFIERS'
+ endif
dep_xcb_sync = dependency('xcb-sync')
dep_xshmfence = dependency('xshmfence', version : '>= 1.1')
endif