OSDN Git Service

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