1 # Copyright 2005 Adam Jackson.
3 # Permission is hereby granted, free of charge, to any person obtaining a
4 # copy of this software and associated documentation files (the "Software"),
5 # to deal in the Software without restriction, including without limitation
6 # on the rights to use, copy, modify, merge, publish, distribute, sub
7 # license, and/or sell copies of the Software, and to permit persons to whom
8 # the Software is furnished to do so, subject to the following conditions:
10 # The above copyright notice and this permission notice (including the next
11 # paragraph) shall be included in all copies or substantial portions of the
14 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 # FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
17 # ADAM JACKSON BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
18 # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19 # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24 [https://bugs.freedesktop.org/enter_bug.cgi?product=DRI],
27 AC_CONFIG_HEADERS([config.h])
28 AC_CONFIG_SRCDIR([Makefile.am])
29 AC_CONFIG_MACRO_DIR([m4])
30 AC_CONFIG_AUX_DIR([build-aux])
33 # Require xorg-macros minimum of 1.12 for XORG_WITH_XSLTPROC
34 m4_ifndef([XORG_MACROS_VERSION],
35 [m4_fatal([must install xorg-macros 1.12 or later before running autoconf/autogen])])
36 XORG_MACROS_VERSION(1.12)
40 AM_INIT_AUTOMAKE([1.10 foreign dist-bzip2])
42 # Enable quiet compiles on automake 1.11.
43 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
50 if test "x$ac_cv_prog_cc_c99" = xno; then
51 AC_MSG_ERROR([Building libdrm requires C99 enabled compiler])
54 AC_USE_SYSTEM_EXTENSIONS
59 export CFLAGS="$CFLAGS -Werror"
63 AC_CHECK_HEADERS([sys/sysctl.h sys/select.h])
67 LT_INIT([disable-static])
69 dnl pthread-stubs is mandatory on some BSD platforms, due to the nature of the
70 dnl project. Even then there's a notable issue as described in the project README
72 linux* | cygwin* | darwin* | solaris* | *-gnu* | gnu* | openbsd*)
73 pthread_stubs_possible="no"
76 pthread_stubs_possible="yes"
80 if test "x$pthread_stubs_possible" = xyes; then
81 PKG_CHECK_MODULES(PTHREADSTUBS, pthread-stubs >= 0.4)
82 AC_SUBST(PTHREADSTUBS_CFLAGS)
83 AC_SUBST(PTHREADSTUBS_LIBS)
86 pkgconfigdir=${libdir}/pkgconfig
87 AC_SUBST(pkgconfigdir)
88 libdrmdatadir=${datadir}/libdrm
89 AC_SUBST(libdrmdatadir)
92 [AS_HELP_STRING([--enable-udev],
93 [Enable support for using udev instead of mknod (default: disabled)])],
94 [UDEV=$enableval], [UDEV=no])
97 AS_HELP_STRING([--disable-libkms],
98 [Disable KMS mm abstraction library (default: auto, enabled on supported platforms)]),
99 [LIBKMS=$enableval], [LIBKMS=auto])
102 AS_HELP_STRING([--disable-intel],
103 [Enable support for intel's KMS API (default: auto, enabled on x86)]),
104 [INTEL=$enableval], [INTEL=auto])
106 AC_ARG_ENABLE(radeon,
107 AS_HELP_STRING([--disable-radeon],
108 [Enable support for radeon's KMS API (default: auto)]),
109 [RADEON=$enableval], [RADEON=auto])
111 AC_ARG_ENABLE(amdgpu,
112 AS_HELP_STRING([--disable-amdgpu],
113 [Enable support for amdgpu's KMS API (default: auto)]),
114 [AMDGPU=$enableval], [AMDGPU=auto])
116 AC_ARG_ENABLE(nouveau,
117 AS_HELP_STRING([--disable-nouveau],
118 [Enable support for nouveau's KMS API (default: auto)]),
119 [NOUVEAU=$enableval], [NOUVEAU=auto])
121 AC_ARG_ENABLE(vmwgfx,
122 AS_HELP_STRING([--disable-vmwgfx],
123 [Enable support for vmwgfx's KMS API (default: yes)]),
124 [VMWGFX=$enableval], [VMWGFX=yes])
126 AC_ARG_ENABLE(omap-experimental-api,
127 AS_HELP_STRING([--enable-omap-experimental-api],
128 [Enable support for OMAP's experimental API (default: disabled)]),
129 [OMAP=$enableval], [OMAP=no])
131 AC_ARG_ENABLE(exynos-experimental-api,
132 AS_HELP_STRING([--enable-exynos-experimental-api],
133 [Enable support for EXYNOS's experimental API (default: disabled)]),
134 [EXYNOS=$enableval], [EXYNOS=no])
136 AC_ARG_ENABLE(freedreno,
137 AS_HELP_STRING([--disable-freedreno],
138 [Enable support for freedreno's KMS API (default: auto, enabled on arm)]),
139 [FREEDRENO=$enableval], [FREEDRENO=auto])
141 AC_ARG_ENABLE(freedreno-kgsl,
142 AS_HELP_STRING([--enable-freedreno-kgsl],
143 [Enable support for freedreno's to use downstream android kernel API (default: disabled)]),
144 [FREEDRENO_KGSL=$enableval], [FREEDRENO_KGSL=no])
146 AC_ARG_ENABLE(tegra-experimental-api,
147 AS_HELP_STRING([--enable-tegra-experimental-api],
148 [Enable support for Tegra's experimental API (default: disabled)]),
149 [TEGRA=$enableval], [TEGRA=no])
152 AS_HELP_STRING([--disable-vc4],
153 [Enable support for vc4's API (default: auto, enabled on arm)]),
154 [VC4=$enableval], [VC4=auto])
156 AC_ARG_ENABLE(etnaviv-experimental-api,
157 AS_HELP_STRING([--enable-etnaviv-experimental-api],
158 [Enable support for etnaviv's experimental API (default: disabled)]),
159 [ETNAVIV=$enableval], [ETNAVIV=no])
161 AC_ARG_ENABLE(install-test-programs,
162 AS_HELP_STRING([--enable-install-test-programs],
163 [Install test programs (default: no)]),
164 [INSTALL_TESTS=$enableval], [INSTALL_TESTS=no])
166 dnl ===========================================================================
167 dnl check compiler flags
168 AC_DEFUN([LIBDRM_CC_TRY_FLAG], [
169 AC_MSG_CHECKING([whether $CC supports $1])
171 libdrm_save_CFLAGS="$CFLAGS"
174 AC_COMPILE_IFELSE([AC_LANG_SOURCE([ ])], [libdrm_cc_flag=yes], [libdrm_cc_flag=no])
175 CFLAGS="$libdrm_save_CFLAGS"
177 if test "x$libdrm_cc_flag" = "xyes"; then
178 ifelse([$2], , :, [$2])
180 ifelse([$3], , :, [$3])
182 AC_MSG_RESULT([$libdrm_cc_flag])
185 dnl We use clock_gettime to check for timeouts in drmWaitVBlank
187 AC_CHECK_FUNCS([clock_gettime], [CLOCK_LIB=],
188 [AC_CHECK_LIB([rt], [clock_gettime], [CLOCK_LIB=-lrt],
189 [AC_MSG_ERROR([Couldn't find clock_gettime])])])
190 AC_SUBST([CLOCK_LIB])
192 AC_CHECK_FUNCS([open_memstream],
193 [AC_DEFINE([HAVE_OPEN_MEMSTREAM], 1, [Have open_memstream()])],
194 [AC_DEFINE([HAVE_OPEN_MEMSTREAM], 0)])
196 dnl Use lots of warning flags with with gcc and compatible compilers
198 dnl Note: if you change the following variable, the cache is automatically
199 dnl skipped and all flags rechecked. So there's no need to do anything
200 dnl else. If for any reason you need to force a recheck, just change
201 dnl MAYBE_WARN in an ignorable way (like adding whitespace)
203 MAYBE_WARN="-Wall -Wextra -Werror=undef \
204 -Wsign-compare -Werror-implicit-function-declaration \
205 -Wpointer-arith -Wwrite-strings -Wstrict-prototypes \
206 -Wmissing-prototypes -Wmissing-declarations -Wnested-externs \
207 -Wpacked -Wswitch-enum -Wmissing-format-attribute \
208 -Wstrict-aliasing=2 -Winit-self \
209 -Wdeclaration-after-statement -Wold-style-definition \
210 -Wno-unused-parameter \
211 -Wno-attributes -Wno-long-long -Winline -Wshadow \
212 -Wno-missing-field-initializers"
214 # invalidate cached value if MAYBE_WARN has changed
215 if test "x$libdrm_cv_warn_maybe" != "x$MAYBE_WARN"; then
216 unset libdrm_cv_warn_cflags
218 AC_CACHE_CHECK([for supported warning flags], libdrm_cv_warn_cflags, [
222 # Some warning options are not supported by all versions of
223 # gcc, so test all desired options against the current
226 # Note that there are some order dependencies
227 # here. Specifically, an option that disables a warning will
228 # have no net effect if a later option then enables that
229 # warnings, (perhaps implicitly). So we put some grouped
230 # options (-Wall and -Wextra) up front and the -Wno options
233 for W in $MAYBE_WARN; do
234 LIBDRM_CC_TRY_FLAG([$W], [WARN_CFLAGS="$WARN_CFLAGS $W"])
237 libdrm_cv_warn_cflags=$WARN_CFLAGS
238 libdrm_cv_warn_maybe=$MAYBE_WARN
240 AC_MSG_CHECKING([which warning flags were supported])])
241 WARN_CFLAGS="$libdrm_cv_warn_cflags"
243 # Check for atomic intrinsics
244 AC_CACHE_CHECK([for native atomic primitives], drm_cv_atomic_primitives, [
245 drm_cv_atomic_primitives="none"
247 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
248 int atomic_add(int *i) { return __sync_add_and_fetch (i, 1); }
249 int atomic_cmpxchg(int *i, int j, int k) { return __sync_val_compare_and_swap (i, j, k); }
250 ]],[[]])], [drm_cv_atomic_primitives="Intel"],[])
252 if test "x$drm_cv_atomic_primitives" = "xnone"; then
253 AC_CHECK_HEADER([atomic_ops.h], drm_cv_atomic_primitives="libatomic-ops")
256 # atomic functions defined in <atomic.h> & libc on Solaris
257 if test "x$drm_cv_atomic_primitives" = "xnone"; then
258 AC_CHECK_FUNC([atomic_cas_uint], drm_cv_atomic_primitives="Solaris")
262 if test "x$drm_cv_atomic_primitives" = xIntel; then
263 AC_DEFINE(HAVE_LIBDRM_ATOMIC_PRIMITIVES, 1,
264 [Enable if your compiler supports the Intel __sync_* atomic primitives])
266 AC_DEFINE(HAVE_LIBDRM_ATOMIC_PRIMITIVES, 0)
268 if test "x$drm_cv_atomic_primitives" = "xlibatomic-ops"; then
269 AC_DEFINE(HAVE_LIB_ATOMIC_OPS, 1, [Enable if you have libatomic-ops-dev installed])
271 AC_DEFINE(HAVE_LIB_ATOMIC_OPS, 0)
274 dnl Print out the approapriate message considering the value set be the
275 dnl respective in $1.
276 dnl $1 - value to be evaluated. Eg. $INTEL, $NOUVEAU, ...
277 dnl $2 - libdrm shortname. Eg. intel, freedreno, ...
278 dnl $3 - GPU name/brand. Eg. Intel, NVIDIA Tegra, ...
279 dnl $4 - Configure switch. Eg. intel, omap-experimental-api, ...
280 AC_DEFUN([LIBDRM_ATOMICS_NOT_FOUND_MSG], [
282 xyes) AC_MSG_ERROR([libdrm_$2 depends upon atomic operations, which were not found for your compiler/cpu. Try compiling with -march=native, or install the libatomics-op-dev package, or, failing both of those, disable support for $3 GPUs by passing --disable-$4 to ./configure]) ;;
283 xauto) AC_MSG_WARN([Disabling $2. It depends on atomic operations, which were not found for your compiler/cpu. Try compiling with -march=native, or install the libatomics-op-dev package.]) ;;
288 if test "x$drm_cv_atomic_primitives" = "xnone"; then
289 LIBDRM_ATOMICS_NOT_FOUND_MSG($INTEL, intel, Intel, intel)
292 LIBDRM_ATOMICS_NOT_FOUND_MSG($RADEON, radeon, Radeon, radeon)
295 LIBDRM_ATOMICS_NOT_FOUND_MSG($AMDGPU, amdgpu, AMD, amdgpu)
298 LIBDRM_ATOMICS_NOT_FOUND_MSG($NOUVEAU, nouveau, NVIDIA, nouveau)
301 LIBDRM_ATOMICS_NOT_FOUND_MSG($OMAP, omap, OMAP, omap-experimental-api)
304 LIBDRM_ATOMICS_NOT_FOUND_MSG($FREEDRENO, freedreno, Qualcomm Adreno, freedreno)
307 LIBDRM_ATOMICS_NOT_FOUND_MSG($TEGRA, tegra, NVIDIA Tegra, tegra-experimental-api)
310 LIBDRM_ATOMICS_NOT_FOUND_MSG($ETNAVIV, etnaviv, Vivante, etnaviv-experimental-api)
313 if test "x$INTEL" = xauto; then
315 i?86|x86_64) INTEL=yes ;;
319 if test "x$RADEON" = xauto; then
322 if test "x$AMDGPU" = xauto; then
325 if test "x$NOUVEAU" = xauto; then
328 if test "x$FREEDRENO" = xauto; then
330 arm*|aarch64) FREEDRENO=yes ;;
334 if test "x$VC4" = xauto; then
336 arm*|aarch64) VC4=yes ;;
342 if test "x$INTEL" != "xno"; then
343 PKG_CHECK_MODULES(PCIACCESS, [pciaccess >= 0.10])
345 AC_SUBST(PCIACCESS_CFLAGS)
346 AC_SUBST(PCIACCESS_LIBS)
348 if test "x$UDEV" = xyes; then
349 AC_DEFINE(UDEV, 1, [Have UDEV support])
355 if test "x$LIBKMS" = xauto ; then
357 linux*) LIBKMS="yes" ;;
358 freebsd* | kfreebsd*-gnu)
360 dragonfly*) LIBKMS="yes" ;;
365 AM_CONDITIONAL(HAVE_LIBKMS, [test "x$LIBKMS" = xyes])
367 AM_CONDITIONAL(HAVE_INTEL, [test "x$INTEL" = xyes])
368 if test "x$INTEL" = xyes; then
369 AC_DEFINE(HAVE_INTEL, 1, [Have intel support])
371 AC_DEFINE(HAVE_INTEL, 0)
374 AM_CONDITIONAL(HAVE_VMWGFX, [test "x$VMWGFX" = xyes])
375 if test "x$VMWGFX" = xyes; then
376 AC_DEFINE(HAVE_VMWGFX, 1, [Have vmwgfx kernel headers])
378 AC_DEFINE(HAVE_VMWGFX, 0)
381 AM_CONDITIONAL(HAVE_NOUVEAU, [test "x$NOUVEAU" = xyes])
382 if test "x$NOUVEAU" = xyes; then
383 AC_DEFINE(HAVE_NOUVEAU, 1, [Have nouveau (nvidia) support])
385 AC_DEFINE(HAVE_NOUVEAU, 0)
388 AM_CONDITIONAL(HAVE_OMAP, [test "x$OMAP" = xyes])
390 AM_CONDITIONAL(HAVE_EXYNOS, [test "x$EXYNOS" = xyes])
391 if test "x$EXYNOS" = xyes; then
392 AC_DEFINE(HAVE_EXYNOS, 1, [Have EXYNOS support])
394 AC_DEFINE(HAVE_EXYNOS, 0)
397 AM_CONDITIONAL(HAVE_FREEDRENO, [test "x$FREEDRENO" = xyes])
399 if test "x$FREEDRENO_KGSL" = xyes; then
400 if test "x$FREEDRENO" != xyes; then
401 AC_MSG_ERROR([Cannot enable freedreno KGSL interface if freedreno is disabled])
404 AM_CONDITIONAL(HAVE_FREEDRENO_KGSL, [test "x$FREEDRENO_KGSL" = xyes])
405 if test "x$FREEDRENO_KGSL" = xyes; then
406 AC_DEFINE(HAVE_FREEDRENO_KGSL, 1, [Have freedreno support for KGSL kernel interface])
408 AC_DEFINE(HAVE_FREEDRENO_KGSL, 0)
411 AM_CONDITIONAL(HAVE_RADEON, [test "x$RADEON" = xyes])
412 if test "x$RADEON" = xyes; then
413 AC_DEFINE(HAVE_RADEON, 1, [Have radeon support])
415 AC_DEFINE(HAVE_RADEON, 0)
418 if test "x$AMDGPU" != xno; then
419 # Detect cunit library
420 PKG_CHECK_MODULES([CUNIT], [cunit >= 2.1], [have_cunit=yes], [have_cunit=no])
421 # If pkg-config does not find cunit, check it using AC_CHECK_LIB. We
422 # do this because Debian (Ubuntu) lacks pkg-config file for cunit.
423 # fixed in 2.1-2.dfsg-3: http://anonscm.debian.org/cgit/collab-maint/cunit.git/commit/?h=debian
424 if test "x${have_cunit}" = "xno"; then
425 AC_CHECK_LIB([cunit], [CU_initialize_registry], [have_cunit=yes], [have_cunit=no])
426 if test "x${have_cunit}" = "xyes"; then
429 AC_SUBST([CUNIT_LIBS])
430 AC_SUBST([CUNIT_CFLAGS])
436 AM_CONDITIONAL(HAVE_CUNIT, [test "x$have_cunit" != "xno"])
438 AM_CONDITIONAL(HAVE_AMDGPU, [test "x$AMDGPU" = xyes])
439 if test "x$AMDGPU" = xyes; then
440 AC_DEFINE(HAVE_AMDGPU, 1, [Have amdgpu support])
442 if test "x$have_cunit" = "xno"; then
443 AC_MSG_WARN([Could not find cunit library. Disabling amdgpu tests])
446 AC_DEFINE(HAVE_AMDGPU, 0)
449 AM_CONDITIONAL(HAVE_TEGRA, [test "x$TEGRA" = xyes])
451 AM_CONDITIONAL(HAVE_VC4, [test "x$VC4" = xyes])
452 if test "x$VC4" = xyes; then
453 AC_DEFINE(HAVE_VC4, 1, [Have VC4 support])
455 AC_DEFINE(HAVE_VC4, 0)
458 AM_CONDITIONAL(HAVE_ETNAVIV, [test "x$ETNAVIV" = xyes])
460 AM_CONDITIONAL(HAVE_INSTALL_TESTS, [test "x$INSTALL_TESTS" = xyes])
462 AC_ARG_ENABLE([cairo-tests],
463 [AS_HELP_STRING([--enable-cairo-tests],
464 [Enable support for Cairo rendering in tests (default: auto)])],
465 [CAIRO=$enableval], [CAIRO=auto])
466 if test "x$CAIRO" != xno; then
467 PKG_CHECK_MODULES(CAIRO, cairo, [HAVE_CAIRO=yes], [HAVE_CAIRO=no])
469 AC_MSG_CHECKING([whether to enable Cairo tests])
470 if test "x$CAIRO" = xauto; then
473 if test "x$CAIRO" = xyes; then
474 if ! test "x$HAVE_CAIRO" = xyes; then
475 AC_MSG_ERROR([Cairo support required but not present])
477 AC_DEFINE(HAVE_CAIRO, 1, [Have Cairo support])
479 AC_DEFINE(HAVE_CAIRO, 0)
481 AC_MSG_RESULT([$CAIRO])
482 AM_CONDITIONAL(HAVE_CAIRO, [test "x$CAIRO" = xyes])
484 # xsltproc for docbook manpages
485 AC_ARG_ENABLE([manpages],
486 AS_HELP_STRING([--enable-manpages], [enable manpages @<:@default=auto@:>@]),
487 [MANS=$enableval], [MANS=auto])
488 AM_CONDITIONAL([BUILD_MANPAGES], [test "x$XSLTPROC" != "x" -a "x$MANS" != "xno"])
490 # check for offline man-pages stylesheet
491 AC_MSG_CHECKING([for docbook manpages stylesheet])
492 MANPAGES_STYLESHEET="http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl"
493 AC_PATH_PROGS_FEATURE_CHECK([XSLTPROC_TMP], [xsltproc],
494 AS_IF([`"$ac_path_XSLTPROC_TMP" --nonet "$MANPAGES_STYLESHEET" > /dev/null 2>&1`],
495 [HAVE_MANPAGES_STYLESHEET=yes]))
496 if test "x$HAVE_MANPAGES_STYLESHEET" = "xyes"; then
497 AC_SUBST(MANPAGES_STYLESHEET)
502 AM_CONDITIONAL([HAVE_MANPAGES_STYLESHEET], [test "x$HAVE_MANPAGES_STYLESHEET" = "xyes"])
504 AC_ARG_ENABLE(valgrind,
505 [AS_HELP_STRING([--enable-valgrind],
506 [Build libdrm with valgrind support (default: auto)])],
507 [VALGRIND=$enableval], [VALGRIND=auto])
508 if test "x$VALGRIND" != xno; then
509 PKG_CHECK_MODULES(VALGRIND, [valgrind], [have_valgrind=yes], [have_valgrind=no])
511 AC_MSG_CHECKING([whether to enable Valgrind support])
512 if test "x$VALGRIND" = xauto; then
513 VALGRIND="$have_valgrind"
516 if test "x$VALGRIND" = "xyes"; then
517 if ! test "x$have_valgrind" = xyes; then
518 AC_MSG_ERROR([Valgrind support required but not present])
520 AC_DEFINE([HAVE_VALGRIND], 1, [Use valgrind intrinsics to suppress false warnings])
522 AC_DEFINE([HAVE_VALGRIND], 0)
525 AC_MSG_RESULT([$VALGRIND])
527 AC_ARG_WITH([kernel-source],
528 [AS_HELP_STRING([--with-kernel-source],
529 [specify path to linux kernel source])],
530 [kernel_source="$with_kernel_source"])
531 AC_SUBST(kernel_source)
533 AC_MSG_CHECKING([whether $CC supports __attribute__(("hidden"))])
534 AC_LINK_IFELSE([AC_LANG_PROGRAM([
535 int foo_hidden( void ) __attribute__((visibility("hidden")));
536 ])], HAVE_ATTRIBUTE_VISIBILITY="yes"; AC_MSG_RESULT([yes]), AC_MSG_RESULT([no]));
538 if test "x$HAVE_ATTRIBUTE_VISIBILITY" = xyes; then
539 AC_DEFINE(HAVE_VISIBILITY, 1, [Compiler supports __attribute__(("hidden"))])
541 AC_DEFINE(HAVE_VISIBILITY, 0)
544 CFLAGS="$CFLAGS -include config.h"
546 AC_SUBST(WARN_CFLAGS)
553 intel/libdrm_intel.pc
555 radeon/libdrm_radeon.pc
557 amdgpu/libdrm_amdgpu.pc
559 nouveau/libdrm_nouveau.pc
563 exynos/libdrm_exynos.pc
565 freedreno/libdrm_freedreno.pc
567 tegra/libdrm_tegra.pc
571 etnaviv/libdrm_etnaviv.pc
573 tests/modeprint/Makefile
574 tests/modetest/Makefile
576 tests/kmstest/Makefile
577 tests/proptest/Makefile
578 tests/radeon/Makefile
579 tests/amdgpu/Makefile
580 tests/vbltest/Makefile
581 tests/exynos/Makefile
583 tests/nouveau/Makefile
584 tests/etnaviv/Makefile
591 echo "$PACKAGE_STRING will be compiled with:"
593 echo " libkms $LIBKMS"
594 echo " Intel API $INTEL"
595 echo " vmwgfx API $VMWGFX"
596 echo " Radeon API $RADEON"
597 echo " AMDGPU API $AMDGPU"
598 echo " Nouveau API $NOUVEAU"
599 echo " OMAP API $OMAP"
600 echo " EXYNOS API $EXYNOS"
601 echo " Freedreno API $FREEDRENO (kgsl: $FREEDRENO_KGSL)"
602 echo " Tegra API $TEGRA"
604 echo " Etnaviv API $ETNAVIV"