X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=configure.ac;h=df3eb6b29ac6a5b4838619bb37cc43cfa8e0aa4e;hb=ae7aa8dbaf7c65a8b0d86713530a751b7d2f10b0;hp=890a37999cfe94b57c6df04a664c6d0ad506a842;hpb=5398d006de3d2bd668e3fc4b80a3de0c101a3e43;p=mesa.git diff --git a/configure.ac b/configure.ac index 890a37999cf..df3eb6b29ac 100644 --- a/configure.ac +++ b/configure.ac @@ -72,20 +72,18 @@ AC_SUBST([OPENCL_VERSION]) # codifies which drivers need which version of libdrm. Any libdrm # version dependencies in non-driver-specific code should be reflected # in the first entry. -LIBDRM_REQUIRED=2.4.66 +LIBDRM_REQUIRED=2.4.75 LIBDRM_RADEON_REQUIRED=2.4.71 -LIBDRM_AMDGPU_REQUIRED=2.4.63 +LIBDRM_AMDGPU_REQUIRED=2.4.79 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.74 +LIBDRM_ETNAVIV_REQUIRED=2.4.80 dnl Versions for external dependencies DRI2PROTO_REQUIRED=2.8 -DRI3PROTO_REQUIRED=1.0 -PRESENTPROTO_REQUIRED=1.0 GLPROTO_REQUIRED=1.4.14 LIBOMXIL_BELLAGIO_REQUIRED=0.0 LIBVA_REQUIRED=0.38.0 @@ -99,14 +97,15 @@ 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 dnl LLVM versions LLVM_REQUIRED_GALLIUM=3.3.0 LLVM_REQUIRED_OPENCL=3.6.0 -LLVM_REQUIRED_R600=3.6.0 -LLVM_REQUIRED_RADEONSI=3.6.0 +LLVM_REQUIRED_R600=3.9.0 +LLVM_REQUIRED_RADEONSI=3.9.0 LLVM_REQUIRED_RADV=3.9.0 -LLVM_REQUIRED_SWR=3.6.0 +LLVM_REQUIRED_SWR=3.9.0 dnl Check for progs AC_PROG_CPP @@ -125,7 +124,6 @@ LT_PREREQ([2.2]) LT_INIT([disable-static]) AC_CHECK_PROG(RM, rm, [rm -f]) -AC_CHECK_PROG(XXD, xxd, [xxd]) AX_PROG_BISON([], AS_IF([test ! -f "$srcdir/src/compiler/glsl/glcpp/glcpp-parse.c"], @@ -271,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*) @@ -415,6 +413,20 @@ if test "x$GCC_ATOMIC_BUILTINS_SUPPORTED" = x1; then fi AM_CONDITIONAL([GCC_ATOMIC_BUILTINS_SUPPORTED], [test x$GCC_ATOMIC_BUILTINS_SUPPORTED = x1]) +dnl Check if host supports 64-bit atomics +dnl note that lack of support usually results in link (not compile) error +AC_MSG_CHECKING(whether __sync_add_and_fetch_8 is supported) +AC_LINK_IFELSE([AC_LANG_SOURCE([[ +#include +uint64_t v; +int main() { + return __sync_add_and_fetch(&v, (uint64_t)1); +}]])], GCC_64BIT_ATOMICS_SUPPORTED=yes, GCC_64BIT_ATOMICS_SUPPORTED=no) +if test "x$GCC_64BIT_ATOMICS_SUPPORTED" != xyes; then + DEFINES="$DEFINES -DMISSING_64BIT_ATOMICS" +fi +AC_MSG_RESULT($GCC_64BIT_ATOMICS_SUPPORTED) + dnl Check for Endianness AC_C_BIGENDIAN( little_endian=no, @@ -501,6 +513,12 @@ AC_ARG_ENABLE([profile], [enable_profile=no] ) +AC_ARG_ENABLE([sanitize], + [AS_HELP_STRING([--enable-sanitize@<:@=address|undefined@:>@], + [enable code sanitizer @<:@default=disabled@:>@])], + [enable_sanitize="$enableval"], + [enable_sanitize=no]) + if test "x$enable_profile" = xyes; then DEFINES="$DEFINES -DPROFILE" if test "x$GCC" = xyes; then @@ -536,6 +554,21 @@ else DEFINES="$DEFINES -DNDEBUG" fi +if test "x$enable_sanitize" != xno; then + if test "x$enable_profile" = xyes; then + AC_MSG_WARN([Sanitize and Profile are enabled at the same time]) + fi + + CFLAGS="$CFLAGS -fsanitize=$enable_sanitize" + CXXFLAGS="$CXXFLAGS -fsanitize=$enable_sanitize" + LDFLAGS="$LDFLAGS -fsanitize=$enable_sanitize" + + AC_LINK_IFELSE( + [AC_LANG_SOURCE([int main(){return 0;}])], + [], + [AC_MSG_FAILURE([sanitize flags '$enable_sanitize' not supported])]) +fi + dnl dnl Check if linker supports -Bsymbolic dnl @@ -576,7 +609,12 @@ case "$host_os" in openbsd* | darwin* ) LD_NO_UNDEFINED="" ;; *) - LD_NO_UNDEFINED="-Wl,--no-undefined" ;; + if test "x$enable_sanitize" = xno; then + LD_NO_UNDEFINED="-Wl,--no-undefined" + else + LD_NO_UNDEFINED="" + fi + ;; esac AC_SUBST([LD_NO_UNDEFINED]) @@ -686,7 +724,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] ) @@ -784,6 +822,9 @@ esac dnl See if posix_memalign is available AC_CHECK_FUNC([posix_memalign], [DEFINES="$DEFINES -DHAVE_POSIX_MEMALIGN"]) +dnl Check for zlib +PKG_CHECK_MODULES([ZLIB], [zlib >= $ZLIB_REQUIRED]) + dnl Check for pthreads AX_PTHREAD if test "x$ax_pthread_ok" = xno; then @@ -797,9 +838,10 @@ if test "x$android" = xno; then test -z "$PTHREAD_LIBS" && PTHREAD_LIBS="-lpthread" fi -dnl pthread-stubs is mandatory on targets where it exists +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 case "$host_os" in -cygwin* ) +linux* | cygwin* | darwin* | solaris* | *-gnu* | gnu*) pthread_stubs_possible="no" ;; * ) @@ -808,7 +850,7 @@ cygwin* ) esac if test "x$pthread_stubs_possible" = xyes; then - PKG_CHECK_MODULES(PTHREADSTUBS, pthread-stubs) + PKG_CHECK_MODULES(PTHREADSTUBS, pthread-stubs >= 0.4) AC_SUBST(PTHREADSTUBS_CFLAGS) AC_SUBST(PTHREADSTUBS_LIBS) fi @@ -903,19 +945,19 @@ llvm_add_target() { # Call this inside ` ` to get the return value. # $1 is the llvm-config command with arguments. strip_unwanted_llvm_flags() { - # Use \> (marks the end of the word) - echo " `$1`" | sed \ - -e 's/\s\+-m\S*//g' \ - -e 's/\s\+-DNDEBUG\>//g' \ - -e 's/\s\+-D_GNU_SOURCE\>//g' \ - -e 's/\s\+-pedantic\>//g' \ - -e 's/\s\+-W\S*//g' \ - -e 's/\s\+-O\S*//g' \ - -e 's/\s\+-g\S*//g' \ - -e 's/-fno-rtti\>/-Fno-rtti/g' \ - -e 's/\s\+-f\S*//g' \ - -e 's/-Fno-rtti\>/-fno-rtti/g' \ - -e 's/^ //' + echo " `$1` " | sed -E \ + -e 's/[[[:space:]]]+-m[[^[:space:]]]*//g' \ + -e 's/[[[:space:]]]+-DNDEBUG[[[:space:]]]/ /g' \ + -e 's/[[[:space:]]]+-D_GNU_SOURCE[[[:space:]]]/ /g' \ + -e 's/[[[:space:]]]+-pedantic[[[:space:]]]/ /g' \ + -e 's/[[[:space:]]]+-W[[^[:space:]]]*//g' \ + -e 's/[[[:space:]]]+-O[[^[:space:]]]*//g' \ + -e 's/[[[:space:]]]+-g[[^[:space:]]]*//g' \ + -e 's/-fno-rtti[[[:space:]]]/-Fno-rtti /g' \ + -e 's/[[[:space:]]]+-f[[^[:space:]]]*//g' \ + -e 's/-Fno-rtti[[[:space:]]]/-fno-rtti /g' \ + -e 's/^[[[:space:]]]//' \ + -e 's/[[[:space:]]]$//' } llvm_set_environment_variables() { @@ -1008,9 +1050,8 @@ radeon_llvm_check() { llvm_add_component "bitreader" $2 llvm_add_component "ipo" $2 - NEED_RADEON_LLVM=yes if test "x$have_libelf" != xyes; then - AC_MSG_ERROR([$1 requires libelf when using llvm]) + AC_MSG_ERROR([$2 requires libelf when using llvm]) fi } @@ -1022,6 +1063,31 @@ AC_SUBST([LLVM_LIBS]) AC_SUBST([LLVM_LDFLAGS]) AC_SUBST([LLVM_INCLUDEDIR]) +dnl +dnl libunwind +dnl +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 + +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], [AS_HELP_STRING([--disable-opengl], @@ -1280,10 +1346,11 @@ dnl Libglvnd configuration dnl AC_ARG_ENABLE([libglvnd], [AS_HELP_STRING([--enable-libglvnd], - [Build for libglvnd @<:@default=disabled@:>@])], + [Build GLX and EGL for libglvnd @<:@default=disabled@:>@])], [enable_libglvnd="$enableval"], [enable_libglvnd=no]) -AM_CONDITIONAL(USE_LIBGLVND_GLX, test "x$enable_libglvnd" = xyes) +AM_CONDITIONAL(USE_LIBGLVND, 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 @@ -1299,8 +1366,11 @@ if test "x$enable_libglvnd" = xyes ; then ;; esac - PKG_CHECK_MODULES([GLVND], libglvnd >= 0.1.0) - DEFINES="${DEFINES} -DUSE_LIBGLVND_GLX=1" + PKG_CHECK_MODULES([GLVND], libglvnd >= 0.2.0) + LIBGLVND_DATADIR=`$PKG_CONFIG --variable=datadir libglvnd` + AC_SUBST([LIBGLVND_DATADIR]) + + DEFINES="${DEFINES} -DUSE_LIBGLVND=1" DEFAULT_GL_LIB_NAME=GLX_mesa fi @@ -1471,11 +1541,6 @@ xdri) PKG_CHECK_MODULES([DRI2PROTO], [dri2proto >= $DRI2PROTO_REQUIRED]) GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV libdrm >= $LIBDRM_REQUIRED" - if test x"$enable_dri3" = xyes; then - PKG_CHECK_MODULES([DRI3PROTO], [dri3proto >= $DRI3PROTO_REQUIRED]) - PKG_CHECK_MODULES([PRESENTPROTO], [presentproto >= $PRESENTPROTO_REQUIRED]) - fi - if test x"$enable_dri" = xyes; then dri_modules="$dri_modules xcb-dri2 >= $XCBDRI2_REQUIRED" fi @@ -1783,13 +1848,12 @@ if test -n "$with_vulkan_drivers"; then 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 + require_libdrm "ANV" + PKG_CHECK_MODULES([INTEL], [libdrm >= $LIBDRM_INTEL_REQUIRED libdrm_intel >= $LIBDRM_INTEL_REQUIRED]) 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" HAVE_RADEON_VULKAN=yes @@ -2033,6 +2097,20 @@ if test "x$enable_opencl" = xyes; then AC_MSG_ERROR([Clover requires libelf]) fi + if test "x${ac_cv_cxx_compiler_gnu}" = xyes; then + altivec_enabled=no + AC_COMPILE_IFELSE([AC_LANG_SOURCE([ + #if !defined(__VEC__) || !defined(__ALTIVEC__) + #error "AltiVec not enabled" + #endif + ])], altivec_enabled=yes) + + if test "$altivec_enabled" = yes; then + CLOVER_STD_OVERRIDE="-std=gnu++11" + fi + AC_SUBST([CLOVER_STD_OVERRIDE]) + fi + llvm_require_version $LLVM_REQUIRED_OPENCL "opencl" llvm_add_default_components "opencl" @@ -2064,14 +2142,16 @@ dnl AM_CONDITIONAL(HAVE_GALLIUM, test -n "$with_gallium_drivers") dnl -dnl EGL Platforms configuration +dnl DEPRECATED: 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@:>@])], + [DEPRECATED: use --with-platforms instead@<:@default=auto@:>@])], [with_egl_platforms="$withval"], - [if test "x$enable_egl" = xyes; then + [with_egl_platforms=auto]) + +if test "x$with_egl_platforms" = xauto; then + if test "x$enable_egl" = xyes; then if test "x$enable_gbm" = xyes; then with_egl_platforms="x11,drm" else @@ -2079,17 +2159,31 @@ AC_ARG_WITH([egl-platforms], fi else with_egl_platforms="" - fi]) + 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]) -if test "x$with_egl_platforms" != "x" -a "x$enable_egl" != xyes; then - AC_MSG_ERROR([cannot build egl state tracker without EGL library]) +# For the time being, we still reuse the EGL named variables/defines. +if test "x$with_platforms" != xauto; then + with_egl_platforms=$with_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]) + AC_PATH_PROG([WAYLAND_SCANNER], [wayland-scanner], [:]) fi # Do per-EGL platform setups and checks @@ -2100,7 +2194,7 @@ for plat in $egl_platforms; do PKG_CHECK_MODULES([WAYLAND], [wayland-client >= $WAYLAND_REQUIRED wayland-server >= $WAYLAND_REQUIRED]) - if test "x$WAYLAND_SCANNER" = x; then + if test "x$WAYLAND_SCANNER" = "x:"; then AC_MSG_ERROR([wayland-scanner is needed to compile the wayland egl platform]) fi ;; @@ -2185,7 +2279,8 @@ 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 --define-variable=libdir=\$libdir --variable=pluginsdir libomxil-bellagio`]) + [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]) dnl Directory for VA libs @@ -2227,8 +2322,8 @@ require_basic_egl() { ;; *) 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 @@ -2297,7 +2392,7 @@ if test -n "$with_gallium_drivers"; then HAVE_GALLIUM_R600=yes PKG_CHECK_MODULES([RADEON], [libdrm >= $LIBDRM_RADEON_REQUIRED libdrm_radeon >= $LIBDRM_RADEON_REQUIRED]) require_libdrm "r600" - if test "x$enable_opencl" = xyes; then + if test "x$enable_llvm" = xyes; then radeon_llvm_check $LLVM_REQUIRED_R600 "r600" llvm_add_component "asmparser" "r600" @@ -2341,10 +2436,10 @@ if test -n "$with_gallium_drivers"; then xswr) llvm_require_version $LLVM_REQUIRED_SWR "swr" - 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 "C++14" "__cplusplus >= 201402L" \ + "-std=c++14" \ + SWR_CXX14_CXXFLAGS + AC_SUBST([SWR_CXX14_CXXFLAGS]) swr_require_cxx_feature_flags "AVX" "defined(__AVX__)" \ ",-mavx,-march=core-avx" \ @@ -2371,7 +2466,9 @@ if test -n "$with_gallium_drivers"; then 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]) @@ -2505,7 +2602,6 @@ 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$enable_glx" = xgallium-xlib) -AM_CONDITIONAL(NEED_RADEON_LLVM, test x$NEED_RADEON_LLVM = xyes) AM_CONDITIONAL(HAVE_GALLIUM_COMPUTE, test x$enable_opencl = xyes) AM_CONDITIONAL(HAVE_GALLIUM_LLVM, test "x$enable_llvm" = xyes) AM_CONDITIONAL(USE_VC4_SIMULATOR, test x$USE_VC4_SIMULATOR = xyes) @@ -2528,8 +2624,10 @@ AC_SUBST([NINE_VERSION], "$NINE_MAJOR.$NINE_MINOR.$NINE_TINY") AC_SUBST([VDPAU_MAJOR], 1) AC_SUBST([VDPAU_MINOR], 0) -VA_MAJOR=`$PKG_CONFIG --modversion libva | $SED -n 's/\([[^\.]]*\)\..*$/\1/p'` -VA_MINOR=`$PKG_CONFIG --modversion libva | $SED -n 's/.*\.\(.*\)\..*$/\1/p'` +if test "x$enable_va" = xyes; then + VA_MAJOR=`$PKG_CONFIG --modversion libva | $SED -n 's/\([[^\.]]*\)\..*$/\1/p'` + VA_MINOR=`$PKG_CONFIG --modversion libva | $SED -n 's/.*\.\(.*\)\..*$/\1/p'` +fi AC_SUBST([VA_MAJOR], $VA_MAJOR) AC_SUBST([VA_MINOR], $VA_MINOR) @@ -2668,8 +2766,6 @@ AC_CONFIG_FILES([Makefile src/glx/windows/windowsdriproto.pc src/gtest/Makefile src/intel/Makefile - src/intel/tools/Makefile - src/intel/vulkan/Makefile src/loader/Makefile src/mapi/Makefile src/mapi/es1api/glesv1_cm.pc @@ -2759,7 +2855,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 @@ -2777,6 +2872,8 @@ else echo " GBM: no" fi + echo " EGL/Vulkan/VL platforms: $egl_platforms" + # Vulkan echo "" if test "x$VULKAN_DRIVERS" != x; then @@ -2823,15 +2920,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