meson.build revision 49ef06a4
100a23bdaSmrg# Copyright © 2017-2018 Intel Corporation
200a23bdaSmrg
300a23bdaSmrg# Permission is hereby granted, free of charge, to any person obtaining a copy
400a23bdaSmrg# of this software and associated documentation files (the "Software"), to deal
500a23bdaSmrg# in the Software without restriction, including without limitation the rights
600a23bdaSmrg# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
700a23bdaSmrg# copies of the Software, and to permit persons to whom the Software is
800a23bdaSmrg# furnished to do so, subject to the following conditions:
900a23bdaSmrg
1000a23bdaSmrg# The above copyright notice and this permission notice shall be included in
1100a23bdaSmrg# all copies or substantial portions of the Software.
1200a23bdaSmrg
1300a23bdaSmrg# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1400a23bdaSmrg# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1500a23bdaSmrg# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
1600a23bdaSmrg# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1700a23bdaSmrg# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
1800a23bdaSmrg# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
1900a23bdaSmrg# SOFTWARE.
2000a23bdaSmrg
2100a23bdaSmrgproject(
2200a23bdaSmrg  'libdrm',
2300a23bdaSmrg  ['c'],
2449ef06a4Smrg  version : '2.4.109',
2500a23bdaSmrg  license : 'MIT',
264babd585Smrg  meson_version : '>= 0.46',
2700a23bdaSmrg  default_options : ['buildtype=debugoptimized', 'c_std=gnu99'],
2800a23bdaSmrg)
2900a23bdaSmrg
3000a23bdaSmrgpkg = import('pkgconfig')
3100a23bdaSmrg
327cdc0497Smrgconfig = configuration_data()
337cdc0497Smrg
347cdc0497Smrgconfig.set10('UDEV', get_option('udev'))
3500a23bdaSmrgwith_freedreno_kgsl = get_option('freedreno-kgsl')
3600a23bdaSmrgwith_install_tests = get_option('install-test-programs')
3700a23bdaSmrg
3800a23bdaSmrgif ['freebsd', 'dragonfly', 'netbsd'].contains(host_machine.system())
3900a23bdaSmrg  dep_pthread_stubs = dependency('pthread-stubs', version : '>= 0.4')
4000a23bdaSmrgelse
4100a23bdaSmrg  dep_pthread_stubs = []
4200a23bdaSmrgendif
4300a23bdaSmrgdep_threads = dependency('threads')
4400a23bdaSmrg
4500a23bdaSmrgcc = meson.get_compiler('c')
4600a23bdaSmrg
4749ef06a4Smrgandroid = cc.compiles('''int func() { return __ANDROID__; }''')
4849ef06a4Smrg
499bd392adSmrgsymbols_check = find_program('symbols-check.py')
509bd392adSmrgprog_nm = find_program('nm')
519bd392adSmrg
5200a23bdaSmrg# Check for atomics
5300a23bdaSmrgintel_atomics = false
5400a23bdaSmrglib_atomics = false
5500a23bdaSmrg
564babd585Smrgpython3 = import('python').find_installation()
574babd585Smrgformat_mod_static_table = custom_target('format_mod_static_table',
584babd585Smrg  output : 'generated_static_table_fourcc.h', input: 'include/drm/drm_fourcc.h',
594babd585Smrg  command : [python3, files('gen_table_fourcc.py'), '@INPUT@', '@OUTPUT@'])
604babd585Smrg
617cdc0497Smrgdep_atomic_ops = dependency('atomic_ops', required : false)
629bd392adSmrgif cc.links('''
6300a23bdaSmrg    int atomic_add(int *i) { return __sync_add_and_fetch (i, 1); }
6400a23bdaSmrg    int atomic_cmpxchg(int *i, int j, int k) { return __sync_val_compare_and_swap (i, j, k); }
659bd392adSmrg    int main() { }
6600a23bdaSmrg    ''',
6700a23bdaSmrg    name : 'Intel Atomics')
6800a23bdaSmrg  intel_atomics = true
6900a23bdaSmrg  with_atomics = true
707cdc0497Smrg  dep_atomic_ops = []
717cdc0497Smrgelif dep_atomic_ops.found()
7200a23bdaSmrg  lib_atomics = true
7300a23bdaSmrg  with_atomics = true
7400a23bdaSmrgelif cc.has_function('atomic_cas_uint')
7500a23bdaSmrg  with_atomics = true
7600a23bdaSmrgelse
7700a23bdaSmrg  with_atomics = false
7800a23bdaSmrgendif
7900a23bdaSmrg
8000a23bdaSmrgconfig.set10('HAVE_LIBDRM_ATOMIC_PRIMITIVES', intel_atomics)
8100a23bdaSmrgconfig.set10('HAVE_LIB_ATOMIC_OPS', lib_atomics)
8200a23bdaSmrg
8300a23bdaSmrgwith_intel = false
8400a23bdaSmrg_intel = get_option('intel')
8500a23bdaSmrgif _intel != 'false'
8600a23bdaSmrg  if _intel == 'true' and not with_atomics
8700a23bdaSmrg    error('libdrm_intel requires atomics.')
8800a23bdaSmrg  else
8900a23bdaSmrg    with_intel = _intel == 'true' or host_machine.cpu_family().startswith('x86')
9000a23bdaSmrg  endif
9100a23bdaSmrgendif
9200a23bdaSmrg
9300a23bdaSmrgwith_radeon = false
9400a23bdaSmrg_radeon = get_option('radeon')
9500a23bdaSmrgif _radeon != 'false'
9600a23bdaSmrg  if _radeon == 'true' and not with_atomics
9700a23bdaSmrg    error('libdrm_radeon requires atomics.')
9800a23bdaSmrg  endif
9900a23bdaSmrg  with_radeon = true
10000a23bdaSmrgendif
10100a23bdaSmrg
10200a23bdaSmrgwith_amdgpu = false
10300a23bdaSmrg_amdgpu = get_option('amdgpu')
10400a23bdaSmrgif _amdgpu != 'false'
10500a23bdaSmrg  if _amdgpu == 'true' and not with_atomics
10600a23bdaSmrg    error('libdrm_amdgpu requires atomics.')
10700a23bdaSmrg  endif
10800a23bdaSmrg  with_amdgpu = true
10900a23bdaSmrgendif
11000a23bdaSmrg
11100a23bdaSmrgwith_nouveau = false
11200a23bdaSmrg_nouveau = get_option('nouveau')
11300a23bdaSmrgif _nouveau != 'false'
11400a23bdaSmrg  if _nouveau == 'true' and not with_atomics
11500a23bdaSmrg    error('libdrm_nouveau requires atomics.')
11600a23bdaSmrg  endif
11700a23bdaSmrg  with_nouveau = true
11800a23bdaSmrgendif
11900a23bdaSmrg
12000a23bdaSmrgwith_vmwgfx = false
12100a23bdaSmrg_vmwgfx = get_option('vmwgfx')
12200a23bdaSmrgif _vmwgfx != 'false'
12300a23bdaSmrg  with_vmwgfx = true
12400a23bdaSmrgendif
12500a23bdaSmrg
12600a23bdaSmrgwith_omap = false
12700a23bdaSmrg_omap = get_option('omap')
12800a23bdaSmrgif _omap == 'true'
12900a23bdaSmrg  if not with_atomics
13000a23bdaSmrg    error('libdrm_omap requires atomics.')
13100a23bdaSmrg  endif
13200a23bdaSmrg  with_omap = true
13300a23bdaSmrgendif
13400a23bdaSmrg
13500a23bdaSmrgwith_freedreno = false
13600a23bdaSmrg_freedreno = get_option('freedreno')
13700a23bdaSmrgif _freedreno != 'false'
13800a23bdaSmrg  if _freedreno == 'true' and not with_atomics
13900a23bdaSmrg    error('libdrm_freedreno requires atomics.')
14000a23bdaSmrg  else
14100a23bdaSmrg    with_freedreno = _freedreno == 'true' or ['arm', 'aarch64'].contains(host_machine.cpu_family())
14200a23bdaSmrg  endif
14300a23bdaSmrgendif
14400a23bdaSmrg
14500a23bdaSmrgwith_tegra = false
14600a23bdaSmrg_tegra = get_option('tegra')
14700a23bdaSmrgif _tegra == 'true'
14800a23bdaSmrg  if not with_atomics
14900a23bdaSmrg    error('libdrm_tegra requires atomics.')
15000a23bdaSmrg  endif
15100a23bdaSmrg  with_tegra = true
15200a23bdaSmrgendif
15300a23bdaSmrg
15400a23bdaSmrgwith_etnaviv = false
15500a23bdaSmrg_etnaviv = get_option('etnaviv')
15600a23bdaSmrgif _etnaviv == 'true'
15700a23bdaSmrg  if not with_atomics
15800a23bdaSmrg    error('libdrm_etnaviv requires atomics.')
15900a23bdaSmrg  endif
16000a23bdaSmrg  with_etnaviv = true
16100a23bdaSmrgendif
16200a23bdaSmrg
16300a23bdaSmrgwith_exynos = get_option('exynos') == 'true'
16400a23bdaSmrg
16500a23bdaSmrgwith_vc4 = false
16600a23bdaSmrg_vc4 = get_option('vc4')
16700a23bdaSmrgif _vc4 != 'false'
16800a23bdaSmrg  with_vc4 = _vc4 == 'true' or ['arm', 'aarch64'].contains(host_machine.cpu_family())
16900a23bdaSmrgendif
17000a23bdaSmrg
1715324fb0dSmrg# XXX: Apparently only freebsd and dragonfly bsd actually need this (and
17200a23bdaSmrg# gnu/kfreebsd), not openbsd and netbsd
17300a23bdaSmrgwith_libkms = false
17400a23bdaSmrg_libkms = get_option('libkms')
17500a23bdaSmrgif _libkms != 'false'
17649ef06a4Smrg  with_libkms = _libkms == 'true' or (['linux', 'freebsd', 'dragonfly'].contains(host_machine.system()) and not android)
17700a23bdaSmrgendif
17800a23bdaSmrg
17900a23bdaSmrg# Among others FreeBSD does not have a separate dl library.
18000a23bdaSmrgif not cc.has_function('dlsym')
18100a23bdaSmrg  dep_dl = cc.find_library('dl', required : with_nouveau)
18200a23bdaSmrgelse
18300a23bdaSmrg  dep_dl = []
18400a23bdaSmrgendif
18500a23bdaSmrg# clock_gettime might require -rt, or it might not. find out
18600a23bdaSmrgif not cc.has_function('clock_gettime', prefix : '#define _GNU_SOURCE\n#include <time.h>')
18700a23bdaSmrg  # XXX: untested
18800a23bdaSmrg  dep_rt = cc.find_library('rt')
18900a23bdaSmrgelse
19000a23bdaSmrg  dep_rt = []
19100a23bdaSmrgendif
19200a23bdaSmrgdep_m = cc.find_library('m', required : false)
1939bd392adSmrg
1949bd392adSmrg# The header is not required on Linux, and is in fact deprecated in glibc 2.30+
1959bd392adSmrgif ['linux'].contains(host_machine.system())
1969bd392adSmrg  config.set10('HAVE_SYS_SYSCTL_H', false)
1979bd392adSmrgelse
1989bd392adSmrg  # From Niclas Zeising:
1999bd392adSmrg  # FreeBSD requires sys/types.h for sys/sysctl.h, so add it as part of
2009bd392adSmrg  # the includes when checking for headers.
2019bd392adSmrg  config.set10('HAVE_SYS_SYSCTL_H',
2029bd392adSmrg    cc.compiles('#include <sys/types.h>\n#include <sys/sysctl.h>', name : 'sys/sysctl.h works'))
2039bd392adSmrgendif
2049bd392adSmrg
2059bd392adSmrgforeach header : ['sys/select.h', 'alloca.h']
2069bd392adSmrg  config.set10('HAVE_' + header.underscorify().to_upper(),
2079bd392adSmrg    cc.compiles('#include <@0@>'.format(header), name : '@0@ works'.format(header)))
2087cdc0497Smrgendforeach
2099bd392adSmrg
21088f8a8d2Smrgif (cc.has_header_symbol('sys/sysmacros.h', 'major') and
21188f8a8d2Smrg  cc.has_header_symbol('sys/sysmacros.h', 'minor') and
21288f8a8d2Smrg  cc.has_header_symbol('sys/sysmacros.h', 'makedev'))
21300a23bdaSmrg  config.set10('MAJOR_IN_SYSMACROS', true)
21488f8a8d2Smrgendif
21588f8a8d2Smrgif (cc.has_header_symbol('sys/mkdev.h', 'major') and
21688f8a8d2Smrg  cc.has_header_symbol('sys/mkdev.h', 'minor') and
21788f8a8d2Smrg  cc.has_header_symbol('sys/mkdev.h', 'makedev'))
21800a23bdaSmrg  config.set10('MAJOR_IN_MKDEV', true)
21900a23bdaSmrgendif
2207cdc0497Smrgconfig.set10('HAVE_OPEN_MEMSTREAM', cc.has_function('open_memstream'))
22100a23bdaSmrg
22200a23bdaSmrgwarn_c_args = []
22300a23bdaSmrgforeach a : ['-Wall', '-Wextra', '-Wsign-compare', '-Werror=undef',
2246532f28eSmrg             '-Werror=implicit-function-declaration', '-Wpointer-arith',
22500a23bdaSmrg             '-Wwrite-strings', '-Wstrict-prototypes', '-Wmissing-prototypes',
22600a23bdaSmrg             '-Wmissing-declarations', '-Wnested-externs', '-Wpacked',
22700a23bdaSmrg             '-Wswitch-enum', '-Wmissing-format-attribute',
22800a23bdaSmrg             '-Wstrict-aliasing=2', '-Winit-self', '-Winline', '-Wshadow',
22900a23bdaSmrg             '-Wdeclaration-after-statement', '-Wold-style-definition']
23000a23bdaSmrg  if cc.has_argument(a)
23100a23bdaSmrg    warn_c_args += a
23200a23bdaSmrg  endif
23300a23bdaSmrgendforeach
23400a23bdaSmrg# GCC will never error for -Wno-*, so check for -W* then add -Wno-* to the list
23500a23bdaSmrg# of options
23600a23bdaSmrgforeach a : ['unused-parameter', 'attributes', 'long-long',
23700a23bdaSmrg             'missing-field-initializers']
23800a23bdaSmrg  if cc.has_argument('-W@0@'.format(a))
23900a23bdaSmrg    warn_c_args += '-Wno-@0@'.format(a)
24000a23bdaSmrg  endif
24100a23bdaSmrgendforeach
24200a23bdaSmrg
2437cdc0497Smrg# all c args:
2447cdc0497Smrglibdrm_c_args = warn_c_args + ['-fvisibility=hidden']
2457cdc0497Smrg
24600a23bdaSmrg
24700a23bdaSmrgdep_pciaccess = dependency('pciaccess', version : '>= 0.10', required : with_intel)
24800a23bdaSmrgdep_cunit = dependency('cunit', version : '>= 2.1', required : false)
24900a23bdaSmrg_cairo_tests = get_option('cairo-tests')
25000a23bdaSmrgif _cairo_tests != 'false'
25100a23bdaSmrg  dep_cairo = dependency('cairo', required : _cairo_tests == 'true')
25200a23bdaSmrg  with_cairo_tests = dep_cairo.found()
25300a23bdaSmrgelse
25400a23bdaSmrg  dep_cairo = []
25500a23bdaSmrg  with_cairo_tests = false
25600a23bdaSmrgendif
25700a23bdaSmrg_valgrind = get_option('valgrind')
25800a23bdaSmrgif _valgrind != 'false'
2599bd392adSmrg  if with_freedreno
2609bd392adSmrg    dep_valgrind = dependency('valgrind', required : _valgrind == 'true', version : '>=3.10.0')
2619bd392adSmrg  else
2629bd392adSmrg    dep_valgrind = dependency('valgrind', required : _valgrind == 'true')
2639bd392adSmrg  endif
26400a23bdaSmrg  with_valgrind = dep_valgrind.found()
26500a23bdaSmrgelse
26600a23bdaSmrg  dep_valgrind = []
26700a23bdaSmrg  with_valgrind = false
26800a23bdaSmrgendif
26900a23bdaSmrg
27000a23bdaSmrgwith_man_pages = get_option('man-pages')
27141687f09Smrgprog_rst2man = find_program('rst2man', 'rst2man.py', required: with_man_pages == 'true')
27241687f09Smrgwith_man_pages = with_man_pages != 'false' and prog_rst2man.found()
27300a23bdaSmrg
2747cdc0497Smrgconfig.set10('HAVE_VISIBILITY',
2757cdc0497Smrg  cc.compiles('''int foo_hidden(void) __attribute__((visibility(("hidden"))));''',
2767cdc0497Smrg              name : 'compiler supports __attribute__(("hidden"))'))
27700a23bdaSmrg
27800a23bdaSmrgforeach t : [
27900a23bdaSmrg             [with_exynos, 'EXYNOS'],
28000a23bdaSmrg             [with_freedreno_kgsl, 'FREEDRENO_KGSL'],
28100a23bdaSmrg             [with_intel, 'INTEL'],
28200a23bdaSmrg             [with_nouveau, 'NOUVEAU'],
28300a23bdaSmrg             [with_radeon, 'RADEON'],
28400a23bdaSmrg             [with_vc4, 'VC4'],
28500a23bdaSmrg             [with_vmwgfx, 'VMWGFX'],
28600a23bdaSmrg             [with_cairo_tests, 'CAIRO'],
28700a23bdaSmrg             [with_valgrind, 'VALGRIND'],
28800a23bdaSmrg            ]
28900a23bdaSmrg  config.set10('HAVE_@0@'.format(t[1]), t[0])
29000a23bdaSmrgendforeach
29100a23bdaSmrgif with_freedreno_kgsl and not with_freedreno
29200a23bdaSmrg  error('cannot enable freedreno-kgsl without freedreno support')
29300a23bdaSmrgendif
29400a23bdaSmrgconfig.set10('_GNU_SOURCE', true)
29500a23bdaSmrgconfig_file = configure_file(
29600a23bdaSmrg  configuration : config,
29700a23bdaSmrg  output : 'config.h',
29800a23bdaSmrg)
2999bd392adSmrgadd_project_arguments('-include', '@0@'.format(config_file), language : 'c')
30000a23bdaSmrg
30100a23bdaSmrginc_root = include_directories('.')
30200a23bdaSmrginc_drm = include_directories('include/drm')
30300a23bdaSmrg
30449ef06a4Smrglibdrm_files = [files(
30549ef06a4Smrg   'xf86drm.c', 'xf86drmHash.c', 'xf86drmRandom.c', 'xf86drmSL.c',
30649ef06a4Smrg   'xf86drmMode.c'
30749ef06a4Smrg  ),
30849ef06a4Smrg  config_file, format_mod_static_table
30949ef06a4Smrg]
31049ef06a4Smrg
31149ef06a4Smrgif android
31249ef06a4Smrg  libdrm = library('drm', libdrm_files,
31349ef06a4Smrg    c_args : libdrm_c_args,
31449ef06a4Smrg    dependencies : [dep_valgrind, dep_rt, dep_m],
31549ef06a4Smrg    include_directories : inc_drm,
31649ef06a4Smrg    install : true,
31749ef06a4Smrg  )
31849ef06a4Smrgelse
31949ef06a4Smrg  libdrm = library('drm', libdrm_files,
32049ef06a4Smrg    c_args : libdrm_c_args,
32149ef06a4Smrg    dependencies : [dep_valgrind, dep_rt, dep_m],
32249ef06a4Smrg    include_directories : inc_drm,
32349ef06a4Smrg    install : true,
32449ef06a4Smrg    version: '2.4.0'
32549ef06a4Smrg  )
32649ef06a4Smrgendif
32700a23bdaSmrg
3289bd392adSmrgtest(
3299bd392adSmrg  'core-symbols-check',
3309bd392adSmrg  symbols_check,
3319bd392adSmrg  args : [
3329bd392adSmrg    '--lib', libdrm,
3339bd392adSmrg    '--symbols-file', files('core-symbols.txt'),
3349bd392adSmrg    '--nm', prog_nm.path(),
3359bd392adSmrg  ],
3369bd392adSmrg)
3379bd392adSmrg
33800a23bdaSmrgext_libdrm = declare_dependency(
33900a23bdaSmrg  link_with : libdrm,
34000a23bdaSmrg  include_directories : [inc_root, inc_drm],
34100a23bdaSmrg)
34200a23bdaSmrg
34300a23bdaSmrginstall_headers('libsync.h', 'xf86drm.h', 'xf86drmMode.h')
34400a23bdaSmrginstall_headers(
34500a23bdaSmrg  'include/drm/drm.h', 'include/drm/drm_fourcc.h', 'include/drm/drm_mode.h',
34600a23bdaSmrg  'include/drm/drm_sarea.h', 'include/drm/i915_drm.h',
34700a23bdaSmrg  'include/drm/mach64_drm.h', 'include/drm/mga_drm.h',
3487cdc0497Smrg  'include/drm/msm_drm.h', 'include/drm/nouveau_drm.h',
3497cdc0497Smrg  'include/drm/qxl_drm.h', 'include/drm/r128_drm.h',
3507cdc0497Smrg  'include/drm/radeon_drm.h', 'include/drm/amdgpu_drm.h',
3517cdc0497Smrg  'include/drm/savage_drm.h', 'include/drm/sis_drm.h',
3527cdc0497Smrg  'include/drm/tegra_drm.h', 'include/drm/vc4_drm.h',
35300a23bdaSmrg  'include/drm/via_drm.h', 'include/drm/virtgpu_drm.h',
35400a23bdaSmrg  subdir : 'libdrm',
35500a23bdaSmrg)
35600a23bdaSmrgif with_vmwgfx
35700a23bdaSmrg  install_headers('include/drm/vmwgfx_drm.h', subdir : 'libdrm')
35800a23bdaSmrgendif
35900a23bdaSmrg
36000a23bdaSmrgpkg.generate(
36100a23bdaSmrg  name : 'libdrm',
36200a23bdaSmrg  libraries : libdrm,
36300a23bdaSmrg  subdirs : ['.', 'libdrm'],
36400a23bdaSmrg  version : meson.project_version(),
36500a23bdaSmrg  description : 'Userspace interface to kernel DRM services',
36600a23bdaSmrg)
36700a23bdaSmrg
36800a23bdaSmrgif with_libkms
36900a23bdaSmrg  subdir('libkms')
37000a23bdaSmrgendif
37100a23bdaSmrgif with_intel
37200a23bdaSmrg  subdir('intel')
37300a23bdaSmrgendif
37400a23bdaSmrgif with_nouveau
37500a23bdaSmrg  subdir('nouveau')
37600a23bdaSmrgendif
37700a23bdaSmrgif with_radeon
37800a23bdaSmrg  subdir('radeon')
37900a23bdaSmrgendif
38000a23bdaSmrgif with_amdgpu
38100a23bdaSmrg  subdir('amdgpu')
38200a23bdaSmrgendif
38300a23bdaSmrgif with_omap
38400a23bdaSmrg  subdir('omap')
38500a23bdaSmrgendif
38600a23bdaSmrgif with_exynos
38700a23bdaSmrg  subdir('exynos')
38800a23bdaSmrgendif
38900a23bdaSmrgif with_freedreno
39000a23bdaSmrg  subdir('freedreno')
39100a23bdaSmrgendif
39200a23bdaSmrgif with_tegra
39300a23bdaSmrg  subdir('tegra')
39400a23bdaSmrgendif
39500a23bdaSmrgif with_vc4
39600a23bdaSmrg  subdir('vc4')
39700a23bdaSmrgendif
39800a23bdaSmrgif with_etnaviv
39900a23bdaSmrg  subdir('etnaviv')
40000a23bdaSmrgendif
40100a23bdaSmrgif with_man_pages
40200a23bdaSmrg  subdir('man')
40300a23bdaSmrgendif
40400a23bdaSmrgsubdir('data')
40500a23bdaSmrgsubdir('tests')
40600a23bdaSmrg
40700a23bdaSmrgmessage('')
40800a23bdaSmrgmessage('@0@ will be compiled with:'.format(meson.project_name()))
40900a23bdaSmrgmessage('')
41000a23bdaSmrgmessage('  libkms         @0@'.format(with_libkms))
41100a23bdaSmrgmessage('  Intel API      @0@'.format(with_intel))
41200a23bdaSmrgmessage('  vmwgfx API     @0@'.format(with_vmwgfx))
41300a23bdaSmrgmessage('  Radeon API     @0@'.format(with_radeon))
41400a23bdaSmrgmessage('  AMDGPU API     @0@'.format(with_amdgpu))
41500a23bdaSmrgmessage('  Nouveau API    @0@'.format(with_nouveau))
41600a23bdaSmrgmessage('  OMAP API       @0@'.format(with_omap))
41700a23bdaSmrgmessage('  EXYNOS API     @0@'.format(with_exynos))
41800a23bdaSmrgmessage('  Freedreno API  @0@ (kgsl: @1@)'.format(with_freedreno, with_freedreno_kgsl))
41900a23bdaSmrgmessage('  Tegra API      @0@'.format(with_tegra))
42000a23bdaSmrgmessage('  VC4 API        @0@'.format(with_vc4))
42100a23bdaSmrgmessage('  Etnaviv API    @0@'.format(with_etnaviv))
42200a23bdaSmrgmessage('')
423