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