X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=configure.ac;h=cc9bc4758b82ef9bb2693c7e954b8a4912b787d7;hb=12783aac506e25e10f28c26429c9b500d908af41;hp=91fdfe5f9cb46a5e74b12cbff45d9be977d5629c;hpb=950e06a29bd664af0cb454fc2f35f8cc4153e7f1;p=mesa.git diff --git a/configure.ac b/configure.ac index 91fdfe5f9cb..cc9bc4758b8 100644 --- a/configure.ac +++ b/configure.ac @@ -68,13 +68,13 @@ OPENCL_VERSION=1 AC_SUBST([OPENCL_VERSION]) dnl Versions for external dependencies -LIBDRM_REQUIRED=2.4.60 +LIBDRM_REQUIRED=2.4.66 LIBDRM_RADEON_REQUIRED=2.4.56 LIBDRM_AMDGPU_REQUIRED=2.4.63 LIBDRM_INTEL_REQUIRED=2.4.61 -LIBDRM_NVVIEUX_REQUIRED=2.4.33 -LIBDRM_NOUVEAU_REQUIRED=2.4.62 -LIBDRM_FREEDRENO_REQUIRED=2.4.65 +LIBDRM_NVVIEUX_REQUIRED=2.4.66 +LIBDRM_NOUVEAU_REQUIRED=2.4.66 +LIBDRM_FREEDRENO_REQUIRED=2.4.67 DRI2PROTO_REQUIRED=2.6 DRI3PROTO_REQUIRED=1.0 PRESENTPROTO_REQUIRED=1.0 @@ -98,7 +98,7 @@ AC_PROG_CXX AM_PROG_CC_C_O AM_PROG_AS AX_CHECK_GNU_MAKE -AC_CHECK_PROGS([PYTHON2], [python2 python]) +AC_CHECK_PROGS([PYTHON2], [python2.7 python2 python]) AC_PROG_SED AC_PROG_MKDIR_P @@ -110,10 +110,10 @@ LT_INIT([disable-static]) AC_CHECK_PROG(RM, rm, [rm -f]) AX_PROG_BISON([], - AS_IF([test ! -f "$srcdir/src/glsl/glcpp/glcpp-parse.c"], + AS_IF([test ! -f "$srcdir/src/compiler/glsl/glcpp/glcpp-parse.c"], [AC_MSG_ERROR([bison not found - unable to compile glcpp-parse.y])])) AX_PROG_FLEX([], - AS_IF([test ! -f "$srcdir/src/glsl/glcpp/glcpp-lex.c"], + AS_IF([test ! -f "$srcdir/src/compiler/glsl/glcpp/glcpp-lex.c"], [AC_MSG_ERROR([flex not found - unable to compile glcpp-lex.l])])) AC_CHECK_PROG(INDENT, indent, indent, cat) @@ -197,6 +197,13 @@ if test "x$GCC" = xyes -a "x$acv_mesa_CLANG" = xno; then fi fi +dnl We don't support building Mesa with Sun C compiler +dnl https://bugs.freedesktop.org/show_bug.cgi?id=93189 +AC_CHECK_DECL([__SUNPRO_C], [SUNCC=yes], [SUNCC=no]) +if test "x$SUNCC" = xyes; then + AC_MSG_ERROR([Building with Sun C compiler is not supported, use GCC instead.]) +fi + dnl Check for compiler builtins AX_GCC_BUILTIN([__builtin_bswap32]) AX_GCC_BUILTIN([__builtin_bswap64]) @@ -216,8 +223,10 @@ AX_GCC_FUNC_ATTRIBUTE([format]) AX_GCC_FUNC_ATTRIBUTE([malloc]) AX_GCC_FUNC_ATTRIBUTE([packed]) AX_GCC_FUNC_ATTRIBUTE([pure]) +AX_GCC_FUNC_ATTRIBUTE([returns_nonnull]) AX_GCC_FUNC_ATTRIBUTE([unused]) AX_GCC_FUNC_ATTRIBUTE([warn_unused_result]) +AX_GCC_FUNC_ATTRIBUTE([weak]) AM_CONDITIONAL([GEN_ASM_OFFSETS], test "x$GEN_ASM_OFFSETS" = xyes) @@ -238,9 +247,13 @@ _SAVE_LDFLAGS="$LDFLAGS" _SAVE_CPPFLAGS="$CPPFLAGS" dnl Compiler macros -DEFINES="-D__STDC_LIMIT_MACROS" +DEFINES="-D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS" AC_SUBST([DEFINES]) +android=no case "$host_os" in +*-android) + android=yes + ;; linux*|*-gnu*|gnu*) DEFINES="$DEFINES -D_GNU_SOURCE" ;; @@ -252,6 +265,8 @@ cygwin*) ;; esac +AM_CONDITIONAL(HAVE_ANDROID, test "x$android" = xyes) + dnl Add flags for gcc and g++ if test "x$GCC" = xyes; then CFLAGS="$CFLAGS -Wall" @@ -298,8 +313,7 @@ if test "x$GCC" = xyes; then # Flags to help ensure that certain portions of the code -- and only those # portions -- can be built with MSVC: - # - src/util, src/gallium/auxiliary, and src/gallium/drivers/llvmpipe needs - # to build with Windows SDK 7.0.7600, which bundles MSVC 2008 + # - src/util, src/gallium/auxiliary, rc/gallium/drivers/llvmpipe, and # - non-Linux/Posix OpenGL portions needs to build on MSVC 2013 (which # supports most of C99) # - the rest has no compiler compiler restrictions @@ -316,9 +330,6 @@ if test "x$GCC" = xyes; then AC_MSG_RESULT([yes])], AC_MSG_RESULT([no])); CFLAGS="$save_CFLAGS" - - MSVC2008_COMPAT_CFLAGS="$MSVC2013_COMPAT_CFLAGS -Werror=declaration-after-statement" - MSVC2008_COMPAT_CXXFLAGS="$MSVC2013_COMPAT_CXXFLAGS" fi if test "x$GXX" = xyes; then CXXFLAGS="$CXXFLAGS -Wall" @@ -346,8 +357,6 @@ fi AC_SUBST([MSVC2013_COMPAT_CFLAGS]) AC_SUBST([MSVC2013_COMPAT_CXXFLAGS]) -AC_SUBST([MSVC2008_COMPAT_CFLAGS]) -AC_SUBST([MSVC2008_COMPAT_CXXFLAGS]) dnl even if the compiler appears to support it, using visibility attributes isn't dnl going to do anything useful currently on cygwin apart from emit lots of warnings @@ -376,10 +385,11 @@ save_CFLAGS="$CFLAGS" CFLAGS="$SSE41_CFLAGS $CFLAGS" AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ #include +int param; int main () { - __m128i a = _mm_set1_epi32 (0), b = _mm_set1_epi32 (0), c; + __m128i a = _mm_set1_epi32 (param), b = _mm_set1_epi32 (param + 1), c; c = _mm_max_epu32(a, b); - return 0; + return _mm_cvtsi128_si32(c); }]])], SSE41_SUPPORTED=1) CFLAGS="$save_CFLAGS" if test "x$SSE41_SUPPORTED" = x1; then @@ -388,6 +398,61 @@ fi AM_CONDITIONAL([SSE41_SUPPORTED], [test x$SSE41_SUPPORTED = x1]) AC_SUBST([SSE41_CFLAGS], $SSE41_CFLAGS) +dnl Check for Endianness +AC_C_BIGENDIAN( + little_endian=no, + little_endian=yes, + little_endian=no, + little_endian=no +) + +dnl Check for POWER8 Architecture +PWR8_CFLAGS="-mpower8-vector" +have_pwr8_intrinsics=no +AC_MSG_CHECKING(whether gcc supports -mpower8-vector) +save_CFLAGS=$CFLAGS +CFLAGS="$PWR8_CFLAGS $CFLAGS" +AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ +#if defined(__GNUC__) && (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)) +#error "Need GCC >= 4.8 for sane POWER8 support" +#endif +#include +int main () { + vector unsigned char r; + vector unsigned int v = vec_splat_u32 (1); + r = __builtin_vec_vgbbd ((vector unsigned char) v); + return 0; +}]])], have_pwr8_intrinsics=yes) +CFLAGS=$save_CFLAGS + +AC_ARG_ENABLE(pwr8, + [AC_HELP_STRING([--disable-pwr8-inst], + [disable POWER8-specific instructions])], + [enable_pwr8=$enableval], [enable_pwr8=auto]) + +if test "x$enable_pwr8" = xno ; then + have_pwr8_intrinsics=disabled +fi + +if test $have_pwr8_intrinsics = yes && test $little_endian = yes ; then + DEFINES="$DEFINES -D_ARCH_PWR8" + CXXFLAGS="$CXXFLAGS $PWR8_CFLAGS" + CFLAGS="$CFLAGS $PWR8_CFLAGS" +else + PWR8_CFLAGS= +fi + +AC_MSG_RESULT($have_pwr8_intrinsics) +if test "x$enable_pwr8" = xyes && test $have_pwr8_intrinsics = no ; then + AC_MSG_ERROR([POWER8 compiler support not detected]) +fi + +if test $have_pwr8_intrinsics = yes && test $little_endian = no ; then + AC_MSG_WARN([POWER8 optimization is enabled only on POWER8 Little-Endian]) +fi + +AC_SUBST([PWR8_CFLAGS], $PWR8_CFLAGS) + dnl Can't have static and shared libraries, default to static if user dnl explicitly requested. If both disabled, set to static since shared dnl was explicitly requested. @@ -413,8 +478,29 @@ AC_ARG_ENABLE([debug], [enable_debug="$enableval"], [enable_debug=no] ) + +AC_ARG_ENABLE([profile], + [AS_HELP_STRING([--enable-profile], + [enable profiling of code @<:@default=disabled@:>@])], + [enable_profile="$enableval"], + [enable_profile=no] +) + +if test "x$enable_profile" = xyes; then + DEFINES="$DEFINES -DPROFILE" + if test "x$GCC" = xyes; then + CFLAGS="$CFLAGS -fno-omit-frame-pointer" + fi + if test "x$GXX" = xyes; then + CXXFLAGS="$CXXFLAGS -fno-omit-frame-pointer" + fi +fi + if test "x$enable_debug" = xyes; then DEFINES="$DEFINES -DDEBUG" + if test "x$enable_profile" = xyes; then + AC_MSG_WARN([Debug and Profile are enabled at the same time]) + fi if test "x$GCC" = xyes; then if ! echo "$CFLAGS" | grep -q -e '-g'; then CFLAGS="$CFLAGS -g" @@ -435,6 +521,8 @@ else DEFINES="$DEFINES -DNDEBUG" fi +DEFAULT_GL_LIB_NAME=GL + dnl dnl Check if linker supports -Bsymbolic dnl @@ -532,6 +620,23 @@ esac AM_CONDITIONAL(HAVE_COMPAT_SYMLINKS, test "x$HAVE_COMPAT_SYMLINKS" = xyes) +DEFAULT_GL_LIB_NAME=GL + +dnl +dnl Libglvnd configuration +dnl +AC_ARG_ENABLE([libglvnd], + [AS_HELP_STRING([--enable-libglvnd], + [Build for libglvnd @<:@default=disabled@:>@])], + [enable_libglvnd="$enableval"], + [enable_libglvnd=no]) +AM_CONDITIONAL(USE_LIBGLVND_GLX, test "x$enable_libglvnd" = xyes) +#AM_COND_IF([USE_LIBGLVND_GLX], [DEFINES="${DEFINES} -DUSE_LIBGLVND_GLX=1"]) +if test "x$enable_libglvnd" = xyes ; then + DEFINES="${DEFINES} -DUSE_LIBGLVND_GLX=1" + DEFAULT_GL_LIB_NAME=GLX_mesa +fi + dnl dnl library names dnl @@ -569,13 +674,13 @@ AC_ARG_WITH([gl-lib-name], [AS_HELP_STRING([--with-gl-lib-name@<:@=NAME@:>@], [specify GL library name @<:@default=GL@:>@])], [GL_LIB=$withval], - [GL_LIB=GL]) + [GL_LIB="$DEFAULT_GL_LIB_NAME"]) AC_ARG_WITH([osmesa-lib-name], [AS_HELP_STRING([--with-osmesa-lib-name@<:@=NAME@:>@], [specify OSMesa library name @<:@default=OSMesa@:>@])], [OSMESA_LIB=$withval], [OSMESA_LIB=OSMesa]) -AS_IF([test "x$GL_LIB" = xyes], [GL_LIB=GL]) +AS_IF([test "x$GL_LIB" = xyes], [GL_LIB="$DEFAULT_GL_LIB_NAME"]) AS_IF([test "x$OSMESA_LIB" = xyes], [OSMESA_LIB=OSMesa]) dnl @@ -626,8 +731,10 @@ test "x$enable_asm" = xno && AC_MSG_RESULT([no]) if test "x$enable_asm" = xyes -a "x$cross_compiling" = xyes; then case "$host_cpu" in i?86 | x86_64 | amd64) - enable_asm=no - AC_MSG_RESULT([no, cross compiling]) + if test "x$host_cpu" != "x$target_cpu"; then + enable_asm=no + AC_MSG_RESULT([no, cross compiling]) + fi ;; esac fi @@ -718,6 +825,10 @@ dnl to -pthread, which causes problems if we need -lpthread to appear in dnl pkgconfig files. test -z "$PTHREAD_LIBS" && PTHREAD_LIBS="-lpthread" +PKG_CHECK_MODULES(PTHREADSTUBS, pthread-stubs) +AC_SUBST(PTHREADSTUBS_CFLAGS) +AC_SUBST(PTHREADSTUBS_LIBS) + dnl SELinux awareness. AC_ARG_ENABLE([selinux], [AS_HELP_STRING([--enable-selinux], @@ -767,14 +878,19 @@ linux*) dri3_default=no ;; esac + +if test "x$enable_dri" = xno; then + dri3_default=no +fi + AC_ARG_ENABLE([dri3], [AS_HELP_STRING([--enable-dri3], [enable DRI3 @<:@default=auto@:>@])], [enable_dri3="$enableval"], [enable_dri3="$dri3_default"]) AC_ARG_ENABLE([glx], - [AS_HELP_STRING([--enable-glx], - [enable GLX library @<:@default=enabled@:>@])], + [AS_HELP_STRING([--enable-glx@<:@=dri|xlib|gallium-xlib@:>@], + [enable the GLX library and choose an implementation @<:@default=auto@:>@])], [enable_glx="$enableval"], [enable_glx=yes]) AC_ARG_ENABLE([osmesa], @@ -840,17 +956,6 @@ AC_ARG_ENABLE([opencl_icd], @<:@default=disabled@:>@])], [enable_opencl_icd="$enableval"], [enable_opencl_icd=no]) -AC_ARG_ENABLE([xlib-glx], - [AS_HELP_STRING([--enable-xlib-glx], - [make GLX library Xlib-based instead of DRI-based @<:@default=disabled@:>@])], - [enable_xlib_glx="$enableval"], - [enable_xlib_glx=no]) - -AC_ARG_ENABLE([r600-llvm-compiler], - [AS_HELP_STRING([--enable-r600-llvm-compiler], - [Enable experimental LLVM backend for graphics shaders @<:@default=disabled@:>@])], - [enable_r600_llvm="$enableval"], - [enable_r600_llvm=no]) AC_ARG_ENABLE([gallium-tests], [AS_HELP_STRING([--enable-gallium-tests], @@ -909,36 +1014,85 @@ AM_CONDITIONAL(NEED_OPENGL_COMMON, test "x$enable_opengl" = xyes -o \ "x$enable_gles1" = xyes -o \ "x$enable_gles2" = xyes) -if test "x$enable_glx" = xno; then - AC_MSG_WARN([GLX disabled, disabling Xlib-GLX]) - enable_xlib_glx=no -fi - -if test "x$enable_dri$enable_xlib_glx" = xyesyes; then - AC_MSG_ERROR([DRI and Xlib-GLX cannot be built together]) +# Validate GLX options +if test "x$enable_glx" = xyes; then + if test "x$enable_dri" = xyes; then + enable_glx=dri + elif test -n "$with_gallium_drivers"; then + enable_glx=gallium-xlib + else + enable_glx=xlib + fi fi +case "x$enable_glx" in +xdri | xxlib | xgallium-xlib) + # GLX requires OpenGL + if test "x$enable_opengl" = xno; then + AC_MSG_ERROR([GLX cannot be built without OpenGL]) + fi -if test "x$enable_opengl$enable_xlib_glx" = xnoyes; then - AC_MSG_ERROR([Xlib-GLX cannot be built without OpenGL]) -fi + # Check individual dependencies + case "x$enable_glx" in + xdri) + if test "x$enable_dri" = xno; then + AC_MSG_ERROR([DRI-based GLX requires DRI to be enabled]) + fi + ;; + xxlib) + if test "x$enable_dri" = xyes; then + AC_MSG_ERROR([Xlib-based GLX cannot be built with DRI enabled]) + fi + ;; + xgallium-xlib ) + if test "x$enable_dri" = xyes; then + AC_MSG_ERROR([Xlib-based (Gallium) GLX cannot be built with DRI enabled]) + fi + if test -z "$with_gallium_drivers"; then + AC_MSG_ERROR([Xlib-based (Gallium) GLX cannot be built without Gallium enabled]) + fi + ;; + esac + ;; +xno) + ;; +*) + AC_MSG_ERROR([Illegal value for --enable-glx: $enable_glx]) + ;; +esac -# Disable GLX if OpenGL is not enabled -if test "x$enable_glx$enable_opengl" = xyesno; then - AC_MSG_WARN([OpenGL not enabled, disabling GLX]) - enable_glx=no -fi +AM_CONDITIONAL(HAVE_DRI_GLX, test "x$enable_glx" = xdri) +AM_CONDITIONAL(HAVE_XLIB_GLX, test "x$enable_glx" = xxlib) +AM_CONDITIONAL(HAVE_GALLIUM_XLIB_GLX, test "x$enable_glx" = xgallium-xlib) + +dnl +dnl Libglvnd configuration +dnl +AC_ARG_ENABLE([libglvnd], + [AS_HELP_STRING([--enable-libglvnd], + [Build for libglvnd @<:@default=disabled@:>@])], + [enable_libglvnd="$enableval"], + [enable_libglvnd=no]) +AM_CONDITIONAL(USE_LIBGLVND_GLX, test "x$enable_libglvnd" = xyes) +if test "x$enable_libglvnd" = xyes ; then + dnl XXX: update once we can handle more than libGL/glx. + dnl Namely: we should error out if neither of the glvnd enabled libraries + dnl are built + case "x$enable_glx" in + xno) + AC_MSG_ERROR([cannot build libglvnd without GLX]) + ;; + xxlib | xgallium-xlib ) + AC_MSG_ERROR([cannot build libgvnd when Xlib-GLX or Gallium-Xlib-GLX is enabled]) + ;; + xdri) + ;; + esac -# Disable GLX if DRI and Xlib-GLX are not enabled -if test "x$enable_glx" = xyes -a \ - "x$enable_dri" = xno -a \ - "x$enable_xlib_glx" = xno; then - AC_MSG_WARN([Neither DRI nor Xlib-GLX enabled, disabling GLX]) - enable_glx=no + PKG_CHECK_MODULES([GLVND], libglvnd >= 0.1.0) + DEFINES="${DEFINES} -DUSE_LIBGLVND_GLX=1" + DEFAULT_GL_LIB_NAME=GLX_mesa fi -AM_CONDITIONAL(HAVE_DRI_GLX, test "x$enable_glx" = xyes -a \ - "x$enable_dri" = xyes) - # Check for libdrm PKG_CHECK_MODULES([LIBDRM], [libdrm >= $LIBDRM_REQUIRED], [have_libdrm=yes], [have_libdrm=no]) @@ -993,10 +1147,6 @@ dnl dnl Driver specific build directories dnl -if test -n "$with_gallium_drivers" -a "x$enable_glx$enable_xlib_glx" = xyesyes; then - NEED_WINSYS_XLIB="yes" -fi - if test "x$enable_gallium_osmesa" = xyes; then if ! echo "$with_gallium_drivers" | grep -q 'swrast'; then AC_MSG_ERROR([gallium_osmesa requires the gallium swrast driver]) @@ -1189,8 +1339,8 @@ AC_ARG_ENABLE([driglx-direct], dnl dnl libGL configuration per driver dnl -case "x$enable_glx$enable_xlib_glx" in -xyesyes) +case "x$enable_glx" in +xxlib | xgallium-xlib) # Xlib-based GLX dri_modules="x11 xext xcb" PKG_CHECK_MODULES([XLIBGL], [$dri_modules]) @@ -1200,7 +1350,7 @@ xyesyes) GL_LIB_DEPS="$GL_LIB_DEPS $SELINUX_LIBS -lm $PTHREAD_LIBS $DLOPEN_LIBS" GL_PC_LIB_PRIV="$GL_PC_LIB_PRIV $SELINUX_LIBS -lm $PTHREAD_LIBS" ;; -xyesno) +xdri) # DRI-based GLX PKG_CHECK_MODULES([GLPROTO], [glproto >= $GLPROTO_REQUIRED]) @@ -1227,7 +1377,7 @@ xyesno) if test x"$enable_dri3" = xyes; then PKG_CHECK_EXISTS([xcb >= $XCB_REQUIRED], [], AC_MSG_ERROR([DRI3 requires xcb >= $XCB_REQUIRED])) - dri3_modules="xcb-dri3 xcb-present xcb-sync xshmfence >= $XSHMFENCE_REQUIRED" + dri3_modules="xcb xcb-dri3 xcb-present xcb-sync xshmfence >= $XSHMFENCE_REQUIRED" PKG_CHECK_MODULES([XCB_DRI3], [$dri3_modules]) fi fi @@ -1289,11 +1439,11 @@ AC_SUBST([HAVE_XF86VIDMODE]) dnl dnl More GLX setup dnl -case "x$enable_glx$enable_xlib_glx" in -xyesyes) +case "x$enable_glx" in +xxlib | xgallium-xlib) DEFINES="$DEFINES -DUSE_XSHM" ;; -xyesno) +xdri) DEFINES="$DEFINES -DGLX_INDIRECT_RENDERING" if test "x$driglx_direct" = xyes; then DEFINES="$DEFINES -DGLX_DIRECT_RENDERING" @@ -1466,8 +1616,58 @@ if test -n "$with_dri_drivers"; then DRI_DIRS=`echo $DRI_DIRS|tr " " "\n"|sort -u|tr "\n" " "` fi + +# +# Vulkan driver configuration +# + +AC_ARG_WITH([vulkan-drivers], + [AS_HELP_STRING([--with-vulkan-drivers@<:@=DIRS...@:>@], + [comma delimited Vulkan drivers list, e.g. + "intel" + @<:@default=no@:>@])], + [with_vulkan_drivers="$withval"], + [with_vulkan_drivers="no"]) + +# Doing '--without-vulkan-drivers' will set this variable to 'no'. Clear it +# here so that the script doesn't choke on an unknown driver name later. +case "x$with_vulkan_drivers" in + xyes) with_vulkan_drivers="$VULKAN_DRIVERS_DEFAULT" ;; + xno) with_vulkan_drivers='' ;; +esac + +AC_ARG_WITH([vulkan-icddir], + [AS_HELP_STRING([--with-vulkan-icddir=DIR], + [directory for the Vulkan driver icd files @<:@${sysconfdir}/vulkan/icd.d@:>@])], + [VULKAN_ICD_INSTALL_DIR="$withval"], + [VULKAN_ICD_INSTALL_DIR='${sysconfdir}/vulkan/icd.d']) +AC_SUBST([VULKAN_ICD_INSTALL_DIR]) + +if test -n "$with_vulkan_drivers"; then + VULKAN_DRIVERS=`IFS=', '; echo $with_vulkan_drivers` + for driver in $VULKAN_DRIVERS; do + case "x$driver" in + xintel) + if test "x$HAVE_I965_DRI" != xyes; then + AC_MSG_ERROR([Intel Vulkan driver requires the i965 dri driver]) + fi + if test "x$with_sha1" == "x"; then + AC_MSG_ERROR([Intel Vulkan driver requires SHA1]) + fi + HAVE_INTEL_VULKAN=yes; + + ;; + *) + AC_MSG_ERROR([Vulkan driver '$driver' does not exist]) + ;; + esac + done + VULKAN_DRIVERS=`echo $VULKAN_DRIVERS|tr " " "\n"|sort -u|tr "\n" " "` +fi + + AM_CONDITIONAL(NEED_MEGADRIVER, test -n "$DRI_DIRS") -AM_CONDITIONAL(NEED_LIBMESA, test "x$enable_xlib_glx" = xyes -o \ +AM_CONDITIONAL(NEED_LIBMESA, test "x$enable_glx" = xxlib -o \ "x$enable_osmesa" = xyes -o \ -n "$DRI_DIRS") @@ -1482,7 +1682,7 @@ AC_ARG_WITH([osmesa-bits], [osmesa_bits="$withval"], [osmesa_bits=8]) if test "x$osmesa_bits" != x8; then - if test "x$enable_dri" = xyes -o "x$enable_glx" = xyes; then + if test "x$enable_dri" = xyes -o "x$enable_glx" != xno; then AC_MSG_WARN([Ignoring OSMesa channel bits because of non-OSMesa driver]) osmesa_bits=8 fi @@ -1638,7 +1838,12 @@ if test "x$enable_xvmc" = xyes -o \ "x$enable_vdpau" = xyes -o \ "x$enable_omx" = xyes -o \ "x$enable_va" = xyes; then - PKG_CHECK_MODULES([VL], [x11-xcb xcb xcb-dri2 >= $XCBDRI2_REQUIRED]) + if test x"$enable_dri3" = xyes; then + PKG_CHECK_MODULES([VL], [xcb-dri3 xcb-present xcb-sync xshmfence >= $XSHMFENCE_REQUIRED + x11-xcb xcb xcb-dri2 >= $XCBDRI2_REQUIRED]) + else + PKG_CHECK_MODULES([VL], [x11-xcb xcb xcb-dri2 >= $XCBDRI2_REQUIRED]) + fi need_gallium_vl_winsys=yes fi AM_CONDITIONAL(NEED_GALLIUM_VL_WINSYS, test "x$need_gallium_vl_winsys" = xyes) @@ -1652,6 +1857,7 @@ AM_CONDITIONAL(HAVE_ST_XVMC, test "x$enable_xvmc" = xyes) if test "x$enable_vdpau" = xyes; then PKG_CHECK_MODULES([VDPAU], [vdpau >= $VDPAU_REQUIRED]) gallium_st="$gallium_st vdpau" + DEFINES="$DEFINES -DHAVE_ST_VDPAU" fi AM_CONDITIONAL(HAVE_ST_VDPAU, test "x$enable_vdpau" = xyes) @@ -1700,7 +1906,15 @@ AC_ARG_WITH([clang-libdir], [CLANG_LIBDIR='']) PKG_CHECK_EXISTS([libclc], [have_libclc=yes], [have_libclc=no]) -AC_CHECK_LIB([elf], [elf_memory], [have_libelf=yes;ELF_LIB=-lelf]) +PKG_CHECK_MODULES([LIBELF], [libelf], [have_libelf=yes], [have_libelf=no]) + +if test "x$have_libelf" = xno; then + LIBELF_LIBS='' + LIBELF_CFLAGS='' + AC_CHECK_LIB([elf], [elf_memory], [have_libelf=yes;LIBELF_LIBS=-lelf], [have_libelf=no]) + AC_SUBST([LIBELF_LIBS]) + AC_SUBST([LIBELF_CFLAGS]) +fi if test "x$enable_opencl" = xyes; then if test -z "$with_gallium_drivers"; then @@ -1820,6 +2034,9 @@ for plat in $egl_platforms; do AC_MSG_ERROR([EGL platform surfaceless requires libdrm >= $LIBDRM_REQUIRED]) ;; + android) + ;; + *) AC_MSG_ERROR([EGL platform '$plat' does not exist]) ;; @@ -1840,11 +2057,11 @@ else EGL_NATIVE_PLATFORM="_EGL_INVALID_PLATFORM" fi -AM_CONDITIONAL(HAVE_EGL_PLATFORM_X11, echo "$egl_platforms" | grep -q 'x11') -AM_CONDITIONAL(HAVE_EGL_PLATFORM_WAYLAND, echo "$egl_platforms" | grep -q 'wayland') +AM_CONDITIONAL(HAVE_PLATFORM_X11, echo "$egl_platforms" | grep -q 'x11') +AM_CONDITIONAL(HAVE_PLATFORM_WAYLAND, echo "$egl_platforms" | grep -q 'wayland') AM_CONDITIONAL(HAVE_EGL_PLATFORM_DRM, echo "$egl_platforms" | grep -q 'drm') AM_CONDITIONAL(HAVE_EGL_PLATFORM_SURFACELESS, echo "$egl_platforms" | grep -q 'surfaceless') -AM_CONDITIONAL(HAVE_EGL_PLATFORM_NULL, echo "$egl_platforms" | grep -q 'null') +AM_CONDITIONAL(HAVE_EGL_PLATFORM_ANDROID, echo "$egl_platforms" | grep -q 'android') AM_CONDITIONAL(HAVE_EGL_DRIVER_DRI2, test "x$HAVE_EGL_DRIVER_DRI2" != "x") @@ -1885,6 +2102,9 @@ AC_ARG_WITH([llvm-prefix], strip_unwanted_llvm_flags() { # Use \> (marks the end of the word) echo `$1` | sed \ + -e 's/-march=\S*//g' \ + -e 's/-mtune=\S*//g' \ + -e 's/-mcpu=\S*//g' \ -e 's/-DNDEBUG\>//g' \ -e 's/-D_GNU_SOURCE\>//g' \ -e 's/-pedantic\>//g' \ @@ -2062,7 +2282,12 @@ gallium_require_drm_loader() { fi } +dnl This is for Glamor. Skip this if OpenGL is disabled. require_egl_drm() { + if test "x$enable_opengl" = xno; then + return 0 + fi + case "$with_egl_platforms" in *drm*) ;; @@ -2084,7 +2309,7 @@ radeon_llvm_check() { if test "x$enable_gallium_llvm" != "xyes"; then AC_MSG_ERROR([--enable-gallium-llvm is required when building $1]) fi - llvm_check_version_for "3" "5" "0" $1 + llvm_check_version_for "3" "6" "0" $1 if test true && $LLVM_CONFIG --targets-built | grep -iqvw $amdgpu_llvm_target_name ; then AC_MSG_ERROR([LLVM $amdgpu_llvm_target_name not enabled in your LLVM build.]) fi @@ -2095,6 +2320,16 @@ radeon_llvm_check() { fi } +swr_llvm_check() { + gallium_require_llvm $1 + if test ${LLVM_VERSION_INT} -lt 306; then + AC_MSG_ERROR([LLVM version 3.6 or later required when building $1]) + fi + if test "x$enable_gallium_llvm" != "xyes"; then + AC_MSG_ERROR([--enable-gallium-llvm is required when building $1]) + fi +} + dnl Duplicates in GALLIUM_DRIVERS_DIRS are removed by sorting it after this block if test -n "$with_gallium_drivers"; then gallium_drivers=`IFS=', '; echo $with_gallium_drivers` @@ -2129,14 +2364,8 @@ if test -n "$with_gallium_drivers"; then PKG_CHECK_MODULES([RADEON], [libdrm_radeon >= $LIBDRM_RADEON_REQUIRED]) gallium_require_drm "Gallium R600" gallium_require_drm_loader - if test "x$enable_r600_llvm" = xyes -o "x$enable_opencl" = xyes; then - radeon_llvm_check "r600g" - LLVM_COMPONENTS="${LLVM_COMPONENTS} bitreader asmparser" - fi - if test "x$enable_r600_llvm" = xyes; then - USE_R600_LLVM_COMPILER=yes; - fi if test "x$enable_opencl" = xyes; then + radeon_llvm_check "r600g" LLVM_COMPONENTS="${LLVM_COMPONENTS} bitreader asmparser" fi ;; @@ -2167,13 +2396,47 @@ if test -n "$with_gallium_drivers"; then HAVE_GALLIUM_LLVMPIPE=yes fi ;; + xswr) + swr_llvm_check "swr" + + AC_MSG_CHECKING([whether $CXX supports c++11/AVX/AVX2]) + SWR_AVX_CXXFLAGS="-mavx" + SWR_AVX2_CXXFLAGS="-mavx2 -mfma -mbmi2 -mf16c" + + AC_LANG_PUSH([C++]) + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="-std=c++11 $CXXFLAGS" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],[], + [AC_MSG_ERROR([c++11 compiler support not detected])]) + CXXFLAGS="$save_CXXFLAGS" + + save_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$SWR_AVX_CXXFLAGS $CXXFLAGS" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],[], + [AC_MSG_ERROR([AVX compiler support not detected])]) + CXXFLAGS="$save_CXXFLAGS" + + save_CFLAGS="$CXXFLAGS" + CXXFLAGS="$SWR_AVX2_CXXFLAGS $CXXFLAGS" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],[], + [AC_MSG_ERROR([AVX2 compiler support not detected])]) + CXXFLAGS="$save_CXXFLAGS" + AC_LANG_POP([C++]) + + AC_SUBST([SWR_AVX_CXXFLAGS]) + AC_SUBST([SWR_AVX2_CXXFLAGS]) + + HAVE_GALLIUM_SWR=yes + ;; xvc4) HAVE_GALLIUM_VC4=yes gallium_require_drm "vc4" gallium_require_drm_loader PKG_CHECK_MODULES([SIMPENROSE], [simpenrose], - [USE_VC4_SIMULATOR=yes], [USE_VC4_SIMULATOR=no]) + [USE_VC4_SIMULATOR=yes; + DEFINES="$DEFINES -DUSE_VC4_SIMULATOR"], + [USE_VC4_SIMULATOR=no]) ;; xvirgl) HAVE_GALLIUM_VIRGL=yes @@ -2197,6 +2460,9 @@ dnl in LLVM_LIBS. if test "x$MESA_LLVM" != x0; then + if ! $LLVM_CONFIG --libs ${LLVM_COMPONENTS} >/dev/null; then + AC_MSG_ERROR([Calling ${LLVM_CONFIG} failed]) + fi LLVM_LIBS="`$LLVM_CONFIG --libs ${LLVM_COMPONENTS}`" dnl llvm-config may not give the right answer when llvm is a built as a @@ -2251,6 +2517,10 @@ AM_CONDITIONAL(HAVE_GALLIUM_NOUVEAU, test "x$HAVE_GALLIUM_NOUVEAU" = xyes) AM_CONDITIONAL(HAVE_GALLIUM_FREEDRENO, test "x$HAVE_GALLIUM_FREEDRENO" = xyes) AM_CONDITIONAL(HAVE_GALLIUM_SOFTPIPE, test "x$HAVE_GALLIUM_SOFTPIPE" = xyes) AM_CONDITIONAL(HAVE_GALLIUM_LLVMPIPE, test "x$HAVE_GALLIUM_LLVMPIPE" = xyes) +AM_CONDITIONAL(HAVE_GALLIUM_SWR, test "x$HAVE_GALLIUM_SWR" = xyes) +AM_CONDITIONAL(HAVE_GALLIUM_SWRAST, test "x$HAVE_GALLIUM_SOFTPIPE" = xyes -o \ + "x$HAVE_GALLIUM_LLVMPIPE" = xyes -o \ + "x$HAVE_GALLIUM_SWR" = xyes) AM_CONDITIONAL(HAVE_GALLIUM_VC4, test "x$HAVE_GALLIUM_VC4" = xyes) AM_CONDITIONAL(HAVE_GALLIUM_VIRGL, test "x$HAVE_GALLIUM_VIRGL" = xyes) @@ -2272,12 +2542,16 @@ AM_CONDITIONAL(HAVE_R200_DRI, test x$HAVE_R200_DRI = xyes) AM_CONDITIONAL(HAVE_RADEON_DRI, test x$HAVE_RADEON_DRI = xyes) AM_CONDITIONAL(HAVE_SWRAST_DRI, test x$HAVE_SWRAST_DRI = xyes) +AM_CONDITIONAL(HAVE_INTEL_VULKAN, test "x$HAVE_INTEL_VULKAN" = xyes) + +AM_CONDITIONAL(HAVE_INTEL_DRIVERS, test "x$HAVE_INTEL_VULKAN" = xyes -o \ + "x$HAVE_I965_DRI" = xyes) + AM_CONDITIONAL(NEED_RADEON_DRM_WINSYS, test "x$HAVE_GALLIUM_R300" = xyes -o \ "x$HAVE_GALLIUM_R600" = xyes -o \ "x$HAVE_GALLIUM_RADEONSI" = xyes) -AM_CONDITIONAL(NEED_WINSYS_XLIB, test "x$NEED_WINSYS_XLIB" = xyes) +AM_CONDITIONAL(NEED_WINSYS_XLIB, test "x$enable_glx" = xgallium-xlib) AM_CONDITIONAL(NEED_RADEON_LLVM, test x$NEED_RADEON_LLVM = xyes) -AM_CONDITIONAL(USE_R600_LLVM_COMPILER, test x$USE_R600_LLVM_COMPILER = xyes) AM_CONDITIONAL(HAVE_GALLIUM_COMPUTE, test x$enable_opencl = xyes) AM_CONDITIONAL(HAVE_MESA_LLVM, test x$MESA_LLVM = x1) AM_CONDITIONAL(USE_VC4_SIMULATOR, test x$USE_VC4_SIMULATOR = xyes) @@ -2285,10 +2559,7 @@ if test "x$USE_VC4_SIMULATOR" = xyes -a "x$HAVE_GALLIUM_ILO" = xyes; then AC_MSG_ERROR([VC4 simulator on x86 replaces i965 driver build, so ilo must be disabled.]) fi -AC_SUBST([ELF_LIB]) - AM_CONDITIONAL(HAVE_LIBDRM, test "x$have_libdrm" = xyes) -AM_CONDITIONAL(HAVE_X11_DRIVER, test "x$enable_xlib_glx" = xyes) AM_CONDITIONAL(HAVE_OSMESA, test "x$enable_osmesa" = xyes) AM_CONDITIONAL(HAVE_GALLIUM_OSMESA, test "x$enable_gallium_osmesa" = xyes) @@ -2322,6 +2593,27 @@ AC_SUBST([XA_MINOR], $XA_MINOR) AC_SUBST([XA_TINY], $XA_TINY) AC_SUBST([XA_VERSION], "$XA_MAJOR.$XA_MINOR.$XA_TINY") +AC_ARG_ENABLE(valgrind, + [AS_HELP_STRING([--enable-valgrind], + [Build mesa with valgrind support (default: auto)])], + [VALGRIND=$enableval], [VALGRIND=auto]) +if test "x$VALGRIND" != xno; then + PKG_CHECK_MODULES(VALGRIND, [valgrind], [have_valgrind=yes], [have_valgrind=no]) +fi +AC_MSG_CHECKING([whether to enable Valgrind support]) +if test "x$VALGRIND" = xauto; then + VALGRIND="$have_valgrind" +fi + +if test "x$VALGRIND" = "xyes"; then + if ! test "x$have_valgrind" = xyes; then + AC_MSG_ERROR([Valgrind support required but not present]) + fi + AC_DEFINE([HAVE_VALGRIND], 1, [Use valgrind intrinsics to suppress false warnings]) +fi + +AC_MSG_RESULT([$VALGRIND]) + dnl Restore LDFLAGS and CPPFLAGS LDFLAGS="$_SAVE_LDFLAGS" CPPFLAGS="$_SAVE_CPPFLAGS" @@ -2339,6 +2631,7 @@ CXXFLAGS="$CXXFLAGS $USER_CXXFLAGS" dnl Substitute the config AC_CONFIG_FILES([Makefile src/Makefile + src/compiler/Makefile src/egl/Makefile src/egl/main/egl.pc src/egl/wayland/wayland-drm/Makefile @@ -2361,6 +2654,7 @@ AC_CONFIG_FILES([Makefile src/gallium/drivers/rbug/Makefile src/gallium/drivers/softpipe/Makefile src/gallium/drivers/svga/Makefile + src/gallium/drivers/swr/Makefile src/gallium/drivers/trace/Makefile src/gallium/drivers/vc4/Makefile src/gallium/drivers/virgl/Makefile @@ -2408,11 +2702,14 @@ AC_CONFIG_FILES([Makefile src/gallium/winsys/virgl/vtest/Makefile src/gbm/Makefile src/gbm/main/gbm.pc - src/glsl/Makefile src/glx/Makefile src/glx/apple/Makefile src/glx/tests/Makefile src/gtest/Makefile + src/intel/Makefile + src/intel/genxml/Makefile + src/intel/isl/Makefile + src/intel/vulkan/Makefile src/loader/Makefile src/mapi/Makefile src/mapi/es1api/glesv1_cm.pc @@ -2439,6 +2736,14 @@ AC_CONFIG_FILES([Makefile AC_OUTPUT +# Fix up dependencies in *.Plo files, where we changed the extension of a +# source file +$SED -i -e 's/brw_blorp.cpp/brw_blorp.c/' src/mesa/drivers/dri/i965/.deps/brw_blorp.Plo +$SED -i -e 's/gen6_blorp.cpp/gen6_blorp.c/' src/mesa/drivers/dri/i965/.deps/gen6_blorp.Plo +$SED -i -e 's/gen7_blorp.cpp/gen7_blorp.c/' src/mesa/drivers/dri/i965/.deps/gen7_blorp.Plo +$SED -i -e 's/gen8_blorp.cpp/gen8_blorp.c/' src/mesa/drivers/dri/i965/.deps/gen8_blorp.Plo + + dnl dnl Output some configuration info for the user dnl @@ -2477,12 +2782,15 @@ if test "x$enable_dri" != xno; then echo " DRI driver dir: $DRI_DRIVER_INSTALL_DIR" fi -case "x$enable_glx$enable_xlib_glx" in -xyesyes) +case "x$enable_glx" in +xdri) + echo " GLX: DRI-based" + ;; +xxlib) echo " GLX: Xlib-based" ;; -xyesno) - echo " GLX: DRI-based" +xgallium-xlib) + echo " GLX: Xlib-based (Gallium)" ;; *) echo " GLX: $enable_glx" @@ -2506,6 +2814,15 @@ if test "$enable_egl" = yes; then echo " EGL drivers: $egl_drivers" fi +# Vulkan +echo "" +if test "x$VULKAN_DRIVERS" != x; then + echo " Vulkan drivers: $VULKAN_DRIVERS" + echo " Vulkan ICD dir: $VULKAN_ICD_INSTALL_DIR" +else + echo " Vulkan drivers: no" +fi + echo "" if test "x$MESA_LLVM" = x1; then echo " llvm: yes"