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])])
49 if test "x$ac_cv_prog_cc_c99" = xno; then
50 AC_MSG_ERROR([Building libdrm requires C99 enabled compiler])
53 AC_USE_SYSTEM_EXTENSIONS
58 AC_CHECK_HEADERS([sys/sysctl.h sys/select.h])
62 LT_INIT([disable-static])
64 dnl pthread-stubs is mandatory on BSD platforms, due to the nature of the
65 dnl project. Even then there's a notable issue as described in the project README
67 linux* | cygwin* | darwin* | solaris* | *-gnu* | gnu*)
68 pthread_stubs_possible="no"
71 pthread_stubs_possible="yes"
75 if test "x$pthread_stubs_possible" = xyes; then
76 PKG_CHECK_MODULES(PTHREADSTUBS, pthread-stubs >= 0.4)
77 AC_SUBST(PTHREADSTUBS_CFLAGS)
78 AC_SUBST(PTHREADSTUBS_LIBS)
81 pkgconfigdir=${libdir}/pkgconfig
82 AC_SUBST(pkgconfigdir)
84 [AS_HELP_STRING([--enable-udev],
85 [Enable support for using udev instead of mknod (default: disabled)])],
86 [UDEV=$enableval], [UDEV=no])
89 AS_HELP_STRING([--disable-libkms],
90 [Disable KMS mm abstraction library (default: auto, enabled on supported platforms)]),
91 [LIBKMS=$enableval], [LIBKMS=auto])
94 AS_HELP_STRING([--disable-intel],
95 [Enable support for intel's KMS API (default: auto, enabled on x86)]),
96 [INTEL=$enableval], [INTEL=auto])
99 AS_HELP_STRING([--disable-radeon],
100 [Enable support for radeon's KMS API (default: auto)]),
101 [RADEON=$enableval], [RADEON=auto])
103 AC_ARG_ENABLE(amdgpu,
104 AS_HELP_STRING([--disable-amdgpu],
105 [Enable support for amdgpu's KMS API (default: auto)]),
106 [AMDGPU=$enableval], [AMDGPU=auto])
108 AC_ARG_ENABLE(nouveau,
109 AS_HELP_STRING([--disable-nouveau],
110 [Enable support for nouveau's KMS API (default: auto)]),
111 [NOUVEAU=$enableval], [NOUVEAU=auto])
113 AC_ARG_ENABLE(vmwgfx,
114 AS_HELP_STRING([--disable-vmwgfx],
115 [Enable support for vmwgfx's KMS API (default: yes)]),
116 [VMWGFX=$enableval], [VMWGFX=yes])
118 AC_ARG_ENABLE(omap-experimental-api,
119 AS_HELP_STRING([--enable-omap-experimental-api],
120 [Enable support for OMAP's experimental API (default: disabled)]),
121 [OMAP=$enableval], [OMAP=no])
123 AC_ARG_ENABLE(exynos-experimental-api,
124 AS_HELP_STRING([--enable-exynos-experimental-api],
125 [Enable support for EXYNOS's experimental API (default: disabled)]),
126 [EXYNOS=$enableval], [EXYNOS=no])
128 AC_ARG_ENABLE(freedreno,
129 AS_HELP_STRING([--disable-freedreno],
130 [Enable support for freedreno's KMS API (default: auto, enabled on arm)]),
131 [FREEDRENO=$enableval], [FREEDRENO=auto])
133 AC_ARG_ENABLE(freedreno-kgsl,
134 AS_HELP_STRING([--enable-freedreno-kgsl],
135 [Enable support for freedreno's to use downstream android kernel API (default: disabled)]),
136 [FREEDRENO_KGSL=$enableval], [FREEDRENO_KGSL=no])
138 AC_ARG_ENABLE(tegra-experimental-api,
139 AS_HELP_STRING([--enable-tegra-experimental-api],
140 [Enable support for Tegra's experimental API (default: disabled)]),
141 [TEGRA=$enableval], [TEGRA=no])
144 AS_HELP_STRING([--disable-vc4],
145 [Enable support for vc4's API (default: auto, enabled on arm)]),
146 [VC4=$enableval], [VC4=auto])
148 AC_ARG_ENABLE(etnaviv-experimental-api,
149 AS_HELP_STRING([--enable-etnaviv-experimental-api],
150 [Enable support for etnaviv's experimental API (default: disabled)]),
151 [ETNAVIV=$enableval], [ETNAVIV=no])
153 AC_ARG_ENABLE(install-test-programs,
154 AS_HELP_STRING([--enable-install-test-programs],
155 [Install test programs (default: no)]),
156 [INSTALL_TESTS=$enableval], [INSTALL_TESTS=no])
158 dnl ===========================================================================
159 dnl check compiler flags
160 AC_DEFUN([LIBDRM_CC_TRY_FLAG], [
161 AC_MSG_CHECKING([whether $CC supports $1])
163 libdrm_save_CFLAGS="$CFLAGS"
166 AC_COMPILE_IFELSE([AC_LANG_SOURCE([ ])], [libdrm_cc_flag=yes], [libdrm_cc_flag=no])
167 CFLAGS="$libdrm_save_CFLAGS"
169 if test "x$libdrm_cc_flag" = "xyes"; then
170 ifelse([$2], , :, [$2])
172 ifelse([$3], , :, [$3])
174 AC_MSG_RESULT([$libdrm_cc_flag])
177 dnl We use clock_gettime to check for timeouts in drmWaitVBlank
179 AC_CHECK_FUNCS([clock_gettime], [CLOCK_LIB=],
180 [AC_CHECK_LIB([rt], [clock_gettime], [CLOCK_LIB=-lrt],
181 [AC_MSG_ERROR([Couldn't find clock_gettime])])])
182 AC_SUBST([CLOCK_LIB])
184 AC_CHECK_FUNCS([open_memstream], [HAVE_OPEN_MEMSTREAM=yes])
186 dnl Use lots of warning flags with with gcc and compatible compilers
188 dnl Note: if you change the following variable, the cache is automatically
189 dnl skipped and all flags rechecked. So there's no need to do anything
190 dnl else. If for any reason you need to force a recheck, just change
191 dnl MAYBE_WARN in an ignorable way (like adding whitespace)
193 MAYBE_WARN="-Wall -Wextra \
194 -Wsign-compare -Werror-implicit-function-declaration \
195 -Wpointer-arith -Wwrite-strings -Wstrict-prototypes \
196 -Wmissing-prototypes -Wmissing-declarations -Wnested-externs \
197 -Wpacked -Wswitch-enum -Wmissing-format-attribute \
198 -Wstrict-aliasing=2 -Winit-self \
199 -Wdeclaration-after-statement -Wold-style-definition \
200 -Wno-unused-parameter \
201 -Wno-attributes -Wno-long-long -Winline -Wshadow \
202 -Wno-missing-field-initializers"
204 # invalidate cached value if MAYBE_WARN has changed
205 if test "x$libdrm_cv_warn_maybe" != "x$MAYBE_WARN"; then
206 unset libdrm_cv_warn_cflags
208 AC_CACHE_CHECK([for supported warning flags], libdrm_cv_warn_cflags, [
212 # Some warning options are not supported by all versions of
213 # gcc, so test all desired options against the current
216 # Note that there are some order dependencies
217 # here. Specifically, an option that disables a warning will
218 # have no net effect if a later option then enables that
219 # warnings, (perhaps implicitly). So we put some grouped
220 # options (-Wall and -Wextra) up front and the -Wno options
223 for W in $MAYBE_WARN; do
224 LIBDRM_CC_TRY_FLAG([$W], [WARN_CFLAGS="$WARN_CFLAGS $W"])
227 libdrm_cv_warn_cflags=$WARN_CFLAGS
228 libdrm_cv_warn_maybe=$MAYBE_WARN
230 AC_MSG_CHECKING([which warning flags were supported])])
231 WARN_CFLAGS="$libdrm_cv_warn_cflags"
233 # Check for atomic intrinsics
234 AC_CACHE_CHECK([for native atomic primitives], drm_cv_atomic_primitives, [
235 drm_cv_atomic_primitives="none"
237 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
238 int atomic_add(int *i) { return __sync_add_and_fetch (i, 1); }
239 int atomic_cmpxchg(int *i, int j, int k) { return __sync_val_compare_and_swap (i, j, k); }
240 ]],[[]])], [drm_cv_atomic_primitives="Intel"],[])
242 if test "x$drm_cv_atomic_primitives" = "xnone"; then
243 AC_CHECK_HEADER([atomic_ops.h], drm_cv_atomic_primitives="libatomic-ops")
246 # atomic functions defined in <atomic.h> & libc on Solaris
247 if test "x$drm_cv_atomic_primitives" = "xnone"; then
248 AC_CHECK_FUNC([atomic_cas_uint], drm_cv_atomic_primitives="Solaris")
252 if test "x$drm_cv_atomic_primitives" = xIntel; then
253 AC_DEFINE(HAVE_LIBDRM_ATOMIC_PRIMITIVES, 1,
254 [Enable if your compiler supports the Intel __sync_* atomic primitives])
256 if test "x$drm_cv_atomic_primitives" = "xlibatomic-ops"; then
257 AC_DEFINE(HAVE_LIB_ATOMIC_OPS, 1, [Enable if you have libatomic-ops-dev installed])
260 dnl Print out the approapriate message considering the value set be the
261 dnl respective in $1.
262 dnl $1 - value to be evaluated. Eg. $INTEL, $NOUVEAU, ...
263 dnl $2 - libdrm shortname. Eg. intel, freedreno, ...
264 dnl $3 - GPU name/brand. Eg. Intel, NVIDIA Tegra, ...
265 dnl $4 - Configure switch. Eg. intel, omap-experimental-api, ...
266 AC_DEFUN([LIBDRM_ATOMICS_NOT_FOUND_MSG], [
268 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]) ;;
269 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.]) ;;
274 if test "x$drm_cv_atomic_primitives" = "xnone"; then
275 LIBDRM_ATOMICS_NOT_FOUND_MSG($INTEL, intel, Intel, intel)
278 LIBDRM_ATOMICS_NOT_FOUND_MSG($RADEON, radeon, Radeon, radeon)
281 LIBDRM_ATOMICS_NOT_FOUND_MSG($AMDGPU, amdgpu, AMD, amdgpu)
284 LIBDRM_ATOMICS_NOT_FOUND_MSG($NOUVEAU, nouveau, NVIDIA, nouveau)
287 LIBDRM_ATOMICS_NOT_FOUND_MSG($OMAP, omap, OMAP, omap-experimental-api)
290 LIBDRM_ATOMICS_NOT_FOUND_MSG($FREEDRENO, freedreno, Qualcomm Adreno, freedreno)
293 LIBDRM_ATOMICS_NOT_FOUND_MSG($TEGRA, tegra, NVIDIA Tegra, tegra-experimental-api)
296 LIBDRM_ATOMICS_NOT_FOUND_MSG($ETNAVIV, etnaviv, Vivante, etnaviv-experimental-api)
299 if test "x$INTEL" = xauto; then
301 i?86|x86_64) INTEL=yes ;;
305 if test "x$RADEON" = xauto; then
308 if test "x$AMDGPU" = xauto; then
311 if test "x$NOUVEAU" = xauto; then
314 if test "x$FREEDRENO" = xauto; then
316 arm*|aarch64) FREEDRENO=yes ;;
320 if test "x$VC4" = xauto; then
322 arm*|aarch64) VC4=yes ;;
328 if test "x$INTEL" != "xno"; then
329 PKG_CHECK_MODULES(PCIACCESS, [pciaccess >= 0.10])
331 AC_SUBST(PCIACCESS_CFLAGS)
332 AC_SUBST(PCIACCESS_LIBS)
334 if test "x$UDEV" = xyes; then
335 AC_DEFINE(UDEV, 1, [Have UDEV support])
339 if test "x$LIBKMS" = xauto ; then
341 linux*) LIBKMS="yes" ;;
342 freebsd* | kfreebsd*-gnu)
344 dragonfly*) LIBKMS="yes" ;;
349 AM_CONDITIONAL(HAVE_LIBKMS, [test "x$LIBKMS" = xyes])
351 AM_CONDITIONAL(HAVE_INTEL, [test "x$INTEL" = xyes])
352 if test "x$INTEL" = xyes; then
353 AC_DEFINE(HAVE_INTEL, 1, [Have intel support])
356 AM_CONDITIONAL(HAVE_VMWGFX, [test "x$VMWGFX" = xyes])
357 if test "x$VMWGFX" = xyes; then
358 AC_DEFINE(HAVE_VMWGFX, 1, [Have vmwgfx kernel headers])
361 AM_CONDITIONAL(HAVE_NOUVEAU, [test "x$NOUVEAU" = xyes])
362 if test "x$NOUVEAU" = xyes; then
363 AC_DEFINE(HAVE_NOUVEAU, 1, [Have nouveau (nvidia) support])
366 AM_CONDITIONAL(HAVE_OMAP, [test "x$OMAP" = xyes])
367 if test "x$OMAP" = xyes; then
368 AC_DEFINE(HAVE_OMAP, 1, [Have OMAP support])
371 AM_CONDITIONAL(HAVE_EXYNOS, [test "x$EXYNOS" = xyes])
372 if test "x$EXYNOS" = xyes; then
373 AC_DEFINE(HAVE_EXYNOS, 1, [Have EXYNOS support])
376 AM_CONDITIONAL(HAVE_FREEDRENO, [test "x$FREEDRENO" = xyes])
377 if test "x$FREEDRENO" = xyes; then
378 AC_DEFINE(HAVE_FREEDRENO, 1, [Have freedreno support])
381 if test "x$FREEDRENO_KGSL" = xyes; then
382 if test "x$FREEDRENO" != xyes; then
383 AC_MSG_ERROR([Cannot enable freedreno KGSL interface if freedreno is disabled])
386 AM_CONDITIONAL(HAVE_FREEDRENO_KGSL, [test "x$FREEDRENO_KGSL" = xyes])
387 if test "x$FREEDRENO_KGSL" = xyes; then
388 AC_DEFINE(HAVE_FREEDRENO_KGSL, 1, [Have freedreno support for KGSL kernel interface])
391 AM_CONDITIONAL(HAVE_RADEON, [test "x$RADEON" = xyes])
392 if test "x$RADEON" = xyes; then
393 AC_DEFINE(HAVE_RADEON, 1, [Have radeon support])
396 if test "x$AMDGPU" != xno; then
397 # Detect cunit library
398 PKG_CHECK_MODULES([CUNIT], [cunit >= 2.1], [have_cunit=yes], [have_cunit=no])
399 # If pkg-config does not find cunit, check it using AC_CHECK_LIB. We
400 # do this because Debian (Ubuntu) lacks pkg-config file for cunit.
401 # fixed in 2.1-2.dfsg-3: http://anonscm.debian.org/cgit/collab-maint/cunit.git/commit/?h=debian
402 if test "x${have_cunit}" = "xno"; then
403 AC_CHECK_LIB([cunit], [CU_initialize_registry], [have_cunit=yes], [have_cunit=no])
404 if test "x${have_cunit}" = "xyes"; then
407 AC_SUBST([CUNIT_LIBS])
408 AC_SUBST([CUNIT_CFLAGS])
414 AM_CONDITIONAL(HAVE_CUNIT, [test "x$have_cunit" != "xno"])
416 AM_CONDITIONAL(HAVE_AMDGPU, [test "x$AMDGPU" = xyes])
417 if test "x$AMDGPU" = xyes; then
418 AC_DEFINE(HAVE_AMDGPU, 1, [Have amdgpu support])
420 AC_DEFINE(HAVE_CUNIT, [test "x$have_cunit" != "xno"], [Enable CUNIT Have amdgpu support])
422 if test "x$have_cunit" = "xno"; then
423 AC_MSG_WARN([Could not find cunit library. Disabling amdgpu tests])
427 AM_CONDITIONAL(HAVE_TEGRA, [test "x$TEGRA" = xyes])
428 if test "x$TEGRA" = xyes; then
429 AC_DEFINE(HAVE_TEGRA, 1, [Have Tegra support])
432 AM_CONDITIONAL(HAVE_VC4, [test "x$VC4" = xyes])
433 if test "x$VC4" = xyes; then
434 AC_DEFINE(HAVE_VC4, 1, [Have VC4 support])
437 AM_CONDITIONAL(HAVE_ETNAVIV, [test "x$ETNAVIV" = xyes])
438 if test "x$ETNAVIV" = xyes; then
439 AC_DEFINE(HAVE_ETNAVIV, 1, [Have etnaviv support])
442 AM_CONDITIONAL(HAVE_INSTALL_TESTS, [test "x$INSTALL_TESTS" = xyes])
443 if test "x$INSTALL_TESTS" = xyes; then
444 AC_DEFINE(HAVE_INSTALL_TESTS, 1, [Install test programs])
447 AC_ARG_ENABLE([cairo-tests],
448 [AS_HELP_STRING([--enable-cairo-tests],
449 [Enable support for Cairo rendering in tests (default: auto)])],
450 [CAIRO=$enableval], [CAIRO=auto])
451 if test "x$CAIRO" != xno; then
452 PKG_CHECK_MODULES(CAIRO, cairo, [HAVE_CAIRO=yes], [HAVE_CAIRO=no])
454 AC_MSG_CHECKING([whether to enable Cairo tests])
455 if test "x$CAIRO" = xauto; then
458 if test "x$CAIRO" = xyes; then
459 if ! test "x$HAVE_CAIRO" = xyes; then
460 AC_MSG_ERROR([Cairo support required but not present])
462 AC_DEFINE(HAVE_CAIRO, 1, [Have Cairo support])
464 AC_MSG_RESULT([$CAIRO])
465 AM_CONDITIONAL(HAVE_CAIRO, [test "x$CAIRO" = xyes])
467 # xsltproc for docbook manpages
468 AC_ARG_ENABLE([manpages],
469 AS_HELP_STRING([--enable-manpages], [enable manpages @<:@default=auto@:>@]),
470 [MANS=$enableval], [MANS=auto])
471 AM_CONDITIONAL([BUILD_MANPAGES], [test "x$XSLTPROC" != "x" -a "x$MANS" != "xno"])
473 # check for offline man-pages stylesheet
474 AC_MSG_CHECKING([for docbook manpages stylesheet])
475 MANPAGES_STYLESHEET="http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl"
476 AC_PATH_PROGS_FEATURE_CHECK([XSLTPROC_TMP], [xsltproc],
477 AS_IF([`"$ac_path_XSLTPROC_TMP" --nonet "$MANPAGES_STYLESHEET" > /dev/null 2>&1`],
478 [HAVE_MANPAGES_STYLESHEET=yes]))
479 if test "x$HAVE_MANPAGES_STYLESHEET" = "xyes"; then
480 AC_SUBST(MANPAGES_STYLESHEET)
485 AM_CONDITIONAL([HAVE_MANPAGES_STYLESHEET], [test "x$HAVE_MANPAGES_STYLESHEET" = "xyes"])
487 AC_ARG_ENABLE(valgrind,
488 [AS_HELP_STRING([--enable-valgrind],
489 [Build libdrm with valgrind support (default: auto)])],
490 [VALGRIND=$enableval], [VALGRIND=auto])
491 if test "x$VALGRIND" != xno; then
492 PKG_CHECK_MODULES(VALGRIND, [valgrind], [have_valgrind=yes], [have_valgrind=no])
494 AC_MSG_CHECKING([whether to enable Valgrind support])
495 if test "x$VALGRIND" = xauto; then
496 VALGRIND="$have_valgrind"
499 if test "x$VALGRIND" = "xyes"; then
500 if ! test "x$have_valgrind" = xyes; then
501 AC_MSG_ERROR([Valgrind support required but not present])
503 AC_DEFINE([HAVE_VALGRIND], 1, [Use valgrind intrinsics to suppress false warnings])
506 AC_MSG_RESULT([$VALGRIND])
508 AC_ARG_WITH([kernel-source],
509 [AS_HELP_STRING([--with-kernel-source],
510 [specify path to linux kernel source])],
511 [kernel_source="$with_kernel_source"])
512 AC_SUBST(kernel_source)
514 AC_MSG_CHECKING([whether $CC supports __attribute__(("hidden"))])
515 AC_LINK_IFELSE([AC_LANG_PROGRAM([
516 int foo_hidden( void ) __attribute__((visibility("hidden")));
517 ])], HAVE_ATTRIBUTE_VISIBILITY="yes"; AC_MSG_RESULT([yes]), AC_MSG_RESULT([no]));
519 if test "x$HAVE_ATTRIBUTE_VISIBILITY" = xyes; then
520 AC_DEFINE(HAVE_VISIBILITY, 1, [Compiler supports __attribute__(("hidden"))])
523 AC_SUBST(WARN_CFLAGS)
529 intel/libdrm_intel.pc
531 radeon/libdrm_radeon.pc
533 amdgpu/libdrm_amdgpu.pc
535 nouveau/libdrm_nouveau.pc
539 exynos/libdrm_exynos.pc
541 freedreno/libdrm_freedreno.pc
543 tegra/libdrm_tegra.pc
547 etnaviv/libdrm_etnaviv.pc
549 tests/modeprint/Makefile
550 tests/modetest/Makefile
552 tests/kmstest/Makefile
553 tests/proptest/Makefile
554 tests/radeon/Makefile
555 tests/amdgpu/Makefile
556 tests/vbltest/Makefile
557 tests/exynos/Makefile
559 tests/nouveau/Makefile
560 tests/etnaviv/Makefile
567 echo "$PACKAGE_STRING will be compiled with:"
569 echo " libkms $LIBKMS"
570 echo " Intel API $INTEL"
571 echo " vmwgfx API $VMWGFX"
572 echo " Radeon API $RADEON"
573 echo " AMDGPU API $AMDGPU"
574 echo " Nouveau API $NOUVEAU"
575 echo " OMAP API $OMAP"
576 echo " EXYNOS API $EXYNOS"
577 echo " Freedreno API $FREEDRENO (kgsl: $FREEDRENO_KGSL)"
578 echo " Tegra API $TEGRA"
580 echo " Etnaviv API $ETNAVIV"