configure: radv depends on mako
[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 if test "x$acv_mako_found" = xno; then
2103 AC_MSG_ERROR([Python mako module v$PYTHON_MAKO_REQUIRED or higher not found])
2104 fi
2105 HAVE_RADEON_VULKAN=yes
2106 ;;
2107 *)
2108 AC_MSG_ERROR([Vulkan driver '$driver' does not exist])
2109 ;;
2110 esac
2111 done
2112 VULKAN_DRIVERS=`echo $VULKAN_DRIVERS|tr " " "\n"|sort -u|tr "\n" " "`
2113 fi
2114
2115
2116 DEFINES="$DEFINES -DENABLE_SHADER_CACHE"
2117 AM_CONDITIONAL(NEED_MEGADRIVER, test -n "$DRI_DIRS")
2118 AM_CONDITIONAL(NEED_LIBMESA, test "x$enable_glx" = xxlib -o \
2119 "x$enable_osmesa" = xyes -o \
2120 -n "$DRI_DIRS")
2121
2122 dnl
2123 dnl OSMesa configuration
2124 dnl
2125
2126 dnl Configure the channel bits for OSMesa (libOSMesa, libOSMesa16, ...)
2127 AC_ARG_WITH([osmesa-bits],
2128 [AS_HELP_STRING([--with-osmesa-bits=BITS],
2129 [OSMesa channel bits and library name: 8, 16, 32 @<:@default=8@:>@])],
2130 [osmesa_bits="$withval"],
2131 [osmesa_bits=8])
2132 if test "x$osmesa_bits" != x8; then
2133 if test "x$enable_dri" = xyes -o "x$enable_glx" != xno; then
2134 AC_MSG_WARN([Ignoring OSMesa channel bits because of non-OSMesa driver])
2135 osmesa_bits=8
2136 fi
2137 fi
2138 case "x$osmesa_bits" in
2139 x8)
2140 OSMESA_LIB="${OSMESA_LIB}"
2141 ;;
2142 x16|x32)
2143 OSMESA_LIB="${OSMESA_LIB}$osmesa_bits"
2144 DEFINES="$DEFINES -DCHAN_BITS=$osmesa_bits -DDEFAULT_SOFTWARE_DEPTH_BITS=31"
2145 ;;
2146 *)
2147 AC_MSG_ERROR([OSMesa bits '$osmesa_bits' is not a valid option])
2148 ;;
2149 esac
2150
2151 if test "x$enable_osmesa" = xyes -o "x$enable_gallium_osmesa" = xyes; then
2152 # only link libraries with osmesa if shared
2153 if test "$enable_static" = no; then
2154 OSMESA_LIB_DEPS="-lm $PTHREAD_LIBS $SELINUX_LIBS $DLOPEN_LIBS"
2155 else
2156 OSMESA_LIB_DEPS=""
2157 fi
2158 OSMESA_PC_LIB_PRIV="-lm $PTHREAD_LIBS $SELINUX_LIBS $DLOPEN_LIBS"
2159 fi
2160
2161 AC_SUBST([OSMESA_LIB_DEPS])
2162 AC_SUBST([OSMESA_PC_REQ])
2163 AC_SUBST([OSMESA_PC_LIB_PRIV])
2164
2165 dnl
2166 dnl gbm configuration
2167 dnl
2168 if test "x$enable_gbm" = xyes; then
2169 require_dri_shared_libs_and_glapi "gbm"
2170 fi
2171 AM_CONDITIONAL(HAVE_GBM, test "x$enable_gbm" = xyes)
2172 # FINISHME: GBM has a number of dependencies which we should add below
2173 GBM_PC_REQ_PRIV=""
2174 GBM_PC_LIB_PRIV="$DLOPEN_LIBS"
2175 AC_SUBST([GBM_PC_REQ_PRIV])
2176 AC_SUBST([GBM_PC_LIB_PRIV])
2177
2178 dnl
2179 dnl EGL configuration
2180 dnl
2181
2182 if test "x$enable_egl" = xyes; then
2183 EGL_LIB_DEPS="$DLOPEN_LIBS $SELINUX_LIBS $PTHREAD_LIBS"
2184
2185 AC_CHECK_FUNC(mincore, [DEFINES="$DEFINES -DHAVE_MINCORE"])
2186
2187 require_dri_shared_libs_and_glapi "egl"
2188 fi
2189 AM_CONDITIONAL(HAVE_EGL, test "x$enable_egl" = xyes)
2190 AC_SUBST([EGL_LIB_DEPS])
2191
2192 gallium_st="mesa"
2193
2194 dnl
2195 dnl XA configuration
2196 dnl
2197 if test "x$enable_xa" = xyes; then
2198 if test "x$with_gallium_drivers" = xswrast; then
2199 AC_MSG_ERROR([
2200 Building xa requires at least one non swrast gallium driver.
2201 If you are looking to use libxatracker.so with the VMware driver,
2202 make sure to include svga in the gallium drivers list, apart from
2203 enabling XA.
2204 Example: ./configure --enable-xa --with-gallium-drivers=svga...])
2205 fi
2206 gallium_st="$gallium_st xa"
2207 fi
2208 AM_CONDITIONAL(HAVE_ST_XA, test "x$enable_xa" = xyes)
2209
2210 if echo $platforms | grep -q "x11"; then
2211 have_xvmc_platform=yes
2212 else
2213 have_xvmc_platform=no
2214 fi
2215
2216 if echo $platforms | grep -q "x11"; then
2217 have_vdpau_platform=yes
2218 else
2219 have_vdpau_platform=no
2220 fi
2221
2222 if echo $platforms | grep -q "x11\|drm"; then
2223 have_omx_platform=yes
2224 else
2225 have_omx_platform=no
2226 fi
2227
2228 if echo $platforms | grep -q "x11\|drm\|wayland"; then
2229 have_va_platform=yes
2230 else
2231 have_va_platform=no
2232 fi
2233
2234 dnl
2235 dnl Gallium G3DVL configuration
2236 dnl
2237 if test -n "$with_gallium_drivers" -a "x$with_gallium_drivers" != xswrast; then
2238 if test "x$enable_xvmc" = xauto -a "x$have_xvmc_platform" = xyes; then
2239 PKG_CHECK_EXISTS([xvmc >= $XVMC_REQUIRED], [enable_xvmc=yes], [enable_xvmc=no])
2240 fi
2241
2242 if test "x$enable_vdpau" = xauto -a "x$have_vdpau_platform" = xyes; then
2243 PKG_CHECK_EXISTS([vdpau >= $VDPAU_REQUIRED], [enable_vdpau=yes], [enable_vdpau=no])
2244 fi
2245
2246 if test "x$enable_omx_bellagio" = xauto -a "x$have_omx_platform" = xyes; then
2247 PKG_CHECK_EXISTS([libomxil-bellagio >= $LIBOMXIL_BELLAGIO_REQUIRED], [enable_omx_bellagio=yes], [enable_omx_bellagio=no])
2248 fi
2249
2250 if test "x$enable_omx_tizonia" = xauto -a "x$have_omx_platform" = xyes; then
2251 PKG_CHECK_EXISTS([libtizonia >= $LIBOMXIL_TIZONIA_REQUIRED], [enable_omx_tizonia=yes], [enable_omx_tizonia=no])
2252 fi
2253
2254 if test "x$enable_va" = xauto -a "x$have_va_platform" = xyes; then
2255 PKG_CHECK_EXISTS([libva >= $LIBVA_REQUIRED], [enable_va=yes], [enable_va=no])
2256 fi
2257 fi
2258
2259 if test "x$enable_dri" = xyes -o \
2260 "x$enable_xvmc" = xyes -o \
2261 "x$enable_vdpau" = xyes -o \
2262 "x$enable_omx_bellagio" = xyes -o \
2263 "x$enable_omx_tizonia" = xyes -o \
2264 "x$enable_va" = xyes; then
2265 need_gallium_vl=yes
2266 fi
2267 AM_CONDITIONAL(NEED_GALLIUM_VL, test "x$need_gallium_vl" = xyes)
2268
2269 if test "x$enable_xvmc" = xyes -o \
2270 "x$enable_vdpau" = xyes -o \
2271 "x$enable_omx_bellagio" = xyes -o \
2272 "x$enable_omx_tizonia" = xyes -o \
2273 "x$enable_va" = xyes; then
2274 if echo $platforms | grep -q "x11"; then
2275 PKG_CHECK_MODULES([VL], [x11-xcb xcb xcb-dri2 >= $XCBDRI2_REQUIRED])
2276 fi
2277 need_gallium_vl_winsys=yes
2278 fi
2279 AM_CONDITIONAL(NEED_GALLIUM_VL_WINSYS, test "x$need_gallium_vl_winsys" = xyes)
2280
2281 if test "x$enable_xvmc" = xyes; then
2282 if test "x$have_xvmc_platform" != xyes; then
2283 AC_MSG_ERROR([XVMC requires the x11 platforms])
2284 fi
2285 PKG_CHECK_MODULES([XVMC], [xvmc >= $XVMC_REQUIRED])
2286 gallium_st="$gallium_st xvmc"
2287 fi
2288 AM_CONDITIONAL(HAVE_ST_XVMC, test "x$enable_xvmc" = xyes)
2289
2290 if test "x$enable_vdpau" = xyes; then
2291 if test "x$have_vdpau_platform" != xyes; then
2292 AC_MSG_ERROR([VDPAU requires the x11 platforms])
2293 fi
2294 PKG_CHECK_MODULES([VDPAU], [vdpau >= $VDPAU_REQUIRED])
2295 gallium_st="$gallium_st vdpau"
2296 DEFINES="$DEFINES -DHAVE_ST_VDPAU"
2297 fi
2298 AM_CONDITIONAL(HAVE_ST_VDPAU, test "x$enable_vdpau" = xyes)
2299
2300 if test "x$enable_omx_bellagio" = xyes; then
2301 if test "x$have_omx_platform" != xyes; then
2302 AC_MSG_ERROR([OMX requires at least one of the x11 or drm platforms])
2303 fi
2304 PKG_CHECK_MODULES([OMX_BELLAGIO], [libomxil-bellagio >= $LIBOMXIL_BELLAGIO_REQUIRED])
2305 gallium_st="$gallium_st omx_bellagio"
2306 AC_DEFINE([ENABLE_ST_OMX_BELLAGIO], 1, [Use Bellagio for OMX IL])
2307 else
2308 AC_DEFINE([ENABLE_ST_OMX_BELLAGIO], 0)
2309 fi
2310 AM_CONDITIONAL(HAVE_ST_OMX_BELLAGIO, test "x$enable_omx_bellagio" = xyes)
2311
2312 if test "x$enable_omx_tizonia" = xyes; then
2313 if test "x$have_omx_platform" != xyes; then
2314 AC_MSG_ERROR([OMX requires at least one of the x11 or drm platforms])
2315 fi
2316 PKG_CHECK_MODULES([OMX_TIZONIA],
2317 [libtizonia >= $LIBOMXIL_TIZONIA_REQUIRED
2318 tizilheaders >= $LIBOMXIL_TIZONIA_REQUIRED
2319 libtizplatform >= $LIBOMXIL_TIZONIA_REQUIRED])
2320 gallium_st="$gallium_st omx_tizonia"
2321 AC_DEFINE([ENABLE_ST_OMX_TIZONIA], 1, [Use Tizoina for OMX IL])
2322 else
2323 AC_DEFINE([ENABLE_ST_OMX_TIZONIA], 0)
2324 fi
2325 AM_CONDITIONAL(HAVE_ST_OMX_TIZONIA, test "x$enable_omx_tizonia" = xyes)
2326
2327 if test "x$enable_va" = xyes; then
2328 if test "x$have_va_platform" != xyes; then
2329 AC_MSG_ERROR([VA requires at least one of the x11 drm or wayland platforms])
2330 fi
2331 PKG_CHECK_MODULES([VA], [libva >= $LIBVA_REQUIRED])
2332 gallium_st="$gallium_st va"
2333 fi
2334 AM_CONDITIONAL(HAVE_ST_VA, test "x$enable_va" = xyes)
2335
2336 dnl
2337 dnl Nine Direct3D9 configuration
2338 dnl
2339 if test "x$enable_nine" = xyes; then
2340 if ! echo "$with_gallium_drivers" | grep -q 'swrast'; then
2341 AC_MSG_ERROR([nine requires the gallium swrast driver])
2342 fi
2343 if test "x$with_gallium_drivers" = xswrast; then
2344 AC_MSG_ERROR([nine requires at least one non-swrast gallium driver])
2345 fi
2346 if test $GCC_VERSION_MAJOR -lt 4 -o $GCC_VERSION_MAJOR -eq 4 -a $GCC_VERSION_MINOR -lt 6; then
2347 AC_MSG_ERROR([gcc >= 4.6 is required to build nine])
2348 fi
2349
2350 if test "x$enable_dri3" = xno; then
2351 AC_MSG_WARN([using nine together with wine requires DRI3 enabled system])
2352 fi
2353
2354 gallium_st="$gallium_st nine"
2355 fi
2356 AM_CONDITIONAL(HAVE_ST_NINE, test "x$enable_nine" = xyes)
2357
2358 dnl
2359 dnl OpenCL configuration
2360 dnl
2361
2362 AC_ARG_WITH([clang-libdir],
2363 [AS_HELP_STRING([--with-clang-libdir],
2364 [Path to Clang libraries @<:@default=llvm-config --libdir@:>@])],
2365 [CLANG_LIBDIR="$withval"],
2366 [CLANG_LIBDIR=''])
2367
2368 PKG_CHECK_EXISTS([libclc], [have_libclc=yes], [have_libclc=no])
2369
2370 if test "x$enable_opencl" = xyes; then
2371 if test -z "$with_gallium_drivers"; then
2372 AC_MSG_ERROR([cannot enable OpenCL without Gallium])
2373 fi
2374
2375 if test "x$HAVE_CXX11" != "xyes"; then
2376 AC_MSG_ERROR([clover requires c++11 support])
2377 fi
2378
2379 if test "x$have_libclc" = xno; then
2380 AC_MSG_ERROR([pkg-config cannot find libclc.pc which is required to build clover.
2381 Make sure the directory containing libclc.pc is specified in your
2382 PKG_CONFIG_PATH environment variable.
2383 By default libclc.pc is installed to /usr/local/share/pkgconfig/])
2384 else
2385 LIBCLC_INCLUDEDIR=`$PKG_CONFIG --variable=includedir libclc`
2386 LIBCLC_LIBEXECDIR=`$PKG_CONFIG --variable=libexecdir libclc`
2387 AC_SUBST([LIBCLC_INCLUDEDIR])
2388 AC_SUBST([LIBCLC_LIBEXECDIR])
2389 fi
2390
2391 gallium_st="$gallium_st clover"
2392
2393 if test "x$enable_opencl_icd" = xyes; then
2394 OPENCL_LIBNAME="MesaOpenCL"
2395 else
2396 OPENCL_LIBNAME="OpenCL"
2397 fi
2398
2399 if test "x$have_libelf" != xyes; then
2400 AC_MSG_ERROR([Clover requires libelf])
2401 fi
2402
2403 if test "x${ac_cv_cxx_compiler_gnu}" = xyes; then
2404 altivec_enabled=no
2405 AC_COMPILE_IFELSE([AC_LANG_SOURCE([
2406 #if !defined(__VEC__) || !defined(__ALTIVEC__)
2407 #error "AltiVec not enabled"
2408 #endif
2409 ])], altivec_enabled=yes)
2410
2411 if test "$altivec_enabled" = yes; then
2412 CLOVER_STD_OVERRIDE="-std=gnu++11"
2413 fi
2414 AC_SUBST([CLOVER_STD_OVERRIDE])
2415 fi
2416
2417 llvm_require_version $LLVM_REQUIRED_OPENCL "opencl"
2418
2419 llvm_add_default_components "opencl"
2420 llvm_add_component "all-targets" "opencl"
2421 llvm_add_component "coverage" "opencl"
2422 llvm_add_component "linker" "opencl"
2423 llvm_add_component "instrumentation" "opencl"
2424 llvm_add_component "ipo" "opencl"
2425 llvm_add_component "irreader" "opencl"
2426 llvm_add_component "lto" "opencl"
2427 llvm_add_component "option" "opencl"
2428 llvm_add_component "objcarcopts" "opencl"
2429 llvm_add_component "profiledata" "opencl"
2430 llvm_add_optional_component "coroutines" "opencl"
2431
2432 dnl Check for Clang internal headers
2433 if test -z "$CLANG_LIBDIR"; then
2434 CLANG_LIBDIR=${LLVM_LIBDIR}
2435 fi
2436 CLANG_RESOURCE_DIR=$CLANG_LIBDIR/clang/${LLVM_VERSION}
2437 AS_IF([test ! -f "$CLANG_RESOURCE_DIR/include/stddef.h"],
2438 [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.])])
2439 fi
2440 AM_CONDITIONAL(HAVE_CLOVER, test "x$enable_opencl" = xyes)
2441 AM_CONDITIONAL(HAVE_CLOVER_ICD, test "x$enable_opencl_icd" = xyes)
2442 AC_SUBST([OPENCL_LIBNAME])
2443 AC_SUBST([CLANG_RESOURCE_DIR])
2444
2445 dnl
2446 dnl Gallium configuration
2447 dnl
2448 AM_CONDITIONAL(HAVE_GALLIUM, test -n "$with_gallium_drivers")
2449
2450 # libEGL wants to default to the first platform specified in
2451 # ./configure. parse that here.
2452 if test "x$platforms" != "x"; then
2453 FIRST_PLATFORM_CAPS=`echo $platforms | sed 's| .*||' | tr '[[a-z]]' '[[A-Z]]'`
2454 EGL_NATIVE_PLATFORM="_EGL_PLATFORM_$FIRST_PLATFORM_CAPS"
2455 else
2456 EGL_NATIVE_PLATFORM="_EGL_INVALID_PLATFORM"
2457 fi
2458
2459 AC_SUBST([EGL_NATIVE_PLATFORM])
2460 AC_SUBST([EGL_CFLAGS])
2461
2462 # If we don't have the X11 platform, set this define so we don't try to include
2463 # the X11 headers.
2464 if ! echo "$platforms" | grep -q 'x11'; then
2465 DEFINES="$DEFINES -DMESA_EGL_NO_X11_HEADERS"
2466 GL_PC_CFLAGS="$GL_PC_CFLAGS -DMESA_EGL_NO_X11_HEADERS"
2467 fi
2468
2469 dnl Directory for XVMC libs
2470 AC_ARG_WITH([xvmc-libdir],
2471 [AS_HELP_STRING([--with-xvmc-libdir=DIR],
2472 [directory for the XVMC libraries @<:@default=${libdir}@:>@])],
2473 [XVMC_LIB_INSTALL_DIR="$withval"],
2474 [XVMC_LIB_INSTALL_DIR='${libdir}'])
2475 AC_SUBST([XVMC_LIB_INSTALL_DIR])
2476
2477 dnl
2478 dnl Gallium Tests
2479 dnl
2480 AM_CONDITIONAL(HAVE_GALLIUM_TESTS, test "x$enable_gallium_tests" = xyes)
2481
2482 dnl Directory for VDPAU libs
2483 AC_ARG_WITH([vdpau-libdir],
2484 [AS_HELP_STRING([--with-vdpau-libdir=DIR],
2485 [directory for the VDPAU libraries @<:@default=${libdir}/vdpau@:>@])],
2486 [VDPAU_LIB_INSTALL_DIR="$withval"],
2487 [VDPAU_LIB_INSTALL_DIR='${libdir}/vdpau'])
2488 AC_SUBST([VDPAU_LIB_INSTALL_DIR])
2489
2490 dnl Directory for OMX_BELLAGIO libs
2491
2492 AC_ARG_WITH([omx-bellagio-libdir],
2493 [AS_HELP_STRING([--with-omx-bellagio-libdir=DIR],
2494 [directory for the OMX_BELLAGIO libraries])],
2495 [OMX_BELLAGIO_LIB_INSTALL_DIR="$withval"],
2496 [OMX_BELLAGIO_LIB_INSTALL_DIR=`$PKG_CONFIG --exists libomxil-bellagio && \
2497 $PKG_CONFIG --define-variable=libdir=\$libdir --variable=pluginsdir libomxil-bellagio`])
2498 AC_SUBST([OMX_BELLAGIO_LIB_INSTALL_DIR])
2499
2500 dnl Directory for OMX_TIZONIA libs
2501
2502 AC_ARG_WITH([omx-tizonia-libdir],
2503 [AS_HELP_STRING([--with-omx-tizonia-libdir=DIR],
2504 [directory for the OMX_TIZONIA libraries])],
2505 [OMX_TIZONIA_LIB_INSTALL_DIR="$withval"],
2506 [OMX_TIZONIA_LIB_INSTALL_DIR=`$PKG_CONFIG --define-variable=libdir=\$libdir --variable=pluginsdir libtizcore`])
2507 AC_SUBST([OMX_TIZONIA_LIB_INSTALL_DIR])
2508
2509 dnl Directory for VA libs
2510
2511 AC_ARG_WITH([va-libdir],
2512 [AS_HELP_STRING([--with-va-libdir=DIR],
2513 [directory for the VA libraries @<:@${libdir}/dri@:>@])],
2514 [VA_LIB_INSTALL_DIR="$withval"],
2515 [VA_LIB_INSTALL_DIR="${libdir}/dri"])
2516 AC_SUBST([VA_LIB_INSTALL_DIR])
2517
2518 AC_ARG_WITH([d3d-libdir],
2519 [AS_HELP_STRING([--with-d3d-libdir=DIR],
2520 [directory for the D3D modules @<:@${libdir}/d3d@:>@])],
2521 [D3D_DRIVER_INSTALL_DIR="$withval"],
2522 [D3D_DRIVER_INSTALL_DIR="${libdir}/d3d"])
2523 AC_SUBST([D3D_DRIVER_INSTALL_DIR])
2524
2525 dnl Architectures to build SWR library for
2526
2527 AC_ARG_WITH([swr-archs],
2528 [AS_HELP_STRING([--with-swr-archs@<:@=DIRS...@:>@],
2529 [comma delimited swr architectures list, e.g.
2530 "avx,avx2,knl,skx" @<:@default="avx,avx2"@:>@])],
2531 [with_swr_archs="$withval"],
2532 [with_swr_archs="avx,avx2"])
2533
2534 dnl
2535 dnl r300 doesn't strictly require LLVM, but for performance reasons we
2536 dnl highly recommend LLVM usage. So require it at least on x86 and x86_64
2537 dnl architectures.
2538 dnl
2539 r300_require_llvm() {
2540 case "$host" in *gnux32) return;; esac
2541 case "$host_cpu" in
2542 i*86|x86_64|amd64) require_llvm $1
2543 ;;
2544 esac
2545 }
2546
2547 dnl
2548 dnl DRM is needed by X, Wayland, and offscreen rendering.
2549 dnl Surfaceless is an alternative for the last one.
2550 dnl
2551 require_basic_egl() {
2552 case "$with_platforms" in
2553 *drm*|*surfaceless*|*android*)
2554 ;;
2555 *)
2556 AC_MSG_ERROR([$1 requires one of these:
2557 1) --with-platforms=drm (X, Wayland, offscreen rendering based on DRM)
2558 2) --with-platforms=surfaceless (offscreen only)
2559 3) --with-platforms=android (Android only)
2560 Recommended options: drm,x11])
2561 ;;
2562 esac
2563 }
2564
2565 swr_require_cxx_feature_flags() {
2566 feature_name="$1"
2567 preprocessor_test="$2"
2568 option_list="$3"
2569 output_var="$4"
2570
2571 AC_MSG_CHECKING([whether $CXX supports $feature_name])
2572 AC_LANG_PUSH([C++])
2573 save_CXXFLAGS="$CXXFLAGS"
2574 save_IFS="$IFS"
2575 IFS=","
2576 found=0
2577 for opts in $option_list
2578 do
2579 unset IFS
2580 CXXFLAGS="$opts $save_CXXFLAGS"
2581 AC_COMPILE_IFELSE(
2582 [AC_LANG_PROGRAM(
2583 [ #if !($preprocessor_test)
2584 #error
2585 #endif
2586 ])],
2587 [found=1; break],
2588 [])
2589 IFS=","
2590 done
2591 IFS="$save_IFS"
2592 CXXFLAGS="$save_CXXFLAGS"
2593 AC_LANG_POP([C++])
2594 if test $found -eq 1; then
2595 AC_MSG_RESULT([$opts])
2596 eval "$output_var=\$opts"
2597 return 0
2598 fi
2599 AC_MSG_RESULT([no])
2600 AC_MSG_ERROR([swr requires $feature_name support])
2601 return 1
2602 }
2603
2604 dnl Duplicates in GALLIUM_DRIVERS_DIRS are removed by sorting it after this block
2605 if test -n "$with_gallium_drivers"; then
2606 gallium_drivers=`IFS=', '; echo $with_gallium_drivers`
2607 for driver in $gallium_drivers; do
2608 case "x$driver" in
2609 xsvga)
2610 HAVE_GALLIUM_SVGA=yes
2611 require_libdrm "svga"
2612 ;;
2613 xi915)
2614 HAVE_GALLIUM_I915=yes
2615 PKG_CHECK_MODULES([I915], [libdrm >= $LIBDRM_INTEL_REQUIRED libdrm_intel >= $LIBDRM_INTEL_REQUIRED])
2616 require_libdrm "Gallium i915"
2617 ;;
2618 xr300)
2619 HAVE_GALLIUM_R300=yes
2620 PKG_CHECK_MODULES([RADEON], [libdrm >= $LIBDRM_RADEON_REQUIRED libdrm_radeon >= $LIBDRM_RADEON_REQUIRED])
2621 require_libdrm "r300"
2622 r300_require_llvm "r300"
2623 ;;
2624 xr600)
2625 HAVE_GALLIUM_R600=yes
2626 PKG_CHECK_MODULES([RADEON], [libdrm >= $LIBDRM_RADEON_REQUIRED libdrm_radeon >= $LIBDRM_RADEON_REQUIRED])
2627 require_libdrm "r600"
2628 if test "x$enable_llvm" = xyes; then
2629 radeon_llvm_check $LLVM_REQUIRED_R600 "r600"
2630
2631 llvm_add_component "asmparser" "r600"
2632 llvm_add_component "bitreader" "r600"
2633 fi
2634 ;;
2635 xradeonsi)
2636 HAVE_GALLIUM_RADEONSI=yes
2637 PKG_CHECK_MODULES([RADEON], [libdrm >= $LIBDRM_RADEON_REQUIRED libdrm_radeon >= $LIBDRM_RADEON_REQUIRED])
2638 PKG_CHECK_MODULES([AMDGPU], [libdrm >= $LIBDRM_AMDGPU_REQUIRED libdrm_amdgpu >= $LIBDRM_AMDGPU_REQUIRED])
2639 require_libdrm "radeonsi"
2640 radeon_llvm_check $LLVM_REQUIRED_RADEONSI "radeonsi"
2641 if test "x$enable_egl" = xyes; then
2642 require_basic_egl "radeonsi"
2643 fi
2644 ;;
2645 xnouveau)
2646 HAVE_GALLIUM_NOUVEAU=yes
2647 PKG_CHECK_MODULES([NOUVEAU], [libdrm >= $LIBDRM_NOUVEAU_REQUIRED libdrm_nouveau >= $LIBDRM_NOUVEAU_REQUIRED])
2648 require_libdrm "nouveau"
2649 ;;
2650 xfreedreno)
2651 HAVE_GALLIUM_FREEDRENO=yes
2652 PKG_CHECK_MODULES([FREEDRENO], [libdrm >= $LIBDRM_FREEDRENO_REQUIRED libdrm_freedreno >= $LIBDRM_FREEDRENO_REQUIRED])
2653 require_libdrm "freedreno"
2654 ;;
2655 xetnaviv)
2656 HAVE_GALLIUM_ETNAVIV=yes
2657 PKG_CHECK_MODULES([ETNAVIV], [libdrm >= $LIBDRM_ETNAVIV_REQUIRED libdrm_etnaviv >= $LIBDRM_ETNAVIV_REQUIRED])
2658 require_libdrm "etnaviv"
2659 ;;
2660 ximx)
2661 HAVE_GALLIUM_IMX=yes
2662 ;;
2663 xtegra)
2664 HAVE_GALLIUM_TEGRA=yes
2665 require_libdrm "tegra"
2666 ;;
2667 xswrast)
2668 HAVE_GALLIUM_SOFTPIPE=yes
2669 if test "x$enable_llvm" = xyes; then
2670 HAVE_GALLIUM_LLVMPIPE=yes
2671 fi
2672 ;;
2673 xswr)
2674 llvm_require_version $LLVM_REQUIRED_SWR "swr"
2675
2676 if test "x$HAVE_CXX11" != "xyes"; then
2677 AC_MSG_ERROR([swr requires c++11 support])
2678 fi
2679
2680 swr_require_cxx_feature_flags "AVX" "defined(__AVX__)" \
2681 ",-target-cpu=sandybridge,-mavx,-march=core-avx,-tp=sandybridge" \
2682 SWR_AVX_CXXFLAGS
2683 AC_SUBST([SWR_AVX_CXXFLAGS])
2684
2685 swr_archs=`IFS=', '; echo $with_swr_archs`
2686 for arch in $swr_archs; do
2687 case "x$arch" in
2688 xavx)
2689 HAVE_SWR_AVX=yes
2690 ;;
2691 xavx2)
2692 swr_require_cxx_feature_flags "AVX2" "defined(__AVX2__)" \
2693 ",-target-cpu=haswell,-mavx2 -mfma -mbmi2 -mf16c,-march=core-avx2,-tp=haswell" \
2694 SWR_AVX2_CXXFLAGS
2695 AC_SUBST([SWR_AVX2_CXXFLAGS])
2696 HAVE_SWR_AVX2=yes
2697 ;;
2698 xknl)
2699 swr_require_cxx_feature_flags "KNL" "defined(__AVX512F__) && defined(__AVX512ER__)" \
2700 ",-target-cpu=mic-knl,-march=knl,-xMIC-AVX512" \
2701 SWR_KNL_CXXFLAGS
2702 AC_SUBST([SWR_KNL_CXXFLAGS])
2703 HAVE_SWR_KNL=yes
2704 ;;
2705 xskx)
2706 swr_require_cxx_feature_flags "SKX" "defined(__AVX512F__) && defined(__AVX512BW__)" \
2707 ",-target-cpu=x86-skylake,-march=skylake-avx512,-xCORE-AVX512" \
2708 SWR_SKX_CXXFLAGS
2709 AC_SUBST([SWR_SKX_CXXFLAGS])
2710 HAVE_SWR_SKX=yes
2711 ;;
2712 *)
2713 AC_MSG_ERROR([unknown SWR build architecture '$arch'])
2714 ;;
2715 esac
2716 done
2717
2718 if test "x$HAVE_SWR_AVX" != xyes -a \
2719 "x$HAVE_SWR_AVX2" != xyes -a \
2720 "x$HAVE_SWR_KNL" != xyes -a \
2721 "x$HAVE_SWR_SKX" != xyes; then
2722 AC_MSG_ERROR([swr enabled but no swr architectures selected])
2723 fi
2724
2725 # test if more than one swr arch configured
2726 if test `echo $swr_archs | wc -w` -eq 1; then
2727 HAVE_SWR_BUILTIN=yes
2728 fi
2729
2730 HAVE_GALLIUM_SWR=yes
2731 ;;
2732 xvc4)
2733 HAVE_GALLIUM_VC4=yes
2734 PKG_CHECK_MODULES([VC4], [libdrm >= $LIBDRM_VC4_REQUIRED])
2735
2736 PKG_CHECK_MODULES([SIMPENROSE], [simpenrose],
2737 [USE_VC4_SIMULATOR=yes;
2738 DEFINES="$DEFINES -DUSE_VC4_SIMULATOR"],
2739 [USE_VC4_SIMULATOR=no])
2740 ;;
2741 xv3d)
2742 HAVE_GALLIUM_V3D=yes
2743
2744 PKG_CHECK_MODULES([V3D_SIMULATOR], [v3dv3],
2745 [USE_V3D_SIMULATOR=yes;
2746 DEFINES="$DEFINES -DUSE_V3D_SIMULATOR"],
2747 [USE_V3D_SIMULATOR=no])
2748 ;;
2749 xpl111)
2750 HAVE_GALLIUM_PL111=yes
2751 ;;
2752 xvirgl)
2753 HAVE_GALLIUM_VIRGL=yes
2754 require_libdrm "virgl"
2755 if test "x$enable_egl" = xyes; then
2756 require_basic_egl "virgl"
2757 fi
2758 ;;
2759 *)
2760 AC_MSG_ERROR([Unknown Gallium driver: $driver])
2761 ;;
2762 esac
2763 done
2764 fi
2765
2766 # XXX: Keep in sync with LLVM_REQUIRED_SWR
2767 AM_CONDITIONAL(SWR_INVALID_LLVM_VERSION, test "x$LLVM_VERSION" != x4.0.0 -a \
2768 "x$LLVM_VERSION" != x4.0.1)
2769
2770 if test "x$enable_llvm" = "xyes" -a "$with_gallium_drivers"; then
2771 llvm_require_version $LLVM_REQUIRED_GALLIUM "gallium"
2772 llvm_add_default_components "gallium"
2773 fi
2774
2775 AM_CONDITIONAL(HAVE_SWR_AVX, test "x$HAVE_SWR_AVX" = xyes)
2776 AM_CONDITIONAL(HAVE_SWR_AVX2, test "x$HAVE_SWR_AVX2" = xyes)
2777 AM_CONDITIONAL(HAVE_SWR_KNL, test "x$HAVE_SWR_KNL" = xyes)
2778 AM_CONDITIONAL(HAVE_SWR_SKX, test "x$HAVE_SWR_SKX" = xyes)
2779 AM_CONDITIONAL(HAVE_SWR_BUILTIN, test "x$HAVE_SWR_BUILTIN" = xyes)
2780
2781 dnl We need to validate some needed dependencies for renderonly drivers.
2782
2783 if test "x$HAVE_GALLIUM_ETNAVIV" != xyes -a "x$HAVE_GALLIUM_IMX" = xyes ; then
2784 AC_MSG_ERROR([Building with imx requires etnaviv])
2785 fi
2786
2787 if test "x$HAVE_GALLIUM_VC4" != xyes -a "x$HAVE_GALLIUM_PL111" = xyes ; then
2788 AC_MSG_ERROR([Building with pl111 requires vc4])
2789 fi
2790
2791 if test "x$HAVE_GALLIUM_NOUVEAU" != xyes -a "x$HAVE_GALLIUM_TEGRA" = xyes; then
2792 AC_MSG_ERROR([Building with tegra requires nouveau])
2793 fi
2794
2795 detect_old_buggy_llvm() {
2796 dnl llvm-config may not give the right answer when llvm is a built as a
2797 dnl single shared library, so we must work the library name out for
2798 dnl ourselves.
2799 dnl (See https://llvm.org/bugs/show_bug.cgi?id=6823)
2800 dnl We can't use $LLVM_VERSION because it has 'svn' stripped out,
2801 LLVM_SO_NAME=LLVM-`$LLVM_CONFIG --version`
2802 AS_IF([test -f "$LLVM_LIBDIR/lib$LLVM_SO_NAME.$IMP_LIB_EXT"], [llvm_have_one_so=yes])
2803
2804 if test "x$llvm_have_one_so" = xyes; then
2805 dnl LLVM was built using auto*, so there is only one shared object.
2806 LLVM_LIBS="-l$LLVM_SO_NAME"
2807 else
2808 dnl If LLVM was built with CMake, there will be one shared object per
2809 dnl component.
2810 AS_IF([test ! -f "$LLVM_LIBDIR/libLLVMTarget.$IMP_LIB_EXT"],
2811 [AC_MSG_ERROR([Could not find llvm shared libraries:
2812 Please make sure you have built llvm with the --enable-shared option
2813 and that your llvm libraries are installed in $LLVM_LIBDIR
2814 If you have installed your llvm libraries to a different directory you
2815 can use the --with-llvm-prefix= configure flag to specify this directory.
2816 NOTE: Mesa is attempting to use llvm shared libraries by default.
2817 If you do not want to build with llvm shared libraries and instead want to
2818 use llvm static libraries then add --disable-llvm-shared-libs to your configure
2819 invocation and rebuild.])])
2820
2821 dnl We don't need to update LLVM_LIBS in this case because the LLVM
2822 dnl install uses a shared object for each component and we have
2823 dnl already added all of these objects to LLVM_LIBS.
2824 fi
2825 }
2826
2827 dnl
2828 dnl Set defines and buildtime variables only when using LLVM.
2829 dnl
2830 if test "x$enable_llvm" = xyes; then
2831 DEFINES="${DEFINES} -DHAVE_LLVM=0x0$LLVM_VERSION_INT -DMESA_LLVM_VERSION_PATCH=$LLVM_VERSION_PATCH"
2832
2833 LLVM_LDFLAGS=`$LLVM_CONFIG --ldflags`
2834 LLVM_CFLAGS=$LLVM_CPPFLAGS # CPPFLAGS seem to be sufficient
2835 LLVM_CXXFLAGS=`strip_unwanted_llvm_flags "$LLVM_CONFIG --cxxflags"`
2836
2837 dnl Set LLVM_LIBS - This is done after the driver configuration so
2838 dnl that drivers can add additional components to LLVM_COMPONENTS.
2839 dnl Previously, gallium drivers were updating LLVM_LIBS directly
2840 dnl by calling llvm-config --libs ${DRIVER_LLVM_COMPONENTS}, but
2841 dnl this was causing the same libraries to be appear multiple times
2842 dnl in LLVM_LIBS.
2843
2844 if test $LLVM_VERSION_MAJOR -ge 4 -o $LLVM_VERSION_MAJOR -eq 3 -a $LLVM_VERSION_MINOR -ge 9; then
2845 if test "x$enable_llvm_shared_libs" = xyes; then
2846 LLVM_LIBS="`$LLVM_CONFIG --link-shared --libs ${LLVM_COMPONENTS}`"
2847 else
2848 dnl Invoking llvm-config with both -libs and --system-libs produces the
2849 dnl two separate lines - each for the set of libraries.
2850 dnl Call the program twice, effectively folding them into a single line.
2851 LLVM_LIBS="`$LLVM_CONFIG --link-static --libs ${LLVM_COMPONENTS}`"
2852 dnl We need to link to llvm system libs when using static libs
2853 LLVM_LIBS="$LLVM_LIBS `$LLVM_CONFIG --link-static --system-libs`"
2854 fi
2855 else
2856 LLVM_LIBS="`$LLVM_CONFIG --libs ${LLVM_COMPONENTS}`"
2857 if test "x$enable_llvm_shared_libs" = xyes; then
2858 detect_old_buggy_llvm
2859 else
2860 AC_MSG_WARN([Building mesa with statically linked LLVM may cause compilation issues])
2861 dnl We need to link to llvm system libs when using static libs
2862 dnl However, only llvm 3.5+ provides --system-libs
2863 if test $LLVM_VERSION_MAJOR -ge 4 -o $LLVM_VERSION_MAJOR -eq 3 -a $LLVM_VERSION_MINOR -ge 5; then
2864 LLVM_LIBS="$LLVM_LIBS `$LLVM_CONFIG --system-libs`"
2865 fi
2866 fi
2867 fi
2868
2869 dnl The gallium-xlib GLX and gallium OSMesa targets directly embed the
2870 dnl swr/llvmpipe driver into the final binary. Adding LLVM_LIBS results in
2871 dnl the LLVM library propagated in the Libs.private of the respective .pc
2872 dnl file which ensures complete dependency information when statically
2873 dnl linking.
2874 if test "x$enable_glx" == xgallium-xlib; then
2875 GL_PC_LIB_PRIV="$GL_PC_LIB_PRIV $LLVM_LIBS"
2876 fi
2877 if test "x$enable_gallium_osmesa" = xyes; then
2878 OSMESA_PC_LIB_PRIV="$OSMESA_PC_LIB_PRIV $LLVM_LIBS"
2879 fi
2880 fi
2881
2882 AM_CONDITIONAL(HAVE_GALLIUM_SVGA, test "x$HAVE_GALLIUM_SVGA" = xyes)
2883 AM_CONDITIONAL(HAVE_GALLIUM_I915, test "x$HAVE_GALLIUM_I915" = xyes)
2884 AM_CONDITIONAL(HAVE_GALLIUM_PL111, test "x$HAVE_GALLIUM_PL111" = xyes)
2885 AM_CONDITIONAL(HAVE_GALLIUM_R300, test "x$HAVE_GALLIUM_R300" = xyes)
2886 AM_CONDITIONAL(HAVE_GALLIUM_R600, test "x$HAVE_GALLIUM_R600" = xyes)
2887 AM_CONDITIONAL(HAVE_GALLIUM_RADEONSI, test "x$HAVE_GALLIUM_RADEONSI" = xyes)
2888 AM_CONDITIONAL(HAVE_GALLIUM_NOUVEAU, test "x$HAVE_GALLIUM_NOUVEAU" = xyes)
2889 AM_CONDITIONAL(HAVE_GALLIUM_FREEDRENO, test "x$HAVE_GALLIUM_FREEDRENO" = xyes)
2890 AM_CONDITIONAL(HAVE_GALLIUM_ETNAVIV, test "x$HAVE_GALLIUM_ETNAVIV" = xyes)
2891 AM_CONDITIONAL(HAVE_GALLIUM_IMX, test "x$HAVE_GALLIUM_IMX" = xyes)
2892 AM_CONDITIONAL(HAVE_GALLIUM_TEGRA, test "x$HAVE_GALLIUM_TEGRA" = xyes)
2893 AM_CONDITIONAL(HAVE_GALLIUM_SOFTPIPE, test "x$HAVE_GALLIUM_SOFTPIPE" = xyes)
2894 AM_CONDITIONAL(HAVE_GALLIUM_LLVMPIPE, test "x$HAVE_GALLIUM_LLVMPIPE" = xyes)
2895 AM_CONDITIONAL(HAVE_GALLIUM_SWR, test "x$HAVE_GALLIUM_SWR" = xyes)
2896 AM_CONDITIONAL(HAVE_GALLIUM_SWRAST, test "x$HAVE_GALLIUM_SOFTPIPE" = xyes -o \
2897 "x$HAVE_GALLIUM_LLVMPIPE" = xyes -o \
2898 "x$HAVE_GALLIUM_SWR" = xyes)
2899 AM_CONDITIONAL(HAVE_GALLIUM_V3D, test "x$HAVE_GALLIUM_V3D" = xyes)
2900 AM_CONDITIONAL(HAVE_GALLIUM_VC4, test "x$HAVE_GALLIUM_VC4" = xyes)
2901 AM_CONDITIONAL(HAVE_GALLIUM_VIRGL, test "x$HAVE_GALLIUM_VIRGL" = xyes)
2902
2903 AM_CONDITIONAL(HAVE_GALLIUM_STATIC_TARGETS, test "x$enable_shared_pipe_drivers" = xno)
2904
2905 if test "x$enable_dri" = xyes; then
2906 GALLIUM_PIPE_LOADER_DEFINES="$GALLIUM_PIPE_LOADER_DEFINES -DHAVE_PIPE_LOADER_DRI"
2907 fi
2908
2909 if test "x$have_drisw_kms" = xyes; then
2910 GALLIUM_PIPE_LOADER_DEFINES="$GALLIUM_PIPE_LOADER_DEFINES -DHAVE_PIPE_LOADER_KMS"
2911 fi
2912 AC_SUBST([GALLIUM_PIPE_LOADER_DEFINES])
2913
2914 AM_CONDITIONAL(HAVE_I915_DRI, test x$HAVE_I915_DRI = xyes)
2915 AM_CONDITIONAL(HAVE_I965_DRI, test x$HAVE_I965_DRI = xyes)
2916 AM_CONDITIONAL(HAVE_NOUVEAU_DRI, test x$HAVE_NOUVEAU_DRI = xyes)
2917 AM_CONDITIONAL(HAVE_R200_DRI, test x$HAVE_R200_DRI = xyes)
2918 AM_CONDITIONAL(HAVE_RADEON_DRI, test x$HAVE_RADEON_DRI = xyes)
2919 AM_CONDITIONAL(HAVE_SWRAST_DRI, test x$HAVE_SWRAST_DRI = xyes)
2920
2921 AM_CONDITIONAL(HAVE_RADEON_VULKAN, test "x$HAVE_RADEON_VULKAN" = xyes)
2922 AM_CONDITIONAL(HAVE_INTEL_VULKAN, test "x$HAVE_INTEL_VULKAN" = xyes)
2923
2924 AM_CONDITIONAL(HAVE_AMD_DRIVERS, test "x$HAVE_GALLIUM_RADEONSI" = xyes -o \
2925 "x$HAVE_RADEON_VULKAN" = xyes)
2926
2927 AM_CONDITIONAL(HAVE_BROADCOM_DRIVERS, test "x$HAVE_GALLIUM_VC4" = xyes -o \
2928 "x$HAVE_GALLIUM_V3D" = xyes)
2929
2930 AM_CONDITIONAL(HAVE_INTEL_DRIVERS, test "x$HAVE_INTEL_VULKAN" = xyes -o \
2931 "x$HAVE_I965_DRI" = xyes)
2932
2933 AM_CONDITIONAL(NEED_RADEON_DRM_WINSYS, test "x$HAVE_GALLIUM_R300" = xyes -o \
2934 "x$HAVE_GALLIUM_R600" = xyes -o \
2935 "x$HAVE_GALLIUM_RADEONSI" = xyes)
2936 AM_CONDITIONAL(NEED_WINSYS_XLIB, test "x$enable_glx" = xgallium-xlib)
2937 AM_CONDITIONAL(HAVE_GALLIUM_COMPUTE, test x$enable_opencl = xyes)
2938 AM_CONDITIONAL(HAVE_GALLIUM_LLVM, test "x$enable_llvm" = xyes)
2939 AM_CONDITIONAL(USE_V3D_SIMULATOR, test x$USE_V3D_SIMULATOR = xyes)
2940 AM_CONDITIONAL(USE_VC4_SIMULATOR, test x$USE_VC4_SIMULATOR = xyes)
2941
2942 AM_CONDITIONAL(HAVE_LIBDRM, test "x$have_libdrm" = xyes)
2943 AM_CONDITIONAL(HAVE_OSMESA, test "x$enable_osmesa" = xyes)
2944 AM_CONDITIONAL(HAVE_GALLIUM_OSMESA, test "x$enable_gallium_osmesa" = xyes)
2945 AM_CONDITIONAL(HAVE_COMMON_OSMESA, test "x$enable_osmesa" = xyes -o \
2946 "x$enable_gallium_osmesa" = xyes)
2947
2948 AM_CONDITIONAL(HAVE_X86_ASM, test "x$asm_arch" = xx86 -o "x$asm_arch" = xx86_64)
2949 AM_CONDITIONAL(HAVE_X86_64_ASM, test "x$asm_arch" = xx86_64)
2950 AM_CONDITIONAL(HAVE_SPARC_ASM, test "x$asm_arch" = xsparc)
2951 AM_CONDITIONAL(HAVE_PPC64LE_ASM, test "x$asm_arch" = xppc64le)
2952 AM_CONDITIONAL(HAVE_AARCH64_ASM, test "x$asm_arch" = xaarch64)
2953 AM_CONDITIONAL(HAVE_ARM_ASM, test "x$asm_arch" = xarm)
2954
2955 AC_SUBST([NINE_MAJOR], 1)
2956 AC_SUBST([NINE_MINOR], 0)
2957 AC_SUBST([NINE_PATCH], 0)
2958 AC_SUBST([NINE_VERSION], "$NINE_MAJOR.$NINE_MINOR.$NINE_PATCH")
2959
2960 AC_SUBST([VDPAU_MAJOR], 1)
2961 AC_SUBST([VDPAU_MINOR], 0)
2962
2963 if test "x$enable_va" = xyes; then
2964 VA_MAJOR=`$PKG_CONFIG --modversion libva | $SED -n 's/\([[^\.]]*\)\..*$/\1/p'`
2965 VA_MINOR=`$PKG_CONFIG --modversion libva | $SED -n 's/.*\.\(.*\)\..*$/\1/p'`
2966 fi
2967 AC_SUBST([VA_MAJOR], $VA_MAJOR)
2968 AC_SUBST([VA_MINOR], $VA_MINOR)
2969
2970 AM_CONDITIONAL(HAVE_VULKAN_COMMON, test "x$VULKAN_DRIVERS" != "x")
2971
2972 AC_SUBST([XVMC_MAJOR], 1)
2973 AC_SUBST([XVMC_MINOR], 0)
2974
2975 AC_SUBST([XA_MAJOR], 2)
2976 AC_SUBST([XA_MINOR], 4)
2977 AC_SUBST([XA_PATCH], 0)
2978 AC_SUBST([XA_VERSION], "$XA_MAJOR.$XA_MINOR.$XA_PATCH")
2979
2980 AC_ARG_ENABLE(valgrind,
2981 [AS_HELP_STRING([--enable-valgrind],
2982 [Build mesa with valgrind support (default: auto)])],
2983 [VALGRIND=$enableval], [VALGRIND=auto])
2984 if test "x$VALGRIND" != xno; then
2985 PKG_CHECK_MODULES(VALGRIND, [valgrind], [have_valgrind=yes], [have_valgrind=no])
2986 fi
2987 AC_MSG_CHECKING([whether to enable Valgrind support])
2988 if test "x$VALGRIND" = xauto; then
2989 VALGRIND="$have_valgrind"
2990 fi
2991
2992 if test "x$VALGRIND" = "xyes"; then
2993 if ! test "x$have_valgrind" = xyes; then
2994 AC_MSG_ERROR([Valgrind support required but not present])
2995 fi
2996 AC_DEFINE([HAVE_VALGRIND], 1, [Use valgrind intrinsics to suppress false warnings])
2997 fi
2998
2999 AC_MSG_RESULT([$VALGRIND])
3000
3001 dnl Restore LDFLAGS and CPPFLAGS
3002 LDFLAGS="$_SAVE_LDFLAGS"
3003 CPPFLAGS="$_SAVE_CPPFLAGS"
3004
3005 dnl Suppress clang's warnings about unused CFLAGS and CXXFLAGS
3006 if test "x$acv_mesa_CLANG" = xyes; then
3007 CFLAGS="$CFLAGS -Qunused-arguments"
3008 CXXFLAGS="$CXXFLAGS -Qunused-arguments"
3009 fi
3010
3011 dnl Add user CFLAGS and CXXFLAGS
3012 CFLAGS="$CFLAGS $USER_CFLAGS"
3013 CXXFLAGS="$CXXFLAGS $USER_CXXFLAGS"
3014
3015 dnl Substitute the config
3016 AC_CONFIG_FILES([Makefile
3017 src/Makefile
3018 src/amd/Makefile
3019 src/amd/vulkan/Makefile
3020 src/broadcom/Makefile
3021 src/compiler/Makefile
3022 src/egl/Makefile
3023 src/egl/main/egl.pc
3024 src/egl/wayland/wayland-drm/Makefile
3025 src/egl/wayland/wayland-egl/Makefile
3026 src/egl/wayland/wayland-egl/wayland-egl.pc
3027 src/gallium/Makefile
3028 src/gallium/auxiliary/Makefile
3029 src/gallium/auxiliary/pipe-loader/Makefile
3030 src/gallium/drivers/freedreno/Makefile
3031 src/gallium/drivers/i915/Makefile
3032 src/gallium/drivers/llvmpipe/Makefile
3033 src/gallium/drivers/nouveau/Makefile
3034 src/gallium/drivers/pl111/Makefile
3035 src/gallium/drivers/r300/Makefile
3036 src/gallium/drivers/r600/Makefile
3037 src/gallium/drivers/radeonsi/Makefile
3038 src/gallium/drivers/softpipe/Makefile
3039 src/gallium/drivers/svga/Makefile
3040 src/gallium/drivers/swr/Makefile
3041 src/gallium/drivers/tegra/Makefile
3042 src/gallium/drivers/etnaviv/Makefile
3043 src/gallium/drivers/imx/Makefile
3044 src/gallium/drivers/v3d/Makefile
3045 src/gallium/drivers/vc4/Makefile
3046 src/gallium/drivers/virgl/Makefile
3047 src/gallium/state_trackers/clover/Makefile
3048 src/gallium/state_trackers/dri/Makefile
3049 src/gallium/state_trackers/glx/xlib/Makefile
3050 src/gallium/state_trackers/nine/Makefile
3051 src/gallium/state_trackers/omx/Makefile
3052 src/gallium/state_trackers/omx/bellagio/Makefile
3053 src/gallium/state_trackers/omx/tizonia/Makefile
3054 src/gallium/state_trackers/osmesa/Makefile
3055 src/gallium/state_trackers/va/Makefile
3056 src/gallium/state_trackers/vdpau/Makefile
3057 src/gallium/state_trackers/xa/Makefile
3058 src/gallium/state_trackers/xa/xa_tracker.h
3059 src/gallium/state_trackers/xvmc/Makefile
3060 src/gallium/targets/d3dadapter9/Makefile
3061 src/gallium/targets/d3dadapter9/d3d.pc
3062 src/gallium/targets/dri/Makefile
3063 src/gallium/targets/libgl-xlib/Makefile
3064 src/gallium/targets/omx/Makefile
3065 src/gallium/targets/opencl/Makefile
3066 src/gallium/targets/opencl/mesa.icd
3067 src/gallium/targets/osmesa/Makefile
3068 src/gallium/targets/osmesa/osmesa.pc
3069 src/gallium/targets/pipe-loader/Makefile
3070 src/gallium/targets/va/Makefile
3071 src/gallium/targets/vdpau/Makefile
3072 src/gallium/targets/xa/Makefile
3073 src/gallium/targets/xa/xatracker.pc
3074 src/gallium/targets/xvmc/Makefile
3075 src/gallium/tests/trivial/Makefile
3076 src/gallium/tests/unit/Makefile
3077 src/gallium/winsys/etnaviv/drm/Makefile
3078 src/gallium/winsys/imx/drm/Makefile
3079 src/gallium/winsys/freedreno/drm/Makefile
3080 src/gallium/winsys/i915/drm/Makefile
3081 src/gallium/winsys/nouveau/drm/Makefile
3082 src/gallium/winsys/pl111/drm/Makefile
3083 src/gallium/winsys/radeon/drm/Makefile
3084 src/gallium/winsys/amdgpu/drm/Makefile
3085 src/gallium/winsys/svga/drm/Makefile
3086 src/gallium/winsys/sw/dri/Makefile
3087 src/gallium/winsys/sw/kms-dri/Makefile
3088 src/gallium/winsys/sw/null/Makefile
3089 src/gallium/winsys/sw/wrapper/Makefile
3090 src/gallium/winsys/sw/xlib/Makefile
3091 src/gallium/winsys/tegra/drm/Makefile
3092 src/gallium/winsys/v3d/drm/Makefile
3093 src/gallium/winsys/vc4/drm/Makefile
3094 src/gallium/winsys/virgl/drm/Makefile
3095 src/gallium/winsys/virgl/vtest/Makefile
3096 src/gbm/Makefile
3097 src/gbm/main/gbm.pc
3098 src/glx/Makefile
3099 src/glx/apple/Makefile
3100 src/glx/tests/Makefile
3101 src/glx/windows/Makefile
3102 src/glx/windows/windowsdriproto.pc
3103 src/gtest/Makefile
3104 src/intel/Makefile
3105 src/loader/Makefile
3106 src/mapi/Makefile
3107 src/mapi/es1api/glesv1_cm.pc
3108 src/mapi/es2api/glesv2.pc
3109 src/mapi/glapi/gen/Makefile
3110 src/mesa/Makefile
3111 src/mesa/gl.pc
3112 src/mesa/drivers/dri/dri.pc
3113 src/mesa/drivers/dri/common/Makefile
3114 src/mesa/drivers/dri/i915/Makefile
3115 src/mesa/drivers/dri/i965/Makefile
3116 src/mesa/drivers/dri/Makefile
3117 src/mesa/drivers/dri/nouveau/Makefile
3118 src/mesa/drivers/dri/r200/Makefile
3119 src/mesa/drivers/dri/radeon/Makefile
3120 src/mesa/drivers/dri/swrast/Makefile
3121 src/mesa/drivers/osmesa/Makefile
3122 src/mesa/drivers/osmesa/osmesa.pc
3123 src/mesa/drivers/x11/Makefile
3124 src/mesa/main/tests/Makefile
3125 src/mesa/state_tracker/tests/Makefile
3126 src/util/Makefile
3127 src/util/tests/hash_table/Makefile
3128 src/util/tests/string_buffer/Makefile
3129 src/util/tests/vma/Makefile
3130 src/util/xmlpool/Makefile
3131 src/vulkan/Makefile])
3132
3133 AC_OUTPUT
3134
3135 # Fix up dependencies in *.Plo files, where we changed the extension of a
3136 # source file
3137 $SED -i -e 's/brw_blorp.cpp/brw_blorp.c/' src/mesa/drivers/dri/i965/.deps/brw_blorp.Plo
3138
3139 rm -f src/compiler/spirv/spirv_info.lo
3140 echo "# dummy" > src/compiler/spirv/.deps/spirv_info.Plo
3141
3142 rm -f src/compiler/nir/.deps/nir_intrinsics.Plo
3143 echo "# dummy" > src/compiler/nir/.deps/nir_intrinsics.Plo
3144
3145 dnl
3146 dnl Output some configuration info for the user
3147 dnl
3148 echo ""
3149 echo " prefix: $prefix"
3150 echo " exec_prefix: $exec_prefix"
3151 echo " libdir: $libdir"
3152 echo " includedir: $includedir"
3153
3154 dnl API info
3155 echo ""
3156 echo " OpenGL: $enable_opengl (ES1: $enable_gles1 ES2: $enable_gles2)"
3157
3158 dnl Driver info
3159 echo ""
3160 case "x$enable_osmesa$enable_gallium_osmesa" in
3161 xnoyes)
3162 echo " OSMesa: lib$OSMESA_LIB (Gallium)"
3163 ;;
3164 xyesno)
3165 echo " OSMesa: lib$OSMESA_LIB"
3166 ;;
3167 xnono)
3168 echo " OSMesa: no"
3169 ;;
3170 esac
3171
3172 echo ""
3173 if test "x$enable_dri" != xno; then
3174 echo " DRI platform: $dri_platform"
3175 if test -z "$DRI_DIRS"; then
3176 echo " DRI drivers: no"
3177 else
3178 echo " DRI drivers: $DRI_DIRS"
3179 fi
3180 echo " DRI driver dir: $DRI_DRIVER_INSTALL_DIR"
3181 fi
3182
3183 case "x$enable_glx" in
3184 xdri)
3185 echo " GLX: DRI-based"
3186 ;;
3187 xxlib)
3188 echo " GLX: Xlib-based"
3189 ;;
3190 xgallium-xlib)
3191 echo " GLX: Xlib-based (Gallium)"
3192 ;;
3193 *)
3194 echo " GLX: $enable_glx"
3195 ;;
3196 esac
3197
3198 dnl EGL
3199 echo ""
3200 echo " EGL: $enable_egl"
3201 if test "$enable_egl" = yes; then
3202
3203 egl_drivers=""
3204 if test "x$enable_dri" != "xno"; then
3205 egl_drivers="$egl_drivers builtin:egl_dri2"
3206 fi
3207 if test "x$enable_dri3" != "xno"; then
3208 egl_drivers="$egl_drivers builtin:egl_dri3"
3209 fi
3210
3211 echo " EGL drivers: $egl_drivers"
3212 fi
3213 if test "x$enable_gbm" = xyes; then
3214 echo " GBM: yes"
3215 else
3216 echo " GBM: no"
3217 fi
3218
3219 echo " EGL/Vulkan/VL platforms: $platforms"
3220
3221 # Vulkan
3222 echo ""
3223 if test "x$VULKAN_DRIVERS" != x; then
3224 echo " Vulkan drivers: $VULKAN_DRIVERS"
3225 echo " Vulkan ICD dir: $VULKAN_ICD_INSTALL_DIR"
3226 else
3227 echo " Vulkan drivers: no"
3228 fi
3229
3230 echo ""
3231 if test "x$enable_llvm" = xyes; then
3232 echo " llvm: yes"
3233 echo " llvm-config: $LLVM_CONFIG"
3234 echo " llvm-version: $LLVM_VERSION"
3235 else
3236 echo " llvm: no"
3237 fi
3238
3239 echo ""
3240 if test -n "$with_gallium_drivers"; then
3241 echo " Gallium drivers: $gallium_drivers"
3242 echo " Gallium st: $gallium_st"
3243 else
3244 echo " Gallium: no"
3245 fi
3246
3247 echo ""
3248 if test "x$enable_gallium_extra_hud" != xyes; then
3249 echo " HUD extra stats: no"
3250 else
3251 echo " HUD extra stats: yes"
3252 fi
3253
3254 if test "x$enable_lmsensors" != xyes; then
3255 echo " HUD lmsensors: no"
3256 else
3257 echo " HUD lmsensors: yes"
3258 fi
3259
3260 echo ""
3261 if test "x$HAVE_GALLIUM_SWR" != x; then
3262 if test "x$HAVE_SWR_BUILTIN" = xyes; then
3263 echo " SWR archs: $swr_archs (builtin)"
3264 else
3265 echo " SWR archs: $swr_archs"
3266 fi
3267 fi
3268
3269 dnl Libraries
3270 echo ""
3271 echo " Shared libs: $enable_shared"
3272 echo " Static libs: $enable_static"
3273 echo " Shared-glapi: $enable_shared_glapi"
3274
3275 dnl Compiler options
3276 # cleanup the CFLAGS/CXXFLAGS/LDFLAGS/DEFINES vars
3277 cflags=`echo $CFLAGS | \
3278 $SED 's/^ *//;s/ */ /;s/ *$//'`
3279 cxxflags=`echo $CXXFLAGS | \
3280 $SED 's/^ *//;s/ */ /;s/ *$//'`
3281 ldflags=`echo $LDFLAGS | $SED 's/^ *//;s/ */ /;s/ *$//'`
3282 defines=`echo $DEFINES | $SED 's/^ *//;s/ */ /;s/ *$//'`
3283 echo ""
3284 echo " CFLAGS: $cflags"
3285 echo " CXXFLAGS: $cxxflags"
3286 echo " CXX11_CXXFLAGS: $CXX11_CXXFLAGS"
3287 echo " LDFLAGS: $ldflags"
3288 echo " Macros: $defines"
3289 echo ""
3290 if test "x$enable_llvm" = xyes; then
3291 echo " LLVM_CFLAGS: $LLVM_CFLAGS"
3292 echo " LLVM_CXXFLAGS: $LLVM_CXXFLAGS"
3293 echo " LLVM_CPPFLAGS: $LLVM_CPPFLAGS"
3294 echo " LLVM_LDFLAGS: $LLVM_LDFLAGS"
3295 echo ""
3296 fi
3297 echo " PYTHON2: $PYTHON2"
3298
3299 echo ""
3300 echo " Run '${MAKE-make}' to build Mesa"
3301 echo ""