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