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])
32 # Require xorg-macros minimum of 1.12 for XORG_WITH_XSLTPROC
33 m4_ifndef([XORG_MACROS_VERSION],
34 [m4_fatal([must install xorg-macros 1.12 or later before running autoconf/autogen])])
35 XORG_MACROS_VERSION(1.12)
39 AM_INIT_AUTOMAKE([1.10 foreign dist-bzip2])
41 # Enable quiet compiles on automake 1.11.
42 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
48 if test "x$ac_cv_prog_cc_c99" = xno; then
49 AC_MSG_ERROR([Building libdrm requires C99 enabled compiler])
52 AC_USE_SYSTEM_EXTENSIONS
57 AC_CHECK_HEADERS([sys/sysctl.h sys/select.h])
61 LT_INIT([disable-static])
64 PKG_CHECK_MODULES(PTHREADSTUBS, pthread-stubs)
65 AC_SUBST(PTHREADSTUBS_CFLAGS)
66 AC_SUBST(PTHREADSTUBS_LIBS)
68 pkgconfigdir=${libdir}/pkgconfig
69 AC_SUBST(pkgconfigdir)
71 [AS_HELP_STRING([--enable-udev],
72 [Enable support for using udev instead of mknod (default: disabled)])],
73 [UDEV=$enableval], [UDEV=no])
76 AS_HELP_STRING([--disable-libkms],
77 [Disable KMS mm abstraction library (default: auto, enabled on supported platforms)]),
78 [LIBKMS=$enableval], [LIBKMS=auto])
81 AS_HELP_STRING([--disable-intel],
82 [Enable support for intel's KMS API (default: auto, enabled on x86)]),
83 [INTEL=$enableval], [INTEL=auto])
86 AS_HELP_STRING([--disable-radeon],
87 [Enable support for radeon's KMS API (default: auto)]),
88 [RADEON=$enableval], [RADEON=auto])
91 AS_HELP_STRING([--disable-amdgpu],
92 [Enable support for amdgpu's KMS API (default: auto)]),
93 [AMDGPU=$enableval], [AMDGPU=auto])
95 AC_ARG_ENABLE(nouveau,
96 AS_HELP_STRING([--disable-nouveau],
97 [Enable support for nouveau's KMS API (default: auto)]),
98 [NOUVEAU=$enableval], [NOUVEAU=auto])
100 AC_ARG_ENABLE(vmwgfx,
101 AS_HELP_STRING([--disable-vmwgfx],
102 [Enable support for vmwgfx's KMS API (default: yes)]),
103 [VMWGFX=$enableval], [VMWGFX=yes])
105 AC_ARG_ENABLE(omap-experimental-api,
106 AS_HELP_STRING([--enable-omap-experimental-api],
107 [Enable support for OMAP's experimental API (default: disabled)]),
108 [OMAP=$enableval], [OMAP=no])
110 AC_ARG_ENABLE(exynos-experimental-api,
111 AS_HELP_STRING([--enable-exynos-experimental-api],
112 [Enable support for EXYNOS's experimental API (default: disabled)]),
113 [EXYNOS=$enableval], [EXYNOS=no])
115 AC_ARG_ENABLE(freedreno,
116 AS_HELP_STRING([--disable-freedreno],
117 [Enable support for freedreno's KMS API (default: auto, enabled on arm)]),
118 [FREEDRENO=$enableval], [FREEDRENO=auto])
120 AC_ARG_ENABLE(freedreno-kgsl,
121 AS_HELP_STRING([--enable-freedreno-kgsl],
122 [Enable support for freedreno's to use downstream android kernel API (default: disabled)]),
123 [FREEDRENO_KGSL=$enableval], [FREEDRENO_KGSL=no])
125 AC_ARG_ENABLE(tegra-experimental-api,
126 AS_HELP_STRING([--enable-tegra-experimental-api],
127 [Enable support for Tegra's experimental API (default: disabled)]),
128 [TEGRA=$enableval], [TEGRA=no])
131 AS_HELP_STRING([--disable-vc4],
132 [Enable support for vc4's API (default: auto, enabled on arm)]),
133 [VC4=$enableval], [VC4=auto])
135 AC_ARG_ENABLE(install-test-programs,
136 AS_HELP_STRING([--enable-install-test-programs],
137 [Install test programs (default: no)]),
138 [INSTALL_TESTS=$enableval], [INSTALL_TESTS=no])
140 dnl ===========================================================================
141 dnl check compiler flags
142 AC_DEFUN([LIBDRM_CC_TRY_FLAG], [
143 AC_MSG_CHECKING([whether $CC supports $1])
145 libdrm_save_CFLAGS="$CFLAGS"
148 AC_COMPILE_IFELSE([AC_LANG_SOURCE([ ])], [libdrm_cc_flag=yes], [libdrm_cc_flag=no])
149 CFLAGS="$libdrm_save_CFLAGS"
151 if test "x$libdrm_cc_flag" = "xyes"; then
152 ifelse([$2], , :, [$2])
154 ifelse([$3], , :, [$3])
156 AC_MSG_RESULT([$libdrm_cc_flag])
159 dnl We use clock_gettime to check for timeouts in drmWaitVBlank
161 AC_CHECK_FUNCS([clock_gettime], [CLOCK_LIB=],
162 [AC_CHECK_LIB([rt], [clock_gettime], [CLOCK_LIB=-lrt],
163 [AC_MSG_ERROR([Couldn't find clock_gettime])])])
164 AC_SUBST([CLOCK_LIB])
166 AC_CHECK_FUNCS([open_memstream], [HAVE_OPEN_MEMSTREAM=yes])
168 dnl Use lots of warning flags with with gcc and compatible compilers
170 dnl Note: if you change the following variable, the cache is automatically
171 dnl skipped and all flags rechecked. So there's no need to do anything
172 dnl else. If for any reason you need to force a recheck, just change
173 dnl MAYBE_WARN in an ignorable way (like adding whitespace)
175 MAYBE_WARN="-Wall -Wextra \
176 -Wsign-compare -Werror-implicit-function-declaration \
177 -Wpointer-arith -Wwrite-strings -Wstrict-prototypes \
178 -Wmissing-prototypes -Wmissing-declarations -Wnested-externs \
179 -Wpacked -Wswitch-enum -Wmissing-format-attribute \
180 -Wstrict-aliasing=2 -Winit-self \
181 -Wdeclaration-after-statement -Wold-style-definition \
182 -Wno-unused-parameter \
183 -Wno-attributes -Wno-long-long -Winline -Wshadow \
184 -Wno-missing-field-initializers"
186 # invalidate cached value if MAYBE_WARN has changed
187 if test "x$libdrm_cv_warn_maybe" != "x$MAYBE_WARN"; then
188 unset libdrm_cv_warn_cflags
190 AC_CACHE_CHECK([for supported warning flags], libdrm_cv_warn_cflags, [
194 # Some warning options are not supported by all versions of
195 # gcc, so test all desired options against the current
198 # Note that there are some order dependencies
199 # here. Specifically, an option that disables a warning will
200 # have no net effect if a later option then enables that
201 # warnings, (perhaps implicitly). So we put some grouped
202 # options (-Wall and -Wextra) up front and the -Wno options
205 for W in $MAYBE_WARN; do
206 LIBDRM_CC_TRY_FLAG([$W], [WARN_CFLAGS="$WARN_CFLAGS $W"])
209 libdrm_cv_warn_cflags=$WARN_CFLAGS
210 libdrm_cv_warn_maybe=$MAYBE_WARN
212 AC_MSG_CHECKING([which warning flags were supported])])
213 WARN_CFLAGS="$libdrm_cv_warn_cflags"
215 # Check for atomic intrinsics
216 AC_CACHE_CHECK([for native atomic primitives], drm_cv_atomic_primitives, [
217 drm_cv_atomic_primitives="none"
219 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
220 int atomic_add(int *i) { return __sync_add_and_fetch (i, 1); }
221 int atomic_cmpxchg(int *i, int j, int k) { return __sync_val_compare_and_swap (i, j, k); }
222 ]],[[]])], [drm_cv_atomic_primitives="Intel"],[])
224 if test "x$drm_cv_atomic_primitives" = "xnone"; then
225 AC_CHECK_HEADER([atomic_ops.h], drm_cv_atomic_primitives="libatomic-ops")
228 # atomic functions defined in <atomic.h> & libc on Solaris
229 if test "x$drm_cv_atomic_primitives" = "xnone"; then
230 AC_CHECK_FUNC([atomic_cas_uint], drm_cv_atomic_primitives="Solaris")
234 if test "x$drm_cv_atomic_primitives" = xIntel; then
235 AC_DEFINE(HAVE_LIBDRM_ATOMIC_PRIMITIVES, 1,
236 [Enable if your compiler supports the Intel __sync_* atomic primitives])
238 if test "x$drm_cv_atomic_primitives" = "xlibatomic-ops"; then
239 AC_DEFINE(HAVE_LIB_ATOMIC_OPS, 1, [Enable if you have libatomic-ops-dev installed])
242 dnl Print out the approapriate message considering the value set be the
243 dnl respective in $1.
244 dnl $1 - value to be evaluated. Eg. $INTEL, $NOUVEAU, ...
245 dnl $2 - libdrm shortname. Eg. intel, freedreno, ...
246 dnl $3 - GPU name/brand. Eg. Intel, NVIDIA Tegra, ...
247 dnl $4 - Configure switch. Eg. intel, omap-experimental-api, ...
248 AC_DEFUN([LIBDRM_ATOMICS_NOT_FOUND_MSG], [
250 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]) ;;
251 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.]) ;;
256 if test "x$drm_cv_atomic_primitives" = "xnone"; then
257 LIBDRM_ATOMICS_NOT_FOUND_MSG($INTEL, intel, Intel, intel)
260 LIBDRM_ATOMICS_NOT_FOUND_MSG($RADEON, radeon, Radeon, radeon)
263 LIBDRM_ATOMICS_NOT_FOUND_MSG($AMDGPU, amdgpu, AMD, amdgpu)
266 LIBDRM_ATOMICS_NOT_FOUND_MSG($NOUVEAU, nouveau, NVIDIA, nouveau)
269 LIBDRM_ATOMICS_NOT_FOUND_MSG($OMAP, omap, OMAP, omap-experimental-api)
272 LIBDRM_ATOMICS_NOT_FOUND_MSG($FREEDRENO, freedreno, Qualcomm Adreno, freedreno)
275 LIBDRM_ATOMICS_NOT_FOUND_MSG($TEGRA, tegra, NVIDIA Tegra, tegra-experimental-api)
278 if test "x$INTEL" = xauto; then
280 i?86|x86_64) INTEL=yes ;;
284 if test "x$RADEON" = xauto; then
287 if test "x$AMDGPU" = xauto; then
290 if test "x$NOUVEAU" = xauto; then
293 if test "x$FREEDRENO" = xauto; then
295 arm*|aarch64) FREEDRENO=yes ;;
299 if test "x$VC4" = xauto; then
301 arm*|aarch64) VC4=yes ;;
307 if test "x$INTEL" != "xno"; then
308 PKG_CHECK_MODULES(PCIACCESS, [pciaccess >= 0.10])
310 AC_SUBST(PCIACCESS_CFLAGS)
311 AC_SUBST(PCIACCESS_LIBS)
313 if test "x$UDEV" = xyes; then
314 AC_DEFINE(UDEV, 1, [Have UDEV support])
318 if test "x$LIBKMS" = xauto ; then
320 linux*) LIBKMS="yes" ;;
321 freebsd* | kfreebsd*-gnu)
323 dragonfly*) LIBKMS="yes" ;;
328 AM_CONDITIONAL(HAVE_LIBKMS, [test "x$LIBKMS" = xyes])
330 AM_CONDITIONAL(HAVE_INTEL, [test "x$INTEL" = xyes])
331 if test "x$INTEL" = xyes; then
332 AC_DEFINE(HAVE_INTEL, 1, [Have intel support])
335 AM_CONDITIONAL(HAVE_VMWGFX, [test "x$VMWGFX" = xyes])
336 if test "x$VMWGFX" = xyes; then
337 AC_DEFINE(HAVE_VMWGFX, 1, [Have vmwgfx kernel headers])
340 AM_CONDITIONAL(HAVE_NOUVEAU, [test "x$NOUVEAU" = xyes])
341 if test "x$NOUVEAU" = xyes; then
342 AC_DEFINE(HAVE_NOUVEAU, 1, [Have nouveau (nvidia) support])
345 AM_CONDITIONAL(HAVE_OMAP, [test "x$OMAP" = xyes])
346 if test "x$OMAP" = xyes; then
347 AC_DEFINE(HAVE_OMAP, 1, [Have OMAP support])
350 AM_CONDITIONAL(HAVE_EXYNOS, [test "x$EXYNOS" = xyes])
351 if test "x$EXYNOS" = xyes; then
352 AC_DEFINE(HAVE_EXYNOS, 1, [Have EXYNOS support])
355 AM_CONDITIONAL(HAVE_FREEDRENO, [test "x$FREEDRENO" = xyes])
356 if test "x$FREEDRENO" = xyes; then
357 AC_DEFINE(HAVE_FREEDRENO, 1, [Have freedreno support])
360 if test "x$FREEDRENO_KGSL" = xyes; then
361 if test "x$FREEDRENO" != xyes; then
362 AC_MSG_ERROR([Cannot enable freedreno KGSL interface if freedreno is disabled])
365 AM_CONDITIONAL(HAVE_FREEDRENO_KGSL, [test "x$FREEDRENO_KGSL" = xyes])
366 if test "x$FREEDRENO_KGSL" = xyes; then
367 AC_DEFINE(HAVE_FREEDRENO_KGSL, 1, [Have freedreno support for KGSL kernel interface])
370 AM_CONDITIONAL(HAVE_RADEON, [test "x$RADEON" = xyes])
371 if test "x$RADEON" = xyes; then
372 AC_DEFINE(HAVE_RADEON, 1, [Have radeon support])
375 if test "x$AMDGPU" != xno; then
376 # Detect cunit library
377 PKG_CHECK_MODULES([CUNIT], [cunit >= 2.1], [have_cunit=yes], [have_cunit=no])
378 # If pkg-config does not find cunit, check it using AC_CHECK_LIB. We
379 # do this because Debian (Ubuntu) lacks pkg-config file for cunit.
380 # fixed in 2.1-2.dfsg-3: http://anonscm.debian.org/cgit/collab-maint/cunit.git/commit/?h=debian
381 if test "x${have_cunit}" = "xno"; then
382 AC_CHECK_LIB([cunit], [CU_initialize_registry], [have_cunit=yes], [have_cunit=no])
383 if test "x${have_cunit}" = "xyes"; then
386 AC_SUBST([CUNIT_LIBS])
387 AC_SUBST([CUNIT_CFLAGS])
393 AM_CONDITIONAL(HAVE_CUNIT, [test "x$have_cunit" != "xno"])
395 AM_CONDITIONAL(HAVE_AMDGPU, [test "x$AMDGPU" = xyes])
396 if test "x$AMDGPU" = xyes; then
397 AC_DEFINE(HAVE_AMDGPU, 1, [Have amdgpu support])
399 AC_DEFINE(HAVE_CUNIT, [test "x$have_cunit" != "xno"], [Enable CUNIT Have amdgpu support])
401 if test "x$have_cunit" = "xno"; then
402 AC_MSG_WARN([Could not find cunit library. Disabling amdgpu tests])
406 AM_CONDITIONAL(HAVE_TEGRA, [test "x$TEGRA" = xyes])
407 if test "x$TEGRA" = xyes; then
408 AC_DEFINE(HAVE_TEGRA, 1, [Have Tegra support])
411 AM_CONDITIONAL(HAVE_VC4, [test "x$VC4" = xyes])
412 if test "x$VC4" = xyes; then
413 AC_DEFINE(HAVE_VC4, 1, [Have VC4 support])
416 AM_CONDITIONAL(HAVE_INSTALL_TESTS, [test "x$INSTALL_TESTS" = xyes])
417 if test "x$INSTALL_TESTS" = xyes; then
418 AC_DEFINE(HAVE_INSTALL_TESTS, 1, [Install test programs])
421 AC_ARG_ENABLE([cairo-tests],
422 [AS_HELP_STRING([--enable-cairo-tests],
423 [Enable support for Cairo rendering in tests (default: auto)])],
424 [CAIRO=$enableval], [CAIRO=auto])
425 if test "x$CAIRO" != xno; then
426 PKG_CHECK_MODULES(CAIRO, cairo, [HAVE_CAIRO=yes], [HAVE_CAIRO=no])
428 AC_MSG_CHECKING([whether to enable Cairo tests])
429 if test "x$CAIRO" = xauto; then
432 if test "x$CAIRO" = xyes; then
433 if ! test "x$HAVE_CAIRO" = xyes; then
434 AC_MSG_ERROR([Cairo support required but not present])
436 AC_DEFINE(HAVE_CAIRO, 1, [Have Cairo support])
438 AC_MSG_RESULT([$CAIRO])
439 AM_CONDITIONAL(HAVE_CAIRO, [test "x$CAIRO" = xyes])
441 # For enumerating devices in test case
442 PKG_CHECK_MODULES(LIBUDEV, libudev, [HAVE_LIBUDEV=yes], [HAVE_LIBUDEV=no])
443 if test "x$HAVE_LIBUDEV" = xyes; then
444 AC_DEFINE(HAVE_LIBUDEV, 1, [Have libudev support])
446 AM_CONDITIONAL(HAVE_LIBUDEV, [test "x$HAVE_LIBUDEV" = xyes])
448 # xsltproc for docbook manpages
449 AC_ARG_ENABLE([manpages],
450 AS_HELP_STRING([--enable-manpages], [enable manpages @<:@default=auto@:>@]),
451 [MANS=$enableval], [MANS=auto])
452 AM_CONDITIONAL([BUILD_MANPAGES], [test "x$XSLTPROC" != "x" -a "x$MANS" != "xno"])
454 # check for offline man-pages stylesheet
455 AC_MSG_CHECKING([for docbook manpages stylesheet])
456 MANPAGES_STYLESHEET="http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl"
457 AC_PATH_PROGS_FEATURE_CHECK([XSLTPROC_TMP], [xsltproc],
458 AS_IF([`"$ac_path_XSLTPROC_TMP" --nonet "$MANPAGES_STYLESHEET" > /dev/null 2>&1`],
459 [HAVE_MANPAGES_STYLESHEET=yes]))
460 if test "x$HAVE_MANPAGES_STYLESHEET" = "xyes"; then
461 AC_SUBST(MANPAGES_STYLESHEET)
466 AM_CONDITIONAL([HAVE_MANPAGES_STYLESHEET], [test "x$HAVE_MANPAGES_STYLESHEET" = "xyes"])
468 AC_ARG_ENABLE(valgrind,
469 [AS_HELP_STRING([--enable-valgrind],
470 [Build libdrm with valgrind support (default: auto)])],
471 [VALGRIND=$enableval], [VALGRIND=auto])
472 if test "x$VALGRIND" != xno; then
473 PKG_CHECK_MODULES(VALGRIND, [valgrind], [have_valgrind=yes], [have_valgrind=no])
475 AC_MSG_CHECKING([whether to enable Valgrind support])
476 if test "x$VALGRIND" = xauto; then
477 VALGRIND="$have_valgrind"
480 if test "x$VALGRIND" = "xyes"; then
481 if ! test "x$have_valgrind" = xyes; then
482 AC_MSG_ERROR([Valgrind support required but not present])
484 AC_DEFINE([HAVE_VALGRIND], 1, [Use valgrind intrinsics to suppress false warnings])
487 AC_MSG_RESULT([$VALGRIND])
489 AC_ARG_WITH([kernel-source],
490 [AS_HELP_STRING([--with-kernel-source],
491 [specify path to linux kernel source])],
492 [kernel_source="$with_kernel_source"])
493 AC_SUBST(kernel_source)
495 AC_MSG_CHECKING([whether $CC supports __attribute__(("hidden"))])
496 AC_LINK_IFELSE([AC_LANG_PROGRAM([
497 int foo_hidden( void ) __attribute__((visibility("hidden")));
498 ])], HAVE_ATTRIBUTE_VISIBILITY="yes"; AC_MSG_RESULT([yes]), AC_MSG_RESULT([no]));
500 if test "x$HAVE_ATTRIBUTE_VISIBILITY" = xyes; then
501 AC_DEFINE(HAVE_VISIBILITY, 1, [Compiler supports __attribute__(("hidden"))])
504 AC_SUBST(WARN_CFLAGS)
510 intel/libdrm_intel.pc
512 radeon/libdrm_radeon.pc
514 amdgpu/libdrm_amdgpu.pc
516 nouveau/libdrm_nouveau.pc
520 exynos/libdrm_exynos.pc
522 freedreno/libdrm_freedreno.pc
524 tegra/libdrm_tegra.pc
528 tests/modeprint/Makefile
529 tests/modetest/Makefile
531 tests/kmstest/Makefile
532 tests/proptest/Makefile
533 tests/radeon/Makefile
534 tests/amdgpu/Makefile
535 tests/vbltest/Makefile
536 tests/exynos/Makefile
538 tests/nouveau/Makefile
545 echo "$PACKAGE_STRING will be compiled with:"
547 echo " libkms $LIBKMS"
548 echo " Intel API $INTEL"
549 echo " vmwgfx API $VMWGFX"
550 echo " Radeon API $RADEON"
551 echo " AMDGPU API $AMDGPU"
552 echo " Nouveau API $NOUVEAU"
553 echo " OMAP API $OMAP"
554 echo " EXYNOS API $EXYNOS"
555 echo " Freedreno API $FREEDRENO (kgsl: $FREEDRENO_KGSL)"
556 echo " Tegra API $TEGRA"