OSDN Git Service

configure.ac: move AC_ARG_ENABLE([gallium-llvm] hunk further up
[android-x86/external-mesa.git] / configure.ac
1 dnl Copyright © 2011-2014 Intel Corporation
2 dnl Copyright © 2011-2014 Emil Velikov <emil.l.velikov@gmail.com>
3 dnl Copyright © 2007-2010 Dan Nicholson
4 dnl Copyright © 2010-2014 Marek Olšák <maraeo@gmail.com>
5 dnl Copyright © 2010-2014 Christian König
6 dnl Copyright © 2012-2014 Tom Stellard <tstellar@gmail.com>
7 dnl Copyright © 2009-2012 Jakob Bornecrantz
8 dnl Copyright © 2009-2014 Jon TURNEY
9 dnl Copyright © 2011-2012 Benjamin Franzke
10 dnl Copyright © 2008-2014 David Airlie
11 dnl Copyright © 2009-2013 Brian Paul
12 dnl
13 dnl Permission is hereby granted, free of charge, to any person obtaining a
14 dnl copy of this software and associated documentation files (the "Software"),
15 dnl to deal in the Software without restriction, including without limitation
16 dnl the rights to use, copy, modify, merge, publish, distribute, sublicense,
17 dnl and/or sell copies of the Software, and to permit persons to whom the
18 dnl Software is furnished to do so, subject to the following conditions:
19 dnl
20 dnl The above copyright notice and this permission notice (including the next
21 dnl paragraph) shall be included in all copies or substantial portions of the
22 dnl Software.
23 dnl
24 dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
25 dnl IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26 dnl FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
27 dnl THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
28 dnl LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
29 dnl FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
30 dnl DEALINGS IN THE SOFTWARE.
31 dnl
32 dnl Process this file with autoconf to create configure.
33
34 AC_PREREQ([2.60])
35
36 dnl Tell the user about autoconf.html in the --help output
37 m4_divert_once([HELP_END], [
38 See docs/autoconf.html for more details on the options for Mesa.])
39
40 m4_define(MESA_VERSION, m4_normalize(m4_include(VERSION)))
41 AC_INIT([Mesa], [MESA_VERSION],
42     [https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa])
43 AC_CONFIG_AUX_DIR([bin])
44 AC_CONFIG_MACRO_DIR([m4])
45 AC_CANONICAL_SYSTEM
46 AM_INIT_AUTOMAKE([foreign tar-ustar dist-xz subdir-objects])
47
48 dnl We only support native Windows builds (MinGW/MSVC) through SCons.
49 case "$host_os" in
50 mingw*)
51     AC_MSG_ERROR([MinGW build not supported through autoconf/automake, use SCons instead])
52     ;;
53 esac
54
55 # Support silent build rules, requires at least automake-1.11. Disable
56 # by either passing --disable-silent-rules to configure or passing V=1
57 # to make
58 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])],
59     [AC_SUBST([AM_DEFAULT_VERBOSITY], [1])])
60
61 m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
62
63 dnl Set internal versions
64 OSMESA_VERSION=8
65 AC_SUBST([OSMESA_VERSION])
66 OPENCL_VERSION=1
67 AC_SUBST([OPENCL_VERSION])
68
69 # The idea is that libdrm is distributed as one cohesive package, even
70 # though it is composed of multiple libraries. However some drivers
71 # may have different version requirements than others. This list
72 # codifies which drivers need which version of libdrm. Any libdrm
73 # version dependencies in non-driver-specific code should be reflected
74 # in the first entry.
75 LIBDRM_REQUIRED=2.4.66
76 LIBDRM_RADEON_REQUIRED=2.4.56
77 LIBDRM_AMDGPU_REQUIRED=2.4.63
78 LIBDRM_INTEL_REQUIRED=2.4.75
79 LIBDRM_NVVIEUX_REQUIRED=2.4.66
80 LIBDRM_NOUVEAU_REQUIRED=2.4.66
81 LIBDRM_FREEDRENO_REQUIRED=2.4.74
82 LIBDRM_VC4_REQUIRED=2.4.69
83 LIBDRM_ETNAVIV_REQUIRED=2.4.74
84
85 dnl Versions for external dependencies
86 DRI2PROTO_REQUIRED=2.6
87 DRI3PROTO_REQUIRED=1.0
88 PRESENTPROTO_REQUIRED=1.0
89 GLPROTO_REQUIRED=1.4.14
90 LIBOMXIL_BELLAGIO_REQUIRED=0.0
91 LIBVA_REQUIRED=0.38.0
92 VDPAU_REQUIRED=1.1
93 WAYLAND_REQUIRED=1.11
94 XCB_REQUIRED=1.9.3
95 XCBDRI2_REQUIRED=1.8
96 XCBGLX_REQUIRED=1.8.1
97 XSHMFENCE_REQUIRED=1.1
98 XVMC_REQUIRED=1.0.6
99 PYTHON_MAKO_REQUIRED=0.8.0
100 LIBSENSORS_REQUIRED=4.0.0
101
102 dnl LLVM versions
103 LLVM_REQUIRED_GALLIUM=3.3.0
104 LLVM_REQUIRED_OPENCL=3.6.0
105 LLVM_REQUIRED_R600=3.6.0
106 LLVM_REQUIRED_RADEONSI=3.6.0
107 LLVM_REQUIRED_RADV=3.9.0
108 LLVM_REQUIRED_SWR=3.6.0
109
110 dnl Check for progs
111 AC_PROG_CPP
112 AC_PROG_CC
113 AC_PROG_CXX
114 AM_PROG_CC_C_O
115 AM_PROG_AS
116 AX_CHECK_GNU_MAKE
117 AC_CHECK_PROGS([PYTHON2], [python2.7 python2 python])
118 AC_PROG_SED
119 AC_PROG_MKDIR_P
120
121 AC_SYS_LARGEFILE
122
123 LT_PREREQ([2.2])
124 LT_INIT([disable-static])
125
126 AC_CHECK_PROG(RM, rm, [rm -f])
127 AC_CHECK_PROG(XXD, xxd, [xxd])
128
129 AX_PROG_BISON([],
130               AS_IF([test ! -f "$srcdir/src/compiler/glsl/glcpp/glcpp-parse.c"],
131                     [AC_MSG_ERROR([bison not found - unable to compile glcpp-parse.y])]))
132 AX_PROG_FLEX([],
133              AS_IF([test ! -f "$srcdir/src/compiler/glsl/glcpp/glcpp-lex.c"],
134                    [AC_MSG_ERROR([flex not found - unable to compile glcpp-lex.l])]))
135
136 AC_CHECK_PROG(INDENT, indent, indent, cat)
137 if test "x$INDENT" != "xcat"; then
138     # Only GNU indent is supported
139     INDENT_VERSION=`indent --version | grep GNU`
140     if test $? -eq 0; then
141        AC_SUBST(INDENT_FLAGS, '-i4 -nut -br -brs -npcs -ce -TGLubyte -TGLbyte -TBool')
142     else
143        INDENT="cat"
144     fi
145 fi
146
147 AX_CHECK_PYTHON_MAKO_MODULE($PYTHON_MAKO_REQUIRED)
148
149 if test -z "$PYTHON2"; then
150     if test ! -f "$srcdir/src/util/format_srgb.c"; then
151         AC_MSG_ERROR([Python not found - unable to generate sources])
152     fi
153 else
154     if test "x$acv_mako_found" = xno; then
155         if test ! -f "$srcdir/src/mesa/main/format_unpack.c"; then
156             AC_MSG_ERROR([Python mako module v$PYTHON_MAKO_REQUIRED or higher not found])
157         fi
158     fi
159 fi
160
161 AC_PROG_INSTALL
162
163 dnl We need a POSIX shell for parts of the build. Assume we have one
164 dnl in most cases.
165 case "$host_os" in
166 solaris*)
167     # Solaris /bin/sh is too old/non-POSIX compliant
168     AC_PATH_PROGS(POSIX_SHELL, [ksh93 ksh sh])
169     SHELL="$POSIX_SHELL"
170     ;;
171 esac
172
173 dnl clang is mostly GCC-compatible, but its version is much lower,
174 dnl so we have to check for it.
175 AC_MSG_CHECKING([if compiling with clang])
176
177 AC_COMPILE_IFELSE(
178 [AC_LANG_PROGRAM([], [[
179 #ifndef __clang__
180        not clang
181 #endif
182 ]])],
183 [acv_mesa_CLANG=yes], [acv_mesa_CLANG=no])
184
185 AC_MSG_RESULT([$acv_mesa_CLANG])
186
187 dnl If we're using GCC, make sure that it is at least version 4.2.0.  Older
188 dnl versions are explictly not supported.
189 GEN_ASM_OFFSETS=no
190 USE_GNU99=no
191 if test "x$GCC" = xyes -a "x$acv_mesa_CLANG" = xno; then
192     AC_MSG_CHECKING([whether gcc version is sufficient])
193     major=0
194     minor=0
195
196     GCC_VERSION=`$CC -dumpversion`
197     if test $? -eq 0; then
198         GCC_VERSION_MAJOR=`echo $GCC_VERSION | cut -d. -f1`
199         GCC_VERSION_MINOR=`echo $GCC_VERSION | cut -d. -f2`
200     fi
201
202     if test $GCC_VERSION_MAJOR -lt 4 -o $GCC_VERSION_MAJOR -eq 4 -a $GCC_VERSION_MINOR -lt 2 ; then
203         AC_MSG_RESULT([no])
204         AC_MSG_ERROR([If using GCC, version 4.2.0 or later is required.])
205     else
206         AC_MSG_RESULT([yes])
207     fi
208
209     if test $GCC_VERSION_MAJOR -lt 4 -o $GCC_VERSION_MAJOR -eq 4 -a $GCC_VERSION_MINOR -lt 6 ; then
210         USE_GNU99=yes
211     fi
212     if test "x$cross_compiling" = xyes; then
213         GEN_ASM_OFFSETS=yes
214     fi
215 fi
216
217 dnl We don't support building Mesa with Sun C compiler
218 dnl https://bugs.freedesktop.org/show_bug.cgi?id=93189
219 AC_CHECK_DECL([__SUNPRO_C], [SUNCC=yes], [SUNCC=no])
220 if test "x$SUNCC" = xyes; then
221     AC_MSG_ERROR([Building with Sun C compiler is not supported, use GCC instead.])
222 fi
223
224 dnl Check for compiler builtins
225 AX_GCC_BUILTIN([__builtin_bswap32])
226 AX_GCC_BUILTIN([__builtin_bswap64])
227 AX_GCC_BUILTIN([__builtin_clz])
228 AX_GCC_BUILTIN([__builtin_clzll])
229 AX_GCC_BUILTIN([__builtin_ctz])
230 AX_GCC_BUILTIN([__builtin_expect])
231 AX_GCC_BUILTIN([__builtin_ffs])
232 AX_GCC_BUILTIN([__builtin_ffsll])
233 AX_GCC_BUILTIN([__builtin_popcount])
234 AX_GCC_BUILTIN([__builtin_popcountll])
235 AX_GCC_BUILTIN([__builtin_unreachable])
236
237 AX_GCC_FUNC_ATTRIBUTE([const])
238 AX_GCC_FUNC_ATTRIBUTE([flatten])
239 AX_GCC_FUNC_ATTRIBUTE([format])
240 AX_GCC_FUNC_ATTRIBUTE([malloc])
241 AX_GCC_FUNC_ATTRIBUTE([packed])
242 AX_GCC_FUNC_ATTRIBUTE([pure])
243 AX_GCC_FUNC_ATTRIBUTE([returns_nonnull])
244 AX_GCC_FUNC_ATTRIBUTE([unused])
245 AX_GCC_FUNC_ATTRIBUTE([visibility])
246 AX_GCC_FUNC_ATTRIBUTE([warn_unused_result])
247 AX_GCC_FUNC_ATTRIBUTE([weak])
248 AX_GCC_FUNC_ATTRIBUTE([alias])
249
250 AM_CONDITIONAL([GEN_ASM_OFFSETS], test "x$GEN_ASM_OFFSETS" = xyes)
251
252 dnl Make sure the pkg-config macros are defined
253 m4_ifndef([PKG_PROG_PKG_CONFIG],
254     [m4_fatal([Could not locate the pkg-config autoconf macros.
255   These are usually located in /usr/share/aclocal/pkg.m4. If your macros
256   are in a different location, try setting the environment variable
257   ACLOCAL="aclocal -I/other/macro/dir" before running autoreconf.])])
258 PKG_PROG_PKG_CONFIG()
259
260 dnl LIB_DIR - library basename
261 LIB_DIR=`echo $libdir | $SED 's%.*/%%'`
262 AC_SUBST([LIB_DIR])
263
264 dnl Cache LDFLAGS and CPPFLAGS so we can add to them and restore later
265 _SAVE_LDFLAGS="$LDFLAGS"
266 _SAVE_CPPFLAGS="$CPPFLAGS"
267
268 dnl Compiler macros
269 DEFINES="-D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS"
270 AC_SUBST([DEFINES])
271 android=no
272 case "$host_os" in
273 *-android)
274     android=yes
275     ;;
276 linux*|*-gnu*|gnu*|cygwin*)
277     DEFINES="$DEFINES -D_GNU_SOURCE"
278     ;;
279 solaris*)
280     DEFINES="$DEFINES -DSVR4"
281     ;;
282 esac
283
284 AM_CONDITIONAL(HAVE_ANDROID, test "x$android" = xyes)
285
286 dnl Add flags for gcc and g++
287 if test "x$GCC" = xyes; then
288     CFLAGS="$CFLAGS -Wall"
289
290     if test "x$USE_GNU99" = xyes; then
291         CFLAGS="$CFLAGS -std=gnu99"
292     else
293         CFLAGS="$CFLAGS -std=c99"
294     fi
295
296     # Enable -Werror=implicit-function-declaration and
297     # -Werror=missing-prototypes, if available, or otherwise, just
298     # -Wmissing-prototypes.  This is particularly useful to avoid
299     # generating a loadable driver module that has undefined symbols.
300     save_CFLAGS="$CFLAGS"
301     AC_MSG_CHECKING([whether $CC supports -Werror=missing-prototypes])
302     CFLAGS="$CFLAGS -Werror=implicit-function-declaration"
303     CFLAGS="$CFLAGS -Werror=missing-prototypes"
304     AC_LINK_IFELSE([AC_LANG_PROGRAM()],
305                    AC_MSG_RESULT([yes]),
306                    [CFLAGS="$save_CFLAGS -Wmissing-prototypes";
307                     AC_MSG_RESULT([no])]);
308
309     # Enable -fvisibility=hidden if using a gcc that supports it
310     save_CFLAGS="$CFLAGS"
311     AC_MSG_CHECKING([whether $CC supports -fvisibility=hidden])
312     VISIBILITY_CFLAGS="-fvisibility=hidden"
313     CFLAGS="$CFLAGS $VISIBILITY_CFLAGS"
314     AC_LINK_IFELSE([AC_LANG_PROGRAM()], AC_MSG_RESULT([yes]),
315                    [VISIBILITY_CFLAGS=""; AC_MSG_RESULT([no])]);
316
317     # Restore CFLAGS; VISIBILITY_CFLAGS are added to it where needed.
318     CFLAGS=$save_CFLAGS
319
320     # We don't want floating-point math functions to set errno or trap
321     CFLAGS="$CFLAGS -fno-math-errno -fno-trapping-math"
322
323     # Flags to help ensure that certain portions of the code -- and only those
324     # portions -- can be built with MSVC:
325     # - src/util, src/gallium/auxiliary, rc/gallium/drivers/llvmpipe, and
326     # - non-Linux/Posix OpenGL portions needs to build on MSVC 2013 (which
327     #   supports most of C99)
328     # - the rest has no compiler compiler restrictions
329     MSVC2013_COMPAT_CFLAGS="-Werror=pointer-arith"
330     MSVC2013_COMPAT_CXXFLAGS="-Werror=pointer-arith"
331
332     # Enable -Werror=vla if compiler supports it
333     save_CFLAGS="$CFLAGS"
334     AC_MSG_CHECKING([whether $CC supports -Werror=vla])
335     CFLAGS="$CFLAGS -Werror=vla"
336     AC_LINK_IFELSE([AC_LANG_PROGRAM()],
337                    [MSVC2013_COMPAT_CFLAGS="$MSVC2013_COMPAT_CFLAGS -Werror=vla";
338                     MSVC2013_COMPAT_CXXFLAGS="$MSVC2013_COMPAT_CXXFLAGS -Werror=vla";
339                     AC_MSG_RESULT([yes])],
340                     AC_MSG_RESULT([no]));
341     CFLAGS="$save_CFLAGS"
342 fi
343 if test "x$GXX" = xyes; then
344     CXXFLAGS="$CXXFLAGS -Wall"
345
346     # Enable -fvisibility=hidden if using a gcc that supports it
347     save_CXXFLAGS="$CXXFLAGS"
348     AC_MSG_CHECKING([whether $CXX supports -fvisibility=hidden])
349     VISIBILITY_CXXFLAGS="-fvisibility=hidden"
350     CXXFLAGS="$CXXFLAGS $VISIBILITY_CXXFLAGS"
351     AC_LANG_PUSH([C++])
352     AC_LINK_IFELSE([AC_LANG_PROGRAM()], AC_MSG_RESULT([yes]),
353                    [VISIBILITY_CXXFLAGS="" ; AC_MSG_RESULT([no])]);
354     AC_LANG_POP([C++])
355
356     # Restore CXXFLAGS; VISIBILITY_CXXFLAGS are added to it where needed.
357     CXXFLAGS=$save_CXXFLAGS
358
359     # We don't want floating-point math functions to set errno or trap
360     CXXFLAGS="$CXXFLAGS -fno-math-errno -fno-trapping-math"
361 fi
362
363 AC_SUBST([MSVC2013_COMPAT_CFLAGS])
364 AC_SUBST([MSVC2013_COMPAT_CXXFLAGS])
365
366 dnl even if the compiler appears to support it, using visibility attributes isn't
367 dnl going to do anything useful currently on cygwin apart from emit lots of warnings
368 case "$host_os" in
369 cygwin*)
370     VISIBILITY_CFLAGS=""
371     VISIBILITY_CXXFLAGS=""
372     ;;
373 esac
374
375 AC_SUBST([VISIBILITY_CFLAGS])
376 AC_SUBST([VISIBILITY_CXXFLAGS])
377
378 dnl
379 dnl Optional flags, check for compiler support
380 dnl
381 SSE41_CFLAGS="-msse4.1"
382 dnl Code compiled by GCC with -msse* assumes a 16 byte aligned
383 dnl stack, but on x86-32 such alignment is not guaranteed.
384 case "$target_cpu" in
385 i?86)
386     SSE41_CFLAGS="$SSE41_CFLAGS -mstackrealign"
387     ;;
388 esac
389 save_CFLAGS="$CFLAGS"
390 CFLAGS="$SSE41_CFLAGS $CFLAGS"
391 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
392 #include <smmintrin.h>
393 int param;
394 int main () {
395     __m128i a = _mm_set1_epi32 (param), b = _mm_set1_epi32 (param + 1), c;
396     c = _mm_max_epu32(a, b);
397     return _mm_cvtsi128_si32(c);
398 }]])], SSE41_SUPPORTED=1)
399 CFLAGS="$save_CFLAGS"
400 if test "x$SSE41_SUPPORTED" = x1; then
401     DEFINES="$DEFINES -DUSE_SSE41"
402 fi
403 AM_CONDITIONAL([SSE41_SUPPORTED], [test x$SSE41_SUPPORTED = x1])
404 AC_SUBST([SSE41_CFLAGS], $SSE41_CFLAGS)
405
406 dnl Check for new-style atomic builtins
407 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
408 int main() {
409     int n;
410     return __atomic_load_n(&n, __ATOMIC_ACQUIRE);
411 }]])], GCC_ATOMIC_BUILTINS_SUPPORTED=1)
412 if test "x$GCC_ATOMIC_BUILTINS_SUPPORTED" = x1; then
413     DEFINES="$DEFINES -DUSE_GCC_ATOMIC_BUILTINS"
414 fi
415 AM_CONDITIONAL([GCC_ATOMIC_BUILTINS_SUPPORTED], [test x$GCC_ATOMIC_BUILTINS_SUPPORTED = x1])
416
417 dnl Check for Endianness
418 AC_C_BIGENDIAN(
419    little_endian=no,
420    little_endian=yes,
421    little_endian=no,
422    little_endian=no
423 )
424
425 dnl Check for POWER8 Architecture
426 PWR8_CFLAGS="-mpower8-vector"
427 have_pwr8_intrinsics=no
428 AC_MSG_CHECKING(whether gcc supports -mpower8-vector)
429 save_CFLAGS=$CFLAGS
430 CFLAGS="$PWR8_CFLAGS $CFLAGS"
431 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
432 #if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8))
433 #error "Need GCC >= 4.8 for sane POWER8 support"
434 #endif
435 #include <altivec.h>
436 int main () {
437     vector unsigned char r;
438     vector unsigned int v = vec_splat_u32 (1);
439     r = __builtin_vec_vgbbd ((vector unsigned char) v);
440     return 0;
441 }]])], have_pwr8_intrinsics=yes)
442 CFLAGS=$save_CFLAGS
443
444 AC_ARG_ENABLE(pwr8,
445    [AC_HELP_STRING([--disable-pwr8-inst],
446                    [disable POWER8-specific instructions])],
447    [enable_pwr8=$enableval], [enable_pwr8=auto])
448
449 if test "x$enable_pwr8" = xno ; then
450    have_pwr8_intrinsics=disabled
451 fi
452
453 if test $have_pwr8_intrinsics = yes && test $little_endian = yes ; then
454    DEFINES="$DEFINES -D_ARCH_PWR8"
455    CXXFLAGS="$CXXFLAGS $PWR8_CFLAGS"
456    CFLAGS="$CFLAGS $PWR8_CFLAGS"
457 else
458    PWR8_CFLAGS=
459 fi
460
461 AC_MSG_RESULT($have_pwr8_intrinsics)
462 if test "x$enable_pwr8" = xyes && test $have_pwr8_intrinsics = no ; then
463    AC_MSG_ERROR([POWER8 compiler support not detected])
464 fi
465
466 if test $have_pwr8_intrinsics = yes && test $little_endian = no ; then
467    AC_MSG_WARN([POWER8 optimization is enabled only on POWER8 Little-Endian])
468 fi
469
470 AC_SUBST([PWR8_CFLAGS], $PWR8_CFLAGS)
471
472 dnl Can't have static and shared libraries, default to static if user
473 dnl explicitly requested. If both disabled, set to static since shared
474 dnl was explicitly requested.
475 case "x$enable_static$enable_shared" in
476 xyesyes)
477     AC_MSG_ERROR([Cannot enable both static and shared. Building using --enable-shared is strongly recommended])
478     ;;
479 xnono)
480     AC_MSG_ERROR([Cannot disable both static and shared. Building using --enable-shared is strongly recommended])
481     ;;
482 esac
483
484 AM_CONDITIONAL(BUILD_SHARED, test "x$enable_shared" = xyes)
485
486 dnl
487 dnl other compiler options
488 dnl
489 AC_ARG_ENABLE([debug],
490     [AS_HELP_STRING([--enable-debug],
491         [use debug compiler flags and macros @<:@default=disabled@:>@])],
492     [enable_debug="$enableval"],
493     [enable_debug=no]
494 )
495
496 AC_ARG_ENABLE([profile],
497     [AS_HELP_STRING([--enable-profile],
498         [enable profiling of code @<:@default=disabled@:>@])],
499     [enable_profile="$enableval"],
500     [enable_profile=no]
501 )
502
503 if test "x$enable_profile" = xyes; then
504     DEFINES="$DEFINES -DPROFILE"
505     if test "x$GCC" = xyes; then
506         CFLAGS="$CFLAGS -fno-omit-frame-pointer"
507     fi
508     if test "x$GXX" = xyes; then
509         CXXFLAGS="$CXXFLAGS -fno-omit-frame-pointer"
510     fi
511 fi
512
513 if test "x$enable_debug" = xyes; then
514     DEFINES="$DEFINES -DDEBUG"
515     if test "x$enable_profile" = xyes; then
516         AC_MSG_WARN([Debug and Profile are enabled at the same time])
517     fi
518     if test "x$GCC" = xyes; then
519         if ! echo "$CFLAGS" | grep -q -e '-g'; then
520             CFLAGS="$CFLAGS -g"
521         fi
522         if ! echo "$CFLAGS" | grep -q -e '-O'; then
523             CFLAGS="$CFLAGS -O0"
524         fi
525     fi
526     if test "x$GXX" = xyes; then
527         if ! echo "$CXXFLAGS" | grep -q -e '-g'; then
528             CXXFLAGS="$CXXFLAGS -g"
529         fi
530         if ! echo "$CXXFLAGS" | grep -q -e '-O'; then
531             CXXFLAGS="$CXXFLAGS -O0"
532         fi
533     fi
534 else
535    DEFINES="$DEFINES -DNDEBUG"
536 fi
537
538 dnl
539 dnl Check if linker supports -Bsymbolic
540 dnl
541 save_LDFLAGS=$LDFLAGS
542 LDFLAGS="$LDFLAGS -Wl,-Bsymbolic"
543 AC_MSG_CHECKING([if ld supports -Bsymbolic])
544 AC_LINK_IFELSE(
545     [AC_LANG_SOURCE([int main() { return 0;}])],
546     [AC_MSG_RESULT([yes])
547         BSYMBOLIC="-Wl,-Bsymbolic";],
548     [AC_MSG_RESULT([no])
549         BSYMBOLIC="";])
550 LDFLAGS=$save_LDFLAGS
551
552 AC_SUBST([BSYMBOLIC])
553
554 dnl
555 dnl Check if linker supports garbage collection
556 dnl
557 save_LDFLAGS=$LDFLAGS
558 LDFLAGS="$LDFLAGS -Wl,--gc-sections"
559 AC_MSG_CHECKING([whether ld supports --gc-sections])
560 AC_LINK_IFELSE(
561     [AC_LANG_SOURCE([static char UnusedFunc() { return 5; } int main() { return 0;}])],
562     [AC_MSG_RESULT([yes])
563         GC_SECTIONS="-Wl,--gc-sections";],
564     [AC_MSG_RESULT([no])
565         GC_SECTIONS="";])
566 LDFLAGS=$save_LDFLAGS
567
568 AC_SUBST([GC_SECTIONS])
569
570 dnl
571 dnl OpenBSD does not have DT_NEEDED entries for libc by design
572 dnl so when these flags are passed to ld via libtool the checks will fail
573 dnl
574 case "$host_os" in
575 openbsd* | darwin* )
576     LD_NO_UNDEFINED="" ;;
577 *)
578     LD_NO_UNDEFINED="-Wl,--no-undefined" ;;
579 esac
580
581 AC_SUBST([LD_NO_UNDEFINED])
582
583 dnl
584 dnl Check if linker supports version scripts
585 dnl
586 AC_MSG_CHECKING([if the linker supports version-scripts])
587 save_LDFLAGS=$LDFLAGS
588 LDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map"
589 cat > conftest.map <<EOF
590 VERSION_1 {
591      global:
592          main;
593
594      local:
595          *;
596 };
597 EOF
598 AC_LINK_IFELSE(
599     [AC_LANG_SOURCE([int main() { return 0;}])],
600     [have_ld_version_script=yes;AC_MSG_RESULT(yes)],
601     [have_ld_version_script=no; AC_MSG_RESULT(no)])
602 LDFLAGS=$save_LDFLAGS
603 AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes")
604
605 dnl
606 dnl Check if linker supports dynamic list files
607 dnl
608 AC_MSG_CHECKING([if the linker supports --dynamic-list])
609 save_LDFLAGS=$LDFLAGS
610 LDFLAGS="$LDFLAGS -Wl,--dynamic-list=conftest.dyn"
611 cat > conftest.dyn <<EOF
612 {
613         radeon_drm_winsys_create;
614 };
615 EOF
616 AC_LINK_IFELSE(
617     [AC_LANG_SOURCE([int main() { return 0;}])],
618     [have_ld_dynamic_list=yes;AC_MSG_RESULT(yes)],
619     [have_ld_dynamic_list=no; AC_MSG_RESULT(no)])
620 LDFLAGS=$save_LDFLAGS
621 AM_CONDITIONAL(HAVE_LD_DYNAMIC_LIST, test "$have_ld_dynamic_list" = "yes")
622
623 dnl
624 dnl compatibility symlinks
625 dnl
626 case "$host_os" in
627 linux* )
628     HAVE_COMPAT_SYMLINKS=yes ;;
629 * )
630     HAVE_COMPAT_SYMLINKS=no ;;
631 esac
632
633 AM_CONDITIONAL(HAVE_COMPAT_SYMLINKS, test "x$HAVE_COMPAT_SYMLINKS" = xyes)
634
635 dnl
636 dnl library names
637 dnl
638 dnl Unfortunately we need to do a few things that libtool can't help us with,
639 dnl so we need some knowledge of shared library filenames:
640 dnl
641 dnl LIB_EXT is the extension used when creating symlinks for alternate
642 dnl filenames for a shared library which will be dynamically loaded
643 dnl
644 dnl IMP_LIB_EXT is the extension used when checking for the presence of a
645 dnl the file for a shared library we wish to link with
646 dnl
647 case "$host_os" in
648 darwin* )
649     LIB_EXT='dylib'
650     IMP_LIB_EXT=$LIB_EXT
651     ;;
652 cygwin* )
653     LIB_EXT='dll'
654     IMP_LIB_EXT='dll.a'
655     ;;
656 aix* )
657     LIB_EXT='a'
658     IMP_LIB_EXT=$LIB_EXT
659     ;;
660 * )
661     LIB_EXT='so'
662     IMP_LIB_EXT=$LIB_EXT
663     ;;
664 esac
665
666 AC_SUBST([LIB_EXT])
667
668 dnl
669 dnl potentially-infringing-but-nobody-knows-for-sure stuff
670 dnl
671 AC_ARG_ENABLE([texture-float],
672     [AS_HELP_STRING([--enable-texture-float],
673         [enable floating-point textures and renderbuffers @<:@default=disabled@:>@])],
674     [enable_texture_float="$enableval"],
675     [enable_texture_float=no]
676 )
677 if test "x$enable_texture_float" = xyes; then
678     AC_MSG_WARN([Floating-point textures enabled.])
679     AC_MSG_WARN([Please consult docs/patents.txt with your lawyer before building Mesa.])
680     DEFINES="$DEFINES -DTEXTURE_FLOAT_ENABLED"
681 fi
682
683 dnl
684 dnl Arch/platform-specific settings
685 dnl
686 AC_ARG_ENABLE([asm],
687     [AS_HELP_STRING([--disable-asm],
688         [disable assembly usage @<:@default=enabled on supported plaforms@:>@])],
689     [enable_asm="$enableval"],
690     [enable_asm=yes]
691 )
692 asm_arch=""
693 AC_MSG_CHECKING([whether to enable assembly])
694 test "x$enable_asm" = xno && AC_MSG_RESULT([no])
695 # disable if cross compiling on x86/x86_64 since we must run gen_matypes
696 if test "x$enable_asm" = xyes -a "x$cross_compiling" = xyes; then
697     case "$host_cpu" in
698     i?86 | x86_64 | amd64)
699         if test "x$host_cpu" != "x$target_cpu"; then
700             enable_asm=no
701             AC_MSG_RESULT([no, cross compiling])
702         fi
703         ;;
704     esac
705 fi
706 # check for supported arches
707 if test "x$enable_asm" = xyes; then
708     case "$host_cpu" in
709     i?86)
710         case "$host_os" in
711         linux* | *freebsd* | dragonfly* | *netbsd* | openbsd* | gnu*)
712             asm_arch=x86
713             ;;
714         esac
715         ;;
716     x86_64|amd64)
717         case "$host_os" in
718         linux* | *freebsd* | dragonfly* | *netbsd* | openbsd*)
719             asm_arch=x86_64
720             ;;
721         esac
722         ;;
723     sparc*)
724         case "$host_os" in
725         linux*)
726             asm_arch=sparc
727             ;;
728         esac
729         ;;
730     esac
731
732     case "$asm_arch" in
733     x86)
734         DEFINES="$DEFINES -DUSE_X86_ASM -DUSE_MMX_ASM -DUSE_3DNOW_ASM -DUSE_SSE_ASM"
735         AC_MSG_RESULT([yes, x86])
736         ;;
737     x86_64|amd64)
738         DEFINES="$DEFINES -DUSE_X86_64_ASM"
739         AC_MSG_RESULT([yes, x86_64])
740         ;;
741     sparc)
742         DEFINES="$DEFINES -DUSE_SPARC_ASM"
743         AC_MSG_RESULT([yes, sparc])
744         ;;
745     *)
746         AC_MSG_RESULT([no, platform not supported])
747         ;;
748     esac
749 fi
750
751 AC_HEADER_MAJOR
752 AC_CHECK_HEADER([xlocale.h], [DEFINES="$DEFINES -DHAVE_XLOCALE_H"])
753 AC_CHECK_HEADER([sys/sysctl.h], [DEFINES="$DEFINES -DHAVE_SYS_SYSCTL_H"])
754 AC_CHECK_FUNC([strtof], [DEFINES="$DEFINES -DHAVE_STRTOF"])
755 AC_CHECK_FUNC([mkostemp], [DEFINES="$DEFINES -DHAVE_MKOSTEMP"])
756
757 dnl Check to see if dlopen is in default libraries (like Solaris, which
758 dnl has it in libc), or if libdl is needed to get it.
759 AC_CHECK_FUNC([dlopen], [DEFINES="$DEFINES -DHAVE_DLOPEN"],
760     [AC_CHECK_LIB([dl], [dlopen],
761        [DEFINES="$DEFINES -DHAVE_DLOPEN"; DLOPEN_LIBS="-ldl"])])
762 AC_SUBST([DLOPEN_LIBS])
763
764 dnl Check if that library also has dladdr
765 save_LIBS="$LIBS"
766 LIBS="$LIBS $DLOPEN_LIBS"
767 AC_CHECK_FUNCS([dladdr])
768 LIBS="$save_LIBS"
769
770 case "$host_os" in
771 darwin*)
772     ;;
773 *)
774     AC_CHECK_FUNCS([clock_gettime], [CLOCK_LIB=],
775                    [AC_CHECK_LIB([rt], [clock_gettime], [CLOCK_LIB=-lrt],
776                                  [AC_MSG_ERROR([Could not find clock_gettime])])])
777     AC_SUBST([CLOCK_LIB])
778     ;;
779 esac
780
781 dnl See if posix_memalign is available
782 AC_CHECK_FUNC([posix_memalign], [DEFINES="$DEFINES -DHAVE_POSIX_MEMALIGN"])
783
784 dnl Check for pthreads
785 AX_PTHREAD
786 if test "x$ax_pthread_ok" = xno; then
787     AC_MSG_ERROR([Building mesa on this platform requires pthreads])
788 fi
789 dnl AX_PTHREADS leaves PTHREAD_LIBS empty for gcc and sets PTHREAD_CFLAGS
790 dnl to -pthread, which causes problems if we need -lpthread to appear in
791 dnl pkgconfig files.  Since Android doesn't have a pthread lib, this check
792 dnl is not valid for that platform.
793 if test "x$android" = xno; then
794     test -z "$PTHREAD_LIBS" && PTHREAD_LIBS="-lpthread"
795 fi
796
797 dnl pthread-stubs is mandatory on targets where it exists
798 case "$host_os" in
799 cygwin* )
800     pthread_stubs_possible="no"
801     ;;
802 * )
803     pthread_stubs_possible="yes"
804     ;;
805 esac
806
807 if test "x$pthread_stubs_possible" = xyes; then
808     PKG_CHECK_MODULES(PTHREADSTUBS, pthread-stubs)
809     AC_SUBST(PTHREADSTUBS_CFLAGS)
810     AC_SUBST(PTHREADSTUBS_LIBS)
811 fi
812
813 dnl SELinux awareness.
814 AC_ARG_ENABLE([selinux],
815     [AS_HELP_STRING([--enable-selinux],
816         [Build SELinux-aware Mesa @<:@default=disabled@:>@])],
817     [MESA_SELINUX="$enableval"],
818     [MESA_SELINUX=no])
819 if test "x$enable_selinux" = "xyes"; then
820     PKG_CHECK_MODULES([SELINUX], [libselinux], [],
821         [AC_CHECK_HEADER([selinux/selinux.h],[],
822                          [AC_MSG_ERROR([SELinux headers not found])])
823          AC_CHECK_LIB([selinux],[is_selinux_enabled],[],
824                       [AC_MSG_ERROR([SELinux library not found])])
825          SELINUX_LIBS="-lselinux"])
826     DEFINES="$DEFINES -DMESA_SELINUX"
827 fi
828 AC_SUBST([SELINUX_CFLAGS])
829 AC_SUBST([SELINUX_LIBS])
830
831 dnl
832 dnl LLVM
833 dnl
834 AC_ARG_ENABLE([llvm-shared-libs],
835     [AS_HELP_STRING([--enable-llvm-shared-libs],
836         [link with LLVM shared libraries @<:@default=enabled@:>@])],
837     [enable_llvm_shared_libs="$enableval"],
838     [enable_llvm_shared_libs=yes])
839
840 AC_ARG_WITH([llvm-prefix],
841     [AS_HELP_STRING([--with-llvm-prefix],
842         [Prefix for LLVM installations in non-standard locations])],
843     [llvm_prefix="$withval"],
844     [llvm_prefix=''])
845
846 PKG_CHECK_MODULES([LIBELF], [libelf], [have_libelf=yes], [have_libelf=no])
847 if test "x$have_libelf" = xno; then
848    LIBELF_LIBS=''
849    LIBELF_CFLAGS=''
850    AC_CHECK_LIB([elf], [elf_memory], [have_libelf=yes;LIBELF_LIBS=-lelf], [have_libelf=no])
851    AC_SUBST([LIBELF_LIBS])
852    AC_SUBST([LIBELF_CFLAGS])
853 fi
854
855 if test -z "$LLVM_CONFIG"; then
856     if test -n "$llvm_prefix"; then
857         AC_PATH_TOOL([LLVM_CONFIG], [llvm-config], [no], ["$llvm_prefix/bin"])
858     else
859         AC_PATH_TOOL([LLVM_CONFIG], [llvm-config], [no])
860     fi
861 fi
862
863 llvm_add_component() {
864     new_llvm_component=$1
865     driver_name=$2
866
867     if $LLVM_CONFIG --components | grep -iqw $new_llvm_component ; then
868         LLVM_COMPONENTS="${LLVM_COMPONENTS} ${new_llvm_component}"
869     else
870         AC_MSG_ERROR([LLVM component '$new_llvm_component' not enabled in your LLVM build. Required by $driver_name.])
871     fi
872 }
873
874 llvm_add_default_components() {
875     driver_name=$1
876
877     # Required default components
878     llvm_add_component "bitwriter" $driver_name
879     llvm_add_component "engine" $driver_name
880     llvm_add_component "mcdisassembler" $driver_name
881     llvm_add_component "mcjit" $driver_name
882
883     # Optional default components
884     if $LLVM_CONFIG --components | grep -iqw inteljitevents ; then
885         LLVM_COMPONENTS="$LLVM_COMPONENTS inteljitevents"
886     fi
887 }
888
889 llvm_add_target() {
890     new_llvm_target=$1
891     driver_name=$2
892
893     if $LLVM_CONFIG --targets-built | grep -iqw $new_llvm_target ; then
894         llvm_add_component $new_llvm_target $driver_name
895     else
896         AC_MSG_ERROR([LLVM target '$new_llvm_target' not enabled in your LLVM build. Required by $driver_name.])
897     fi
898 }
899
900 # Call this inside ` ` to get the return value.
901 # $1 is the llvm-config command with arguments.
902 strip_unwanted_llvm_flags() {
903     # Use \> (marks the end of the word)
904     echo `$1` | sed \
905         -e 's/-march=\S*//g' \
906         -e 's/-mtune=\S*//g' \
907         -e 's/-mcpu=\S*//g' \
908         -e 's/-DNDEBUG\>//g' \
909         -e 's/-D_GNU_SOURCE\>//g' \
910         -e 's/-pedantic\>//g' \
911         -e 's/-Wcovered-switch-default\>//g' \
912         -e 's/-O.\>//g' \
913         -e 's/-g\>//g' \
914         -e 's/-Wall\>//g' \
915         -e 's/-Wcast-qual\>//g' \
916         -e 's/-Woverloaded-virtual\>//g' \
917         -e 's/-fcolor-diagnostics\>//g' \
918         -e 's/-fdata-sections\>//g' \
919         -e 's/-ffunction-sections\>//g' \
920         -e 's/-fno-exceptions\>//g' \
921         -e 's/-fomit-frame-pointer\>//g' \
922         -e 's/-fvisibility-inlines-hidden\>//g' \
923         -e 's/-fPIC\>//g' \
924         -e 's/-fstack-protector-strong\>//g'
925 }
926
927 llvm_set_environment_variables() {
928     if test "x$LLVM_CONFIG" != xno; then
929         LLVM_VERSION=`$LLVM_CONFIG --version | egrep -o '^[[0-9.]]+'`
930         LLVM_LDFLAGS=`$LLVM_CONFIG --ldflags`
931         LLVM_BINDIR=`$LLVM_CONFIG --bindir`
932         LLVM_CPPFLAGS=`strip_unwanted_llvm_flags "$LLVM_CONFIG --cppflags"`
933         LLVM_CFLAGS=$LLVM_CPPFLAGS   # CPPFLAGS seem to be sufficient
934         LLVM_CXXFLAGS=`strip_unwanted_llvm_flags "$LLVM_CONFIG --cxxflags"`
935         LLVM_INCLUDEDIR=`$LLVM_CONFIG --includedir`
936         LLVM_LIBDIR=`$LLVM_CONFIG --libdir`
937
938         # We need to respect LLVM_CFLAGS when compiling LLVM headers.
939         save_CFLAGS="$CFLAGS"
940         CFLAGS="$CFLAGS $LLVM_CFLAGS"
941
942         AC_COMPUTE_INT([LLVM_VERSION_MAJOR], [LLVM_VERSION_MAJOR],
943             [#include "${LLVM_INCLUDEDIR}/llvm/Config/llvm-config.h"])
944         AC_COMPUTE_INT([LLVM_VERSION_MINOR], [LLVM_VERSION_MINOR],
945             [#include "${LLVM_INCLUDEDIR}/llvm/Config/llvm-config.h"])
946         AC_COMPUTE_INT([LLVM_VERSION_PATCH], [LLVM_VERSION_PATCH],
947             [#include "${LLVM_INCLUDEDIR}/llvm/Config/llvm-config.h"])
948
949         CFLAGS="$save_CFLAGS"
950
951         # Only needed for LLVM < 3.6.0
952         if test -z "$LLVM_VERSION_PATCH"; then
953             LLVM_VERSION_PATCH=0
954         fi
955
956         if test "$LLVM_VERSION_MINOR" -lt 10; then
957             LLVM_VERSION_INT="${LLVM_VERSION_MAJOR}0${LLVM_VERSION_MINOR}"
958         else
959             LLVM_VERSION_INT="${LLVM_VERSION_MAJOR}${LLVM_VERSION_MINOR}"
960         fi
961
962         DEFINES="${DEFINES} -DHAVE_LLVM=0x0$LLVM_VERSION_INT -DMESA_LLVM_VERSION_PATCH=$LLVM_VERSION_PATCH"
963         MESA_LLVM=1
964     else
965         MESA_LLVM=0
966         LLVM_VERSION_INT=0
967     fi
968 }
969
970 llvm_check_version_for() {
971     if test "x$MESA_LLVM" = x0; then
972         AC_MSG_ERROR([LLVM $1 or newer is required for $2])
973         return
974     fi
975
976     llvm_target_version_major=`echo $1 | cut -d. -f1 | egrep -o '^[[0-9]]+'`
977     llvm_target_version_minor=`echo $1 | cut -d. -f2 | egrep -o '^[[0-9]]+'`
978     llvm_target_version_patch=`echo $1 | cut -d. -f3 | egrep -o '^[[0-9]]+'`
979
980     if test "$LLVM_VERSION_MAJOR" -gt "$llvm_target_version_major"; then
981         # major > required major
982         #  --> OK
983         return
984     fi
985
986     if test "$LLVM_VERSION_MAJOR" -eq "$llvm_target_version_major"; then
987         if test "$LLVM_VERSION_MINOR" -gt "$llvm_target_version_minor"; then
988             # major = required major and
989             # minor > required minor
990             #  --> OK
991             return
992         else
993             if test "$LLVM_VERSION_MINOR" -eq "$llvm_target_version_minor"; then
994                 if test "$LLVM_VERSION_PATCH" -ge "$llvm_target_version_patch"; then
995                     # major = required major and
996                     # minor = required minor and
997                     # patch >= required patch
998                     #  --> OK
999                     return
1000                 fi
1001             fi
1002         fi
1003     fi
1004
1005     AC_MSG_ERROR([LLVM $1 or newer is required for $2])
1006 }
1007
1008 radeon_llvm_check() {
1009     if test ${LLVM_VERSION_INT} -lt 307; then
1010         amdgpu_llvm_target_name='r600'
1011     else
1012         amdgpu_llvm_target_name='amdgpu'
1013     fi
1014
1015     llvm_check_version_for $*
1016
1017     llvm_add_target $amdgpu_llvm_target_name $2
1018
1019     llvm_add_default_components $2
1020     llvm_add_component "bitreader" $2
1021     llvm_add_component "ipo" $2
1022
1023     NEED_RADEON_LLVM=yes
1024     if test "x$have_libelf" != xyes; then
1025        AC_MSG_ERROR([$1 requires libelf when using llvm])
1026     fi
1027 }
1028
1029 llvm_set_environment_variables
1030
1031 AC_SUBST([LLVM_BINDIR])
1032 AC_SUBST([LLVM_CFLAGS])
1033 AC_SUBST([LLVM_CPPFLAGS])
1034 AC_SUBST([LLVM_CXXFLAGS])
1035 AC_SUBST([LLVM_LIBDIR])
1036 AC_SUBST([LLVM_LIBS])
1037 AC_SUBST([LLVM_LDFLAGS])
1038 AC_SUBST([LLVM_INCLUDEDIR])
1039 AC_SUBST([LLVM_VERSION])
1040
1041 dnl Options for APIs
1042 AC_ARG_ENABLE([opengl],
1043     [AS_HELP_STRING([--disable-opengl],
1044         [disable support for standard OpenGL API @<:@default=enabled@:>@])],
1045     [enable_opengl="$enableval"],
1046     [enable_opengl=yes])
1047 AC_ARG_ENABLE([gles1],
1048     [AS_HELP_STRING([--disable-gles1],
1049         [disable support for OpenGL ES 1.x API @<:@default=enabled@:>@])],
1050     [enable_gles1="$enableval"],
1051     [enable_gles1=yes])
1052 AC_ARG_ENABLE([gles2],
1053     [AS_HELP_STRING([--disable-gles2],
1054         [disable support for OpenGL ES 2.x API @<:@default=enabled@:>@])],
1055     [enable_gles2="$enableval"],
1056     [enable_gles2=yes])
1057
1058 AC_ARG_ENABLE([dri],
1059     [AS_HELP_STRING([--enable-dri],
1060         [enable DRI modules @<:@default=enabled@:>@])],
1061     [enable_dri="$enableval"],
1062     [enable_dri=yes])
1063
1064 AC_ARG_ENABLE([gallium-extra-hud],
1065     [AS_HELP_STRING([--enable-gallium-extra-hud],
1066         [enable HUD block/NIC I/O HUD stats support @<:@default=disabled@:>@])],
1067     [enable_gallium_extra_hud="$enableval"],
1068     [enable_gallium_extra_hud=no])
1069 AM_CONDITIONAL(HAVE_GALLIUM_EXTRA_HUD, test "x$enable_gallium_extra_hud" = xyes)
1070 if test "x$enable_gallium_extra_hud" = xyes ; then
1071     DEFINES="${DEFINES} -DHAVE_GALLIUM_EXTRA_HUD=1"
1072 fi
1073
1074 #TODO: no pkgconfig .pc available for libsensors.
1075 #PKG_CHECK_MODULES([LIBSENSORS], [libsensors >= $LIBSENSORS_REQUIRED], [enable_lmsensors=yes], [enable_lmsensors=no])
1076 AC_ARG_ENABLE([lmsensors],
1077     [AS_HELP_STRING([--enable-lmsensors],
1078         [enable HUD lmsensor support @<:@default=disabled@:>@])],
1079     [enable_lmsensors="$enableval"],
1080     [enable_lmsensors=no])
1081 AM_CONDITIONAL(HAVE_LIBSENSORS, test "x$enable_lmsensors" = xyes)
1082 if test "x$enable_lmsensors" = xyes ; then
1083     DEFINES="${DEFINES} -DHAVE_LIBSENSORS=1"
1084     LIBSENSORS_LIBS="-lsensors"
1085 else
1086     LIBSENSORS_LIBS=""
1087 fi
1088 AC_SUBST(LIBSENSORS_LIBS)
1089
1090 case "$host_os" in
1091 linux*)
1092     dri3_default=yes
1093     ;;
1094 *)
1095     dri3_default=no
1096     ;;
1097 esac
1098
1099 if test "x$enable_dri" = xno; then
1100     dri3_default=no
1101 fi
1102
1103 AC_ARG_ENABLE([dri3],
1104     [AS_HELP_STRING([--enable-dri3],
1105         [enable DRI3 @<:@default=auto@:>@])],
1106     [enable_dri3="$enableval"],
1107     [enable_dri3="$dri3_default"])
1108 AC_ARG_ENABLE([glx],
1109     [AS_HELP_STRING([--enable-glx@<:@=dri|xlib|gallium-xlib@:>@],
1110         [enable the GLX library and choose an implementation @<:@default=auto@:>@])],
1111     [enable_glx="$enableval"],
1112     [enable_glx=yes])
1113 AC_ARG_ENABLE([osmesa],
1114     [AS_HELP_STRING([--enable-osmesa],
1115         [enable OSMesa library @<:@default=disabled@:>@])],
1116     [enable_osmesa="$enableval"],
1117     [enable_osmesa=no])
1118 AC_ARG_ENABLE([gallium-osmesa],
1119     [AS_HELP_STRING([--enable-gallium-osmesa],
1120         [enable Gallium implementation of the OSMesa library @<:@default=disabled@:>@])],
1121     [enable_gallium_osmesa="$enableval"],
1122     [enable_gallium_osmesa=no])
1123 AC_ARG_ENABLE([egl],
1124     [AS_HELP_STRING([--disable-egl],
1125         [disable EGL library @<:@default=enabled@:>@])],
1126     [enable_egl="$enableval"],
1127     [enable_egl=yes])
1128
1129 AC_ARG_ENABLE([xa],
1130     [AS_HELP_STRING([--enable-xa],
1131         [enable build of the XA X Acceleration API @<:@default=disabled@:>@])],
1132     [enable_xa="$enableval"],
1133     [enable_xa=no])
1134 AC_ARG_ENABLE([gbm],
1135    [AS_HELP_STRING([--enable-gbm],
1136          [enable gbm library @<:@default=yes except cygwin@:>@])],
1137    [enable_gbm="$enableval"],
1138    [case "$host_os" in
1139        cygwin*)
1140           enable_gbm=no
1141           ;;
1142        *)
1143           enable_gbm=yes
1144           ;;
1145     esac])
1146 AC_ARG_ENABLE([nine],
1147     [AS_HELP_STRING([--enable-nine],
1148         [enable build of the nine Direct3D9 API @<:@default=no@:>@])],
1149     [enable_nine="$enableval"],
1150     [enable_nine=no])
1151
1152 AC_ARG_ENABLE([xvmc],
1153    [AS_HELP_STRING([--enable-xvmc],
1154          [enable xvmc library @<:@default=auto@:>@])],
1155    [enable_xvmc="$enableval"],
1156    [enable_xvmc=auto])
1157 AC_ARG_ENABLE([vdpau],
1158    [AS_HELP_STRING([--enable-vdpau],
1159          [enable vdpau library @<:@default=auto@:>@])],
1160    [enable_vdpau="$enableval"],
1161    [enable_vdpau=auto])
1162 AC_ARG_ENABLE([omx],
1163    [AS_HELP_STRING([--enable-omx],
1164          [enable OpenMAX library @<:@default=disabled@:>@])],
1165    [enable_omx="$enableval"],
1166    [enable_omx=no])
1167 AC_ARG_ENABLE([va],
1168    [AS_HELP_STRING([--enable-va],
1169          [enable va library @<:@default=auto@:>@])],
1170    [enable_va="$enableval"],
1171    [enable_va=auto])
1172 AC_ARG_ENABLE([opencl],
1173    [AS_HELP_STRING([--enable-opencl],
1174          [enable OpenCL library @<:@default=disabled@:>@])],
1175    [enable_opencl="$enableval"],
1176    [enable_opencl=no])
1177 AC_ARG_ENABLE([opencl_icd],
1178    [AS_HELP_STRING([--enable-opencl-icd],
1179           [Build an OpenCL ICD library to be loaded by an ICD implementation
1180            @<:@default=disabled@:>@])],
1181     [enable_opencl_icd="$enableval"],
1182     [enable_opencl_icd=no])
1183
1184 AC_ARG_ENABLE([gallium-tests],
1185     [AS_HELP_STRING([--enable-gallium-tests],
1186         [Enable optional Gallium tests) @<:@default=disabled@:>@])],
1187     [enable_gallium_tests="$enableval"],
1188     [enable_gallium_tests=no])
1189
1190 # Option for Gallium drivers
1191
1192 # Keep this in sync with the --with-gallium-drivers help string default value
1193 GALLIUM_DRIVERS_DEFAULT="r300,r600,svga,swrast"
1194
1195 AC_ARG_WITH([gallium-drivers],
1196     [AS_HELP_STRING([--with-gallium-drivers@<:@=DIRS...@:>@],
1197         [comma delimited Gallium drivers list, e.g.
1198         "i915,nouveau,r300,r600,radeonsi,freedreno,svga,swrast,swr,vc4,virgl,etnaviv,imx"
1199         @<:@default=r300,r600,svga,swrast@:>@])],
1200     [with_gallium_drivers="$withval"],
1201     [with_gallium_drivers="$GALLIUM_DRIVERS_DEFAULT"])
1202
1203 # Doing '--without-gallium-drivers' will set this variable to 'no'.  Clear it
1204 # here so that the script doesn't choke on an unknown driver name later.
1205 case "$with_gallium_drivers" in
1206     yes) with_gallium_drivers="$GALLIUM_DRIVERS_DEFAULT" ;;
1207     no) with_gallium_drivers='' ;;
1208 esac
1209
1210 if test "x$enable_opengl" = xno -a \
1211         "x$enable_gles1" = xno -a \
1212         "x$enable_gles2" = xno -a \
1213         "x$enable_nine" = xno -a \
1214         "x$enable_xa" = xno -a \
1215         "x$enable_xvmc" = xno -a \
1216         "x$enable_vdpau" = xno -a \
1217         "x$enable_omx" = xno -a \
1218         "x$enable_va" = xno -a \
1219         "x$enable_opencl" = xno; then
1220     AC_MSG_ERROR([at least one API should be enabled])
1221 fi
1222
1223 # Building OpenGL ES1 and/or ES2 without OpenGL is not supported on mesa 9.0.x
1224 if test "x$enable_opengl" = xno -a \
1225         "x$enable_gles1" = xyes; then
1226     AC_MSG_ERROR([Building OpenGL ES1 without OpenGL is not supported])
1227 fi
1228
1229 if test "x$enable_opengl" = xno -a \
1230         "x$enable_gles2" = xyes; then
1231     AC_MSG_ERROR([Building OpenGL ES2 without OpenGL is not supported])
1232 fi
1233
1234 AM_CONDITIONAL(HAVE_OPENGL, test "x$enable_opengl" = xyes)
1235 AM_CONDITIONAL(HAVE_OPENGL_ES1, test "x$enable_gles1" = xyes)
1236 AM_CONDITIONAL(HAVE_OPENGL_ES2, test "x$enable_gles2" = xyes)
1237 AM_CONDITIONAL(NEED_OPENGL_COMMON, test "x$enable_opengl" = xyes -o \
1238                                         "x$enable_gles1" = xyes -o \
1239                                         "x$enable_gles2" = xyes)
1240
1241 # Validate GLX options
1242 if test "x$enable_glx" = xyes; then
1243     if test "x$enable_dri" = xyes; then
1244         enable_glx=dri
1245     elif test -n "$with_gallium_drivers"; then
1246         enable_glx=gallium-xlib
1247     else
1248         enable_glx=xlib
1249     fi
1250 fi
1251 case "x$enable_glx" in
1252 xdri | xxlib | xgallium-xlib)
1253     # GLX requires OpenGL
1254     if test "x$enable_opengl" = xno; then
1255         AC_MSG_ERROR([GLX cannot be built without OpenGL])
1256     fi
1257
1258     # Check individual dependencies
1259     case "x$enable_glx" in
1260     xdri)
1261         if test "x$enable_dri" = xno; then
1262             AC_MSG_ERROR([DRI-based GLX requires DRI to be enabled])
1263         fi
1264         ;;
1265     xxlib)
1266         if test "x$enable_dri" = xyes; then
1267             AC_MSG_ERROR([Xlib-based GLX cannot be built with DRI enabled])
1268         fi
1269         ;;
1270     xgallium-xlib )
1271         if test "x$enable_dri" = xyes; then
1272             AC_MSG_ERROR([Xlib-based (Gallium) GLX cannot be built with DRI enabled])
1273         fi
1274         if test -z "$with_gallium_drivers"; then
1275             AC_MSG_ERROR([Xlib-based (Gallium) GLX cannot be built without Gallium enabled])
1276         fi
1277         ;;
1278     esac
1279     ;;
1280 xno)
1281     ;;
1282 *)
1283     AC_MSG_ERROR([Illegal value for --enable-glx: $enable_glx])
1284     ;;
1285 esac
1286
1287 AM_CONDITIONAL(HAVE_GLX, test "x$enable_glx" != xno)
1288 AM_CONDITIONAL(HAVE_DRI_GLX, test "x$enable_glx" = xdri)
1289 AM_CONDITIONAL(HAVE_XLIB_GLX, test "x$enable_glx" = xxlib)
1290 AM_CONDITIONAL(HAVE_GALLIUM_XLIB_GLX, test "x$enable_glx" = xgallium-xlib)
1291
1292 DEFAULT_GL_LIB_NAME=GL
1293
1294 dnl
1295 dnl Libglvnd configuration
1296 dnl
1297 AC_ARG_ENABLE([libglvnd],
1298     [AS_HELP_STRING([--enable-libglvnd],
1299         [Build for libglvnd @<:@default=disabled@:>@])],
1300     [enable_libglvnd="$enableval"],
1301     [enable_libglvnd=no])
1302 AM_CONDITIONAL(USE_LIBGLVND_GLX, test "x$enable_libglvnd" = xyes)
1303 if test "x$enable_libglvnd" = xyes ; then
1304     dnl XXX: update once we can handle more than libGL/glx.
1305     dnl Namely: we should error out if neither of the glvnd enabled libraries
1306     dnl are built
1307     case "x$enable_glx" in
1308     xno)
1309         AC_MSG_ERROR([cannot build libglvnd without GLX])
1310         ;;
1311     xxlib | xgallium-xlib )
1312         AC_MSG_ERROR([cannot build libgvnd when Xlib-GLX or Gallium-Xlib-GLX is enabled])
1313         ;;
1314     xdri)
1315         ;;
1316     esac
1317
1318     PKG_CHECK_MODULES([GLVND], libglvnd >= 0.1.0)
1319     DEFINES="${DEFINES} -DUSE_LIBGLVND_GLX=1"
1320     DEFAULT_GL_LIB_NAME=GLX_mesa
1321 fi
1322
1323 AC_ARG_WITH([gl-lib-name],
1324   [AS_HELP_STRING([--with-gl-lib-name@<:@=NAME@:>@],
1325     [specify GL library name @<:@default=GL@:>@])],
1326   [GL_LIB=$withval],
1327   [GL_LIB="$DEFAULT_GL_LIB_NAME"])
1328 AC_ARG_WITH([osmesa-lib-name],
1329   [AS_HELP_STRING([--with-osmesa-lib-name@<:@=NAME@:>@],
1330     [specify OSMesa library name @<:@default=OSMesa@:>@])],
1331   [OSMESA_LIB=$withval],
1332   [OSMESA_LIB=OSMesa])
1333 AS_IF([test "x$GL_LIB" = xyes], [GL_LIB="$DEFAULT_GL_LIB_NAME"])
1334 AS_IF([test "x$OSMESA_LIB" = xyes], [OSMESA_LIB=OSMesa])
1335
1336 dnl
1337 dnl Mangled Mesa support
1338 dnl
1339 AC_ARG_ENABLE([mangling],
1340   [AS_HELP_STRING([--enable-mangling],
1341     [enable mangled symbols and library name @<:@default=disabled@:>@])],
1342   [enable_mangling="${enableval}"],
1343   [enable_mangling=no]
1344 )
1345 if test "x${enable_mangling}" = "xyes" ; then
1346   DEFINES="${DEFINES} -DUSE_MGL_NAMESPACE"
1347   GL_LIB="Mangled${GL_LIB}"
1348   OSMESA_LIB="Mangled${OSMESA_LIB}"
1349 fi
1350 AC_SUBST([GL_LIB])
1351 AC_SUBST([OSMESA_LIB])
1352
1353 # Check for libdrm
1354 PKG_CHECK_MODULES([LIBDRM], [libdrm >= $LIBDRM_REQUIRED],
1355                   [have_libdrm=yes], [have_libdrm=no])
1356 if test "x$have_libdrm" = xyes; then
1357         DEFINES="$DEFINES -DHAVE_LIBDRM"
1358 fi
1359
1360 require_libdrm() {
1361     if test "x$have_libdrm" != xyes; then
1362        AC_MSG_ERROR([$1 requires libdrm >= $LIBDRM_REQUIRED])
1363     fi
1364 }
1365
1366
1367 # Select which platform-dependent DRI code gets built
1368 case "$host_os" in
1369 darwin*)
1370     dri_platform='apple' ;;
1371 cygwin*)
1372     dri_platform='windows' ;;
1373 gnu*)
1374     dri_platform='none' ;;
1375 *)
1376     dri_platform='drm' ;;
1377 esac
1378
1379 if test "x$enable_dri" = xyes -a "x$dri_platform" = xdrm -a "x$have_libdrm" = xyes; then
1380     have_drisw_kms='yes'
1381 fi
1382
1383 AM_CONDITIONAL(HAVE_DRICOMMON, test "x$enable_dri" = xyes )
1384 AM_CONDITIONAL(HAVE_DRISW, test "x$enable_dri" = xyes )
1385 AM_CONDITIONAL(HAVE_DRISW_KMS, test "x$have_drisw_kms" = xyes )
1386 AM_CONDITIONAL(HAVE_DRI2, test "x$enable_dri" = xyes -a "x$dri_platform" = xdrm -a "x$have_libdrm" = xyes )
1387 AM_CONDITIONAL(HAVE_DRI3, test "x$enable_dri3" = xyes -a "x$dri_platform" = xdrm -a "x$have_libdrm" = xyes )
1388 AM_CONDITIONAL(HAVE_APPLEDRI, test "x$enable_dri" = xyes -a "x$dri_platform" = xapple )
1389 AM_CONDITIONAL(HAVE_LMSENSORS, test "x$enable_lmsensors" = xyes )
1390 AM_CONDITIONAL(HAVE_GALLIUM_EXTRA_HUD, test "x$enable_gallium_extra_hud" = xyes )
1391 AM_CONDITIONAL(HAVE_WINDOWSDRI, test "x$enable_dri" = xyes -a "x$dri_platform" = xwindows )
1392
1393 AC_ARG_ENABLE([shared-glapi],
1394     [AS_HELP_STRING([--enable-shared-glapi],
1395         [Enable shared glapi for OpenGL @<:@default=enabled@:>@])],
1396     [enable_shared_glapi="$enableval"],
1397     [enable_shared_glapi=yes])
1398
1399 case "x$enable_opengl$enable_gles1$enable_gles2" in
1400 x*yes*yes*)
1401     if test "x$enable_shared_glapi" = xno; then
1402         AC_MSG_ERROR([shared GLAPI required when building two or more of
1403                       the following APIs - opengl, gles1 gles2])
1404     fi
1405     ;;
1406 esac
1407
1408 AM_CONDITIONAL(HAVE_SHARED_GLAPI, test "x$enable_shared_glapi" = xyes)
1409
1410 # Build the pipe-drivers as separate libraries/modules.
1411 # Do not touch this unless you know what you are doing.
1412 # XXX: Expose via configure option ?
1413 enable_shared_pipe_drivers=no
1414
1415 dnl
1416 dnl Driver specific build directories
1417 dnl
1418
1419 if test "x$enable_gallium_osmesa" = xyes; then
1420     if ! echo "$with_gallium_drivers" | grep -q 'swrast'; then
1421         AC_MSG_ERROR([gallium_osmesa requires the gallium swrast driver])
1422     fi
1423     if test "x$enable_osmesa" = xyes; then
1424         AC_MSG_ERROR([Cannot enable both classic and Gallium OSMesa implementations])
1425     fi
1426 fi
1427
1428 require_dri_shared_libs_and_glapi() {
1429     if test "x$enable_static" = xyes; then
1430         AC_MSG_ERROR([$1 cannot be build as static library])
1431     fi
1432
1433     if test "x$enable_dri" != xyes; then
1434         # There is only a single backend which won't be build/used otherwise.
1435         # XXX: Revisit this as the egl/haiku is a thing.
1436         AC_MSG_ERROR([$1 requires --enable-dri])
1437     fi
1438
1439     if test "x$enable_shared_glapi" != xyes; then
1440         AC_MSG_ERROR([$1 requires --enable-shared-glapi])
1441     fi
1442 }
1443
1444 if test "x$enable_dri" = xyes; then
1445     require_dri_shared_libs_and_glapi "DRI"
1446
1447     # not a hard requirement as swrast does not depend on it
1448     if test "x$have_libdrm" = xyes; then
1449         DRI_PC_REQ_PRIV="libdrm >= $LIBDRM_REQUIRED"
1450     fi
1451 fi
1452
1453 AC_ARG_ENABLE([driglx-direct],
1454     [AS_HELP_STRING([--disable-driglx-direct],
1455         [disable direct rendering in GLX and EGL for DRI \
1456             @<:@default=auto@:>@])],
1457     [driglx_direct="$enableval"],
1458     [driglx_direct="yes"])
1459
1460 dnl
1461 dnl libGL configuration per driver
1462 dnl
1463 if test "x$enable_glx" != xno; then
1464     PKG_CHECK_MODULES([GLPROTO], [glproto >= $GLPROTO_REQUIRED])
1465 fi
1466 case "x$enable_glx" in
1467 xxlib | xgallium-xlib)
1468     # Xlib-based GLX
1469     dri_modules="x11 xext xcb"
1470     PKG_CHECK_MODULES([XLIBGL], [$dri_modules])
1471     GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV $dri_modules"
1472     X11_INCLUDES="$X11_INCLUDES $XLIBGL_CFLAGS"
1473     GL_LIB_DEPS="$XLIBGL_LIBS"
1474     GL_LIB_DEPS="$GL_LIB_DEPS $SELINUX_LIBS -lm $PTHREAD_LIBS $DLOPEN_LIBS"
1475     GL_PC_LIB_PRIV="$GL_PC_LIB_PRIV $SELINUX_LIBS -lm $PTHREAD_LIBS"
1476     ;;
1477 xdri)
1478     # DRI-based GLX
1479
1480     # find the DRI deps for libGL
1481     dri_modules="x11 xext xdamage xfixes x11-xcb xcb xcb-glx >= $XCBGLX_REQUIRED"
1482
1483     if test x"$driglx_direct" = xyes; then
1484         if test x"$dri_platform" = xdrm ; then
1485             DEFINES="$DEFINES -DGLX_USE_DRM"
1486             require_libdrm "Direct rendering"
1487
1488             PKG_CHECK_MODULES([DRI2PROTO], [dri2proto >= $DRI2PROTO_REQUIRED])
1489             GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV libdrm >= $LIBDRM_REQUIRED"
1490             if test x"$enable_dri3" = xyes; then
1491                PKG_CHECK_MODULES([DRI3PROTO], [dri3proto >= $DRI3PROTO_REQUIRED])
1492                PKG_CHECK_MODULES([PRESENTPROTO], [presentproto >= $PRESENTPROTO_REQUIRED])
1493             fi
1494
1495             if test x"$enable_dri" = xyes; then
1496                dri_modules="$dri_modules xcb-dri2 >= $XCBDRI2_REQUIRED"
1497             fi
1498
1499             if test x"$enable_dri3" = xyes; then
1500                PKG_CHECK_EXISTS([xcb >= $XCB_REQUIRED], [], AC_MSG_ERROR([DRI3 requires xcb >= $XCB_REQUIRED]))
1501                dri3_modules="xcb xcb-dri3 xcb-present xcb-sync xshmfence >= $XSHMFENCE_REQUIRED"
1502                PKG_CHECK_MODULES([XCB_DRI3], [$dri3_modules])
1503             fi
1504         fi
1505         if test x"$dri_platform" = xapple ; then
1506             DEFINES="$DEFINES -DGLX_USE_APPLEGL"
1507         fi
1508         if test x"$dri_platform" = xwindows ; then
1509             DEFINES="$DEFINES -DGLX_USE_WINDOWSGL"
1510         fi
1511     fi
1512
1513     # add xf86vidmode if available
1514     PKG_CHECK_MODULES([XF86VIDMODE], [xxf86vm], HAVE_XF86VIDMODE=yes, HAVE_XF86VIDMODE=no)
1515     if test "$HAVE_XF86VIDMODE" = yes ; then
1516         dri_modules="$dri_modules xxf86vm"
1517     fi
1518
1519     PKG_CHECK_MODULES([DRIGL], [$dri_modules])
1520     GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV $dri_modules"
1521     X11_INCLUDES="$X11_INCLUDES $DRIGL_CFLAGS"
1522     GL_LIB_DEPS="$DRIGL_LIBS"
1523
1524     # need DRM libs, $PTHREAD_LIBS, etc.
1525     GL_LIB_DEPS="$GL_LIB_DEPS $LIBDRM_LIBS -lm $PTHREAD_LIBS $DLOPEN_LIBS"
1526     GL_PC_LIB_PRIV="-lm $PTHREAD_LIBS $DLOPEN_LIBS"
1527     ;;
1528 esac
1529
1530 # This is outside the case (above) so that it is invoked even for non-GLX
1531 # builds.
1532 AM_CONDITIONAL(HAVE_XF86VIDMODE, test "x$HAVE_XF86VIDMODE" = xyes)
1533
1534 GLESv1_CM_LIB_DEPS="$LIBDRM_LIBS -lm $PTHREAD_LIBS $DLOPEN_LIBS"
1535 GLESv1_CM_PC_LIB_PRIV="-lm $PTHREAD_LIBS $DLOPEN_LIBS"
1536 GLESv2_LIB_DEPS="$LIBDRM_LIBS -lm $PTHREAD_LIBS $DLOPEN_LIBS"
1537 GLESv2_PC_LIB_PRIV="-lm $PTHREAD_LIBS $DLOPEN_LIBS"
1538
1539 AC_SUBST([X11_INCLUDES])
1540 AC_SUBST([GL_LIB_DEPS])
1541 AC_SUBST([GL_PC_REQ_PRIV])
1542 AC_SUBST([GL_PC_LIB_PRIV])
1543 AC_SUBST([GL_PC_CFLAGS])
1544 AC_SUBST([DRI_PC_REQ_PRIV])
1545 AC_SUBST([GLESv1_CM_LIB_DEPS])
1546 AC_SUBST([GLESv1_CM_PC_LIB_PRIV])
1547 AC_SUBST([GLESv2_LIB_DEPS])
1548 AC_SUBST([GLESv2_PC_LIB_PRIV])
1549
1550 AC_SUBST([HAVE_XF86VIDMODE])
1551
1552 dnl
1553 dnl More GLX setup
1554 dnl
1555 case "x$enable_glx" in
1556 xxlib | xgallium-xlib)
1557     DEFINES="$DEFINES -DUSE_XSHM"
1558     ;;
1559 xdri)
1560     DEFINES="$DEFINES -DGLX_INDIRECT_RENDERING"
1561     if test "x$driglx_direct" = xyes; then
1562         DEFINES="$DEFINES -DGLX_DIRECT_RENDERING"
1563     fi
1564     ;;
1565 esac
1566
1567 dnl
1568 dnl TLS detection
1569 dnl
1570
1571 AC_ARG_ENABLE([glx-tls],
1572     [AS_HELP_STRING([--enable-glx-tls],
1573         [enable TLS support in GLX @<:@default=enabled@:>@])],
1574     [GLX_USE_TLS="$enableval"],
1575     [GLX_USE_TLS=yes])
1576 AC_SUBST(GLX_TLS, ${GLX_USE_TLS})
1577
1578 if test "x$GLX_USE_TLS" = xyes; then
1579     DEFINES="$DEFINES -DGLX_USE_TLS"
1580 fi
1581
1582 dnl Read-only text section on x86 hardened platforms
1583 AC_ARG_ENABLE([glx-read-only-text],
1584     [AS_HELP_STRING([--enable-glx-read-only-text],
1585         [Disable writable .text section on x86 (decreases performance) @<:@default=disabled@:>@])],
1586     [enable_glx_read_only_text="$enableval"],
1587     [enable_glx_read_only_text=no])
1588 if test "x$enable_glx_read_only_text" = xyes; then
1589     DEFINES="$DEFINES -DGLX_X86_READONLY_TEXT"
1590 fi
1591
1592 dnl
1593 dnl More DRI setup
1594 dnl
1595 dnl Directory for DRI drivers
1596 AC_ARG_WITH([dri-driverdir],
1597     [AS_HELP_STRING([--with-dri-driverdir=DIR],
1598         [directory for the DRI drivers @<:@${libdir}/dri@:>@])],
1599     [DRI_DRIVER_INSTALL_DIR="$withval"],
1600     [DRI_DRIVER_INSTALL_DIR='${libdir}/dri'])
1601 AC_SUBST([DRI_DRIVER_INSTALL_DIR])
1602 dnl Extra search path for DRI drivers
1603 AC_ARG_WITH([dri-searchpath],
1604     [AS_HELP_STRING([--with-dri-searchpath=DIRS...],
1605         [semicolon delimited DRI driver search directories @<:@${libdir}/dri@:>@])],
1606     [DRI_DRIVER_SEARCH_DIR="$withval"],
1607     [DRI_DRIVER_SEARCH_DIR='${DRI_DRIVER_INSTALL_DIR}'])
1608 AC_SUBST([DRI_DRIVER_SEARCH_DIR])
1609 dnl Which drivers to build - default is chosen by platform
1610 AC_ARG_WITH([dri-drivers],
1611     [AS_HELP_STRING([--with-dri-drivers@<:@=DIRS...@:>@],
1612         [comma delimited classic DRI drivers list, e.g.
1613         "i915,i965,nouveau,radeon,r200,swrast" @<:@default=auto@:>@])],
1614     [with_dri_drivers="$withval"],
1615     [with_dri_drivers=auto])
1616
1617 if test "x$with_dri_drivers" = xauto; then
1618     if test "x$enable_opengl" = xyes -a "x$enable_dri" = xyes; then
1619         with_dri_drivers="yes"
1620     else
1621         with_dri_drivers="no"
1622     fi
1623 fi
1624 if test "x$with_dri_drivers" = xno; then
1625     with_dri_drivers=''
1626 fi
1627
1628 dnl If $with_dri_drivers is yes, drivers will be added through
1629 dnl platform checks. Set DEFINES and LIB_DEPS
1630 if test "x$enable_dri" = xyes; then
1631     # Platform specific settings and drivers to build
1632     case "$host_os" in
1633     linux*)
1634         if test "x$enable_dri3" = xyes; then
1635             DEFINES="$DEFINES -DHAVE_DRI3"
1636         fi
1637
1638         case "$host_cpu" in
1639         powerpc* | sparc*)
1640             # Build only the drivers for cards that exist on PowerPC/sparc
1641             if test "x$with_dri_drivers" = "xyes"; then
1642                 with_dri_drivers="r200 radeon swrast"
1643             fi
1644             ;;
1645         esac
1646         ;;
1647     cygwin*)
1648         if test "x$with_dri_drivers" = "xyes"; then
1649             with_dri_drivers="swrast"
1650         fi
1651         ;;
1652     darwin*)
1653         DEFINES="$DEFINES -DBUILDING_MESA"
1654         if test "x$with_dri_drivers" = "xyes"; then
1655             with_dri_drivers="swrast"
1656         fi
1657         ;;
1658     esac
1659
1660     # default drivers
1661     if test "x$with_dri_drivers" = "xyes"; then
1662         with_dri_drivers="i915 i965 nouveau r200 radeon swrast"
1663     fi
1664
1665     # Check for expat
1666     PKG_CHECK_MODULES([EXPAT], [expat], [],
1667         # expat version 2.0 and earlier do not provide expat.pc
1668         [AC_CHECK_HEADER([expat.h],[],
1669                          [AC_MSG_ERROR([Expat headers required for DRI not found])])
1670          AC_CHECK_LIB([expat],[XML_ParserCreate],[],
1671                      [AC_MSG_ERROR([Expat library required for DRI not found])])
1672          EXPAT_LIBS="-lexpat"])
1673
1674     # put all the necessary libs together
1675     DRI_LIB_DEPS="$DRI_LIB_DEPS $SELINUX_LIBS $LIBDRM_LIBS $EXPAT_LIBS -lm $PTHREAD_LIBS $DLOPEN_LIBS"
1676 fi
1677
1678 AC_SUBST([DRI_LIB_DEPS])
1679
1680 DRI_DIRS=''
1681 dnl Duplicates in DRI_DIRS are removed by sorting it at the end of this block
1682 if test -n "$with_dri_drivers"; then
1683     if test "x$enable_opengl" != xyes; then
1684         AC_MSG_ERROR([--with-dri-drivers requires OpenGL])
1685     fi
1686
1687     dri_drivers=`IFS=', '; echo $with_dri_drivers`
1688     for driver in $dri_drivers; do
1689         DRI_DIRS="$DRI_DIRS $driver"
1690         case "x$driver" in
1691         xi915)
1692             require_libdrm "i915"
1693             HAVE_I915_DRI=yes;
1694             PKG_CHECK_MODULES([INTEL], [libdrm >= $LIBDRM_INTEL_REQUIRED libdrm_intel >= $LIBDRM_INTEL_REQUIRED])
1695             ;;
1696         xi965)
1697             require_libdrm "i965"
1698             HAVE_I965_DRI=yes;
1699             PKG_CHECK_MODULES([INTEL], [libdrm >= $LIBDRM_INTEL_REQUIRED libdrm_intel >= $LIBDRM_INTEL_REQUIRED])
1700             ;;
1701         xnouveau)
1702             require_libdrm "nouveau"
1703             HAVE_NOUVEAU_DRI=yes;
1704             PKG_CHECK_MODULES([NVVIEUX], [libdrm >= $LIBDRM_NVVIEUX_REQUIRED libdrm_nouveau >= $LIBDRM_NVVIEUX_REQUIRED])
1705             ;;
1706         xradeon)
1707             require_libdrm "radeon"
1708             HAVE_RADEON_DRI=yes;
1709             PKG_CHECK_MODULES([RADEON], [libdrm >= $LIBDRM_RADEON_REQUIRED libdrm_radeon >= $LIBDRM_RADEON_REQUIRED])
1710             ;;
1711         xr200)
1712             require_libdrm "r200"
1713             HAVE_R200_DRI=yes;
1714             PKG_CHECK_MODULES([RADEON], [libdrm >= $LIBDRM_RADEON_REQUIRED libdrm_radeon >= $LIBDRM_RADEON_REQUIRED])
1715             ;;
1716         xswrast)
1717             HAVE_SWRAST_DRI=yes;
1718             ;;
1719         *)
1720             AC_MSG_ERROR([classic DRI driver '$driver' does not exist])
1721             ;;
1722         esac
1723     done
1724     DRI_DIRS=`echo $DRI_DIRS|tr " " "\n"|sort -u|tr "\n" " "`
1725 fi
1726
1727
1728 dnl
1729 dnl Gallium LLVM
1730 dnl
1731 AC_ARG_ENABLE([gallium-llvm],
1732     [AS_HELP_STRING([--enable-gallium-llvm],
1733         [build gallium LLVM support @<:@default=enabled on x86/x86_64@:>@])],
1734     [enable_gallium_llvm="$enableval"],
1735     [enable_gallium_llvm=auto])
1736
1737 if test -z "$with_gallium_drivers"; then
1738     enable_gallium_llvm=no
1739 fi
1740 if test "x$enable_gallium_llvm" = xauto; then
1741     case "$host_cpu" in
1742     i*86|x86_64|amd64) enable_gallium_llvm=yes;;
1743     esac
1744 fi
1745
1746 #
1747 # Vulkan driver configuration
1748 #
1749
1750 AC_ARG_WITH([vulkan-drivers],
1751     [AS_HELP_STRING([--with-vulkan-drivers@<:@=DIRS...@:>@],
1752         [comma delimited Vulkan drivers list, e.g.
1753         "intel,radeon"
1754         @<:@default=no@:>@])],
1755     [with_vulkan_drivers="$withval"],
1756     [with_vulkan_drivers="no"])
1757
1758 # Doing '--without-vulkan-drivers' will set this variable to 'no'.  Clear it
1759 # here so that the script doesn't choke on an unknown driver name later.
1760 case "x$with_vulkan_drivers" in
1761     xyes) with_vulkan_drivers="$VULKAN_DRIVERS_DEFAULT" ;;
1762     xno) with_vulkan_drivers='' ;;
1763 esac
1764
1765 AC_ARG_WITH([vulkan-icddir],
1766     [AS_HELP_STRING([--with-vulkan-icddir=DIR],
1767         [directory for the Vulkan driver icd files @<:@${datarootdir}/vulkan/icd.d@:>@])],
1768     [VULKAN_ICD_INSTALL_DIR="$withval"],
1769     [VULKAN_ICD_INSTALL_DIR='${datarootdir}/vulkan/icd.d'])
1770 AC_SUBST([VULKAN_ICD_INSTALL_DIR])
1771
1772 if test -n "$with_vulkan_drivers"; then
1773     VULKAN_DRIVERS=`IFS=', '; echo $with_vulkan_drivers`
1774     for driver in $VULKAN_DRIVERS; do
1775         case "x$driver" in
1776         xintel)
1777             if test "x$HAVE_I965_DRI" != xyes; then
1778                 AC_MSG_ERROR([Intel Vulkan driver requires the i965 dri driver])
1779             fi
1780             HAVE_INTEL_VULKAN=yes;
1781
1782             ;;
1783         xradeon)
1784             PKG_CHECK_MODULES([AMDGPU], [libdrm >= $LIBDRM_AMDGPU_REQUIRED libdrm_amdgpu >= $LIBDRM_AMDGPU_REQUIRED])
1785             radeon_llvm_check $LLVM_REQUIRED_RADV "radv"
1786             HAVE_RADEON_VULKAN=yes;
1787             ;;
1788         *)
1789             AC_MSG_ERROR([Vulkan driver '$driver' does not exist])
1790             ;;
1791         esac
1792     done
1793     VULKAN_DRIVERS=`echo $VULKAN_DRIVERS|tr " " "\n"|sort -u|tr "\n" " "`
1794 fi
1795
1796
1797 DEFINES="$DEFINES -DENABLE_SHADER_CACHE"
1798 AM_CONDITIONAL(NEED_MEGADRIVER, test -n "$DRI_DIRS")
1799 AM_CONDITIONAL(NEED_LIBMESA, test "x$enable_glx" = xxlib -o \
1800                                   "x$enable_osmesa" = xyes -o \
1801                                   -n "$DRI_DIRS")
1802
1803 dnl
1804 dnl OSMesa configuration
1805 dnl
1806
1807 dnl Configure the channel bits for OSMesa (libOSMesa, libOSMesa16, ...)
1808 AC_ARG_WITH([osmesa-bits],
1809     [AS_HELP_STRING([--with-osmesa-bits=BITS],
1810         [OSMesa channel bits and library name: 8, 16, 32 @<:@default=8@:>@])],
1811     [osmesa_bits="$withval"],
1812     [osmesa_bits=8])
1813 if test "x$osmesa_bits" != x8; then
1814     if test "x$enable_dri" = xyes -o "x$enable_glx" != xno; then
1815         AC_MSG_WARN([Ignoring OSMesa channel bits because of non-OSMesa driver])
1816         osmesa_bits=8
1817     fi
1818 fi
1819 case "x$osmesa_bits" in
1820 x8)
1821     OSMESA_LIB="${OSMESA_LIB}"
1822     ;;
1823 x16|x32)
1824     OSMESA_LIB="${OSMESA_LIB}$osmesa_bits"
1825     DEFINES="$DEFINES -DCHAN_BITS=$osmesa_bits -DDEFAULT_SOFTWARE_DEPTH_BITS=31"
1826     ;;
1827 *)
1828     AC_MSG_ERROR([OSMesa bits '$osmesa_bits' is not a valid option])
1829     ;;
1830 esac
1831
1832 if test "x$enable_osmesa" = xyes -o "x$enable_gallium_osmesa" = xyes; then
1833     # only link libraries with osmesa if shared
1834     if test "$enable_static" = no; then
1835         OSMESA_LIB_DEPS="-lm $PTHREAD_LIBS $SELINUX_LIBS $DLOPEN_LIBS"
1836     else
1837         OSMESA_LIB_DEPS=""
1838     fi
1839     OSMESA_PC_LIB_PRIV="-lm $PTHREAD_LIBS $SELINUX_LIBS $DLOPEN_LIBS"
1840 fi
1841
1842 AC_SUBST([OSMESA_LIB_DEPS])
1843 AC_SUBST([OSMESA_PC_REQ])
1844 AC_SUBST([OSMESA_PC_LIB_PRIV])
1845
1846 dnl
1847 dnl gbm configuration
1848 dnl
1849 if test "x$enable_gbm" = xyes; then
1850     require_dri_shared_libs_and_glapi "gbm"
1851 fi
1852 AM_CONDITIONAL(HAVE_GBM, test "x$enable_gbm" = xyes)
1853 # FINISHME: GBM has a number of dependencies which we should add below
1854 GBM_PC_REQ_PRIV=""
1855 GBM_PC_LIB_PRIV="$DLOPEN_LIBS"
1856 AC_SUBST([GBM_PC_REQ_PRIV])
1857 AC_SUBST([GBM_PC_LIB_PRIV])
1858
1859 dnl
1860 dnl EGL configuration
1861 dnl
1862
1863 if test "x$enable_egl" = xyes; then
1864     EGL_LIB_DEPS="$DLOPEN_LIBS $SELINUX_LIBS $PTHREAD_LIBS"
1865
1866     AC_CHECK_FUNC(mincore, [DEFINES="$DEFINES -DHAVE_MINCORE"])
1867
1868     require_dri_shared_libs_and_glapi "egl"
1869 fi
1870 AM_CONDITIONAL(HAVE_EGL, test "x$enable_egl" = xyes)
1871 AC_SUBST([EGL_LIB_DEPS])
1872
1873 gallium_st="mesa"
1874
1875 dnl
1876 dnl XA configuration
1877 dnl
1878 if test "x$enable_xa" = xyes; then
1879     if test "x$with_gallium_drivers" = xswrast; then
1880        AC_MSG_ERROR([
1881           Building xa requires at least one non swrast gallium driver.
1882           If you are looking to use libxatracker.so with the VMware driver,
1883           make sure to include svga in the gallium drivers list, apart from
1884           enabling XA.
1885           Example: ./configure --enable-xa --with-gallium-drivers=svga...])
1886     fi
1887     gallium_st="$gallium_st xa"
1888 fi
1889 AM_CONDITIONAL(HAVE_ST_XA, test "x$enable_xa" = xyes)
1890
1891 dnl
1892 dnl Gallium G3DVL configuration
1893 dnl
1894 if test -n "$with_gallium_drivers" -a "x$with_gallium_drivers" != xswrast; then
1895     if test "x$enable_xvmc" = xauto; then
1896         PKG_CHECK_EXISTS([xvmc >= $XVMC_REQUIRED], [enable_xvmc=yes], [enable_xvmc=no])
1897     fi
1898
1899     if test "x$enable_vdpau" = xauto; then
1900         PKG_CHECK_EXISTS([vdpau >= $VDPAU_REQUIRED], [enable_vdpau=yes], [enable_vdpau=no])
1901     fi
1902
1903     if test "x$enable_omx" = xauto; then
1904         PKG_CHECK_EXISTS([libomxil-bellagio >= $LIBOMXIL_BELLAGIO_REQUIRED], [enable_omx=yes], [enable_omx=no])
1905     fi
1906
1907     if test "x$enable_va" = xauto; then
1908         PKG_CHECK_EXISTS([libva >= $LIBVA_REQUIRED], [enable_va=yes], [enable_va=no])
1909     fi
1910 fi
1911
1912 if test "x$enable_dri" = xyes -o \
1913         "x$enable_xvmc" = xyes -o \
1914         "x$enable_vdpau" = xyes -o \
1915         "x$enable_omx" = xyes -o \
1916         "x$enable_va" = xyes; then
1917     need_gallium_vl=yes
1918 fi
1919 AM_CONDITIONAL(NEED_GALLIUM_VL, test "x$need_gallium_vl" = xyes)
1920
1921 if test "x$enable_xvmc" = xyes -o \
1922         "x$enable_vdpau" = xyes -o \
1923         "x$enable_omx" = xyes -o \
1924         "x$enable_va" = xyes; then
1925     if test x"$enable_dri3" = xyes; then
1926         PKG_CHECK_MODULES([VL], [xcb-dri3 xcb-present xcb-sync xshmfence >= $XSHMFENCE_REQUIRED
1927                                  xcb-xfixes x11-xcb xcb xcb-dri2 >= $XCBDRI2_REQUIRED])
1928     else
1929         PKG_CHECK_MODULES([VL], [x11-xcb xcb xcb-dri2 >= $XCBDRI2_REQUIRED])
1930     fi
1931     need_gallium_vl_winsys=yes
1932 fi
1933 AM_CONDITIONAL(NEED_GALLIUM_VL_WINSYS, test "x$need_gallium_vl_winsys" = xyes)
1934
1935 if test "x$enable_xvmc" = xyes; then
1936     PKG_CHECK_MODULES([XVMC], [xvmc >= $XVMC_REQUIRED])
1937     gallium_st="$gallium_st xvmc"
1938 fi
1939 AM_CONDITIONAL(HAVE_ST_XVMC, test "x$enable_xvmc" = xyes)
1940
1941 if test "x$enable_vdpau" = xyes; then
1942     PKG_CHECK_MODULES([VDPAU], [vdpau >= $VDPAU_REQUIRED])
1943     gallium_st="$gallium_st vdpau"
1944     DEFINES="$DEFINES -DHAVE_ST_VDPAU"
1945 fi
1946 AM_CONDITIONAL(HAVE_ST_VDPAU, test "x$enable_vdpau" = xyes)
1947
1948 if test "x$enable_omx" = xyes; then
1949     PKG_CHECK_MODULES([OMX], [libomxil-bellagio >= $LIBOMXIL_BELLAGIO_REQUIRED])
1950     gallium_st="$gallium_st omx"
1951 fi
1952 AM_CONDITIONAL(HAVE_ST_OMX, test "x$enable_omx" = xyes)
1953
1954 if test "x$enable_va" = xyes; then
1955     PKG_CHECK_MODULES([VA], [libva >= $LIBVA_REQUIRED])
1956     gallium_st="$gallium_st va"
1957 fi
1958 AM_CONDITIONAL(HAVE_ST_VA, test "x$enable_va" = xyes)
1959
1960 dnl
1961 dnl Nine Direct3D9 configuration
1962 dnl
1963 if test "x$enable_nine" = xyes; then
1964     if ! echo "$with_gallium_drivers" | grep -q 'swrast'; then
1965         AC_MSG_ERROR([nine requires the gallium swrast driver])
1966     fi
1967     if test "x$with_gallium_drivers" = xswrast; then
1968         AC_MSG_ERROR([nine requires at least one non-swrast gallium driver])
1969     fi
1970     if test $GCC_VERSION_MAJOR -lt 4 -o $GCC_VERSION_MAJOR -eq 4 -a $GCC_VERSION_MINOR -lt 6; then
1971         AC_MSG_ERROR([gcc >= 4.6 is required to build nine])
1972     fi
1973
1974     if test "x$enable_dri3" = xno; then
1975         AC_MSG_WARN([using nine together with wine requires DRI3 enabled system])
1976     fi
1977
1978     gallium_st="$gallium_st nine"
1979 fi
1980 AM_CONDITIONAL(HAVE_ST_NINE, test "x$enable_nine" = xyes)
1981
1982 dnl
1983 dnl OpenCL configuration
1984 dnl
1985
1986 AC_ARG_WITH([clang-libdir],
1987    [AS_HELP_STRING([--with-clang-libdir],
1988          [Path to Clang libraries @<:@default=llvm-config --libdir@:>@])],
1989    [CLANG_LIBDIR="$withval"],
1990    [CLANG_LIBDIR=''])
1991
1992 PKG_CHECK_EXISTS([libclc], [have_libclc=yes], [have_libclc=no])
1993
1994 if test "x$enable_opencl" = xyes; then
1995     if test -z "$with_gallium_drivers"; then
1996         AC_MSG_ERROR([cannot enable OpenCL without Gallium])
1997     fi
1998
1999     if test $GCC_VERSION_MAJOR -lt 4 -o $GCC_VERSION_MAJOR -eq 4 -a $GCC_VERSION_MINOR -lt 7; then
2000         AC_MSG_ERROR([gcc >= 4.7 is required to build clover])
2001     fi
2002
2003     if test "x$have_libclc" = xno; then
2004         AC_MSG_ERROR([pkg-config cannot find libclc.pc which is required to build clover.
2005                     Make sure the directory containing libclc.pc is specified in your
2006                     PKG_CONFIG_PATH environment variable.
2007                     By default libclc.pc is installed to /usr/local/share/pkgconfig/])
2008     else
2009         LIBCLC_INCLUDEDIR=`$PKG_CONFIG --variable=includedir libclc`
2010         LIBCLC_LIBEXECDIR=`$PKG_CONFIG --variable=libexecdir libclc`
2011         AC_SUBST([LIBCLC_INCLUDEDIR])
2012         AC_SUBST([LIBCLC_LIBEXECDIR])
2013     fi
2014
2015     gallium_st="$gallium_st clover"
2016
2017     if test "x$enable_opencl_icd" = xyes; then
2018         OPENCL_LIBNAME="MesaOpenCL"
2019     else
2020         OPENCL_LIBNAME="OpenCL"
2021     fi
2022
2023     if test "x$have_libelf" != xyes; then
2024        AC_MSG_ERROR([Clover requires libelf])
2025     fi
2026
2027     llvm_check_version_for $LLVM_REQUIRED_OPENCL "opencl"
2028
2029     llvm_add_default_components "opencl"
2030     llvm_add_component "all-targets" "opencl"
2031     llvm_add_component "linker" "opencl"
2032     llvm_add_component "instrumentation" "opencl"
2033     llvm_add_component "ipo" "opencl"
2034     llvm_add_component "irreader" "opencl"
2035     llvm_add_component "option" "opencl"
2036     llvm_add_component "objcarcopts" "opencl"
2037     llvm_add_component "profiledata" "opencl"
2038
2039     dnl Check for Clang internal headers
2040     if test -z "$CLANG_LIBDIR"; then
2041         CLANG_LIBDIR=${LLVM_LIBDIR}
2042     fi
2043     CLANG_RESOURCE_DIR=$CLANG_LIBDIR/clang/${LLVM_VERSION}
2044     AS_IF([test ! -f "$CLANG_RESOURCE_DIR/include/stddef.h"],
2045         [AC_MSG_ERROR([Could not find clang internal header stddef.h in $CLANG_RESOURCE_DIR Use --with-clang-libdir to specify the correct path to the clang libraries.])])
2046 fi
2047 AM_CONDITIONAL(HAVE_CLOVER, test "x$enable_opencl" = xyes)
2048 AM_CONDITIONAL(HAVE_CLOVER_ICD, test "x$enable_opencl_icd" = xyes)
2049 AC_SUBST([OPENCL_LIBNAME])
2050 AC_SUBST([CLANG_RESOURCE_DIR])
2051
2052 dnl
2053 dnl Gallium configuration
2054 dnl
2055 AM_CONDITIONAL(HAVE_GALLIUM, test -n "$with_gallium_drivers")
2056
2057 dnl
2058 dnl EGL Platforms configuration
2059 dnl
2060 AC_ARG_WITH([egl-platforms],
2061     [AS_HELP_STRING([--with-egl-platforms@<:@=DIRS...@:>@],
2062         [comma delimited native platforms libEGL supports, e.g.
2063         "x11,drm" @<:@default=auto@:>@])],
2064     [with_egl_platforms="$withval"],
2065     [if test "x$enable_egl" = xyes; then
2066         if test "x$enable_gbm" = xyes; then
2067            with_egl_platforms="x11,drm"
2068         else
2069            with_egl_platforms="x11"
2070         fi
2071     else
2072         with_egl_platforms=""
2073     fi])
2074
2075 if test "x$with_egl_platforms" != "x" -a "x$enable_egl" != xyes; then
2076     AC_MSG_ERROR([cannot build egl state tracker without EGL library])
2077 fi
2078
2079 PKG_CHECK_MODULES([WAYLAND_SCANNER], [wayland-scanner],
2080         WAYLAND_SCANNER=`$PKG_CONFIG --variable=wayland_scanner wayland-scanner`,
2081         WAYLAND_SCANNER='')
2082 if test "x$WAYLAND_SCANNER" = x; then
2083     AC_PATH_PROG([WAYLAND_SCANNER], [wayland-scanner])
2084 fi
2085
2086 # Do per-EGL platform setups and checks
2087 egl_platforms=`IFS=', '; echo $with_egl_platforms`
2088 for plat in $egl_platforms; do
2089         case "$plat" in
2090         wayland)
2091
2092                 PKG_CHECK_MODULES([WAYLAND], [wayland-client >= $WAYLAND_REQUIRED wayland-server >= $WAYLAND_REQUIRED])
2093
2094                 if test "x$WAYLAND_SCANNER" = x; then
2095                         AC_MSG_ERROR([wayland-scanner is needed to compile the wayland egl platform])
2096                 fi
2097                 ;;
2098
2099         x11)
2100                 PKG_CHECK_MODULES([XCB_DRI2], [x11-xcb xcb xcb-dri2 >= $XCBDRI2_REQUIRED xcb-xfixes])
2101                 ;;
2102
2103         drm)
2104                 test "x$enable_gbm" = "xno" &&
2105                         AC_MSG_ERROR([EGL platform drm needs gbm])
2106                 ;;
2107
2108         surfaceless)
2109                 ;;
2110
2111         android)
2112                 PKG_CHECK_MODULES([ANDROID], [cutils hardware sync])
2113                 ;;
2114
2115         *)
2116                 AC_MSG_ERROR([EGL platform '$plat' does not exist])
2117                 ;;
2118         esac
2119
2120         case "$plat" in
2121         wayland|drm|surfaceless)
2122                 require_libdrm "Platform $plat"
2123                 ;;
2124         esac
2125 done
2126
2127 # libEGL wants to default to the first platform specified in
2128 # ./configure.  parse that here.
2129 if test "x$egl_platforms" != "x"; then
2130     FIRST_PLATFORM_CAPS=`echo $egl_platforms | sed 's| .*||' | tr '[[a-z]]' '[[A-Z]]'`
2131     EGL_NATIVE_PLATFORM="_EGL_PLATFORM_$FIRST_PLATFORM_CAPS"
2132 else
2133     EGL_NATIVE_PLATFORM="_EGL_INVALID_PLATFORM"
2134 fi
2135
2136 AM_CONDITIONAL(HAVE_PLATFORM_X11, echo "$egl_platforms" | grep -q 'x11')
2137 AM_CONDITIONAL(HAVE_PLATFORM_WAYLAND, echo "$egl_platforms" | grep -q 'wayland')
2138 AM_CONDITIONAL(HAVE_EGL_PLATFORM_DRM, echo "$egl_platforms" | grep -q 'drm')
2139 AM_CONDITIONAL(HAVE_EGL_PLATFORM_SURFACELESS, echo "$egl_platforms" | grep -q 'surfaceless')
2140 AM_CONDITIONAL(HAVE_EGL_PLATFORM_ANDROID, echo "$egl_platforms" | grep -q 'android')
2141
2142 AC_SUBST([EGL_NATIVE_PLATFORM])
2143 AC_SUBST([EGL_CFLAGS])
2144
2145 # If we don't have the X11 platform, set this define so we don't try to include
2146 # the X11 headers.
2147 if ! echo "$egl_platforms" | grep -q 'x11'; then
2148     DEFINES="$DEFINES -DMESA_EGL_NO_X11_HEADERS"
2149     GL_PC_CFLAGS="$GL_PC_CFLAGS -DMESA_EGL_NO_X11_HEADERS"
2150 fi
2151
2152 dnl Directory for XVMC libs
2153 AC_ARG_WITH([xvmc-libdir],
2154     [AS_HELP_STRING([--with-xvmc-libdir=DIR],
2155         [directory for the XVMC libraries @<:@default=${libdir}@:>@])],
2156     [XVMC_LIB_INSTALL_DIR="$withval"],
2157     [XVMC_LIB_INSTALL_DIR='${libdir}'])
2158 AC_SUBST([XVMC_LIB_INSTALL_DIR])
2159
2160 dnl
2161 dnl Gallium Tests
2162 dnl
2163 AM_CONDITIONAL(HAVE_GALLIUM_TESTS, test "x$enable_gallium_tests" = xyes)
2164
2165 dnl Directory for VDPAU libs
2166 AC_ARG_WITH([vdpau-libdir],
2167     [AS_HELP_STRING([--with-vdpau-libdir=DIR],
2168         [directory for the VDPAU libraries @<:@default=${libdir}/vdpau@:>@])],
2169     [VDPAU_LIB_INSTALL_DIR="$withval"],
2170     [VDPAU_LIB_INSTALL_DIR='${libdir}/vdpau'])
2171 AC_SUBST([VDPAU_LIB_INSTALL_DIR])
2172
2173 dnl Directory for OMX libs
2174
2175 AC_ARG_WITH([omx-libdir],
2176     [AS_HELP_STRING([--with-omx-libdir=DIR],
2177         [directory for the OMX libraries])],
2178     [OMX_LIB_INSTALL_DIR="$withval"],
2179     [OMX_LIB_INSTALL_DIR=`$PKG_CONFIG --define-variable=libdir=\$libdir --variable=pluginsdir libomxil-bellagio`])
2180 AC_SUBST([OMX_LIB_INSTALL_DIR])
2181
2182 dnl Directory for VA libs
2183
2184 AC_ARG_WITH([va-libdir],
2185     [AS_HELP_STRING([--with-va-libdir=DIR],
2186         [directory for the VA libraries @<:@${libdir}/dri@:>@])],
2187     [VA_LIB_INSTALL_DIR="$withval"],
2188     [VA_LIB_INSTALL_DIR="${libdir}/dri"])
2189 AC_SUBST([VA_LIB_INSTALL_DIR])
2190
2191 AC_ARG_WITH([d3d-libdir],
2192     [AS_HELP_STRING([--with-d3d-libdir=DIR],
2193         [directory for the D3D modules @<:@${libdir}/d3d@:>@])],
2194     [D3D_DRIVER_INSTALL_DIR="$withval"],
2195     [D3D_DRIVER_INSTALL_DIR="${libdir}/d3d"])
2196 AC_SUBST([D3D_DRIVER_INSTALL_DIR])
2197
2198 dnl
2199 dnl Gallium helper functions
2200 dnl
2201 gallium_require_llvm() {
2202     if test "x$enable_gallium_llvm" = "xyes"; then
2203         llvm_check_version_for $LLVM_REQUIRED_GALLIUM "gallium"
2204     else
2205         AC_MSG_ERROR([--enable-gallium-llvm is required when building $1])
2206     fi
2207 }
2208
2209 dnl
2210 dnl r300 doesn't strictly require LLVM, but for performance reasons we
2211 dnl highly recommend LLVM usage. So require it at least on x86 and x86_64
2212 dnl architectures.
2213 dnl
2214 r300_require_llvm() {
2215     case "$host" in *gnux32) return;; esac
2216     case "$host_cpu" in
2217     i*86|x86_64|amd64) gallium_require_llvm $1
2218         ;;
2219     esac
2220 }
2221
2222 dnl
2223 dnl DRM is needed by X, Wayland, and offscreen rendering.
2224 dnl Surfaceless is an alternative for the last one.
2225 dnl
2226 require_basic_egl() {
2227     case "$with_egl_platforms" in
2228         *drm*|*surfaceless*)
2229             ;;
2230         *)
2231             AC_MSG_ERROR([$1 requires one of these:
2232                   1) --with-egl-platforms=drm (X, Wayland, offscreen rendering based on DRM)
2233                   2) --with-egl-platforms=surfaceless (offscreen only)
2234                   Recommended options: drm,x11])
2235             ;;
2236     esac
2237 }
2238
2239 radeon_gallium_llvm_check() {
2240     if test "x$enable_gallium_llvm" != "xyes"; then
2241         AC_MSG_ERROR([--enable-gallium-llvm is required when building $2])
2242     fi
2243     radeon_llvm_check $*
2244 }
2245
2246 swr_require_cxx_feature_flags() {
2247     feature_name="$1"
2248     preprocessor_test="$2"
2249     option_list="$3"
2250     output_var="$4"
2251
2252     AC_MSG_CHECKING([whether $CXX supports $feature_name])
2253     AC_LANG_PUSH([C++])
2254     save_CXXFLAGS="$CXXFLAGS"
2255     save_IFS="$IFS"
2256     IFS=","
2257     found=0
2258     for opts in $option_list
2259     do
2260         unset IFS
2261         CXXFLAGS="$opts $save_CXXFLAGS"
2262         AC_COMPILE_IFELSE(
2263             [AC_LANG_PROGRAM(
2264                 [   #if !($preprocessor_test)
2265                     #error
2266                     #endif
2267                 ])],
2268             [found=1; break],
2269             [])
2270         IFS=","
2271     done
2272     IFS="$save_IFS"
2273     CXXFLAGS="$save_CXXFLAGS"
2274     AC_LANG_POP([C++])
2275     if test $found -eq 1; then
2276         AC_MSG_RESULT([$opts])
2277         eval "$output_var=\$opts"
2278         return 0
2279     fi
2280     AC_MSG_RESULT([no])
2281     AC_MSG_ERROR([swr requires $feature_name support])
2282     return 1
2283 }
2284
2285 dnl Duplicates in GALLIUM_DRIVERS_DIRS are removed by sorting it after this block
2286 if test -n "$with_gallium_drivers"; then
2287     gallium_drivers=`IFS=', '; echo $with_gallium_drivers`
2288     for driver in $gallium_drivers; do
2289         case "x$driver" in
2290         xsvga)
2291             HAVE_GALLIUM_SVGA=yes
2292             require_libdrm "svga"
2293             ;;
2294         xi915)
2295             HAVE_GALLIUM_I915=yes
2296             PKG_CHECK_MODULES([INTEL], [libdrm >= $LIBDRM_INTEL_REQUIRED libdrm_intel >= $LIBDRM_INTEL_REQUIRED])
2297             require_libdrm "Gallium i915"
2298             ;;
2299         xr300)
2300             HAVE_GALLIUM_R300=yes
2301             PKG_CHECK_MODULES([RADEON], [libdrm >= $LIBDRM_RADEON_REQUIRED libdrm_radeon >= $LIBDRM_RADEON_REQUIRED])
2302             require_libdrm "r300"
2303             r300_require_llvm "r300"
2304             ;;
2305         xr600)
2306             HAVE_GALLIUM_R600=yes
2307             PKG_CHECK_MODULES([RADEON], [libdrm >= $LIBDRM_RADEON_REQUIRED libdrm_radeon >= $LIBDRM_RADEON_REQUIRED])
2308             require_libdrm "r600"
2309             if test "x$enable_opencl" = xyes; then
2310                 radeon_gallium_llvm_check $LLVM_REQUIRED_R600 "r600"
2311
2312                 llvm_add_component "asmparser" "r600"
2313                 llvm_add_component "bitreader" "r600"
2314             fi
2315             ;;
2316         xradeonsi)
2317             HAVE_GALLIUM_RADEONSI=yes
2318             PKG_CHECK_MODULES([RADEON], [libdrm >= $LIBDRM_RADEON_REQUIRED libdrm_radeon >= $LIBDRM_RADEON_REQUIRED])
2319             PKG_CHECK_MODULES([AMDGPU], [libdrm >= $LIBDRM_AMDGPU_REQUIRED libdrm_amdgpu >= $LIBDRM_AMDGPU_REQUIRED])
2320             require_libdrm "radeonsi"
2321             radeon_gallium_llvm_check $LLVM_REQUIRED_RADEONSI "radeonsi"
2322             require_basic_egl "radeonsi"
2323             ;;
2324         xnouveau)
2325             HAVE_GALLIUM_NOUVEAU=yes
2326             PKG_CHECK_MODULES([NOUVEAU], [libdrm >= $LIBDRM_NOUVEAU_REQUIRED libdrm_nouveau >= $LIBDRM_NOUVEAU_REQUIRED])
2327             require_libdrm "nouveau"
2328             ;;
2329         xfreedreno)
2330             HAVE_GALLIUM_FREEDRENO=yes
2331             PKG_CHECK_MODULES([FREEDRENO], [libdrm >= $LIBDRM_FREEDRENO_REQUIRED libdrm_freedreno >= $LIBDRM_FREEDRENO_REQUIRED])
2332             require_libdrm "freedreno"
2333             ;;
2334         xetnaviv)
2335             HAVE_GALLIUM_ETNAVIV=yes
2336             PKG_CHECK_MODULES([ETNAVIV], [libdrm >= $LIBDRM_ETNAVIV_REQUIRED libdrm_etnaviv >= $LIBDRM_ETNAVIV_REQUIRED])
2337             require_libdrm "etnaviv"
2338             ;;
2339        ximx)
2340             HAVE_GALLIUM_IMX=yes
2341             ;;
2342         xswrast)
2343             HAVE_GALLIUM_SOFTPIPE=yes
2344             if test "x$MESA_LLVM" = x1 && test "x$enable_gallium_llvm" == "xyes";  then
2345                 HAVE_GALLIUM_LLVMPIPE=yes
2346             fi
2347             ;;
2348         xswr)
2349             llvm_check_version_for $LLVM_REQUIRED_SWR "swr"
2350             gallium_require_llvm "swr"
2351
2352             swr_require_cxx_feature_flags "C++11" "__cplusplus >= 201103L" \
2353                 ",-std=c++11" \
2354                 SWR_CXX11_CXXFLAGS
2355             AC_SUBST([SWR_CXX11_CXXFLAGS])
2356
2357             swr_require_cxx_feature_flags "AVX" "defined(__AVX__)" \
2358                 ",-mavx,-march=core-avx" \
2359                 SWR_AVX_CXXFLAGS
2360             AC_SUBST([SWR_AVX_CXXFLAGS])
2361
2362             swr_require_cxx_feature_flags "AVX2" "defined(__AVX2__)" \
2363                 ",-mavx2 -mfma -mbmi2 -mf16c,-march=core-avx2" \
2364                 SWR_AVX2_CXXFLAGS
2365             AC_SUBST([SWR_AVX2_CXXFLAGS])
2366
2367             HAVE_GALLIUM_SWR=yes
2368             ;;
2369         xvc4)
2370             HAVE_GALLIUM_VC4=yes
2371             PKG_CHECK_MODULES([VC4], [libdrm >= $LIBDRM_VC4_REQUIRED libdrm_vc4 >= $LIBDRM_VC4_REQUIRED])
2372             require_libdrm "vc4"
2373
2374             PKG_CHECK_MODULES([SIMPENROSE], [simpenrose],
2375                               [USE_VC4_SIMULATOR=yes;
2376                                DEFINES="$DEFINES -DUSE_VC4_SIMULATOR"],
2377                               [USE_VC4_SIMULATOR=no])
2378             ;;
2379         xvirgl)
2380             HAVE_GALLIUM_VIRGL=yes
2381             require_libdrm "virgl"
2382             require_basic_egl "virgl"
2383             ;;
2384         *)
2385             AC_MSG_ERROR([Unknown Gallium driver: $driver])
2386             ;;
2387         esac
2388     done
2389 fi
2390
2391 if test "x$enable_gallium_llvm" == "xyes"; then
2392     llvm_check_version_for $LLVM_REQUIRED_GALLIUM "gallium"
2393     llvm_add_default_components "gallium"
2394 fi
2395
2396 dnl We need to validate some needed dependencies for renderonly drivers.
2397
2398 if test "x$HAVE_GALLIUM_ETNAVIV" != xyes -a "x$HAVE_GALLIUM_IMX" == xyes  ; then
2399     AC_ERROR([Building with imx requires etnaviv])
2400 fi
2401
2402 dnl Set LLVM_LIBS - This is done after the driver configuration so
2403 dnl that drivers can add additional components to LLVM_COMPONENTS.
2404 dnl Previously, gallium drivers were updating LLVM_LIBS directly
2405 dnl by calling llvm-config --libs ${DRIVER_LLVM_COMPONENTS}, but
2406 dnl this was causing the same libraries to be appear multiple times
2407 dnl in LLVM_LIBS.
2408
2409 if test "x$MESA_LLVM" != x0; then
2410
2411     if ! $LLVM_CONFIG --libs ${LLVM_COMPONENTS} >/dev/null; then
2412        AC_MSG_ERROR([Calling ${LLVM_CONFIG} failed])
2413     fi
2414     LLVM_LIBS="`$LLVM_CONFIG --libs ${LLVM_COMPONENTS}`"
2415
2416     dnl llvm-config may not give the right answer when llvm is a built as a
2417     dnl single shared library, so we must work the library name out for
2418     dnl ourselves.
2419     dnl (See https://llvm.org/bugs/show_bug.cgi?id=6823)
2420     if test "x$enable_llvm_shared_libs" = xyes; then
2421         dnl We can't use $LLVM_VERSION because it has 'svn' stripped out,
2422         LLVM_SO_NAME=LLVM-`$LLVM_CONFIG --version`
2423         AS_IF([test -f "$LLVM_LIBDIR/lib$LLVM_SO_NAME.$IMP_LIB_EXT"], [llvm_have_one_so=yes])
2424
2425         if test "x$llvm_have_one_so" = xyes; then
2426             dnl LLVM was built using auto*, so there is only one shared object.
2427             LLVM_LIBS="-l$LLVM_SO_NAME"
2428         else
2429             dnl If LLVM was built with CMake, there will be one shared object per
2430             dnl component.
2431             AS_IF([test ! -f "$LLVM_LIBDIR/libLLVMTarget.$IMP_LIB_EXT"],
2432                     [AC_MSG_ERROR([Could not find llvm shared libraries:
2433         Please make sure you have built llvm with the --enable-shared option
2434         and that your llvm libraries are installed in $LLVM_LIBDIR
2435         If you have installed your llvm libraries to a different directory you
2436         can use the --with-llvm-prefix= configure flag to specify this directory.
2437         NOTE: Mesa is attempting to use llvm shared libraries by default.
2438         If you do not want to build with llvm shared libraries and instead want to
2439         use llvm static libraries then add --disable-llvm-shared-libs to your configure
2440         invocation and rebuild.])])
2441
2442            dnl We don't need to update LLVM_LIBS in this case because the LLVM
2443            dnl install uses a shared object for each component and we have
2444            dnl already added all of these objects to LLVM_LIBS.
2445         fi
2446     else
2447         AC_MSG_WARN([Building mesa with statically linked LLVM may cause compilation issues])
2448         dnl We need to link to llvm system libs when using static libs
2449         dnl However, only llvm 3.5+ provides --system-libs
2450         if test $LLVM_VERSION_MAJOR -ge 4 -o $LLVM_VERSION_MAJOR -eq 3 -a $LLVM_VERSION_MINOR -ge 5; then
2451             LLVM_LIBS="$LLVM_LIBS `$LLVM_CONFIG --system-libs`"
2452         fi
2453     fi
2454 fi
2455
2456 AM_CONDITIONAL(HAVE_GALLIUM_SVGA, test "x$HAVE_GALLIUM_SVGA" = xyes)
2457 AM_CONDITIONAL(HAVE_GALLIUM_I915, test "x$HAVE_GALLIUM_I915" = xyes)
2458 AM_CONDITIONAL(HAVE_GALLIUM_R300, test "x$HAVE_GALLIUM_R300" = xyes)
2459 AM_CONDITIONAL(HAVE_GALLIUM_R600, test "x$HAVE_GALLIUM_R600" = xyes)
2460 AM_CONDITIONAL(HAVE_GALLIUM_RADEONSI, test "x$HAVE_GALLIUM_RADEONSI" = xyes)
2461 AM_CONDITIONAL(HAVE_GALLIUM_RADEON_COMMON, test "x$HAVE_GALLIUM_R600" = xyes -o \
2462                                                 "x$HAVE_GALLIUM_RADEONSI" = xyes)
2463 AM_CONDITIONAL(HAVE_GALLIUM_NOUVEAU, test "x$HAVE_GALLIUM_NOUVEAU" = xyes)
2464 AM_CONDITIONAL(HAVE_GALLIUM_FREEDRENO, test "x$HAVE_GALLIUM_FREEDRENO" = xyes)
2465 AM_CONDITIONAL(HAVE_GALLIUM_ETNAVIV, test "x$HAVE_GALLIUM_ETNAVIV" = xyes)
2466 AM_CONDITIONAL(HAVE_GALLIUM_IMX, test "x$HAVE_GALLIUM_IMX" = xyes)
2467 AM_CONDITIONAL(HAVE_GALLIUM_SOFTPIPE, test "x$HAVE_GALLIUM_SOFTPIPE" = xyes)
2468 AM_CONDITIONAL(HAVE_GALLIUM_LLVMPIPE, test "x$HAVE_GALLIUM_LLVMPIPE" = xyes)
2469 AM_CONDITIONAL(HAVE_GALLIUM_SWR, test "x$HAVE_GALLIUM_SWR" = xyes)
2470 AM_CONDITIONAL(HAVE_GALLIUM_SWRAST, test "x$HAVE_GALLIUM_SOFTPIPE" = xyes -o \
2471                                          "x$HAVE_GALLIUM_LLVMPIPE" = xyes -o \
2472                                          "x$HAVE_GALLIUM_SWR" = xyes)
2473 AM_CONDITIONAL(HAVE_GALLIUM_VC4, test "x$HAVE_GALLIUM_VC4" = xyes)
2474 AM_CONDITIONAL(HAVE_GALLIUM_VIRGL, test "x$HAVE_GALLIUM_VIRGL" = xyes)
2475
2476 AM_CONDITIONAL(HAVE_GALLIUM_STATIC_TARGETS, test "x$enable_shared_pipe_drivers" = xno)
2477
2478 if test "x$enable_dri" = xyes; then
2479     GALLIUM_PIPE_LOADER_DEFINES="$GALLIUM_PIPE_LOADER_DEFINES -DHAVE_PIPE_LOADER_DRI"
2480 fi
2481
2482 if test "x$have_drisw_kms" = xyes; then
2483     GALLIUM_PIPE_LOADER_DEFINES="$GALLIUM_PIPE_LOADER_DEFINES -DHAVE_PIPE_LOADER_KMS"
2484 fi
2485 AC_SUBST([GALLIUM_PIPE_LOADER_DEFINES])
2486
2487 AM_CONDITIONAL(HAVE_I915_DRI, test x$HAVE_I915_DRI = xyes)
2488 AM_CONDITIONAL(HAVE_I965_DRI, test x$HAVE_I965_DRI = xyes)
2489 AM_CONDITIONAL(HAVE_NOUVEAU_DRI, test x$HAVE_NOUVEAU_DRI = xyes)
2490 AM_CONDITIONAL(HAVE_R200_DRI, test x$HAVE_R200_DRI = xyes)
2491 AM_CONDITIONAL(HAVE_RADEON_DRI, test x$HAVE_RADEON_DRI = xyes)
2492 AM_CONDITIONAL(HAVE_SWRAST_DRI, test x$HAVE_SWRAST_DRI = xyes)
2493
2494 AM_CONDITIONAL(HAVE_RADEON_VULKAN, test "x$HAVE_RADEON_VULKAN" = xyes)
2495 AM_CONDITIONAL(HAVE_INTEL_VULKAN, test "x$HAVE_INTEL_VULKAN" = xyes)
2496
2497 AM_CONDITIONAL(HAVE_AMD_DRIVERS, test "x$HAVE_GALLIUM_R600" = xyes -o \
2498                                       "x$HAVE_GALLIUM_RADEONSI" = xyes -o \
2499                                       "x$HAVE_RADEON_VULKAN" = xyes)
2500
2501 AM_CONDITIONAL(HAVE_INTEL_DRIVERS, test "x$HAVE_INTEL_VULKAN" = xyes -o \
2502                                         "x$HAVE_I965_DRI" = xyes)
2503
2504 AM_CONDITIONAL(NEED_RADEON_DRM_WINSYS, test "x$HAVE_GALLIUM_R300" = xyes -o \
2505                                             "x$HAVE_GALLIUM_R600" = xyes -o \
2506                                             "x$HAVE_GALLIUM_RADEONSI" = xyes)
2507 AM_CONDITIONAL(NEED_WINSYS_XLIB, test "x$enable_glx" = xgallium-xlib)
2508 AM_CONDITIONAL(NEED_RADEON_LLVM, test x$NEED_RADEON_LLVM = xyes)
2509 AM_CONDITIONAL(HAVE_GALLIUM_COMPUTE, test x$enable_opencl = xyes)
2510 AM_CONDITIONAL(HAVE_GALLIUM_LLVM, test "x$MESA_LLVM" = x1 -a \
2511                                        "x$enable_gallium_llvm" = xyes)
2512 AM_CONDITIONAL(USE_VC4_SIMULATOR, test x$USE_VC4_SIMULATOR = xyes)
2513
2514 AM_CONDITIONAL(HAVE_LIBDRM, test "x$have_libdrm" = xyes)
2515 AM_CONDITIONAL(HAVE_OSMESA, test "x$enable_osmesa" = xyes)
2516 AM_CONDITIONAL(HAVE_GALLIUM_OSMESA, test "x$enable_gallium_osmesa" = xyes)
2517 AM_CONDITIONAL(HAVE_COMMON_OSMESA, test "x$enable_osmesa" = xyes -o \
2518                                         "x$enable_gallium_osmesa" = xyes)
2519
2520 AM_CONDITIONAL(HAVE_X86_ASM, test "x$asm_arch" = xx86 -o "x$asm_arch" = xx86_64)
2521 AM_CONDITIONAL(HAVE_X86_64_ASM, test "x$asm_arch" = xx86_64)
2522 AM_CONDITIONAL(HAVE_SPARC_ASM, test "x$asm_arch" = xsparc)
2523
2524 AC_SUBST([NINE_MAJOR], 1)
2525 AC_SUBST([NINE_MINOR], 0)
2526 AC_SUBST([NINE_TINY], 0)
2527 AC_SUBST([NINE_VERSION], "$NINE_MAJOR.$NINE_MINOR.$NINE_TINY")
2528
2529 AC_SUBST([VDPAU_MAJOR], 1)
2530 AC_SUBST([VDPAU_MINOR], 0)
2531
2532 VA_MAJOR=`$PKG_CONFIG --modversion libva | $SED -n 's/\([[^\.]]*\)\..*$/\1/p'`
2533 VA_MINOR=`$PKG_CONFIG --modversion libva | $SED -n 's/.*\.\(.*\)\..*$/\1/p'`
2534 AC_SUBST([VA_MAJOR], $VA_MAJOR)
2535 AC_SUBST([VA_MINOR], $VA_MINOR)
2536
2537 AM_CONDITIONAL(HAVE_VULKAN_COMMON, test "x$VULKAN_DRIVERS" != "x")
2538
2539 AC_SUBST([XVMC_MAJOR], 1)
2540 AC_SUBST([XVMC_MINOR], 0)
2541
2542 XA_HEADER="$srcdir/src/gallium/state_trackers/xa/xa_tracker.h"
2543 XA_MAJOR=`grep "#define XA_TRACKER_VERSION_MAJOR" $XA_HEADER | $SED 's/^#define XA_TRACKER_VERSION_MAJOR //'`
2544 XA_MINOR=`grep "#define XA_TRACKER_VERSION_MINOR" $XA_HEADER | $SED 's/^#define XA_TRACKER_VERSION_MINOR //'`
2545 XA_TINY=`grep "#define XA_TRACKER_VERSION_PATCH" $XA_HEADER | $SED 's/^#define XA_TRACKER_VERSION_PATCH //'`
2546
2547 AC_SUBST([XA_MAJOR], $XA_MAJOR)
2548 AC_SUBST([XA_MINOR], $XA_MINOR)
2549 AC_SUBST([XA_TINY], $XA_TINY)
2550 AC_SUBST([XA_VERSION], "$XA_MAJOR.$XA_MINOR.$XA_TINY")
2551
2552 AC_ARG_ENABLE(valgrind,
2553               [AS_HELP_STRING([--enable-valgrind],
2554                              [Build mesa with valgrind support (default: auto)])],
2555                              [VALGRIND=$enableval], [VALGRIND=auto])
2556 if test "x$VALGRIND" != xno; then
2557         PKG_CHECK_MODULES(VALGRIND, [valgrind], [have_valgrind=yes], [have_valgrind=no])
2558 fi
2559 AC_MSG_CHECKING([whether to enable Valgrind support])
2560 if test "x$VALGRIND" = xauto; then
2561         VALGRIND="$have_valgrind"
2562 fi
2563
2564 if test "x$VALGRIND" = "xyes"; then
2565         if ! test "x$have_valgrind" = xyes; then
2566                 AC_MSG_ERROR([Valgrind support required but not present])
2567         fi
2568         AC_DEFINE([HAVE_VALGRIND], 1, [Use valgrind intrinsics to suppress false warnings])
2569 fi
2570
2571 AC_MSG_RESULT([$VALGRIND])
2572
2573 dnl Restore LDFLAGS and CPPFLAGS
2574 LDFLAGS="$_SAVE_LDFLAGS"
2575 CPPFLAGS="$_SAVE_CPPFLAGS"
2576
2577 dnl Suppress clang's warnings about unused CFLAGS and CXXFLAGS
2578 if test "x$acv_mesa_CLANG" = xyes; then
2579     CFLAGS="$CFLAGS -Qunused-arguments"
2580     CXXFLAGS="$CXXFLAGS -Qunused-arguments"
2581 fi
2582
2583 dnl Add user CFLAGS and CXXFLAGS
2584 CFLAGS="$CFLAGS $USER_CFLAGS"
2585 CXXFLAGS="$CXXFLAGS $USER_CXXFLAGS"
2586
2587 dnl Substitute the config
2588 AC_CONFIG_FILES([Makefile
2589                 src/Makefile
2590                 src/amd/Makefile
2591                 src/amd/vulkan/Makefile
2592                 src/compiler/Makefile
2593                 src/egl/Makefile
2594                 src/egl/main/egl.pc
2595                 src/egl/wayland/wayland-drm/Makefile
2596                 src/egl/wayland/wayland-egl/Makefile
2597                 src/egl/wayland/wayland-egl/wayland-egl.pc
2598                 src/gallium/Makefile
2599                 src/gallium/auxiliary/Makefile
2600                 src/gallium/auxiliary/pipe-loader/Makefile
2601                 src/gallium/drivers/freedreno/Makefile
2602                 src/gallium/drivers/ddebug/Makefile
2603                 src/gallium/drivers/i915/Makefile
2604                 src/gallium/drivers/llvmpipe/Makefile
2605                 src/gallium/drivers/noop/Makefile
2606                 src/gallium/drivers/nouveau/Makefile
2607                 src/gallium/drivers/r300/Makefile
2608                 src/gallium/drivers/r600/Makefile
2609                 src/gallium/drivers/radeon/Makefile
2610                 src/gallium/drivers/radeonsi/Makefile
2611                 src/gallium/drivers/rbug/Makefile
2612                 src/gallium/drivers/softpipe/Makefile
2613                 src/gallium/drivers/svga/Makefile
2614                 src/gallium/drivers/swr/Makefile
2615                 src/gallium/drivers/trace/Makefile
2616                 src/gallium/drivers/etnaviv/Makefile
2617                 src/gallium/drivers/imx/Makefile
2618                 src/gallium/drivers/vc4/Makefile
2619                 src/gallium/drivers/virgl/Makefile
2620                 src/gallium/state_trackers/clover/Makefile
2621                 src/gallium/state_trackers/dri/Makefile
2622                 src/gallium/state_trackers/glx/xlib/Makefile
2623                 src/gallium/state_trackers/nine/Makefile
2624                 src/gallium/state_trackers/omx/Makefile
2625                 src/gallium/state_trackers/osmesa/Makefile
2626                 src/gallium/state_trackers/va/Makefile
2627                 src/gallium/state_trackers/vdpau/Makefile
2628                 src/gallium/state_trackers/xa/Makefile
2629                 src/gallium/state_trackers/xvmc/Makefile
2630                 src/gallium/targets/d3dadapter9/Makefile
2631                 src/gallium/targets/d3dadapter9/d3d.pc
2632                 src/gallium/targets/dri/Makefile
2633                 src/gallium/targets/libgl-xlib/Makefile
2634                 src/gallium/targets/omx/Makefile
2635                 src/gallium/targets/opencl/Makefile
2636                 src/gallium/targets/opencl/mesa.icd
2637                 src/gallium/targets/osmesa/Makefile
2638                 src/gallium/targets/osmesa/osmesa.pc
2639                 src/gallium/targets/pipe-loader/Makefile
2640                 src/gallium/targets/va/Makefile
2641                 src/gallium/targets/vdpau/Makefile
2642                 src/gallium/targets/xa/Makefile
2643                 src/gallium/targets/xa/xatracker.pc
2644                 src/gallium/targets/xvmc/Makefile
2645                 src/gallium/tests/trivial/Makefile
2646                 src/gallium/tests/unit/Makefile
2647                 src/gallium/winsys/etnaviv/drm/Makefile
2648                 src/gallium/winsys/imx/drm/Makefile
2649                 src/gallium/winsys/freedreno/drm/Makefile
2650                 src/gallium/winsys/i915/drm/Makefile
2651                 src/gallium/winsys/nouveau/drm/Makefile
2652                 src/gallium/winsys/radeon/drm/Makefile
2653                 src/gallium/winsys/amdgpu/drm/Makefile
2654                 src/gallium/winsys/svga/drm/Makefile
2655                 src/gallium/winsys/sw/dri/Makefile
2656                 src/gallium/winsys/sw/kms-dri/Makefile
2657                 src/gallium/winsys/sw/null/Makefile
2658                 src/gallium/winsys/sw/wrapper/Makefile
2659                 src/gallium/winsys/sw/xlib/Makefile
2660                 src/gallium/winsys/vc4/drm/Makefile
2661                 src/gallium/winsys/virgl/drm/Makefile
2662                 src/gallium/winsys/virgl/vtest/Makefile
2663                 src/gbm/Makefile
2664                 src/gbm/main/gbm.pc
2665                 src/glx/Makefile
2666                 src/glx/apple/Makefile
2667                 src/glx/tests/Makefile
2668                 src/glx/windows/Makefile
2669                 src/glx/windows/windowsdriproto.pc
2670                 src/gtest/Makefile
2671                 src/intel/Makefile
2672                 src/intel/tools/Makefile
2673                 src/intel/vulkan/Makefile
2674                 src/loader/Makefile
2675                 src/mapi/Makefile
2676                 src/mapi/es1api/glesv1_cm.pc
2677                 src/mapi/es2api/glesv2.pc
2678                 src/mapi/glapi/gen/Makefile
2679                 src/mesa/Makefile
2680                 src/mesa/gl.pc
2681                 src/mesa/drivers/dri/dri.pc
2682                 src/mesa/drivers/dri/common/Makefile
2683                 src/mesa/drivers/dri/common/xmlpool/Makefile
2684                 src/mesa/drivers/dri/i915/Makefile
2685                 src/mesa/drivers/dri/i965/Makefile
2686                 src/mesa/drivers/dri/Makefile
2687                 src/mesa/drivers/dri/nouveau/Makefile
2688                 src/mesa/drivers/dri/r200/Makefile
2689                 src/mesa/drivers/dri/radeon/Makefile
2690                 src/mesa/drivers/dri/swrast/Makefile
2691                 src/mesa/drivers/osmesa/Makefile
2692                 src/mesa/drivers/osmesa/osmesa.pc
2693                 src/mesa/drivers/x11/Makefile
2694                 src/mesa/main/tests/Makefile
2695                 src/util/Makefile
2696                 src/util/tests/hash_table/Makefile
2697                 src/vulkan/wsi/Makefile])
2698
2699 AC_OUTPUT
2700
2701 # Fix up dependencies in *.Plo files, where we changed the extension of a
2702 # source file
2703 $SED -i -e 's/brw_blorp.cpp/brw_blorp.c/' src/mesa/drivers/dri/i965/.deps/brw_blorp.Plo
2704
2705
2706 dnl
2707 dnl Output some configuration info for the user
2708 dnl
2709 echo ""
2710 echo "        prefix:          $prefix"
2711 echo "        exec_prefix:     $exec_prefix"
2712 echo "        libdir:          $libdir"
2713 echo "        includedir:      $includedir"
2714
2715 dnl API info
2716 echo ""
2717 echo "        OpenGL:          $enable_opengl (ES1: $enable_gles1 ES2: $enable_gles2)"
2718
2719 dnl Driver info
2720 echo ""
2721 case "x$enable_osmesa$enable_gallium_osmesa" in
2722 xnoyes)
2723         echo "        OSMesa:          lib$OSMESA_LIB (Gallium)"
2724         ;;
2725 xyesno)
2726         echo "        OSMesa:          lib$OSMESA_LIB"
2727         ;;
2728 xnono)
2729         echo "        OSMesa:          no"
2730         ;;
2731 esac
2732
2733 echo ""
2734 if test "x$enable_dri" != xno; then
2735         echo "        DRI platform:    $dri_platform"
2736         if test -z "$DRI_DIRS"; then
2737             echo "        DRI drivers:     no"
2738         else
2739             echo "        DRI drivers:     $DRI_DIRS"
2740         fi
2741         echo "        DRI driver dir:  $DRI_DRIVER_INSTALL_DIR"
2742 fi
2743
2744 case "x$enable_glx" in
2745 xdri)
2746     echo "        GLX:             DRI-based"
2747     ;;
2748 xxlib)
2749     echo "        GLX:             Xlib-based"
2750     ;;
2751 xgallium-xlib)
2752     echo "        GLX:             Xlib-based (Gallium)"
2753     ;;
2754 *)
2755     echo "        GLX:             $enable_glx"
2756     ;;
2757 esac
2758
2759 dnl EGL
2760 echo ""
2761 echo "        EGL:             $enable_egl"
2762 if test "$enable_egl" = yes; then
2763     echo "        EGL platforms:   $egl_platforms"
2764
2765     egl_drivers=""
2766     if test "x$enable_dri" != "xno"; then
2767         egl_drivers="$egl_drivers builtin:egl_dri2"
2768     fi
2769     if test "x$enable_dri3" != "xno"; then
2770         egl_drivers="$egl_drivers builtin:egl_dri3"
2771     fi
2772
2773     echo "        EGL drivers:    $egl_drivers"
2774 fi
2775 if test "x$enable_gbm" = xyes; then
2776     echo "        GBM:             yes"
2777 else
2778     echo "        GBM:             no"
2779 fi
2780
2781 # Vulkan
2782 echo ""
2783 if test "x$VULKAN_DRIVERS" != x; then
2784     echo "        Vulkan drivers:  $VULKAN_DRIVERS"
2785     echo "        Vulkan ICD dir:  $VULKAN_ICD_INSTALL_DIR"
2786 else
2787     echo "        Vulkan drivers:  no"
2788 fi
2789
2790 echo ""
2791 if test "x$MESA_LLVM" = x1; then
2792     echo "        llvm:            yes"
2793     echo "        llvm-config:     $LLVM_CONFIG"
2794     echo "        llvm-version:    $LLVM_VERSION"
2795 else
2796     echo "        llvm:            no"
2797 fi
2798
2799 echo ""
2800 if test -n "$with_gallium_drivers"; then
2801     echo "        Gallium drivers: $gallium_drivers"
2802     echo "        Gallium st:      $gallium_st"
2803 else
2804     echo "        Gallium:         no"
2805 fi
2806
2807 echo ""
2808 if test "x$enable_gallium_extra_hud" != xyes; then
2809     echo "        HUD extra stats: no"
2810 else
2811     echo "        HUD extra stats: yes"
2812 fi
2813
2814 if test "x$enable_lmsensors" != xyes; then
2815     echo "        HUD lmsensors:   no"
2816 else
2817     echo "        HUD lmsensors:   yes"
2818 fi
2819
2820 dnl Libraries
2821 echo ""
2822 echo "        Shared libs:     $enable_shared"
2823 echo "        Static libs:     $enable_static"
2824 echo "        Shared-glapi:    $enable_shared_glapi"
2825
2826 dnl Compiler options
2827 # cleanup the CFLAGS/CXXFLAGS/DEFINES vars
2828 cflags=`echo $CFLAGS | \
2829     $SED 's/^ *//;s/  */ /;s/ *$//'`
2830 cxxflags=`echo $CXXFLAGS | \
2831     $SED 's/^ *//;s/  */ /;s/ *$//'`
2832 defines=`echo $DEFINES | $SED 's/^ *//;s/  */ /;s/ *$//'`
2833 echo ""
2834 echo "        CFLAGS:          $cflags"
2835 echo "        CXXFLAGS:        $cxxflags"
2836 echo "        Macros:          $defines"
2837 echo ""
2838 if test "x$MESA_LLVM" = x1; then
2839     echo "        LLVM_CFLAGS:     $LLVM_CFLAGS"
2840     echo "        LLVM_CXXFLAGS:   $LLVM_CXXFLAGS"
2841     echo "        LLVM_CPPFLAGS:   $LLVM_CPPFLAGS"
2842     echo "        LLVM_LDFLAGS:    $LLVM_LDFLAGS"
2843     echo ""
2844 fi
2845 echo "        PYTHON2:         $PYTHON2"
2846
2847 echo ""
2848 echo "        Run '${MAKE-make}' to build Mesa"
2849 echo ""