OSDN Git Service

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