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