X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=configure.ac;h=cfc97d9f0613fa7d9a7f51d1b706fd458e3a0688;hb=47ef8c850352f13a28bc9ea7aac622322f1b0226;hp=4b11273146fc1bbce29e8dc85f0ec8a7f28c18b0;hpb=de128c19eef5a4a04fadc2ad519f2e6a515ea7b5;p=mesa.git diff --git a/configure.ac b/configure.ac index 4b11273146f..cfc97d9f061 100644 --- a/configure.ac +++ b/configure.ac @@ -74,13 +74,12 @@ AC_SUBST([OPENCL_VERSION]) # in the first entry. LIBDRM_REQUIRED=2.4.75 LIBDRM_RADEON_REQUIRED=2.4.71 -LIBDRM_AMDGPU_REQUIRED=2.4.79 +LIBDRM_AMDGPU_REQUIRED=2.4.82 LIBDRM_INTEL_REQUIRED=2.4.75 LIBDRM_NVVIEUX_REQUIRED=2.4.66 LIBDRM_NOUVEAU_REQUIRED=2.4.66 LIBDRM_FREEDRENO_REQUIRED=2.4.74 -LIBDRM_VC4_REQUIRED=2.4.69 -LIBDRM_ETNAVIV_REQUIRED=2.4.80 +LIBDRM_ETNAVIV_REQUIRED=2.4.82 dnl Versions for external dependencies DRI2PROTO_REQUIRED=2.8 @@ -89,6 +88,7 @@ LIBOMXIL_BELLAGIO_REQUIRED=0.0 LIBVA_REQUIRED=0.38.0 VDPAU_REQUIRED=1.1 WAYLAND_REQUIRED=1.11 +WAYLAND_PROTOCOLS_REQUIRED=1.8 XCB_REQUIRED=1.9.3 XCBDRI2_REQUIRED=1.8 XCBGLX_REQUIRED=1.8.1 @@ -97,13 +97,13 @@ XSHMFENCE_REQUIRED=1.1 XVMC_REQUIRED=1.0.6 PYTHON_MAKO_REQUIRED=0.8.0 LIBSENSORS_REQUIRED=4.0.0 -ZLIB_REQUIRED=1.2.8 +ZLIB_REQUIRED=1.2.3 dnl LLVM versions LLVM_REQUIRED_GALLIUM=3.3.0 LLVM_REQUIRED_OPENCL=3.6.0 -LLVM_REQUIRED_R600=3.8.0 -LLVM_REQUIRED_RADEONSI=3.8.0 +LLVM_REQUIRED_R600=3.9.0 +LLVM_REQUIRED_RADEONSI=3.9.0 LLVM_REQUIRED_RADV=3.9.0 LLVM_REQUIRED_SWR=3.9.0 @@ -269,7 +269,7 @@ DEFINES="-D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS" AC_SUBST([DEFINES]) android=no case "$host_os" in -*-android) +*-android*) android=yes ;; linux*|*-gnu*|gnu*|cygwin*) @@ -282,86 +282,51 @@ 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" - - if test "x$USE_GNU99" = xyes; then - CFLAGS="$CFLAGS -std=gnu99" - else - CFLAGS="$CFLAGS -std=c99" - fi - - # Enable -Werror=implicit-function-declaration and - # -Werror=missing-prototypes, if available, or otherwise, just - # -Wmissing-prototypes. This is particularly useful to avoid - # generating a loadable driver module that has undefined symbols. - save_CFLAGS="$CFLAGS" - AC_MSG_CHECKING([whether $CC supports -Werror=missing-prototypes]) - CFLAGS="$CFLAGS -Werror=implicit-function-declaration" - CFLAGS="$CFLAGS -Werror=missing-prototypes" - AC_LINK_IFELSE([AC_LANG_PROGRAM()], - AC_MSG_RESULT([yes]), - [CFLAGS="$save_CFLAGS -Wmissing-prototypes"; - AC_MSG_RESULT([no])]) - - # Enable -fvisibility=hidden if using a gcc that supports it - save_CFLAGS="$CFLAGS" - AC_MSG_CHECKING([whether $CC supports -fvisibility=hidden]) - VISIBILITY_CFLAGS="-fvisibility=hidden" - CFLAGS="$CFLAGS $VISIBILITY_CFLAGS" - AC_LINK_IFELSE([AC_LANG_PROGRAM()], AC_MSG_RESULT([yes]), - [VISIBILITY_CFLAGS=""; AC_MSG_RESULT([no])]) - - # Restore CFLAGS; VISIBILITY_CFLAGS are added to it where needed. - CFLAGS=$save_CFLAGS - - # We don't want floating-point math functions to set errno or trap - CFLAGS="$CFLAGS -fno-math-errno -fno-trapping-math" - - # Flags to help ensure that certain portions of the code -- and only those - # portions -- can be built with MSVC: - # - 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 - MSVC2013_COMPAT_CFLAGS="-Werror=pointer-arith" - MSVC2013_COMPAT_CXXFLAGS="-Werror=pointer-arith" - - # Enable -Werror=vla if compiler supports it - save_CFLAGS="$CFLAGS" - AC_MSG_CHECKING([whether $CC supports -Werror=vla]) - CFLAGS="$CFLAGS -Werror=vla" - AC_LINK_IFELSE([AC_LANG_PROGRAM()], - [MSVC2013_COMPAT_CFLAGS="$MSVC2013_COMPAT_CFLAGS -Werror=vla"; - MSVC2013_COMPAT_CXXFLAGS="$MSVC2013_COMPAT_CXXFLAGS -Werror=vla"; - AC_MSG_RESULT([yes])], - AC_MSG_RESULT([no])) - CFLAGS="$save_CFLAGS" -fi -if test "x$GXX" = xyes; then - CXXFLAGS="$CXXFLAGS -Wall" - - # Enable -fvisibility=hidden if using a gcc that supports it - save_CXXFLAGS="$CXXFLAGS" - AC_MSG_CHECKING([whether $CXX supports -fvisibility=hidden]) - VISIBILITY_CXXFLAGS="-fvisibility=hidden" - CXXFLAGS="$CXXFLAGS $VISIBILITY_CXXFLAGS" - AC_LANG_PUSH([C++]) - AC_LINK_IFELSE([AC_LANG_PROGRAM()], AC_MSG_RESULT([yes]), - [VISIBILITY_CXXFLAGS="" ; AC_MSG_RESULT([no])]) - AC_LANG_POP([C++]) +dnl +dnl Check compiler flags +dnl +AX_CHECK_COMPILE_FLAG([-Wall], [CFLAGS="$CFLAGS -Wall"]) +AX_CHECK_COMPILE_FLAG([-Werror=implicit-function-declaration], [CFLAGS="$CFLAGS -Werror=implicit-function-declaration"]) +AX_CHECK_COMPILE_FLAG([-Werror=missing-prototypes], [CFLAGS="$CFLAGS -Werror=missing-prototypes"]) +AX_CHECK_COMPILE_FLAG([-Wmissing-prototypes], [CFLAGS="$CFLAGS -Wmissing-prototypes"]) +AX_CHECK_COMPILE_FLAG([-fno-math-errno], [CFLAGS="$CFLAGS -fno-math-errno"]) +AX_CHECK_COMPILE_FLAG([-fno-trapping-math], [CFLAGS="$CFLAGS -fno-trapping-math"]) +AX_CHECK_COMPILE_FLAG([-fvisibility=hidden], [VISIBILITY_CFLAGS="-fvisibility=hidden"]) - # Restore CXXFLAGS; VISIBILITY_CXXFLAGS are added to it where needed. - CXXFLAGS=$save_CXXFLAGS +dnl +dnl Check C++ compiler flags +dnl +AC_LANG_PUSH([C++]) +AX_CHECK_COMPILE_FLAG([-Wall], [CXXFLAGS="$CXXFLAGS -Wall"]) +AX_CHECK_COMPILE_FLAG([-fno-math-errno], [CXXFLAGS="$CXXFLAGS -fno-math-errno"]) +AX_CHECK_COMPILE_FLAG([-fno-trapping-math], [CXXFLAGS="$CXXFLAGS -fno-trapping-math"]) +AX_CHECK_COMPILE_FLAG([-fvisibility=hidden], [VISIBILITY_CXXFLAGS="-fvisibility=hidden"]) +AC_LANG_POP([C++]) - # We don't want floating-point math functions to set errno or trap - CXXFLAGS="$CXXFLAGS -fno-math-errno -fno-trapping-math" -fi +# Flags to help ensure that certain portions of the code -- and only those +# portions -- can be built with MSVC: +# - 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 +AX_CHECK_COMPILE_FLAG([-Werror=pointer-arith], [MSVC2013_COMPAT_CFLAGS="-Werror=pointer-arith"]) +AX_CHECK_COMPILE_FLAG([-Werror=vla], [MSVC2013_COMPAT_CFLAGS="-Werror=vla"]) +AC_LANG_PUSH([C++]) +AX_CHECK_COMPILE_FLAG([-Werror=pointer-arith], [MSVC2013_COMPAT_CXXFLAGS="-Werror=pointer-arith"]) +AX_CHECK_COMPILE_FLAG([-Werror=vla], [MSVC2013_COMPAT_CXXFLAGS="-Werror=vla"]) +AC_LANG_POP([C++]) AC_SUBST([MSVC2013_COMPAT_CFLAGS]) AC_SUBST([MSVC2013_COMPAT_CXXFLAGS]) +if test "x$GCC" = xyes; then + if test "x$USE_GNU99" = xyes; then + CFLAGS="$CFLAGS -std=gnu99" + else + CFLAGS="$CFLAGS -std=c99" + fi +fi + 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 case "$host_os" in @@ -374,6 +339,10 @@ esac AC_SUBST([VISIBILITY_CFLAGS]) AC_SUBST([VISIBILITY_CXXFLAGS]) +AX_CHECK_COMPILE_FLAG([-Wno-override-init], [WNO_OVERRIDE_INIT="-Wno-override-init"]) # gcc +AX_CHECK_COMPILE_FLAG([-Wno-initializer-overrides], [WNO_OVERRIDE_INIT="-Wno-initializer-overrides"]) # clang +AC_SUBST([WNO_OVERRIDE_INIT]) + dnl dnl Optional flags, check for compiler support dnl @@ -410,8 +379,21 @@ int main() { }]])], GCC_ATOMIC_BUILTINS_SUPPORTED=1) if test "x$GCC_ATOMIC_BUILTINS_SUPPORTED" = x1; then DEFINES="$DEFINES -DUSE_GCC_ATOMIC_BUILTINS" + dnl On some platforms, new-style atomics need a helper library + AC_MSG_CHECKING(whether -latomic is needed) + AC_LINK_IFELSE([AC_LANG_SOURCE([[ + #include + uint64_t v; + int main() { + return (int)__atomic_load_n(&v, __ATOMIC_ACQUIRE); + }]])], GCC_ATOMIC_BUILTINS_NEED_LIBATOMIC=no, GCC_ATOMIC_BUILTINS_NEED_LIBATOMIC=yes) + AC_MSG_RESULT($GCC_ATOMIC_BUILTINS_NEED_LIBATOMIC) + if test "x$GCC_ATOMIC_BUILTINS_NEED_LIBATOMIC" = xyes; then + LIBATOMIC_LIBS="-latomic" + fi fi AM_CONDITIONAL([GCC_ATOMIC_BUILTINS_SUPPORTED], [test x$GCC_ATOMIC_BUILTINS_SUPPORTED = x1]) +AC_SUBST([LIBATOMIC_LIBS]) dnl Check if host supports 64-bit atomics dnl note that lack of support usually results in link (not compile) error @@ -455,7 +437,7 @@ int main () { CFLAGS=$save_CFLAGS AC_ARG_ENABLE(pwr8, - [AS_HELP_STRING([--disable-pwr8-inst], + [AS_HELP_STRING([--disable-pwr8], [disable POWER8-specific instructions])], [enable_pwr8=$enableval], [enable_pwr8=auto]) @@ -724,7 +706,7 @@ dnl Arch/platform-specific settings dnl AC_ARG_ENABLE([asm], [AS_HELP_STRING([--disable-asm], - [disable assembly usage @<:@default=enabled on supported plaforms@:>@])], + [disable assembly usage @<:@default=enabled on supported platforms@:>@])], [enable_asm="$enableval"], [enable_asm=yes] ) @@ -766,6 +748,27 @@ if test "x$enable_asm" = xyes; then ;; esac ;; + powerpc64le) + case "$host_os" in + linux*) + asm_arch=ppc64le + ;; + esac + ;; + aarch64) + case "$host_os" in + linux*) + asm_arch=aarch64 + ;; + esac + ;; + arm) + case "$host_os" in + linux*) + asm_arch=arm + ;; + esac + ;; esac case "$asm_arch" in @@ -781,6 +784,18 @@ if test "x$enable_asm" = xyes; then DEFINES="$DEFINES -DUSE_SPARC_ASM" AC_MSG_RESULT([yes, sparc]) ;; + ppc64le) + DEFINES="$DEFINES -DUSE_PPC64LE_ASM" + AC_MSG_RESULT([yes, ppc64le]) + ;; + aarch64) + DEFINES="$DEFINES -DUSE_AARCH64_ASM" + AC_MSG_RESULT([yes, aarch64]) + ;; + arm) + DEFINES="$DEFINES -DUSE_ARM_ASM" + AC_MSG_RESULT([yes, arm]) + ;; *) AC_MSG_RESULT([no, platform not supported]) ;; @@ -793,6 +808,27 @@ AC_CHECK_HEADER([sys/sysctl.h], [DEFINES="$DEFINES -DHAVE_SYS_SYSCTL_H"]) AC_CHECK_FUNC([strtof], [DEFINES="$DEFINES -DHAVE_STRTOF"]) AC_CHECK_FUNC([mkostemp], [DEFINES="$DEFINES -DHAVE_MKOSTEMP"]) +AC_MSG_CHECKING([whether strtod has locale support]) +AC_LINK_IFELSE([AC_LANG_SOURCE([[ + #define _GNU_SOURCE + #include + #include + #ifdef HAVE_XLOCALE_H + #include + #endif + int main() { + locale_t loc = newlocale(LC_CTYPE_MASK, "C", NULL); + const char *s = "1.0"; + char *end; + double d = strtod_l(s, end, loc); + float f = strtof_l(s, end, loc); + freelocale(loc); + return 0; + }]])], + [DEFINES="$DEFINES -DHAVE_STRTOD_L"]; + AC_MSG_RESULT([yes]), + AC_MSG_RESULT([no])) + dnl Check to see if dlopen is in default libraries (like Solaris, which dnl has it in libc), or if libdl is needed to get it. AC_CHECK_FUNC([dlopen], [DEFINES="$DEFINES -DHAVE_DLOPEN"], @@ -837,6 +873,11 @@ dnl is not valid for that platform. if test "x$android" = xno; then test -z "$PTHREAD_LIBS" && PTHREAD_LIBS="-lpthread" fi +dnl According to the manual when using pthreads, one should add -pthread to +dnl both compile and link-time arguments. +dnl In practise that should be sufficient for all platforms, since any +dnl platforms build with GCC and Clang support the flag. +PTHREAD_LIBS="$PTHREAD_LIBS -pthread" dnl pthread-stubs is mandatory on BSD platforms, due to the nature of the dnl project. Even then there's a notable issue as described in the project README @@ -851,8 +892,6 @@ esac if test "x$pthread_stubs_possible" = xyes; then PKG_CHECK_MODULES(PTHREADSTUBS, pthread-stubs >= 0.4) - AC_SUBST(PTHREADSTUBS_CFLAGS) - AC_SUBST(PTHREADSTUBS_LIBS) fi dnl SELinux awareness. @@ -1066,27 +1105,18 @@ AC_SUBST([LLVM_INCLUDEDIR]) dnl dnl libunwind dnl +PKG_CHECK_EXISTS(libunwind, [HAVE_LIBUNWIND=yes], [HAVE_LIBUNWIND=no]) AC_ARG_ENABLE([libunwind], [AS_HELP_STRING([--enable-libunwind], [Use libunwind for backtracing (default: auto)])], [LIBUNWIND="$enableval"], - [LIBUNWIND="auto"]) - -PKG_CHECK_EXISTS(libunwind, [HAVE_LIBUNWIND=yes], [HAVE_LIBUNWIND=no]) -if test "x$LIBUNWIND" = "xauto"; then - LIBUNWIND="$HAVE_LIBUNWIND" -fi + [LIBUNWIND="$HAVE_LIBUNWIND"]) if test "x$LIBUNWIND" = "xyes"; then PKG_CHECK_MODULES(LIBUNWIND, libunwind) - if test "x$HAVE_LIBUNWIND" != "xyes"; then - AC_MSG_ERROR([libunwind requested but not installed.]) - fi AC_DEFINE(HAVE_LIBUNWIND, 1, [Have libunwind support]) fi -AM_CONDITIONAL(HAVE_LIBUNWIND, [test "x$LIBUNWIND" = xyes]) - dnl Options for APIs AC_ARG_ENABLE([opengl], @@ -1211,9 +1241,14 @@ AC_ARG_ENABLE([vdpau], [enable_vdpau=auto]) AC_ARG_ENABLE([omx], [AS_HELP_STRING([--enable-omx], - [enable OpenMAX library @<:@default=disabled@:>@])], - [enable_omx="$enableval"], - [enable_omx=no]) + [DEPRECATED: Use --enable-omx-bellagio instead @<:@default=auto@:>@])], + [AC_MSG_ERROR([--enable-omx is deprecated. Use --enable-omx-bellagio instead.])], + []) +AC_ARG_ENABLE([omx-bellagio], + [AS_HELP_STRING([--enable-omx-bellagio], + [enable OpenMAX Bellagio library @<:@default=disabled@:>@])], + [enable_omx_bellagio="$enableval"], + [enable_omx_bellagio=no]) AC_ARG_ENABLE([va], [AS_HELP_STRING([--enable-va], [enable va library @<:@default=auto@:>@])], @@ -1245,7 +1280,7 @@ GALLIUM_DRIVERS_DEFAULT="r300,r600,svga,swrast" AC_ARG_WITH([gallium-drivers], [AS_HELP_STRING([--with-gallium-drivers@<:@=DIRS...@:>@], [comma delimited Gallium drivers list, e.g. - "i915,nouveau,r300,r600,radeonsi,freedreno,svga,swrast,swr,vc4,virgl,etnaviv,imx" + "i915,nouveau,r300,r600,radeonsi,freedreno,pl111,svga,swrast,swr,vc4,virgl,etnaviv,imx" @<:@default=r300,r600,svga,swrast@:>@])], [with_gallium_drivers="$withval"], [with_gallium_drivers="$GALLIUM_DRIVERS_DEFAULT"]) @@ -1264,7 +1299,7 @@ if test "x$enable_opengl" = xno -a \ "x$enable_xa" = xno -a \ "x$enable_xvmc" = xno -a \ "x$enable_vdpau" = xno -a \ - "x$enable_omx" = xno -a \ + "x$enable_omx_bellagio" = xno -a \ "x$enable_va" = xno -a \ "x$enable_opencl" = xno; then AC_MSG_ERROR([at least one API should be enabled]) @@ -1287,6 +1322,9 @@ AM_CONDITIONAL(HAVE_OPENGL_ES2, test "x$enable_gles2" = xyes) AM_CONDITIONAL(NEED_OPENGL_COMMON, test "x$enable_opengl" = xyes -o \ "x$enable_gles1" = xyes -o \ "x$enable_gles2" = xyes) +AM_CONDITIONAL(NEED_KHRPLATFORM, test "x$enable_egl" = xyes -o \ + "x$enable_gles1" = xyes -o \ + "x$enable_gles2" = xyes) # Validate GLX options if test "x$enable_glx" = xyes; then @@ -1367,7 +1405,7 @@ if test "x$enable_libglvnd" = xyes ; then esac PKG_CHECK_MODULES([GLVND], libglvnd >= 0.2.0) - PKG_CHECK_VAR(LIBGLVND_DATADIR, libglvnd, datadir) + LIBGLVND_DATADIR=`$PKG_CONFIG --variable=datadir libglvnd` AC_SUBST([LIBGLVND_DATADIR]) DEFINES="${DEFINES} -DUSE_LIBGLVND=1" @@ -1408,7 +1446,7 @@ AC_SUBST([OSMESA_LIB]) PKG_CHECK_MODULES([LIBDRM], [libdrm >= $LIBDRM_REQUIRED], [have_libdrm=yes], [have_libdrm=no]) if test "x$have_libdrm" = xyes; then - DEFINES="$DEFINES -DHAVE_LIBDRM" + DEFINES="$DEFINES -DHAVE_LIBDRM" fi require_libdrm() { @@ -1541,15 +1579,10 @@ xdri) PKG_CHECK_MODULES([DRI2PROTO], [dri2proto >= $DRI2PROTO_REQUIRED]) GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV libdrm >= $LIBDRM_REQUIRED" + if test x"$enable_dri" = xyes; then dri_modules="$dri_modules xcb-dri2 >= $XCBDRI2_REQUIRED" fi - - if test x"$enable_dri3" = xyes; then - PKG_CHECK_EXISTS([xcb >= $XCB_REQUIRED], [], AC_MSG_ERROR([DRI3 requires xcb >= $XCB_REQUIRED])) - dri3_modules="xcb xcb-dri3 xcb-present xcb-sync xshmfence >= $XSHMFENCE_REQUIRED" - PKG_CHECK_MODULES([XCB_DRI3], [$dri3_modules]) - fi fi if test x"$dri_platform" = xapple ; then DEFINES="$DEFINES -DGLX_USE_APPLEGL" @@ -1638,6 +1671,121 @@ if test "x$enable_glx_read_only_text" = xyes; then DEFINES="$DEFINES -DGLX_X86_READONLY_TEXT" fi +dnl +dnl DEPRECATED: EGL Platforms configuration +dnl +AC_ARG_WITH([egl-platforms], + [AS_HELP_STRING([--with-egl-platforms@<:@=DIRS...@:>@], + [DEPRECATED: use --with-platforms instead@<:@default=auto@:>@])], + [with_egl_platforms="$withval"], + [with_egl_platforms=auto]) + +if test "x$with_egl_platforms" = xauto; then + with_egl_platforms="x11,surfaceless" + if test "x$enable_gbm" = xyes; then + with_egl_platforms="$with_egl_platforms,drm" + fi +else + AC_MSG_WARN([--with-egl-platforms is deprecated. Use --with-platforms instead.]) +fi + +dnl +dnl Platforms configuration +dnl +AC_ARG_WITH([platforms], + [AS_HELP_STRING([--with-platforms@<:@=DIRS...@:>@], + [comma delimited native platforms libEGL/Vulkan/other supports, e.g. + "x11,drm,wayland,surfaceless..." @<:@default=auto@:>@])], + [with_platforms="$withval"], + [with_platforms=auto]) + +# Reuse the autodetection rather than duplicating it. +if test "x$with_platforms" = xauto; then + with_platforms=$with_egl_platforms +fi + +PKG_CHECK_MODULES([WAYLAND_SCANNER], [wayland-scanner], + WAYLAND_SCANNER=`$PKG_CONFIG --variable=wayland_scanner wayland-scanner`, + WAYLAND_SCANNER='') +if test "x$WAYLAND_SCANNER" = x; then + AC_PATH_PROG([WAYLAND_SCANNER], [wayland-scanner], [:]) +fi + +PKG_CHECK_EXISTS([wayland-protocols >= $WAYLAND_PROTOCOLS_REQUIRED], [have_wayland_protocols=yes], [have_wayland_protocols=no]) +if test "x$have_wayland_protocols" = xyes; then + ac_wayland_protocols_pkgdatadir=`$PKG_CONFIG --variable=pkgdatadir wayland-protocols` +fi +AC_SUBST(WAYLAND_PROTOCOLS_DATADIR, $ac_wayland_protocols_pkgdatadir) + +# Do per platform setups and checks +platforms=`IFS=', '; echo $with_platforms` +for plat in $platforms; do + case "$plat" in + wayland) + + PKG_CHECK_MODULES([WAYLAND_CLIENT], [wayland-client >= $WAYLAND_REQUIRED]) + PKG_CHECK_MODULES([WAYLAND_SERVER], [wayland-server >= $WAYLAND_REQUIRED]) + + if test "x$WAYLAND_SCANNER" = "x:"; then + AC_MSG_ERROR([wayland-scanner is needed to compile the wayland platform]) + fi + if test "x$have_wayland_protocols" = xno; then + AC_MSG_ERROR([wayland-protocols >= $WAYLAND_PROTOCOLS_REQUIRED is needed to compile the wayland platform]) + fi + DEFINES="$DEFINES -DHAVE_WAYLAND_PLATFORM -DWL_HIDE_DEPRECATED" + ;; + + x11) + PKG_CHECK_MODULES([XCB_DRI2], [x11-xcb xcb xcb-dri2 >= $XCBDRI2_REQUIRED xcb-xfixes]) + DEFINES="$DEFINES -DHAVE_X11_PLATFORM" + ;; + + drm) + test "x$enable_gbm" = "xno" && + AC_MSG_ERROR([EGL platform drm needs gbm]) + DEFINES="$DEFINES -DHAVE_DRM_PLATFORM" + ;; + + surfaceless) + DEFINES="$DEFINES -DHAVE_SURFACELESS_PLATFORM" + ;; + + android) + PKG_CHECK_MODULES([ANDROID], [cutils hardware sync]) + DEFINES="$DEFINES -DHAVE_ANDROID_PLATFORM" + ;; + + *) + AC_MSG_ERROR([platform '$plat' does not exist]) + ;; + esac + + case "$plat" in + wayland|drm|surfaceless) + require_libdrm "Platform $plat" + ;; + esac +done + +if test "x$enable_glx" != xno; then + if ! echo "$platforms" | grep -q 'x11'; then + AC_MSG_ERROR([Building GLX without the x11 platform is not supported]) + fi +fi + +if test x"$enable_dri3" = xyes; then + DEFINES="$DEFINES -DHAVE_DRI3" + + dri3_modules="x11-xcb xcb >= $XCB_REQUIRED xcb-dri3 xcb-xfixes xcb-present xcb-sync xshmfence >= $XSHMFENCE_REQUIRED" + PKG_CHECK_MODULES([XCB_DRI3], [$dri3_modules]) +fi + +AM_CONDITIONAL(HAVE_PLATFORM_X11, echo "$platforms" | grep -q 'x11') +AM_CONDITIONAL(HAVE_PLATFORM_WAYLAND, echo "$platforms" | grep -q 'wayland') +AM_CONDITIONAL(HAVE_PLATFORM_DRM, echo "$platforms" | grep -q 'drm') +AM_CONDITIONAL(HAVE_PLATFORM_SURFACELESS, echo "$platforms" | grep -q 'surfaceless') +AM_CONDITIONAL(HAVE_PLATFORM_ANDROID, echo "$platforms" | grep -q 'android') + dnl dnl More DRI setup dnl @@ -1674,16 +1822,17 @@ if test "x$with_dri_drivers" = xno; then with_dri_drivers='' fi +# Check for expat +PKG_CHECK_MODULES([EXPAT], [expat],, + [PKG_CHECK_MODULES([EXPAT], [expat21])] +) + dnl If $with_dri_drivers is yes, drivers will be added through dnl platform checks. Set DEFINES and LIB_DEPS if test "x$enable_dri" = xyes; then # Platform specific settings and drivers to build case "$host_os" in linux*) - if test "x$enable_dri3" = xyes; then - DEFINES="$DEFINES -DHAVE_DRI3" - fi - case "$host_cpu" in powerpc* | sparc*) # Build only the drivers for cards that exist on PowerPC/sparc @@ -1711,15 +1860,6 @@ if test "x$enable_dri" = xyes; then with_dri_drivers="i915 i965 nouveau r200 radeon swrast" fi - # Check for expat - PKG_CHECK_MODULES([EXPAT], [expat], [], - # expat version 2.0 and earlier do not provide expat.pc - [AC_CHECK_HEADER([expat.h],[], - [AC_MSG_ERROR([Expat headers required for DRI not found])]) - AC_CHECK_LIB([expat],[XML_ParserCreate],[], - [AC_MSG_ERROR([Expat library required for DRI not found])]) - EXPAT_LIBS="-lexpat"]) - # put all the necessary libs together DRI_LIB_DEPS="$DRI_LIB_DEPS $SELINUX_LIBS $LIBDRM_LIBS $EXPAT_LIBS -lm $PTHREAD_LIBS $DLOPEN_LIBS" fi @@ -1740,12 +1880,11 @@ if test -n "$with_dri_drivers"; then xi915) require_libdrm "i915" HAVE_I915_DRI=yes - PKG_CHECK_MODULES([INTEL], [libdrm >= $LIBDRM_INTEL_REQUIRED libdrm_intel >= $LIBDRM_INTEL_REQUIRED]) + PKG_CHECK_MODULES([I915], [libdrm >= $LIBDRM_INTEL_REQUIRED libdrm_intel >= $LIBDRM_INTEL_REQUIRED]) ;; xi965) require_libdrm "i965" HAVE_I965_DRI=yes - PKG_CHECK_MODULES([INTEL], [libdrm >= $LIBDRM_INTEL_REQUIRED libdrm_intel >= $LIBDRM_INTEL_REQUIRED]) ;; xnouveau) require_libdrm "nouveau" @@ -1839,6 +1978,14 @@ AC_ARG_WITH([vulkan-icddir], [VULKAN_ICD_INSTALL_DIR='${datarootdir}/vulkan/icd.d']) AC_SUBST([VULKAN_ICD_INSTALL_DIR]) +require_x11_dri3() { + if echo "$platforms" | grep -q 'x11'; then + if test "x$enable_dri3" != xyes; then + AC_MSG_ERROR([$1 Vulkan driver requires DRI3 when built with X11]) + fi + fi +} + if test -n "$with_vulkan_drivers"; then if test "x$ac_cv_func_dl_iterate_phdr" = xno; then AC_MSG_ERROR([Vulkan drivers require the dl_iterate_phdr function]) @@ -1849,13 +1996,14 @@ if test -n "$with_vulkan_drivers"; then case "x$driver" in xintel) require_libdrm "ANV" - PKG_CHECK_MODULES([INTEL], [libdrm >= $LIBDRM_INTEL_REQUIRED libdrm_intel >= $LIBDRM_INTEL_REQUIRED]) + require_x11_dri3 "ANV" HAVE_INTEL_VULKAN=yes ;; xradeon) require_libdrm "radv" PKG_CHECK_MODULES([AMDGPU], [libdrm >= $LIBDRM_AMDGPU_REQUIRED libdrm_amdgpu >= $LIBDRM_AMDGPU_REQUIRED]) radeon_llvm_check $LLVM_REQUIRED_RADV "radv" + require_x11_dri3 "radv" HAVE_RADEON_VULKAN=yes ;; *) @@ -1961,23 +2109,47 @@ if test "x$enable_xa" = xyes; then fi AM_CONDITIONAL(HAVE_ST_XA, test "x$enable_xa" = xyes) +if echo $platforms | grep -q "x11"; then + have_xvmc_platform=yes +else + have_xvmc_platform=no +fi + +if echo $platforms | grep -q "x11"; then + have_vdpau_platform=yes +else + have_vdpau_platform=no +fi + +if echo $platforms | grep -q "x11\|drm"; then + have_omx_platform=yes +else + have_omx_platform=no +fi + +if echo $platforms | grep -q "x11\|drm\|wayland"; then + have_va_platform=yes +else + have_va_platform=no +fi + dnl dnl Gallium G3DVL configuration dnl if test -n "$with_gallium_drivers" -a "x$with_gallium_drivers" != xswrast; then - if test "x$enable_xvmc" = xauto; then - PKG_CHECK_EXISTS([xvmc >= $XVMC_REQUIRED], [enable_xvmc=yes], [enable_xvmc=no]) + if test "x$enable_xvmc" = xauto -a "x$have_xvmc_platform" = xyes; then + PKG_CHECK_EXISTS([xvmc >= $XVMC_REQUIRED], [enable_xvmc=yes], [enable_xvmc=no]) fi - if test "x$enable_vdpau" = xauto; then - PKG_CHECK_EXISTS([vdpau >= $VDPAU_REQUIRED], [enable_vdpau=yes], [enable_vdpau=no]) + if test "x$enable_vdpau" = xauto -a "x$have_vdpau_platform" = xyes; then + PKG_CHECK_EXISTS([vdpau >= $VDPAU_REQUIRED], [enable_vdpau=yes], [enable_vdpau=no]) fi - if test "x$enable_omx" = xauto; then - PKG_CHECK_EXISTS([libomxil-bellagio >= $LIBOMXIL_BELLAGIO_REQUIRED], [enable_omx=yes], [enable_omx=no]) + if test "x$enable_omx_bellagio" = xauto -a "x$have_omx_platform" = xyes; then + PKG_CHECK_EXISTS([libomxil-bellagio >= $LIBOMXIL_BELLAGIO_REQUIRED], [enable_omx_bellagio=yes], [enable_omx_bellagio=no]) fi - if test "x$enable_va" = xauto; then + if test "x$enable_va" = xauto -a "x$have_va_platform" = xyes; then PKG_CHECK_EXISTS([libva >= $LIBVA_REQUIRED], [enable_va=yes], [enable_va=no]) fi fi @@ -1985,7 +2157,7 @@ fi if test "x$enable_dri" = xyes -o \ "x$enable_xvmc" = xyes -o \ "x$enable_vdpau" = xyes -o \ - "x$enable_omx" = xyes -o \ + "x$enable_omx_bellagio" = xyes -o \ "x$enable_va" = xyes; then need_gallium_vl=yes fi @@ -1993,38 +2165,45 @@ AM_CONDITIONAL(NEED_GALLIUM_VL, test "x$need_gallium_vl" = xyes) if test "x$enable_xvmc" = xyes -o \ "x$enable_vdpau" = xyes -o \ - "x$enable_omx" = xyes -o \ + "x$enable_omx_bellagio" = xyes -o \ "x$enable_va" = xyes; then - if test x"$enable_dri3" = xyes; then - PKG_CHECK_MODULES([VL], [xcb-dri3 xcb-present xcb-sync xshmfence >= $XSHMFENCE_REQUIRED - xcb-xfixes x11-xcb xcb xcb-dri2 >= $XCBDRI2_REQUIRED]) - else - PKG_CHECK_MODULES([VL], [x11-xcb xcb xcb-dri2 >= $XCBDRI2_REQUIRED]) - fi + PKG_CHECK_MODULES([VL], [x11-xcb xcb xcb-dri2 >= $XCBDRI2_REQUIRED]) need_gallium_vl_winsys=yes fi AM_CONDITIONAL(NEED_GALLIUM_VL_WINSYS, test "x$need_gallium_vl_winsys" = xyes) if test "x$enable_xvmc" = xyes; then + if test "x$have_xvmc_platform" != xyes; then + AC_MSG_ERROR([XVMC requires the x11 platforms]) + fi PKG_CHECK_MODULES([XVMC], [xvmc >= $XVMC_REQUIRED]) gallium_st="$gallium_st xvmc" fi AM_CONDITIONAL(HAVE_ST_XVMC, test "x$enable_xvmc" = xyes) if test "x$enable_vdpau" = xyes; then + if test "x$have_vdpau_platform" != xyes; then + AC_MSG_ERROR([VDPAU requires the x11 platforms]) + fi 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) -if test "x$enable_omx" = xyes; then - PKG_CHECK_MODULES([OMX], [libomxil-bellagio >= $LIBOMXIL_BELLAGIO_REQUIRED]) - gallium_st="$gallium_st omx" +if test "x$enable_omx_bellagio" = xyes; then + if test "x$have_omx_platform" != xyes; then + AC_MSG_ERROR([OMX requires at least one of the x11 or drm platforms]) + fi + PKG_CHECK_MODULES([OMX_BELLAGIO], [libomxil-bellagio >= $LIBOMXIL_BELLAGIO_REQUIRED]) + gallium_st="$gallium_st omx_bellagio" fi -AM_CONDITIONAL(HAVE_ST_OMX, test "x$enable_omx" = xyes) +AM_CONDITIONAL(HAVE_ST_OMX_BELLAGIO, test "x$enable_omx_bellagio" = xyes) if test "x$enable_va" = xyes; then + if test "x$have_va_platform" != xyes; then + AC_MSG_ERROR([VA requires at least one of the x11 drm or wayland platforms]) + fi PKG_CHECK_MODULES([VA], [libva >= $LIBVA_REQUIRED]) gallium_st="$gallium_st va" fi @@ -2141,93 +2320,21 @@ dnl Gallium configuration dnl AM_CONDITIONAL(HAVE_GALLIUM, test -n "$with_gallium_drivers") -dnl -dnl EGL Platforms configuration -dnl -AC_ARG_WITH([egl-platforms], - [AS_HELP_STRING([--with-egl-platforms@<:@=DIRS...@:>@], - [comma delimited native platforms libEGL supports, e.g. - "x11,drm" @<:@default=auto@:>@])], - [with_egl_platforms="$withval"], - [if test "x$enable_egl" = xyes; then - if test "x$enable_gbm" = xyes; then - with_egl_platforms="x11,drm" - else - with_egl_platforms="x11" - fi - else - with_egl_platforms="" - fi]) - -PKG_CHECK_MODULES([WAYLAND_SCANNER], [wayland-scanner], - WAYLAND_SCANNER=`$PKG_CONFIG --variable=wayland_scanner wayland-scanner`, - WAYLAND_SCANNER='') -if test "x$WAYLAND_SCANNER" = x; then - AC_PATH_PROG([WAYLAND_SCANNER], [wayland-scanner], [:]) -fi - -# Do per-EGL platform setups and checks -egl_platforms=`IFS=', '; echo $with_egl_platforms` -for plat in $egl_platforms; do - case "$plat" in - wayland) - - PKG_CHECK_MODULES([WAYLAND], [wayland-client >= $WAYLAND_REQUIRED wayland-server >= $WAYLAND_REQUIRED]) - - if test "x$WAYLAND_SCANNER" = "x:"; then - AC_MSG_ERROR([wayland-scanner is needed to compile the wayland egl platform]) - fi - ;; - - x11) - PKG_CHECK_MODULES([XCB_DRI2], [x11-xcb xcb xcb-dri2 >= $XCBDRI2_REQUIRED xcb-xfixes]) - ;; - - drm) - test "x$enable_gbm" = "xno" && - AC_MSG_ERROR([EGL platform drm needs gbm]) - ;; - - surfaceless) - ;; - - android) - PKG_CHECK_MODULES([ANDROID], [cutils hardware sync]) - ;; - - *) - AC_MSG_ERROR([EGL platform '$plat' does not exist]) - ;; - esac - - case "$plat" in - wayland|drm|surfaceless) - require_libdrm "Platform $plat" - ;; - esac -done - # libEGL wants to default to the first platform specified in # ./configure. parse that here. -if test "x$egl_platforms" != "x"; then - FIRST_PLATFORM_CAPS=`echo $egl_platforms | sed 's| .*||' | tr '[[a-z]]' '[[A-Z]]'` +if test "x$platforms" != "x"; then + FIRST_PLATFORM_CAPS=`echo $platforms | sed 's| .*||' | tr '[[a-z]]' '[[A-Z]]'` EGL_NATIVE_PLATFORM="_EGL_PLATFORM_$FIRST_PLATFORM_CAPS" else EGL_NATIVE_PLATFORM="_EGL_INVALID_PLATFORM" fi -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_ANDROID, echo "$egl_platforms" | grep -q 'android') - AC_SUBST([EGL_NATIVE_PLATFORM]) AC_SUBST([EGL_CFLAGS]) # If we don't have the X11 platform, set this define so we don't try to include # the X11 headers. -if ! echo "$egl_platforms" | grep -q 'x11'; then +if ! echo "$platforms" | grep -q 'x11'; then DEFINES="$DEFINES -DMESA_EGL_NO_X11_HEADERS" GL_PC_CFLAGS="$GL_PC_CFLAGS -DMESA_EGL_NO_X11_HEADERS" fi @@ -2253,15 +2360,15 @@ AC_ARG_WITH([vdpau-libdir], [VDPAU_LIB_INSTALL_DIR='${libdir}/vdpau']) AC_SUBST([VDPAU_LIB_INSTALL_DIR]) -dnl Directory for OMX libs +dnl Directory for OMX_BELLAGIO libs -AC_ARG_WITH([omx-libdir], - [AS_HELP_STRING([--with-omx-libdir=DIR], - [directory for the OMX libraries])], - [OMX_LIB_INSTALL_DIR="$withval"], - [OMX_LIB_INSTALL_DIR=`$PKG_CONFIG --exists libomxil-bellagio && \ - $PKG_CONFIG --define-variable=libdir=\$libdir --variable=pluginsdir libomxil-bellagio`]) -AC_SUBST([OMX_LIB_INSTALL_DIR]) +AC_ARG_WITH([omx-bellagio-libdir], + [AS_HELP_STRING([--with-omx-bellagio-libdir=DIR], + [directory for the OMX_BELLAGIO libraries])], + [OMX_BELLAGIO_LIB_INSTALL_DIR="$withval"], + [OMX_BELLAGIO_LIB_INSTALL_DIR=`$PKG_CONFIG --exists libomxil-bellagio && \ + $PKG_CONFIG --define-variable=libdir=\$libdir --variable=pluginsdir libomxil-bellagio`]) +AC_SUBST([OMX_BELLAGIO_LIB_INSTALL_DIR]) dnl Directory for VA libs @@ -2279,6 +2386,15 @@ AC_ARG_WITH([d3d-libdir], [D3D_DRIVER_INSTALL_DIR="${libdir}/d3d"]) AC_SUBST([D3D_DRIVER_INSTALL_DIR]) +dnl Architectures to build SWR library for + +AC_ARG_WITH([swr-archs], + [AS_HELP_STRING([--with-swr-archs@<:@=DIRS...@:>@], + [comma delimited swr architectures list, e.g. + "avx,avx2,knl,skx" @<:@default="avx,avx2"@:>@])], + [with_swr_archs="$withval"], + [with_swr_archs="avx,avx2"]) + dnl dnl r300 doesn't strictly require LLVM, but for performance reasons we dnl highly recommend LLVM usage. So require it at least on x86 and x86_64 @@ -2297,13 +2413,13 @@ dnl DRM is needed by X, Wayland, and offscreen rendering. dnl Surfaceless is an alternative for the last one. dnl require_basic_egl() { - case "$with_egl_platforms" in + case "$with_platforms" in *drm*|*surfaceless*) ;; *) AC_MSG_ERROR([$1 requires one of these: - 1) --with-egl-platforms=drm (X, Wayland, offscreen rendering based on DRM) - 2) --with-egl-platforms=surfaceless (offscreen only) + 1) --with-platforms=drm (X, Wayland, offscreen rendering based on DRM) + 2) --with-platforms=surfaceless (offscreen only) Recommended options: drm,x11]) ;; esac @@ -2359,7 +2475,7 @@ if test -n "$with_gallium_drivers"; then ;; xi915) HAVE_GALLIUM_I915=yes - PKG_CHECK_MODULES([INTEL], [libdrm >= $LIBDRM_INTEL_REQUIRED libdrm_intel >= $LIBDRM_INTEL_REQUIRED]) + PKG_CHECK_MODULES([I915], [libdrm >= $LIBDRM_INTEL_REQUIRED libdrm_intel >= $LIBDRM_INTEL_REQUIRED]) require_libdrm "Gallium i915" ;; xr300) @@ -2416,26 +2532,60 @@ if test -n "$with_gallium_drivers"; then xswr) llvm_require_version $LLVM_REQUIRED_SWR "swr" - swr_require_cxx_feature_flags "C++14" "__cplusplus >= 201402L" \ - "-std=c++14" \ - SWR_CXX14_CXXFLAGS - AC_SUBST([SWR_CXX14_CXXFLAGS]) + swr_require_cxx_feature_flags "C++11" "__cplusplus >= 201103L" \ + ",-std=c++11" \ + SWR_CXX11_CXXFLAGS + AC_SUBST([SWR_CXX11_CXXFLAGS]) swr_require_cxx_feature_flags "AVX" "defined(__AVX__)" \ - ",-mavx,-march=core-avx" \ + ",-target-cpu=sandybridge,-mavx,-march=core-avx,-tp=sandybridge" \ SWR_AVX_CXXFLAGS AC_SUBST([SWR_AVX_CXXFLAGS]) - swr_require_cxx_feature_flags "AVX2" "defined(__AVX2__)" \ - ",-mavx2 -mfma -mbmi2 -mf16c,-march=core-avx2" \ - SWR_AVX2_CXXFLAGS - AC_SUBST([SWR_AVX2_CXXFLAGS]) + swr_archs=`IFS=', '; echo $with_swr_archs` + for arch in $swr_archs; do + case "x$arch" in + xavx) + HAVE_SWR_AVX=yes + ;; + xavx2) + swr_require_cxx_feature_flags "AVX2" "defined(__AVX2__)" \ + ",-target-cpu=haswell,-mavx2 -mfma -mbmi2 -mf16c,-march=core-avx2,-tp=haswell" \ + SWR_AVX2_CXXFLAGS + AC_SUBST([SWR_AVX2_CXXFLAGS]) + HAVE_SWR_AVX2=yes + ;; + xknl) + swr_require_cxx_feature_flags "KNL" "defined(__AVX512F__) && defined(__AVX512ER__)" \ + ",-target-cpu=mic-knl,-march=knl,-xMIC-AVX512" \ + SWR_KNL_CXXFLAGS + AC_SUBST([SWR_KNL_CXXFLAGS]) + HAVE_SWR_KNL=yes + ;; + xskx) + swr_require_cxx_feature_flags "SKX" "defined(__AVX512F__) && defined(__AVX512BW__)" \ + ",-target-cpu=x86-skylake,-march=skylake-avx512,-xCORE-AVX512" \ + SWR_SKX_CXXFLAGS + AC_SUBST([SWR_SKX_CXXFLAGS]) + HAVE_SWR_SKX=yes + ;; + *) + AC_MSG_ERROR([unknown SWR build architecture '$arch']) + ;; + esac + done + + if test "x$HAVE_SWR_AVX" != xyes -a \ + "x$HAVE_SWR_AVX2" != xyes -a \ + "x$HAVE_SWR_KNL" != xyes -a \ + "x$HAVE_SWR_SKX" != xyes; then + AC_MSG_ERROR([swr enabled but no swr architectures selected]) + fi HAVE_GALLIUM_SWR=yes ;; xvc4) HAVE_GALLIUM_VC4=yes - PKG_CHECK_MODULES([VC4], [libdrm >= $LIBDRM_VC4_REQUIRED libdrm_vc4 >= $LIBDRM_VC4_REQUIRED]) require_libdrm "vc4" PKG_CHECK_MODULES([SIMPENROSE], [simpenrose], @@ -2443,10 +2593,15 @@ if test -n "$with_gallium_drivers"; then DEFINES="$DEFINES -DUSE_VC4_SIMULATOR"], [USE_VC4_SIMULATOR=no]) ;; + xpl111) + HAVE_GALLIUM_PL111=yes + ;; xvirgl) HAVE_GALLIUM_VIRGL=yes require_libdrm "virgl" - require_basic_egl "virgl" + if test "x$enable_egl" = xyes; then + require_basic_egl "virgl" + fi ;; *) AC_MSG_ERROR([Unknown Gallium driver: $driver]) @@ -2455,17 +2610,30 @@ if test -n "$with_gallium_drivers"; then done fi +# XXX: Keep in sync with LLVM_REQUIRED_SWR +AM_CONDITIONAL(SWR_INVALID_LLVM_VERSION, test "x$LLVM_VERSION" != x3.9.0 -a \ + "x$LLVM_VERSION" != x3.9.1) + if test "x$enable_llvm" = "xyes" -a "$with_gallium_drivers"; then llvm_require_version $LLVM_REQUIRED_GALLIUM "gallium" llvm_add_default_components "gallium" fi +AM_CONDITIONAL(HAVE_SWR_AVX, test "x$HAVE_SWR_AVX" = xyes) +AM_CONDITIONAL(HAVE_SWR_AVX2, test "x$HAVE_SWR_AVX2" = xyes) +AM_CONDITIONAL(HAVE_SWR_KNL, test "x$HAVE_SWR_KNL" = xyes) +AM_CONDITIONAL(HAVE_SWR_SKX, test "x$HAVE_SWR_SKX" = xyes) + dnl We need to validate some needed dependencies for renderonly drivers. if test "x$HAVE_GALLIUM_ETNAVIV" != xyes -a "x$HAVE_GALLIUM_IMX" = xyes ; then AC_MSG_ERROR([Building with imx requires etnaviv]) fi +if test "x$HAVE_GALLIUM_VC4" != xyes -a "x$HAVE_GALLIUM_PL111" = xyes ; then + AC_MSG_ERROR([Building with pl111 requires vc4]) +fi + dnl dnl Set defines and buildtime variables only when using LLVM. dnl @@ -2488,35 +2656,37 @@ if test "x$enable_llvm" = xyes; then fi LLVM_LIBS="`$LLVM_CONFIG --libs ${LLVM_COMPONENTS}`" - dnl llvm-config may not give the right answer when llvm is a built as a - dnl single shared library, so we must work the library name out for - dnl ourselves. - dnl (See https://llvm.org/bugs/show_bug.cgi?id=6823) if test "x$enable_llvm_shared_libs" = xyes; then - dnl We can't use $LLVM_VERSION because it has 'svn' stripped out, - LLVM_SO_NAME=LLVM-`$LLVM_CONFIG --version` - AS_IF([test -f "$LLVM_LIBDIR/lib$LLVM_SO_NAME.$IMP_LIB_EXT"], [llvm_have_one_so=yes]) - - if test "x$llvm_have_one_so" = xyes; then - dnl LLVM was built using auto*, so there is only one shared object. - LLVM_LIBS="-l$LLVM_SO_NAME" - else - dnl If LLVM was built with CMake, there will be one shared object per - dnl component. - AS_IF([test ! -f "$LLVM_LIBDIR/libLLVMTarget.$IMP_LIB_EXT"], - [AC_MSG_ERROR([Could not find llvm shared libraries: - Please make sure you have built llvm with the --enable-shared option - and that your llvm libraries are installed in $LLVM_LIBDIR - If you have installed your llvm libraries to a different directory you - can use the --with-llvm-prefix= configure flag to specify this directory. - NOTE: Mesa is attempting to use llvm shared libraries by default. - If you do not want to build with llvm shared libraries and instead want to - use llvm static libraries then add --disable-llvm-shared-libs to your configure - invocation and rebuild.])]) - - dnl We don't need to update LLVM_LIBS in this case because the LLVM - dnl install uses a shared object for each component and we have - dnl already added all of these objects to LLVM_LIBS. + if test $LLVM_VERSION_MAJOR -lt 4 -o "`$LLVM_CONFIG --shared-mode ${LLVM_COMPONENTS}`" = static; then + dnl llvm-config may not give the right answer when llvm is a built as a + dnl single shared library, so we must work the library name out for + dnl ourselves. + dnl (See https://llvm.org/bugs/show_bug.cgi?id=6823) + dnl We can't use $LLVM_VERSION because it has 'svn' stripped out, + LLVM_SO_NAME=LLVM-`$LLVM_CONFIG --version` + AS_IF([test -f "$LLVM_LIBDIR/lib$LLVM_SO_NAME.$IMP_LIB_EXT"], [llvm_have_one_so=yes]) + + if test "x$llvm_have_one_so" = xyes; then + dnl LLVM was built using auto*, so there is only one shared object. + LLVM_LIBS="-l$LLVM_SO_NAME" + else + dnl If LLVM was built with CMake, there will be one shared object per + dnl component. + AS_IF([test ! -f "$LLVM_LIBDIR/libLLVMTarget.$IMP_LIB_EXT"], + [AC_MSG_ERROR([Could not find llvm shared libraries: + Please make sure you have built llvm with the --enable-shared option + and that your llvm libraries are installed in $LLVM_LIBDIR + If you have installed your llvm libraries to a different directory you + can use the --with-llvm-prefix= configure flag to specify this directory. + NOTE: Mesa is attempting to use llvm shared libraries by default. + If you do not want to build with llvm shared libraries and instead want to + use llvm static libraries then add --disable-llvm-shared-libs to your configure + invocation and rebuild.])]) + + dnl We don't need to update LLVM_LIBS in this case because the LLVM + dnl install uses a shared object for each component and we have + dnl already added all of these objects to LLVM_LIBS. + fi fi else AC_MSG_WARN([Building mesa with statically linked LLVM may cause compilation issues]) @@ -2530,11 +2700,11 @@ fi AM_CONDITIONAL(HAVE_GALLIUM_SVGA, test "x$HAVE_GALLIUM_SVGA" = xyes) AM_CONDITIONAL(HAVE_GALLIUM_I915, test "x$HAVE_GALLIUM_I915" = xyes) +AM_CONDITIONAL(HAVE_GALLIUM_PL111, test "x$HAVE_GALLIUM_PL111" = xyes) AM_CONDITIONAL(HAVE_GALLIUM_R300, test "x$HAVE_GALLIUM_R300" = xyes) AM_CONDITIONAL(HAVE_GALLIUM_R600, test "x$HAVE_GALLIUM_R600" = xyes) AM_CONDITIONAL(HAVE_GALLIUM_RADEONSI, test "x$HAVE_GALLIUM_RADEONSI" = xyes) -AM_CONDITIONAL(HAVE_GALLIUM_RADEON_COMMON, test "x$HAVE_GALLIUM_R600" = xyes -o \ - "x$HAVE_GALLIUM_RADEONSI" = xyes) +AM_CONDITIONAL(HAVE_GALLIUM_RADEON_COMMON, test "x$HAVE_GALLIUM_RADEONSI" = xyes) 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_ETNAVIV, test "x$HAVE_GALLIUM_ETNAVIV" = xyes) @@ -2569,8 +2739,7 @@ AM_CONDITIONAL(HAVE_SWRAST_DRI, test x$HAVE_SWRAST_DRI = xyes) AM_CONDITIONAL(HAVE_RADEON_VULKAN, test "x$HAVE_RADEON_VULKAN" = xyes) AM_CONDITIONAL(HAVE_INTEL_VULKAN, test "x$HAVE_INTEL_VULKAN" = xyes) -AM_CONDITIONAL(HAVE_AMD_DRIVERS, test "x$HAVE_GALLIUM_R600" = xyes -o \ - "x$HAVE_GALLIUM_RADEONSI" = xyes -o \ +AM_CONDITIONAL(HAVE_AMD_DRIVERS, test "x$HAVE_GALLIUM_RADEONSI" = xyes -o \ "x$HAVE_RADEON_VULKAN" = xyes) AM_CONDITIONAL(HAVE_INTEL_DRIVERS, test "x$HAVE_INTEL_VULKAN" = xyes -o \ @@ -2593,6 +2762,9 @@ AM_CONDITIONAL(HAVE_COMMON_OSMESA, test "x$enable_osmesa" = xyes -o \ AM_CONDITIONAL(HAVE_X86_ASM, test "x$asm_arch" = xx86 -o "x$asm_arch" = xx86_64) AM_CONDITIONAL(HAVE_X86_64_ASM, test "x$asm_arch" = xx86_64) AM_CONDITIONAL(HAVE_SPARC_ASM, test "x$asm_arch" = xsparc) +AM_CONDITIONAL(HAVE_PPC64LE_ASM, test "x$asm_arch" = xppc64le) +AM_CONDITIONAL(HAVE_AARCH64_ASM, test "x$asm_arch" = xaarch64) +AM_CONDITIONAL(HAVE_ARM_ASM, test "x$asm_arch" = xarm) AC_SUBST([NINE_MAJOR], 1) AC_SUBST([NINE_MINOR], 0) @@ -2629,18 +2801,18 @@ AC_ARG_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]) + 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" + 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]) + 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]) @@ -2661,113 +2833,118 @@ CXXFLAGS="$CXXFLAGS $USER_CXXFLAGS" dnl Substitute the config AC_CONFIG_FILES([Makefile - src/Makefile - src/amd/Makefile - src/amd/vulkan/Makefile - src/compiler/Makefile - src/egl/Makefile - src/egl/main/egl.pc - src/egl/wayland/wayland-drm/Makefile - src/egl/wayland/wayland-egl/Makefile - src/egl/wayland/wayland-egl/wayland-egl.pc - src/gallium/Makefile - src/gallium/auxiliary/Makefile - src/gallium/auxiliary/pipe-loader/Makefile - src/gallium/drivers/freedreno/Makefile - src/gallium/drivers/ddebug/Makefile - src/gallium/drivers/i915/Makefile - src/gallium/drivers/llvmpipe/Makefile - src/gallium/drivers/noop/Makefile - src/gallium/drivers/nouveau/Makefile - src/gallium/drivers/r300/Makefile - src/gallium/drivers/r600/Makefile - src/gallium/drivers/radeon/Makefile - src/gallium/drivers/radeonsi/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/etnaviv/Makefile - src/gallium/drivers/imx/Makefile - src/gallium/drivers/vc4/Makefile - src/gallium/drivers/virgl/Makefile - src/gallium/state_trackers/clover/Makefile - src/gallium/state_trackers/dri/Makefile - src/gallium/state_trackers/glx/xlib/Makefile - src/gallium/state_trackers/nine/Makefile - src/gallium/state_trackers/omx/Makefile - src/gallium/state_trackers/osmesa/Makefile - src/gallium/state_trackers/va/Makefile - src/gallium/state_trackers/vdpau/Makefile - src/gallium/state_trackers/xa/Makefile - src/gallium/state_trackers/xvmc/Makefile - src/gallium/targets/d3dadapter9/Makefile - src/gallium/targets/d3dadapter9/d3d.pc - src/gallium/targets/dri/Makefile - src/gallium/targets/libgl-xlib/Makefile - src/gallium/targets/omx/Makefile - src/gallium/targets/opencl/Makefile - src/gallium/targets/opencl/mesa.icd - src/gallium/targets/osmesa/Makefile - src/gallium/targets/osmesa/osmesa.pc - src/gallium/targets/pipe-loader/Makefile - src/gallium/targets/va/Makefile - src/gallium/targets/vdpau/Makefile - src/gallium/targets/xa/Makefile - src/gallium/targets/xa/xatracker.pc - src/gallium/targets/xvmc/Makefile - src/gallium/tests/trivial/Makefile - src/gallium/tests/unit/Makefile - src/gallium/winsys/etnaviv/drm/Makefile - src/gallium/winsys/imx/drm/Makefile - src/gallium/winsys/freedreno/drm/Makefile - src/gallium/winsys/i915/drm/Makefile - src/gallium/winsys/nouveau/drm/Makefile - src/gallium/winsys/radeon/drm/Makefile - src/gallium/winsys/amdgpu/drm/Makefile - src/gallium/winsys/svga/drm/Makefile - src/gallium/winsys/sw/dri/Makefile - src/gallium/winsys/sw/kms-dri/Makefile - src/gallium/winsys/sw/null/Makefile - src/gallium/winsys/sw/wrapper/Makefile - src/gallium/winsys/sw/xlib/Makefile - src/gallium/winsys/vc4/drm/Makefile - src/gallium/winsys/virgl/drm/Makefile - src/gallium/winsys/virgl/vtest/Makefile - src/gbm/Makefile - src/gbm/main/gbm.pc - src/glx/Makefile - src/glx/apple/Makefile - src/glx/tests/Makefile - src/glx/windows/Makefile - src/glx/windows/windowsdriproto.pc - src/gtest/Makefile - src/intel/Makefile - src/loader/Makefile - src/mapi/Makefile - src/mapi/es1api/glesv1_cm.pc - src/mapi/es2api/glesv2.pc - src/mapi/glapi/gen/Makefile - src/mesa/Makefile - src/mesa/gl.pc - src/mesa/drivers/dri/dri.pc - src/mesa/drivers/dri/common/Makefile - src/mesa/drivers/dri/common/xmlpool/Makefile - src/mesa/drivers/dri/i915/Makefile - src/mesa/drivers/dri/i965/Makefile - src/mesa/drivers/dri/Makefile - src/mesa/drivers/dri/nouveau/Makefile - src/mesa/drivers/dri/r200/Makefile - src/mesa/drivers/dri/radeon/Makefile - src/mesa/drivers/dri/swrast/Makefile - src/mesa/drivers/osmesa/Makefile - src/mesa/drivers/osmesa/osmesa.pc - src/mesa/drivers/x11/Makefile - src/mesa/main/tests/Makefile - src/util/Makefile - src/util/tests/hash_table/Makefile - src/vulkan/Makefile]) + src/Makefile + src/amd/Makefile + src/amd/vulkan/Makefile + src/broadcom/Makefile + src/compiler/Makefile + src/egl/Makefile + src/egl/main/egl.pc + src/egl/wayland/wayland-drm/Makefile + src/egl/wayland/wayland-egl/Makefile + src/egl/wayland/wayland-egl/wayland-egl.pc + src/gallium/Makefile + src/gallium/auxiliary/Makefile + src/gallium/auxiliary/pipe-loader/Makefile + src/gallium/drivers/freedreno/Makefile + src/gallium/drivers/ddebug/Makefile + src/gallium/drivers/i915/Makefile + src/gallium/drivers/llvmpipe/Makefile + src/gallium/drivers/noop/Makefile + src/gallium/drivers/nouveau/Makefile + src/gallium/drivers/pl111/Makefile + src/gallium/drivers/r300/Makefile + src/gallium/drivers/r600/Makefile + src/gallium/drivers/radeon/Makefile + src/gallium/drivers/radeonsi/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/etnaviv/Makefile + src/gallium/drivers/imx/Makefile + src/gallium/drivers/vc4/Makefile + src/gallium/drivers/virgl/Makefile + src/gallium/state_trackers/clover/Makefile + src/gallium/state_trackers/dri/Makefile + src/gallium/state_trackers/glx/xlib/Makefile + src/gallium/state_trackers/nine/Makefile + src/gallium/state_trackers/omx_bellagio/Makefile + src/gallium/state_trackers/osmesa/Makefile + src/gallium/state_trackers/va/Makefile + src/gallium/state_trackers/vdpau/Makefile + src/gallium/state_trackers/xa/Makefile + src/gallium/state_trackers/xvmc/Makefile + src/gallium/targets/d3dadapter9/Makefile + src/gallium/targets/d3dadapter9/d3d.pc + src/gallium/targets/dri/Makefile + src/gallium/targets/libgl-xlib/Makefile + src/gallium/targets/omx-bellagio/Makefile + src/gallium/targets/opencl/Makefile + src/gallium/targets/opencl/mesa.icd + src/gallium/targets/osmesa/Makefile + src/gallium/targets/osmesa/osmesa.pc + src/gallium/targets/pipe-loader/Makefile + src/gallium/targets/va/Makefile + src/gallium/targets/vdpau/Makefile + src/gallium/targets/xa/Makefile + src/gallium/targets/xa/xatracker.pc + src/gallium/targets/xvmc/Makefile + src/gallium/tests/trivial/Makefile + src/gallium/tests/unit/Makefile + src/gallium/winsys/etnaviv/drm/Makefile + src/gallium/winsys/imx/drm/Makefile + src/gallium/winsys/freedreno/drm/Makefile + src/gallium/winsys/i915/drm/Makefile + src/gallium/winsys/nouveau/drm/Makefile + src/gallium/winsys/pl111/drm/Makefile + src/gallium/winsys/radeon/drm/Makefile + src/gallium/winsys/amdgpu/drm/Makefile + src/gallium/winsys/svga/drm/Makefile + src/gallium/winsys/sw/dri/Makefile + src/gallium/winsys/sw/kms-dri/Makefile + src/gallium/winsys/sw/null/Makefile + src/gallium/winsys/sw/wrapper/Makefile + src/gallium/winsys/sw/xlib/Makefile + src/gallium/winsys/vc4/drm/Makefile + src/gallium/winsys/virgl/drm/Makefile + src/gallium/winsys/virgl/vtest/Makefile + src/gbm/Makefile + src/gbm/main/gbm.pc + src/glx/Makefile + src/glx/apple/Makefile + src/glx/tests/Makefile + src/glx/windows/Makefile + src/glx/windows/windowsdriproto.pc + src/gtest/Makefile + src/intel/Makefile + src/loader/Makefile + src/mapi/Makefile + src/mapi/es1api/glesv1_cm.pc + src/mapi/es2api/glesv2.pc + src/mapi/glapi/gen/Makefile + src/mesa/Makefile + src/mesa/gl.pc + src/mesa/drivers/dri/dri.pc + src/mesa/drivers/dri/common/Makefile + src/mesa/drivers/dri/i915/Makefile + src/mesa/drivers/dri/i965/Makefile + src/mesa/drivers/dri/Makefile + src/mesa/drivers/dri/nouveau/Makefile + src/mesa/drivers/dri/r200/Makefile + src/mesa/drivers/dri/radeon/Makefile + src/mesa/drivers/dri/swrast/Makefile + src/mesa/drivers/osmesa/Makefile + src/mesa/drivers/osmesa/osmesa.pc + src/mesa/drivers/x11/Makefile + src/mesa/main/tests/Makefile + src/mesa/state_tracker/tests/Makefile + src/util/Makefile + src/util/tests/hash_table/Makefile + src/util/tests/string_buffer/Makefile + src/util/xmlpool/Makefile + src/vulkan/Makefile]) AC_OUTPUT @@ -2775,6 +2952,8 @@ AC_OUTPUT # source file $SED -i -e 's/brw_blorp.cpp/brw_blorp.c/' src/mesa/drivers/dri/i965/.deps/brw_blorp.Plo +rm -f src/compiler/spirv/spirv_info.lo +echo "# dummy" > src/compiler/spirv/.deps/spirv_info.Plo dnl dnl Output some configuration info for the user @@ -2833,7 +3012,6 @@ dnl EGL echo "" echo " EGL: $enable_egl" if test "$enable_egl" = yes; then - echo " EGL platforms: $egl_platforms" egl_drivers="" if test "x$enable_dri" != "xno"; then @@ -2851,6 +3029,8 @@ else echo " GBM: no" fi + echo " EGL/Vulkan/VL platforms: $platforms" + # Vulkan echo "" if test "x$VULKAN_DRIVERS" != x; then @@ -2890,6 +3070,11 @@ else echo " HUD lmsensors: yes" fi +echo "" +if test "x$HAVE_GALLIUM_SWR" != x; then + echo " SWR archs: $swr_archs" +fi + dnl Libraries echo "" echo " Shared libs: $enable_shared" @@ -2897,15 +3082,17 @@ echo " Static libs: $enable_static" echo " Shared-glapi: $enable_shared_glapi" dnl Compiler options -# cleanup the CFLAGS/CXXFLAGS/DEFINES vars +# cleanup the CFLAGS/CXXFLAGS/LDFLAGS/DEFINES vars cflags=`echo $CFLAGS | \ $SED 's/^ *//;s/ */ /;s/ *$//'` cxxflags=`echo $CXXFLAGS | \ $SED 's/^ *//;s/ */ /;s/ *$//'` +ldflags=`echo $LDFLAGS | $SED 's/^ *//;s/ */ /;s/ *$//'` defines=`echo $DEFINES | $SED 's/^ *//;s/ */ /;s/ *$//'` echo "" echo " CFLAGS: $cflags" echo " CXXFLAGS: $cxxflags" +echo " LDFLAGS: $ldflags" echo " Macros: $defines" echo "" if test "x$enable_llvm" = xyes; then