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