OSDN Git Service

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