OSDN Git Service

st/mesa: inform the driver of framebuffer changes before compute dispatches
[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     llvm_require_version $LLVM_REQUIRED_OPENCL "opencl"
2034
2035     llvm_add_default_components "opencl"
2036     llvm_add_component "all-targets" "opencl"
2037     llvm_add_component "linker" "opencl"
2038     llvm_add_component "instrumentation" "opencl"
2039     llvm_add_component "ipo" "opencl"
2040     llvm_add_component "irreader" "opencl"
2041     llvm_add_component "option" "opencl"
2042     llvm_add_component "objcarcopts" "opencl"
2043     llvm_add_component "profiledata" "opencl"
2044
2045     dnl Check for Clang internal headers
2046     if test -z "$CLANG_LIBDIR"; then
2047         CLANG_LIBDIR=${LLVM_LIBDIR}
2048     fi
2049     CLANG_RESOURCE_DIR=$CLANG_LIBDIR/clang/${LLVM_VERSION}
2050     AS_IF([test ! -f "$CLANG_RESOURCE_DIR/include/stddef.h"],
2051         [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.])])
2052 fi
2053 AM_CONDITIONAL(HAVE_CLOVER, test "x$enable_opencl" = xyes)
2054 AM_CONDITIONAL(HAVE_CLOVER_ICD, test "x$enable_opencl_icd" = xyes)
2055 AC_SUBST([OPENCL_LIBNAME])
2056 AC_SUBST([CLANG_RESOURCE_DIR])
2057
2058 dnl
2059 dnl Gallium configuration
2060 dnl
2061 AM_CONDITIONAL(HAVE_GALLIUM, test -n "$with_gallium_drivers")
2062
2063 dnl
2064 dnl EGL Platforms configuration
2065 dnl
2066 AC_ARG_WITH([egl-platforms],
2067     [AS_HELP_STRING([--with-egl-platforms@<:@=DIRS...@:>@],
2068         [comma delimited native platforms libEGL supports, e.g.
2069         "x11,drm" @<:@default=auto@:>@])],
2070     [with_egl_platforms="$withval"],
2071     [if test "x$enable_egl" = xyes; then
2072         if test "x$enable_gbm" = xyes; then
2073            with_egl_platforms="x11,drm"
2074         else
2075            with_egl_platforms="x11"
2076         fi
2077     else
2078         with_egl_platforms=""
2079     fi])
2080
2081 if test "x$with_egl_platforms" != "x" -a "x$enable_egl" != xyes; then
2082     AC_MSG_ERROR([cannot build egl state tracker without EGL library])
2083 fi
2084
2085 PKG_CHECK_MODULES([WAYLAND_SCANNER], [wayland-scanner],
2086         WAYLAND_SCANNER=`$PKG_CONFIG --variable=wayland_scanner wayland-scanner`,
2087         WAYLAND_SCANNER='')
2088 if test "x$WAYLAND_SCANNER" = x; then
2089     AC_PATH_PROG([WAYLAND_SCANNER], [wayland-scanner])
2090 fi
2091
2092 # Do per-EGL platform setups and checks
2093 egl_platforms=`IFS=', '; echo $with_egl_platforms`
2094 for plat in $egl_platforms; do
2095         case "$plat" in
2096         wayland)
2097
2098                 PKG_CHECK_MODULES([WAYLAND], [wayland-client >= $WAYLAND_REQUIRED wayland-server >= $WAYLAND_REQUIRED])
2099
2100                 if test "x$WAYLAND_SCANNER" = x; then
2101                         AC_MSG_ERROR([wayland-scanner is needed to compile the wayland egl platform])
2102                 fi
2103                 ;;
2104
2105         x11)
2106                 PKG_CHECK_MODULES([XCB_DRI2], [x11-xcb xcb xcb-dri2 >= $XCBDRI2_REQUIRED xcb-xfixes])
2107                 ;;
2108
2109         drm)
2110                 test "x$enable_gbm" = "xno" &&
2111                         AC_MSG_ERROR([EGL platform drm needs gbm])
2112                 ;;
2113
2114         surfaceless)
2115                 ;;
2116
2117         android)
2118                 PKG_CHECK_MODULES([ANDROID], [cutils hardware sync])
2119                 ;;
2120
2121         *)
2122                 AC_MSG_ERROR([EGL platform '$plat' does not exist])
2123                 ;;
2124         esac
2125
2126         case "$plat" in
2127         wayland|drm|surfaceless)
2128                 require_libdrm "Platform $plat"
2129                 ;;
2130         esac
2131 done
2132
2133 # libEGL wants to default to the first platform specified in
2134 # ./configure.  parse that here.
2135 if test "x$egl_platforms" != "x"; then
2136     FIRST_PLATFORM_CAPS=`echo $egl_platforms | sed 's| .*||' | tr '[[a-z]]' '[[A-Z]]'`
2137     EGL_NATIVE_PLATFORM="_EGL_PLATFORM_$FIRST_PLATFORM_CAPS"
2138 else
2139     EGL_NATIVE_PLATFORM="_EGL_INVALID_PLATFORM"
2140 fi
2141
2142 AM_CONDITIONAL(HAVE_PLATFORM_X11, echo "$egl_platforms" | grep -q 'x11')
2143 AM_CONDITIONAL(HAVE_PLATFORM_WAYLAND, echo "$egl_platforms" | grep -q 'wayland')
2144 AM_CONDITIONAL(HAVE_EGL_PLATFORM_DRM, echo "$egl_platforms" | grep -q 'drm')
2145 AM_CONDITIONAL(HAVE_EGL_PLATFORM_SURFACELESS, echo "$egl_platforms" | grep -q 'surfaceless')
2146 AM_CONDITIONAL(HAVE_EGL_PLATFORM_ANDROID, echo "$egl_platforms" | grep -q 'android')
2147
2148 AC_SUBST([EGL_NATIVE_PLATFORM])
2149 AC_SUBST([EGL_CFLAGS])
2150
2151 # If we don't have the X11 platform, set this define so we don't try to include
2152 # the X11 headers.
2153 if ! echo "$egl_platforms" | grep -q 'x11'; then
2154     DEFINES="$DEFINES -DMESA_EGL_NO_X11_HEADERS"
2155     GL_PC_CFLAGS="$GL_PC_CFLAGS -DMESA_EGL_NO_X11_HEADERS"
2156 fi
2157
2158 dnl Directory for XVMC libs
2159 AC_ARG_WITH([xvmc-libdir],
2160     [AS_HELP_STRING([--with-xvmc-libdir=DIR],
2161         [directory for the XVMC libraries @<:@default=${libdir}@:>@])],
2162     [XVMC_LIB_INSTALL_DIR="$withval"],
2163     [XVMC_LIB_INSTALL_DIR='${libdir}'])
2164 AC_SUBST([XVMC_LIB_INSTALL_DIR])
2165
2166 dnl
2167 dnl Gallium Tests
2168 dnl
2169 AM_CONDITIONAL(HAVE_GALLIUM_TESTS, test "x$enable_gallium_tests" = xyes)
2170
2171 dnl Directory for VDPAU libs
2172 AC_ARG_WITH([vdpau-libdir],
2173     [AS_HELP_STRING([--with-vdpau-libdir=DIR],
2174         [directory for the VDPAU libraries @<:@default=${libdir}/vdpau@:>@])],
2175     [VDPAU_LIB_INSTALL_DIR="$withval"],
2176     [VDPAU_LIB_INSTALL_DIR='${libdir}/vdpau'])
2177 AC_SUBST([VDPAU_LIB_INSTALL_DIR])
2178
2179 dnl Directory for OMX libs
2180
2181 AC_ARG_WITH([omx-libdir],
2182     [AS_HELP_STRING([--with-omx-libdir=DIR],
2183         [directory for the OMX libraries])],
2184     [OMX_LIB_INSTALL_DIR="$withval"],
2185     [OMX_LIB_INSTALL_DIR=`$PKG_CONFIG --define-variable=libdir=\$libdir --variable=pluginsdir libomxil-bellagio`])
2186 AC_SUBST([OMX_LIB_INSTALL_DIR])
2187
2188 dnl Directory for VA libs
2189
2190 AC_ARG_WITH([va-libdir],
2191     [AS_HELP_STRING([--with-va-libdir=DIR],
2192         [directory for the VA libraries @<:@${libdir}/dri@:>@])],
2193     [VA_LIB_INSTALL_DIR="$withval"],
2194     [VA_LIB_INSTALL_DIR="${libdir}/dri"])
2195 AC_SUBST([VA_LIB_INSTALL_DIR])
2196
2197 AC_ARG_WITH([d3d-libdir],
2198     [AS_HELP_STRING([--with-d3d-libdir=DIR],
2199         [directory for the D3D modules @<:@${libdir}/d3d@:>@])],
2200     [D3D_DRIVER_INSTALL_DIR="$withval"],
2201     [D3D_DRIVER_INSTALL_DIR="${libdir}/d3d"])
2202 AC_SUBST([D3D_DRIVER_INSTALL_DIR])
2203
2204 dnl
2205 dnl r300 doesn't strictly require LLVM, but for performance reasons we
2206 dnl highly recommend LLVM usage. So require it at least on x86 and x86_64
2207 dnl architectures.
2208 dnl
2209 r300_require_llvm() {
2210     case "$host" in *gnux32) return;; esac
2211     case "$host_cpu" in
2212     i*86|x86_64|amd64) require_llvm $1
2213         ;;
2214     esac
2215 }
2216
2217 dnl
2218 dnl DRM is needed by X, Wayland, and offscreen rendering.
2219 dnl Surfaceless is an alternative for the last one.
2220 dnl
2221 require_basic_egl() {
2222     case "$with_egl_platforms" in
2223         *drm*|*surfaceless*)
2224             ;;
2225         *)
2226             AC_MSG_ERROR([$1 requires one of these:
2227                   1) --with-egl-platforms=drm (X, Wayland, offscreen rendering based on DRM)
2228                   2) --with-egl-platforms=surfaceless (offscreen only)
2229                   Recommended options: drm,x11])
2230             ;;
2231     esac
2232 }
2233
2234 radeon_gallium_llvm_check() {
2235     if test "x$enable_gallium_llvm" != "xyes"; then
2236         AC_MSG_ERROR([--enable-gallium-llvm is required when building $2])
2237     fi
2238     radeon_llvm_check $*
2239 }
2240
2241 swr_require_cxx_feature_flags() {
2242     feature_name="$1"
2243     preprocessor_test="$2"
2244     option_list="$3"
2245     output_var="$4"
2246
2247     AC_MSG_CHECKING([whether $CXX supports $feature_name])
2248     AC_LANG_PUSH([C++])
2249     save_CXXFLAGS="$CXXFLAGS"
2250     save_IFS="$IFS"
2251     IFS=","
2252     found=0
2253     for opts in $option_list
2254     do
2255         unset IFS
2256         CXXFLAGS="$opts $save_CXXFLAGS"
2257         AC_COMPILE_IFELSE(
2258             [AC_LANG_PROGRAM(
2259                 [   #if !($preprocessor_test)
2260                     #error
2261                     #endif
2262                 ])],
2263             [found=1; break],
2264             [])
2265         IFS=","
2266     done
2267     IFS="$save_IFS"
2268     CXXFLAGS="$save_CXXFLAGS"
2269     AC_LANG_POP([C++])
2270     if test $found -eq 1; then
2271         AC_MSG_RESULT([$opts])
2272         eval "$output_var=\$opts"
2273         return 0
2274     fi
2275     AC_MSG_RESULT([no])
2276     AC_MSG_ERROR([swr requires $feature_name support])
2277     return 1
2278 }
2279
2280 dnl Duplicates in GALLIUM_DRIVERS_DIRS are removed by sorting it after this block
2281 if test -n "$with_gallium_drivers"; then
2282     gallium_drivers=`IFS=', '; echo $with_gallium_drivers`
2283     for driver in $gallium_drivers; do
2284         case "x$driver" in
2285         xsvga)
2286             HAVE_GALLIUM_SVGA=yes
2287             require_libdrm "svga"
2288             ;;
2289         xi915)
2290             HAVE_GALLIUM_I915=yes
2291             PKG_CHECK_MODULES([INTEL], [libdrm_intel >= $LIBDRM_INTEL_REQUIRED])
2292             require_libdrm "Gallium i915"
2293             ;;
2294         xilo)
2295             HAVE_GALLIUM_ILO=yes
2296             PKG_CHECK_MODULES([INTEL], [libdrm_intel >= $LIBDRM_INTEL_REQUIRED])
2297             require_libdrm "Gallium i965/ilo"
2298             ;;
2299         xr300)
2300             HAVE_GALLIUM_R300=yes
2301             PKG_CHECK_MODULES([RADEON], [libdrm_radeon >= $LIBDRM_RADEON_REQUIRED])
2302             require_libdrm "r300"
2303             r300_require_llvm "r300"
2304             ;;
2305         xr600)
2306             HAVE_GALLIUM_R600=yes
2307             PKG_CHECK_MODULES([RADEON], [libdrm_radeon >= $LIBDRM_RADEON_REQUIRED])
2308             require_libdrm "r600"
2309             if test "x$enable_opencl" = xyes; then
2310                 radeon_gallium_llvm_check $LLVM_REQUIRED_R600 "r600"
2311
2312                 llvm_add_component "asmparser" "r600"
2313                 llvm_add_component "bitreader" "r600"
2314             fi
2315             ;;
2316         xradeonsi)
2317             HAVE_GALLIUM_RADEONSI=yes
2318             PKG_CHECK_MODULES([RADEON], [libdrm_radeon >= $LIBDRM_RADEON_REQUIRED])
2319             PKG_CHECK_MODULES([AMDGPU], [libdrm_amdgpu >= $LIBDRM_AMDGPU_REQUIRED])
2320             require_libdrm "radeonsi"
2321             radeon_gallium_llvm_check $LLVM_REQUIRED_RADEONSI "radeonsi"
2322             if test "x$enable_egl" = xyes; then
2323                 require_basic_egl "radeonsi"
2324             fi
2325             ;;
2326         xnouveau)
2327             HAVE_GALLIUM_NOUVEAU=yes
2328             PKG_CHECK_MODULES([NOUVEAU], [libdrm_nouveau >= $LIBDRM_NOUVEAU_REQUIRED])
2329             require_libdrm "nouveau"
2330             ;;
2331         xfreedreno)
2332             HAVE_GALLIUM_FREEDRENO=yes
2333             PKG_CHECK_MODULES([FREEDRENO], [libdrm_freedreno >= $LIBDRM_FREEDRENO_REQUIRED])
2334             require_libdrm "freedreno"
2335             ;;
2336         xetnaviv)
2337             HAVE_GALLIUM_ETNAVIV=yes
2338             PKG_CHECK_MODULES([ETNAVIV], [libdrm_etnaviv >= $LIBDRM_ETNAVIV_REQUIRED])
2339             require_libdrm "etnaviv"
2340             ;;
2341        ximx)
2342             HAVE_GALLIUM_IMX=yes
2343             ;;
2344         xswrast)
2345             HAVE_GALLIUM_SOFTPIPE=yes
2346             if test "x$enable_gallium_llvm" = xyes; then
2347                 HAVE_GALLIUM_LLVMPIPE=yes
2348             fi
2349             ;;
2350         xswr)
2351             llvm_require_version $LLVM_REQUIRED_SWR "swr"
2352
2353             swr_require_cxx_feature_flags "C++11" "__cplusplus >= 201103L" \
2354                 ",-std=c++11" \
2355                 SWR_CXX11_CXXFLAGS
2356             AC_SUBST([SWR_CXX11_CXXFLAGS])
2357
2358             swr_require_cxx_feature_flags "AVX" "defined(__AVX__)" \
2359                 ",-mavx,-march=core-avx" \
2360                 SWR_AVX_CXXFLAGS
2361             AC_SUBST([SWR_AVX_CXXFLAGS])
2362
2363             swr_require_cxx_feature_flags "AVX2" "defined(__AVX2__)" \
2364                 ",-mavx2 -mfma -mbmi2 -mf16c,-march=core-avx2" \
2365                 SWR_AVX2_CXXFLAGS
2366             AC_SUBST([SWR_AVX2_CXXFLAGS])
2367
2368             HAVE_GALLIUM_SWR=yes
2369             ;;
2370         xvc4)
2371             HAVE_GALLIUM_VC4=yes
2372             PKG_CHECK_MODULES([VC4], [libdrm_vc4 >= $LIBDRM_VC4_REQUIRED])
2373             require_libdrm "vc4"
2374
2375             PKG_CHECK_MODULES([SIMPENROSE], [simpenrose],
2376                               [USE_VC4_SIMULATOR=yes;
2377                                DEFINES="$DEFINES -DUSE_VC4_SIMULATOR"],
2378                               [USE_VC4_SIMULATOR=no])
2379             ;;
2380         xvirgl)
2381             HAVE_GALLIUM_VIRGL=yes
2382             require_libdrm "virgl"
2383             require_basic_egl "virgl"
2384             ;;
2385         *)
2386             AC_MSG_ERROR([Unknown Gallium driver: $driver])
2387             ;;
2388         esac
2389     done
2390 fi
2391
2392 if test "x$enable_gallium_llvm" == "xyes" -a "$with_gallium_drivers"; then
2393     llvm_require_version $LLVM_REQUIRED_GALLIUM "gallium"
2394     llvm_add_default_components "gallium"
2395 fi
2396
2397 dnl We need to validate some needed dependencies for renderonly drivers.
2398
2399 if test "x$HAVE_GALLIUM_ETNAVIV" != xyes -a "x$HAVE_GALLIUM_IMX" == xyes  ; then
2400     AC_ERROR([Building with imx requires etnaviv])
2401 fi
2402
2403 dnl
2404 dnl Set defines and buildtime variables only when using LLVM.
2405 dnl
2406 if test "x$enable_gallium_llvm" = xyes; then
2407     DEFINES="${DEFINES} -DHAVE_LLVM=0x0$LLVM_VERSION_INT -DMESA_LLVM_VERSION_PATCH=$LLVM_VERSION_PATCH"
2408
2409     LLVM_LDFLAGS=`$LLVM_CONFIG --ldflags`
2410     LLVM_CFLAGS=$LLVM_CPPFLAGS   # CPPFLAGS seem to be sufficient
2411     LLVM_CXXFLAGS=`strip_unwanted_llvm_flags "$LLVM_CONFIG --cxxflags"`
2412
2413     dnl Set LLVM_LIBS - This is done after the driver configuration so
2414     dnl that drivers can add additional components to LLVM_COMPONENTS.
2415     dnl Previously, gallium drivers were updating LLVM_LIBS directly
2416     dnl by calling llvm-config --libs ${DRIVER_LLVM_COMPONENTS}, but
2417     dnl this was causing the same libraries to be appear multiple times
2418     dnl in LLVM_LIBS.
2419
2420     if ! $LLVM_CONFIG --libs ${LLVM_COMPONENTS} >/dev/null; then
2421        AC_MSG_ERROR([Calling ${LLVM_CONFIG} failed])
2422     fi
2423     LLVM_LIBS="`$LLVM_CONFIG --libs ${LLVM_COMPONENTS}`"
2424
2425     dnl llvm-config may not give the right answer when llvm is a built as a
2426     dnl single shared library, so we must work the library name out for
2427     dnl ourselves.
2428     dnl (See https://llvm.org/bugs/show_bug.cgi?id=6823)
2429     if test "x$enable_llvm_shared_libs" = xyes; then
2430         dnl We can't use $LLVM_VERSION because it has 'svn' stripped out,
2431         LLVM_SO_NAME=LLVM-`$LLVM_CONFIG --version`
2432         AS_IF([test -f "$LLVM_LIBDIR/lib$LLVM_SO_NAME.$IMP_LIB_EXT"], [llvm_have_one_so=yes])
2433
2434         if test "x$llvm_have_one_so" = xyes; then
2435             dnl LLVM was built using auto*, so there is only one shared object.
2436             LLVM_LIBS="-l$LLVM_SO_NAME"
2437         else
2438             dnl If LLVM was built with CMake, there will be one shared object per
2439             dnl component.
2440             AS_IF([test ! -f "$LLVM_LIBDIR/libLLVMTarget.$IMP_LIB_EXT"],
2441                     [AC_MSG_ERROR([Could not find llvm shared libraries:
2442         Please make sure you have built llvm with the --enable-shared option
2443         and that your llvm libraries are installed in $LLVM_LIBDIR
2444         If you have installed your llvm libraries to a different directory you
2445         can use the --with-llvm-prefix= configure flag to specify this directory.
2446         NOTE: Mesa is attempting to use llvm shared libraries by default.
2447         If you do not want to build with llvm shared libraries and instead want to
2448         use llvm static libraries then add --disable-llvm-shared-libs to your configure
2449         invocation and rebuild.])])
2450
2451            dnl We don't need to update LLVM_LIBS in this case because the LLVM
2452            dnl install uses a shared object for each component and we have
2453            dnl already added all of these objects to LLVM_LIBS.
2454         fi
2455     else
2456         AC_MSG_WARN([Building mesa with statically linked LLVM may cause compilation issues])
2457         dnl We need to link to llvm system libs when using static libs
2458         dnl However, only llvm 3.5+ provides --system-libs
2459         if test $LLVM_VERSION_MAJOR -ge 4 -o $LLVM_VERSION_MAJOR -eq 3 -a $LLVM_VERSION_MINOR -ge 5; then
2460             LLVM_LIBS="$LLVM_LIBS `$LLVM_CONFIG --system-libs`"
2461         fi
2462     fi
2463 fi
2464
2465 AM_CONDITIONAL(HAVE_GALLIUM_SVGA, test "x$HAVE_GALLIUM_SVGA" = xyes)
2466 AM_CONDITIONAL(HAVE_GALLIUM_I915, test "x$HAVE_GALLIUM_I915" = xyes)
2467 AM_CONDITIONAL(HAVE_GALLIUM_ILO, test "x$HAVE_GALLIUM_ILO" = xyes)
2468 AM_CONDITIONAL(HAVE_GALLIUM_R300, test "x$HAVE_GALLIUM_R300" = xyes)
2469 AM_CONDITIONAL(HAVE_GALLIUM_R600, test "x$HAVE_GALLIUM_R600" = xyes)
2470 AM_CONDITIONAL(HAVE_GALLIUM_RADEONSI, test "x$HAVE_GALLIUM_RADEONSI" = xyes)
2471 AM_CONDITIONAL(HAVE_GALLIUM_RADEON_COMMON, test "x$HAVE_GALLIUM_R600" = xyes -o \
2472                                                 "x$HAVE_GALLIUM_RADEONSI" = xyes)
2473 AM_CONDITIONAL(HAVE_GALLIUM_NOUVEAU, test "x$HAVE_GALLIUM_NOUVEAU" = xyes)
2474 AM_CONDITIONAL(HAVE_GALLIUM_FREEDRENO, test "x$HAVE_GALLIUM_FREEDRENO" = xyes)
2475 AM_CONDITIONAL(HAVE_GALLIUM_ETNAVIV, test "x$HAVE_GALLIUM_ETNAVIV" = xyes)
2476 AM_CONDITIONAL(HAVE_GALLIUM_IMX, test "x$HAVE_GALLIUM_IMX" = xyes)
2477 AM_CONDITIONAL(HAVE_GALLIUM_SOFTPIPE, test "x$HAVE_GALLIUM_SOFTPIPE" = xyes)
2478 AM_CONDITIONAL(HAVE_GALLIUM_LLVMPIPE, test "x$HAVE_GALLIUM_LLVMPIPE" = xyes)
2479 AM_CONDITIONAL(HAVE_GALLIUM_SWR, test "x$HAVE_GALLIUM_SWR" = xyes)
2480 AM_CONDITIONAL(HAVE_GALLIUM_SWRAST, test "x$HAVE_GALLIUM_SOFTPIPE" = xyes -o \
2481                                          "x$HAVE_GALLIUM_LLVMPIPE" = xyes -o \
2482                                          "x$HAVE_GALLIUM_SWR" = xyes)
2483 AM_CONDITIONAL(HAVE_GALLIUM_VC4, test "x$HAVE_GALLIUM_VC4" = xyes)
2484 AM_CONDITIONAL(HAVE_GALLIUM_VIRGL, test "x$HAVE_GALLIUM_VIRGL" = xyes)
2485
2486 AM_CONDITIONAL(HAVE_GALLIUM_STATIC_TARGETS, test "x$enable_shared_pipe_drivers" = xno)
2487
2488 if test "x$enable_dri" = xyes; then
2489     GALLIUM_PIPE_LOADER_DEFINES="$GALLIUM_PIPE_LOADER_DEFINES -DHAVE_PIPE_LOADER_DRI"
2490 fi
2491
2492 if test "x$have_drisw_kms" = xyes; then
2493     GALLIUM_PIPE_LOADER_DEFINES="$GALLIUM_PIPE_LOADER_DEFINES -DHAVE_PIPE_LOADER_KMS"
2494 fi
2495 AC_SUBST([GALLIUM_PIPE_LOADER_DEFINES])
2496
2497 AM_CONDITIONAL(HAVE_I915_DRI, test x$HAVE_I915_DRI = xyes)
2498 AM_CONDITIONAL(HAVE_I965_DRI, test x$HAVE_I965_DRI = xyes)
2499 AM_CONDITIONAL(HAVE_NOUVEAU_DRI, test x$HAVE_NOUVEAU_DRI = xyes)
2500 AM_CONDITIONAL(HAVE_R200_DRI, test x$HAVE_R200_DRI = xyes)
2501 AM_CONDITIONAL(HAVE_RADEON_DRI, test x$HAVE_RADEON_DRI = xyes)
2502 AM_CONDITIONAL(HAVE_SWRAST_DRI, test x$HAVE_SWRAST_DRI = xyes)
2503
2504 AM_CONDITIONAL(HAVE_RADEON_VULKAN, test "x$HAVE_RADEON_VULKAN" = xyes)
2505 AM_CONDITIONAL(HAVE_INTEL_VULKAN, test "x$HAVE_INTEL_VULKAN" = xyes)
2506
2507 AM_CONDITIONAL(HAVE_AMD_DRIVERS, test "x$HAVE_GALLIUM_R600" = xyes -o \
2508                                       "x$HAVE_GALLIUM_RADEONSI" = xyes -o \
2509                                       "x$HAVE_RADEON_VULKAN" = xyes)
2510
2511 AM_CONDITIONAL(HAVE_INTEL_DRIVERS, test "x$HAVE_INTEL_VULKAN" = xyes -o \
2512                                         "x$HAVE_I965_DRI" = xyes)
2513
2514 AM_CONDITIONAL(NEED_RADEON_DRM_WINSYS, test "x$HAVE_GALLIUM_R300" = xyes -o \
2515                                             "x$HAVE_GALLIUM_R600" = xyes -o \
2516                                             "x$HAVE_GALLIUM_RADEONSI" = xyes)
2517 AM_CONDITIONAL(NEED_WINSYS_XLIB, test "x$enable_glx" = xgallium-xlib)
2518 AM_CONDITIONAL(NEED_RADEON_LLVM, test x$NEED_RADEON_LLVM = xyes)
2519 AM_CONDITIONAL(HAVE_GALLIUM_COMPUTE, test x$enable_opencl = xyes)
2520 AM_CONDITIONAL(HAVE_GALLIUM_LLVM, test "x$enable_gallium_llvm" = xyes)
2521 AM_CONDITIONAL(USE_VC4_SIMULATOR, test x$USE_VC4_SIMULATOR = xyes)
2522 if test "x$USE_VC4_SIMULATOR" = xyes -a "x$HAVE_GALLIUM_ILO" = xyes; then
2523     AC_MSG_ERROR([VC4 simulator on x86 replaces i965 driver build, so ilo must be disabled.])
2524 fi
2525
2526 AM_CONDITIONAL(HAVE_LIBDRM, test "x$have_libdrm" = xyes)
2527 AM_CONDITIONAL(HAVE_OSMESA, test "x$enable_osmesa" = xyes)
2528 AM_CONDITIONAL(HAVE_GALLIUM_OSMESA, test "x$enable_gallium_osmesa" = xyes)
2529 AM_CONDITIONAL(HAVE_COMMON_OSMESA, test "x$enable_osmesa" = xyes -o \
2530                                         "x$enable_gallium_osmesa" = xyes)
2531
2532 AM_CONDITIONAL(HAVE_X86_ASM, test "x$asm_arch" = xx86 -o "x$asm_arch" = xx86_64)
2533 AM_CONDITIONAL(HAVE_X86_64_ASM, test "x$asm_arch" = xx86_64)
2534 AM_CONDITIONAL(HAVE_SPARC_ASM, test "x$asm_arch" = xsparc)
2535
2536 AC_SUBST([NINE_MAJOR], 1)
2537 AC_SUBST([NINE_MINOR], 0)
2538 AC_SUBST([NINE_TINY], 0)
2539 AC_SUBST([NINE_VERSION], "$NINE_MAJOR.$NINE_MINOR.$NINE_TINY")
2540
2541 AC_SUBST([VDPAU_MAJOR], 1)
2542 AC_SUBST([VDPAU_MINOR], 0)
2543
2544 VA_MAJOR=`$PKG_CONFIG --modversion libva | $SED -n 's/\([[^\.]]*\)\..*$/\1/p'`
2545 VA_MINOR=`$PKG_CONFIG --modversion libva | $SED -n 's/.*\.\(.*\)\..*$/\1/p'`
2546 AC_SUBST([VA_MAJOR], $VA_MAJOR)
2547 AC_SUBST([VA_MINOR], $VA_MINOR)
2548
2549 AM_CONDITIONAL(HAVE_VULKAN_COMMON, test "x$VULKAN_DRIVERS" != "x")
2550
2551 AC_SUBST([XVMC_MAJOR], 1)
2552 AC_SUBST([XVMC_MINOR], 0)
2553
2554 XA_HEADER="$srcdir/src/gallium/state_trackers/xa/xa_tracker.h"
2555 XA_MAJOR=`grep "#define XA_TRACKER_VERSION_MAJOR" $XA_HEADER | $SED 's/^#define XA_TRACKER_VERSION_MAJOR //'`
2556 XA_MINOR=`grep "#define XA_TRACKER_VERSION_MINOR" $XA_HEADER | $SED 's/^#define XA_TRACKER_VERSION_MINOR //'`
2557 XA_TINY=`grep "#define XA_TRACKER_VERSION_PATCH" $XA_HEADER | $SED 's/^#define XA_TRACKER_VERSION_PATCH //'`
2558
2559 AC_SUBST([XA_MAJOR], $XA_MAJOR)
2560 AC_SUBST([XA_MINOR], $XA_MINOR)
2561 AC_SUBST([XA_TINY], $XA_TINY)
2562 AC_SUBST([XA_VERSION], "$XA_MAJOR.$XA_MINOR.$XA_TINY")
2563
2564 AC_ARG_ENABLE(valgrind,
2565               [AS_HELP_STRING([--enable-valgrind],
2566                              [Build mesa with valgrind support (default: auto)])],
2567                              [VALGRIND=$enableval], [VALGRIND=auto])
2568 if test "x$VALGRIND" != xno; then
2569         PKG_CHECK_MODULES(VALGRIND, [valgrind], [have_valgrind=yes], [have_valgrind=no])
2570 fi
2571 AC_MSG_CHECKING([whether to enable Valgrind support])
2572 if test "x$VALGRIND" = xauto; then
2573         VALGRIND="$have_valgrind"
2574 fi
2575
2576 if test "x$VALGRIND" = "xyes"; then
2577         if ! test "x$have_valgrind" = xyes; then
2578                 AC_MSG_ERROR([Valgrind support required but not present])
2579         fi
2580         AC_DEFINE([HAVE_VALGRIND], 1, [Use valgrind intrinsics to suppress false warnings])
2581 fi
2582
2583 AC_MSG_RESULT([$VALGRIND])
2584
2585 dnl Restore LDFLAGS and CPPFLAGS
2586 LDFLAGS="$_SAVE_LDFLAGS"
2587 CPPFLAGS="$_SAVE_CPPFLAGS"
2588
2589 dnl Suppress clang's warnings about unused CFLAGS and CXXFLAGS
2590 if test "x$acv_mesa_CLANG" = xyes; then
2591     CFLAGS="$CFLAGS -Qunused-arguments"
2592     CXXFLAGS="$CXXFLAGS -Qunused-arguments"
2593 fi
2594
2595 dnl Add user CFLAGS and CXXFLAGS
2596 CFLAGS="$CFLAGS $USER_CFLAGS"
2597 CXXFLAGS="$CXXFLAGS $USER_CXXFLAGS"
2598
2599 dnl Substitute the config
2600 AC_CONFIG_FILES([Makefile
2601                 src/Makefile
2602                 src/amd/Makefile
2603                 src/amd/vulkan/Makefile
2604                 src/compiler/Makefile
2605                 src/egl/Makefile
2606                 src/egl/main/egl.pc
2607                 src/egl/wayland/wayland-drm/Makefile
2608                 src/egl/wayland/wayland-egl/Makefile
2609                 src/egl/wayland/wayland-egl/wayland-egl.pc
2610                 src/gallium/Makefile
2611                 src/gallium/auxiliary/Makefile
2612                 src/gallium/auxiliary/pipe-loader/Makefile
2613                 src/gallium/drivers/freedreno/Makefile
2614                 src/gallium/drivers/ddebug/Makefile
2615                 src/gallium/drivers/i915/Makefile
2616                 src/gallium/drivers/ilo/Makefile
2617                 src/gallium/drivers/llvmpipe/Makefile
2618                 src/gallium/drivers/noop/Makefile
2619                 src/gallium/drivers/nouveau/Makefile
2620                 src/gallium/drivers/r300/Makefile
2621                 src/gallium/drivers/r600/Makefile
2622                 src/gallium/drivers/radeon/Makefile
2623                 src/gallium/drivers/radeonsi/Makefile
2624                 src/gallium/drivers/rbug/Makefile
2625                 src/gallium/drivers/softpipe/Makefile
2626                 src/gallium/drivers/svga/Makefile
2627                 src/gallium/drivers/swr/Makefile
2628                 src/gallium/drivers/trace/Makefile
2629                 src/gallium/drivers/etnaviv/Makefile
2630                 src/gallium/drivers/imx/Makefile
2631                 src/gallium/drivers/vc4/Makefile
2632                 src/gallium/drivers/virgl/Makefile
2633                 src/gallium/state_trackers/clover/Makefile
2634                 src/gallium/state_trackers/dri/Makefile
2635                 src/gallium/state_trackers/glx/xlib/Makefile
2636                 src/gallium/state_trackers/nine/Makefile
2637                 src/gallium/state_trackers/omx/Makefile
2638                 src/gallium/state_trackers/osmesa/Makefile
2639                 src/gallium/state_trackers/va/Makefile
2640                 src/gallium/state_trackers/vdpau/Makefile
2641                 src/gallium/state_trackers/xa/Makefile
2642                 src/gallium/state_trackers/xvmc/Makefile
2643                 src/gallium/targets/d3dadapter9/Makefile
2644                 src/gallium/targets/d3dadapter9/d3d.pc
2645                 src/gallium/targets/dri/Makefile
2646                 src/gallium/targets/libgl-xlib/Makefile
2647                 src/gallium/targets/omx/Makefile
2648                 src/gallium/targets/opencl/Makefile
2649                 src/gallium/targets/opencl/mesa.icd
2650                 src/gallium/targets/osmesa/Makefile
2651                 src/gallium/targets/osmesa/osmesa.pc
2652                 src/gallium/targets/pipe-loader/Makefile
2653                 src/gallium/targets/va/Makefile
2654                 src/gallium/targets/vdpau/Makefile
2655                 src/gallium/targets/xa/Makefile
2656                 src/gallium/targets/xa/xatracker.pc
2657                 src/gallium/targets/xvmc/Makefile
2658                 src/gallium/tests/trivial/Makefile
2659                 src/gallium/tests/unit/Makefile
2660                 src/gallium/winsys/etnaviv/drm/Makefile
2661                 src/gallium/winsys/imx/drm/Makefile
2662                 src/gallium/winsys/freedreno/drm/Makefile
2663                 src/gallium/winsys/i915/drm/Makefile
2664                 src/gallium/winsys/intel/drm/Makefile
2665                 src/gallium/winsys/nouveau/drm/Makefile
2666                 src/gallium/winsys/radeon/drm/Makefile
2667                 src/gallium/winsys/amdgpu/drm/Makefile
2668                 src/gallium/winsys/svga/drm/Makefile
2669                 src/gallium/winsys/sw/dri/Makefile
2670                 src/gallium/winsys/sw/kms-dri/Makefile
2671                 src/gallium/winsys/sw/null/Makefile
2672                 src/gallium/winsys/sw/wrapper/Makefile
2673                 src/gallium/winsys/sw/xlib/Makefile
2674                 src/gallium/winsys/vc4/drm/Makefile
2675                 src/gallium/winsys/virgl/drm/Makefile
2676                 src/gallium/winsys/virgl/vtest/Makefile
2677                 src/gbm/Makefile
2678                 src/gbm/main/gbm.pc
2679                 src/glx/Makefile
2680                 src/glx/apple/Makefile
2681                 src/glx/tests/Makefile
2682                 src/glx/windows/Makefile
2683                 src/glx/windows/windowsdriproto.pc
2684                 src/gtest/Makefile
2685                 src/intel/Makefile
2686                 src/intel/tools/Makefile
2687                 src/intel/vulkan/Makefile
2688                 src/loader/Makefile
2689                 src/mapi/Makefile
2690                 src/mapi/es1api/glesv1_cm.pc
2691                 src/mapi/es2api/glesv2.pc
2692                 src/mapi/glapi/gen/Makefile
2693                 src/mesa/Makefile
2694                 src/mesa/gl.pc
2695                 src/mesa/drivers/dri/dri.pc
2696                 src/mesa/drivers/dri/common/Makefile
2697                 src/mesa/drivers/dri/common/xmlpool/Makefile
2698                 src/mesa/drivers/dri/i915/Makefile
2699                 src/mesa/drivers/dri/i965/Makefile
2700                 src/mesa/drivers/dri/Makefile
2701                 src/mesa/drivers/dri/nouveau/Makefile
2702                 src/mesa/drivers/dri/r200/Makefile
2703                 src/mesa/drivers/dri/radeon/Makefile
2704                 src/mesa/drivers/dri/swrast/Makefile
2705                 src/mesa/drivers/osmesa/Makefile
2706                 src/mesa/drivers/osmesa/osmesa.pc
2707                 src/mesa/drivers/x11/Makefile
2708                 src/mesa/main/tests/Makefile
2709                 src/util/Makefile
2710                 src/util/tests/hash_table/Makefile
2711                 src/vulkan/wsi/Makefile])
2712
2713 AC_OUTPUT
2714
2715 # Fix up dependencies in *.Plo files, where we changed the extension of a
2716 # source file
2717 $SED -i -e 's/brw_blorp.cpp/brw_blorp.c/' src/mesa/drivers/dri/i965/.deps/brw_blorp.Plo
2718
2719
2720 dnl
2721 dnl Output some configuration info for the user
2722 dnl
2723 echo ""
2724 echo "        prefix:          $prefix"
2725 echo "        exec_prefix:     $exec_prefix"
2726 echo "        libdir:          $libdir"
2727 echo "        includedir:      $includedir"
2728
2729 dnl API info
2730 echo ""
2731 echo "        OpenGL:          $enable_opengl (ES1: $enable_gles1 ES2: $enable_gles2)"
2732
2733 dnl Driver info
2734 echo ""
2735 case "x$enable_osmesa$enable_gallium_osmesa" in
2736 xnoyes)
2737         echo "        OSMesa:          lib$OSMESA_LIB (Gallium)"
2738         ;;
2739 xyesno)
2740         echo "        OSMesa:          lib$OSMESA_LIB"
2741         ;;
2742 xnono)
2743         echo "        OSMesa:          no"
2744         ;;
2745 esac
2746
2747 echo ""
2748 if test "x$enable_dri" != xno; then
2749         echo "        DRI platform:    $dri_platform"
2750         if test -z "$DRI_DIRS"; then
2751             echo "        DRI drivers:     no"
2752         else
2753             echo "        DRI drivers:     $DRI_DIRS"
2754         fi
2755         echo "        DRI driver dir:  $DRI_DRIVER_INSTALL_DIR"
2756 fi
2757
2758 case "x$enable_glx" in
2759 xdri)
2760     echo "        GLX:             DRI-based"
2761     ;;
2762 xxlib)
2763     echo "        GLX:             Xlib-based"
2764     ;;
2765 xgallium-xlib)
2766     echo "        GLX:             Xlib-based (Gallium)"
2767     ;;
2768 *)
2769     echo "        GLX:             $enable_glx"
2770     ;;
2771 esac
2772
2773 dnl EGL
2774 echo ""
2775 echo "        EGL:             $enable_egl"
2776 if test "$enable_egl" = yes; then
2777     echo "        EGL platforms:   $egl_platforms"
2778
2779     egl_drivers=""
2780     if test "x$enable_dri" != "xno"; then
2781         egl_drivers="$egl_drivers builtin:egl_dri2"
2782     fi
2783     if test "x$enable_dri3" != "xno"; then
2784         egl_drivers="$egl_drivers builtin:egl_dri3"
2785     fi
2786
2787     echo "        EGL drivers:    $egl_drivers"
2788 fi
2789 if test "x$enable_gbm" = xyes; then
2790     echo "        GBM:             yes"
2791 else
2792     echo "        GBM:             no"
2793 fi
2794
2795 # Vulkan
2796 echo ""
2797 if test "x$VULKAN_DRIVERS" != x; then
2798     echo "        Vulkan drivers:  $VULKAN_DRIVERS"
2799     echo "        Vulkan ICD dir:  $VULKAN_ICD_INSTALL_DIR"
2800 else
2801     echo "        Vulkan drivers:  no"
2802 fi
2803
2804 echo ""
2805 if test "x$enable_gallium_llvm" = xyes; then
2806     echo "        llvm:            yes"
2807     echo "        llvm-config:     $LLVM_CONFIG"
2808     echo "        llvm-version:    $LLVM_VERSION"
2809 else
2810     echo "        llvm:            no"
2811 fi
2812
2813 echo ""
2814 if test -n "$with_gallium_drivers"; then
2815     echo "        Gallium drivers: $gallium_drivers"
2816     echo "        Gallium st:      $gallium_st"
2817 else
2818     echo "        Gallium:         no"
2819 fi
2820
2821 echo ""
2822 if test "x$enable_gallium_extra_hud" != xyes; then
2823     echo "        HUD extra stats: no"
2824 else
2825     echo "        HUD extra stats: yes"
2826 fi
2827
2828 if test "x$enable_lmsensors" != xyes; then
2829     echo "        HUD lmsensors:   no"
2830 else
2831     echo "        HUD lmsensors:   yes"
2832 fi
2833
2834 dnl Libraries
2835 echo ""
2836 echo "        Shared libs:     $enable_shared"
2837 echo "        Static libs:     $enable_static"
2838 echo "        Shared-glapi:    $enable_shared_glapi"
2839
2840 dnl Compiler options
2841 # cleanup the CFLAGS/CXXFLAGS/DEFINES vars
2842 cflags=`echo $CFLAGS | \
2843     $SED 's/^ *//;s/  */ /;s/ *$//'`
2844 cxxflags=`echo $CXXFLAGS | \
2845     $SED 's/^ *//;s/  */ /;s/ *$//'`
2846 defines=`echo $DEFINES | $SED 's/^ *//;s/  */ /;s/ *$//'`
2847 echo ""
2848 echo "        CFLAGS:          $cflags"
2849 echo "        CXXFLAGS:        $cxxflags"
2850 echo "        Macros:          $defines"
2851 echo ""
2852 if test "x$enable_gallium_llvm" = xyes; then
2853     echo "        LLVM_CFLAGS:     $LLVM_CFLAGS"
2854     echo "        LLVM_CXXFLAGS:   $LLVM_CXXFLAGS"
2855     echo "        LLVM_CPPFLAGS:   $LLVM_CPPFLAGS"
2856     echo "        LLVM_LDFLAGS:    $LLVM_LDFLAGS"
2857     echo ""
2858 fi
2859 echo "        PYTHON2:         $PYTHON2"
2860
2861 echo ""
2862 echo "        Run '${MAKE-make}' to build Mesa"
2863 echo ""