OSDN Git Service

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