tegra: Add simple test for drm_tegra_open()
[platform/upstream/libdrm.git] / configure.ac
1 #  Copyright 2005 Adam Jackson.
2 #
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:
9 #
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
12 #  Software.
13 #
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.
20
21 AC_PREREQ([2.63])
22 AC_INIT([libdrm],
23         [2.4.58],
24         [https://bugs.freedesktop.org/enter_bug.cgi?product=DRI],
25         [libdrm])
26
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])
31
32 AM_INIT_AUTOMAKE([1.10 foreign dist-bzip2])
33 AM_MAINTAINER_MODE([enable])
34
35 # Enable quiet compiles on automake 1.11.
36 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
37
38 # Check for programs
39 AC_PROG_CC
40
41 AC_USE_SYSTEM_EXTENSIONS
42 AC_SYS_LARGEFILE
43 AC_FUNC_ALLOCA
44
45 # Initialize libtool
46 LT_PREREQ([2.2])
47 LT_INIT([disable-static])
48
49
50 PKG_CHECK_MODULES(PTHREADSTUBS, pthread-stubs)
51 AC_SUBST(PTHREADSTUBS_CFLAGS)
52 AC_SUBST(PTHREADSTUBS_LIBS)
53
54 pkgconfigdir=${libdir}/pkgconfig
55 AC_SUBST(pkgconfigdir)
56 AC_ARG_ENABLE([udev],
57               [AS_HELP_STRING([--enable-udev],
58                               [Enable support for using udev instead of mknod (default: disabled)])],
59               [UDEV=$enableval], [UDEV=no])
60
61 AC_ARG_ENABLE(libkms,
62               AS_HELP_STRING([--disable-libkms],
63               [Disable KMS mm abstraction library (default: auto)]),
64               [LIBKMS=$enableval], [LIBKMS=auto])
65
66 AC_ARG_ENABLE(intel,
67               AS_HELP_STRING([--disable-intel],
68               [Enable support for intel's KMS API (default: auto)]),
69               [INTEL=$enableval], [INTEL=auto])
70
71 AC_ARG_ENABLE(radeon,
72               AS_HELP_STRING([--disable-radeon],
73               [Enable support for radeon's KMS API (default: auto)]),
74               [RADEON=$enableval], [RADEON=auto])
75
76 AC_ARG_ENABLE(nouveau,
77               AS_HELP_STRING([--disable-nouveau],
78               [Enable support for nouveau's KMS API (default: auto)]),
79               [NOUVEAU=$enableval], [NOUVEAU=auto])
80
81 AC_ARG_ENABLE(vmwgfx,
82               AS_HELP_STRING([--disable-vmwgfx],
83               [Enable support for vmwgfx's KMS API (default: yes)]),
84               [VMWGFX=$enableval], [VMWGFX=yes])
85
86 AC_ARG_ENABLE(omap-experimental-api,
87               AS_HELP_STRING([--enable-omap-experimental-api],
88               [Enable support for OMAP's experimental API (default: disabled)]),
89               [OMAP=$enableval], [OMAP=no])
90
91 AC_ARG_ENABLE(exynos-experimental-api,
92               AS_HELP_STRING([--enable-exynos-experimental-api],
93               [Enable support for EXYNOS's experimental API (default: disabled)]),
94               [EXYNOS=$enableval], [EXYNOS=no])
95
96 AC_ARG_ENABLE(freedreno-experimental-api,
97               AS_HELP_STRING([--enable-freedreno-experimental-api],
98               [Enable support for freedreno's experimental API (default: disabled)]),
99               [FREEDRENO=$enableval], [FREEDRENO=no])
100
101 AC_ARG_ENABLE(tegra-experimental-api,
102               AS_HELP_STRING([--enable-tegra-experimental-api],
103               [Enable support for Tegra's experimental API (default: disabled)]),
104               [TEGRA=$enableval], [TEGRA=no])
105
106 AC_ARG_ENABLE(install-test-programs,
107                   AS_HELP_STRING([--enable-install-test-programs],
108                   [Install test programs (default: no)]),
109                   [INSTALL_TESTS=$enableval], [INSTALL_TESTS=no])
110
111 dnl ===========================================================================
112 dnl check compiler flags
113 AC_DEFUN([LIBDRM_CC_TRY_FLAG], [
114   AC_MSG_CHECKING([whether $CC supports $1])
115
116   libdrm_save_CFLAGS="$CFLAGS"
117   CFLAGS="$CFLAGS $1"
118
119   AC_COMPILE_IFELSE([AC_LANG_SOURCE([ ])], [libdrm_cc_flag=yes], [libdrm_cc_flag=no])
120   CFLAGS="$libdrm_save_CFLAGS"
121
122   if test "x$libdrm_cc_flag" = "xyes"; then
123     ifelse([$2], , :, [$2])
124   else
125     ifelse([$3], , :, [$3])
126   fi
127   AC_MSG_RESULT([$libdrm_cc_flag])
128 ])
129
130 dnl We use clock_gettime to check for timeouts in drmWaitVBlank
131
132 AC_CHECK_FUNCS([clock_gettime], [CLOCK_LIB=],
133                [AC_CHECK_LIB([rt], [clock_gettime], [CLOCK_LIB=-lrt],
134                              [AC_MSG_ERROR([Couldn't find clock_gettime])])])
135 AC_SUBST([CLOCK_LIB])
136
137 AC_CHECK_FUNCS([open_memstream], [HAVE_OPEN_MEMSTREAM=yes])
138
139 dnl Use lots of warning flags with with gcc and compatible compilers
140
141 dnl Note: if you change the following variable, the cache is automatically
142 dnl skipped and all flags rechecked.  So there's no need to do anything
143 dnl else.  If for any reason you need to force a recheck, just change
144 dnl MAYBE_WARN in an ignorable way (like adding whitespace)
145
146 MAYBE_WARN="-Wall -Wextra \
147 -Wsign-compare -Werror-implicit-function-declaration \
148 -Wpointer-arith -Wwrite-strings -Wstrict-prototypes \
149 -Wmissing-prototypes -Wmissing-declarations -Wnested-externs \
150 -Wpacked -Wswitch-enum -Wmissing-format-attribute \
151 -Wstrict-aliasing=2 -Winit-self \
152 -Wdeclaration-after-statement -Wold-style-definition \
153 -Wno-missing-field-initializers -Wno-unused-parameter \
154 -Wno-attributes -Wno-long-long -Winline"
155
156 # invalidate cached value if MAYBE_WARN has changed
157 if test "x$libdrm_cv_warn_maybe" != "x$MAYBE_WARN"; then
158         unset libdrm_cv_warn_cflags
159 fi
160 AC_CACHE_CHECK([for supported warning flags], libdrm_cv_warn_cflags, [
161         echo
162         WARN_CFLAGS=""
163
164         # Some warning options are not supported by all versions of
165         # gcc, so test all desired options against the current
166         # compiler.
167         #
168         # Note that there are some order dependencies
169         # here. Specifically, an option that disables a warning will
170         # have no net effect if a later option then enables that
171         # warnings, (perhaps implicitly). So we put some grouped
172         # options (-Wall and -Wextra) up front and the -Wno options
173         # last.
174
175         for W in $MAYBE_WARN; do
176                 LIBDRM_CC_TRY_FLAG([$W], [WARN_CFLAGS="$WARN_CFLAGS $W"])
177         done
178
179         libdrm_cv_warn_cflags=$WARN_CFLAGS
180         libdrm_cv_warn_maybe=$MAYBE_WARN
181
182         AC_MSG_CHECKING([which warning flags were supported])])
183 WARN_CFLAGS="$libdrm_cv_warn_cflags"
184
185 # Check for atomic intrinsics
186 AC_CACHE_CHECK([for native atomic primitives], drm_cv_atomic_primitives, [
187         drm_cv_atomic_primitives="none"
188
189         AC_LINK_IFELSE([AC_LANG_PROGRAM([[
190         int atomic_add(int i) { return __sync_fetch_and_add (&i, 1); }
191         int atomic_cmpxchg(int i, int j, int k) { return __sync_val_compare_and_swap (&i, j, k); }
192                                           ]],[[]])], [drm_cv_atomic_primitives="Intel"],[])
193
194         if test "x$drm_cv_atomic_primitives" = "xnone"; then
195                 AC_CHECK_HEADER([atomic_ops.h], drm_cv_atomic_primitives="libatomic-ops")
196         fi
197
198         # atomic functions defined in <atomic.h> & libc on Solaris
199         if test "x$drm_cv_atomic_primitives" = "xnone"; then
200                 AC_CHECK_FUNC([atomic_cas_uint], drm_cv_atomic_primitives="Solaris")
201         fi
202 ])
203
204 if test "x$drm_cv_atomic_primitives" = xIntel; then
205         AC_DEFINE(HAVE_LIBDRM_ATOMIC_PRIMITIVES, 1,
206                 [Enable if your compiler supports the Intel __sync_* atomic primitives])
207 fi
208 if test "x$drm_cv_atomic_primitives" = "xlibatomic-ops"; then
209         AC_DEFINE(HAVE_LIB_ATOMIC_OPS, 1, [Enable if you have libatomic-ops-dev installed])
210 fi
211
212 if test "x$INTEL" != "xno" -o "x$RADEON" != "xno" -o "x$NOUVEAU" != "xno"; then
213         if test "x$drm_cv_atomic_primitives" = "xnone"; then
214                 if test "x$INTEL" != "xauto"; then
215                         if test "x$INTEL" != "xno"; then
216                                 AC_MSG_ERROR([libdrm_intel 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 Intel GPUs by passing --disable-intel to ./configure])
217                         fi
218                 else
219                         AC_MSG_WARN([Disabling libdrm_intel. 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.])
220                         INTEL=no
221                 fi
222                 if test "x$RADEON" != "xauto"; then
223                         if test "x$RADEON" != "xno"; then
224                                 AC_MSG_ERROR([libdrm_radeon 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 Radeon GPUs by passing --disable-radeon to ./configure])
225                         fi
226                 else
227                         AC_MSG_WARN([Disabling libdrm_radeon. 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.])
228                         RADEON=no
229                 fi
230                 if test "x$NOUVEAU" != "xauto"; then
231                         if test "x$NOUVEAU" != "xno"; then
232                                 AC_MSG_ERROR([libdrm_nouveau 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 NVIDIA GPUs by passing --disable-nouveau to ./configure])
233                         fi
234                 else
235                         AC_MSG_WARN([Disabling libdrm_nouveau. 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.])
236                         NOUVEAU=no
237                 fi
238         else
239                 if test "x$INTEL" != "xno"; then
240                         case $host_cpu in
241                                 i?86|x86_64) INTEL=yes ;;
242                                 *) INTEL=no ;;
243                         esac
244                 fi
245                 if test "x$RADEON" != "xno"; then
246                         RADEON=yes
247                 fi
248                 if test "x$NOUVEAU" != "xno"; then
249                         NOUVEAU=yes
250                 fi
251         fi
252 fi
253
254 if test "x$INTEL" != "xno"; then
255         PKG_CHECK_MODULES(PCIACCESS, [pciaccess >= 0.10])
256 fi
257 AC_SUBST(PCIACCESS_CFLAGS)
258 AC_SUBST(PCIACCESS_LIBS)
259
260 if test "x$UDEV" = xyes; then
261         AC_DEFINE(UDEV, 1, [Have UDEV support])
262 fi
263
264 AC_CANONICAL_HOST
265 if test "x$LIBKMS" = xauto ; then
266         case $host_os in
267                 linux*)         LIBKMS="yes" ;;
268                 freebsd* | kfreebsd*-gnu)
269                                 LIBKMS="yes" ;;
270                 dragonfly*)     LIBKMS="yes" ;;
271                 *)              LIBKMS="no" ;;
272         esac
273 fi
274
275 AM_CONDITIONAL(HAVE_LIBKMS, [test "x$LIBKMS" = xyes])
276
277 AM_CONDITIONAL(HAVE_INTEL, [test "x$INTEL" = xyes])
278 if test "x$INTEL" = xyes; then
279         AC_DEFINE(HAVE_INTEL, 1, [Have intel support])
280 fi
281
282 AM_CONDITIONAL(HAVE_VMWGFX, [test "x$VMWGFX" = xyes])
283 if test "x$VMWGFX" = xyes; then
284         AC_DEFINE(HAVE_VMWGFX, 1, [Have vmwgfx kernel headers])
285 fi
286
287 AM_CONDITIONAL(HAVE_NOUVEAU, [test "x$NOUVEAU" = xyes])
288 if test "x$NOUVEAU" = xyes; then
289         AC_DEFINE(HAVE_NOUVEAU, 1, [Have nouveau (nvidia) support])
290 fi
291
292 AM_CONDITIONAL(HAVE_OMAP, [test "x$OMAP" = xyes])
293 if test "x$OMAP" = xyes; then
294         AC_DEFINE(HAVE_OMAP, 1, [Have OMAP support])
295 fi
296
297 AM_CONDITIONAL(HAVE_EXYNOS, [test "x$EXYNOS" = xyes])
298 if test "x$EXYNOS" = xyes; then
299         AC_DEFINE(HAVE_EXYNOS, 1, [Have EXYNOS support])
300 fi
301
302 AM_CONDITIONAL(HAVE_FREEDRENO, [test "x$FREEDRENO" = xyes])
303 if test "x$FREEDRENO" = xyes; then
304         AC_DEFINE(HAVE_FREEDRENO, 1, [Have freedreno support])
305 fi
306
307 AM_CONDITIONAL(HAVE_RADEON, [test "x$RADEON" = xyes])
308 if test "x$RADEON" = xyes; then
309         AC_DEFINE(HAVE_RADEON, 1, [Have radeon support])
310 fi
311
312 AM_CONDITIONAL(HAVE_TEGRA, [test "x$TEGRA" = xyes])
313 if test "x$TEGRA" = xyes; then
314         AC_DEFINE(HAVE_TEGRA, 1, [Have Tegra support])
315 fi
316
317 AM_CONDITIONAL(HAVE_INSTALL_TESTS, [test "x$INSTALL_TESTS" = xyes])
318 if test "x$INSTALL_TESTS" = xyes; then
319         AC_DEFINE(HAVE_INSTALL_TESTS, 1, [Install test programs])
320 fi
321
322 AC_ARG_ENABLE([cairo-tests],
323               [AS_HELP_STRING([--enable-cairo-tests],
324                               [Enable support for Cairo rendering in tests (default: auto)])],
325               [CAIRO=$enableval], [CAIRO=auto])
326 PKG_CHECK_MODULES(CAIRO, cairo, [HAVE_CAIRO=yes], [HAVE_CAIRO=no])
327 AC_MSG_CHECKING([whether to enable Cairo tests])
328 if test "x$CAIRO" = xauto; then
329         CAIRO="$HAVE_CAIRO"
330 fi
331 if test "x$CAIRO" = xyes; then
332         if ! test "x$HAVE_CAIRO" = xyes; then
333                 AC_MSG_ERROR([Cairo support required but not present])
334         fi
335         AC_DEFINE(HAVE_CAIRO, 1, [Have Cairo support])
336 fi
337 AC_MSG_RESULT([$CAIRO])
338 AM_CONDITIONAL(HAVE_CAIRO, [test "x$CAIRO" = xyes])
339
340 # For enumerating devices in test case
341 PKG_CHECK_MODULES(LIBUDEV, libudev, [HAVE_LIBUDEV=yes], [HAVE_LIBUDEV=no])
342 if test "x$HAVE_LIBUDEV" = xyes; then
343         AC_DEFINE(HAVE_LIBUDEV, 1, [Have libudev support])
344 fi
345 AM_CONDITIONAL(HAVE_LIBUDEV, [test "x$HAVE_LIBUDEV" = xyes])
346
347 # xsltproc for docbook manpages
348 AC_ARG_ENABLE([manpages],
349               AS_HELP_STRING([--disable-manpages], [disable manpages @<:@default=enabled@:>@]),
350               [MANS=$enableval], [MANS=auto])
351 AC_PATH_PROG(XSLTPROC, xsltproc)
352 AM_CONDITIONAL([BUILD_MANPAGES], [test "x$XSLTPROC" != "x" -a "x$MANS" != "xno"])
353
354 # check for offline man-pages stylesheet
355 AC_MSG_CHECKING([for docbook manpages stylesheet])
356 MANPAGES_STYLESHEET="http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl"
357 AC_PATH_PROGS_FEATURE_CHECK([XSLTPROC_TMP], [xsltproc],
358                             AS_IF([`"$ac_path_XSLTPROC_TMP" --nonet "$MANPAGES_STYLESHEET" > /dev/null 2>&1`],
359                                   [HAVE_MANPAGES_STYLESHEET=yes]))
360 if test "x$HAVE_MANPAGES_STYLESHEET" = "xyes"; then
361         AC_SUBST(MANPAGES_STYLESHEET)
362         AC_MSG_RESULT([yes])
363 else
364         AC_MSG_RESULT([no])
365 fi
366 AM_CONDITIONAL([HAVE_MANPAGES_STYLESHEET], [test "x$HAVE_MANPAGES_STYLESHEET" = "xyes"])
367
368 PKG_CHECK_MODULES(VALGRIND, [valgrind], [have_valgrind=yes], [have_valgrind=no])
369 if test "x$have_valgrind" = "xyes"; then
370         AC_DEFINE([HAVE_VALGRIND], 1, [Use valgrind intrinsics to suppress false warnings])
371 fi
372
373 AC_ARG_WITH([kernel-source],
374             [AS_HELP_STRING([--with-kernel-source],
375               [specify path to linux kernel source])],
376             [kernel_source="$with_kernel_source"])
377 AC_SUBST(kernel_source)
378
379 dnl Add flags for gcc and g++
380 if test "x$GCC" = xyes; then
381     # Enable -fvisibility=hidden if using a gcc that supports it
382     save_CFLAGS="$CFLAGS"
383     AC_MSG_CHECKING([whether $CC supports -fvisibility=hidden])
384     VISIBILITY_CFLAGS="-fvisibility=hidden"
385     CFLAGS="$CFLAGS $VISIBILITY_CFLAGS"
386     AC_LINK_IFELSE([AC_LANG_PROGRAM()], AC_MSG_RESULT([yes]),
387                    [VISIBILITY_CFLAGS=""; AC_MSG_RESULT([no])]);
388
389     # Restore CFLAGS; VISIBILITY_CFLAGS are added to it where needed.
390     CFLAGS=$save_CFLAGS
391
392     if test "x$VISIBILITY_CFLAGS" != x; then
393         AC_DEFINE(HAVE_VISIBILITY, 1, [Compiler has -fvisibility support])
394     fi
395
396     AC_SUBST([VISIBILITY_CFLAGS])
397 fi
398
399 AC_SUBST(WARN_CFLAGS)
400 AC_CONFIG_FILES([
401         Makefile
402         libkms/Makefile
403         libkms/libkms.pc
404         intel/Makefile
405         intel/libdrm_intel.pc
406         radeon/Makefile
407         radeon/libdrm_radeon.pc
408         nouveau/Makefile
409         nouveau/libdrm_nouveau.pc
410         omap/Makefile
411         omap/libdrm_omap.pc
412         exynos/Makefile
413         exynos/libdrm_exynos.pc
414         freedreno/Makefile
415         freedreno/libdrm_freedreno.pc
416         tegra/Makefile
417         tegra/libdrm_tegra.pc
418         tests/Makefile
419         tests/modeprint/Makefile
420         tests/modetest/Makefile
421         tests/kmstest/Makefile
422         tests/proptest/Makefile
423         tests/radeon/Makefile
424         tests/vbltest/Makefile
425         tests/exynos/Makefile
426         tests/tegra/Makefile
427         man/Makefile
428         libdrm.pc])
429 AC_OUTPUT
430
431 echo ""
432 echo "$PACKAGE_STRING will be compiled with:"
433 echo ""
434 echo "  libkms         $LIBKMS"
435 echo "  Intel API      $INTEL"
436 echo "  vmwgfx API     $VMWGFX"
437 echo "  Radeon API     $RADEON"
438 echo "  Nouveau API    $NOUVEAU"
439 echo "  OMAP API       $OMAP"
440 echo "  EXYNOS API     $EXYNOS"
441 echo "  Freedreno API  $FREEDRENO"
442 echo "  Tegra API      $TEGRA"
443 echo ""