X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=configure.ac;h=a4074ed8502c0f54242609f6a3f97e9d5e258b95;hb=348b9a5b1c0e8a0e05ff940c1f4a10e67cdee073;hp=023110e184cbeaf28c2e889ec7f74c1dff6c172c;hpb=4fcf0ba113f7d85dd0383984efbff630c0ff6022;p=mesa.git diff --git a/configure.ac b/configure.ac index 023110e184c..a4074ed8502 100644 --- a/configure.ac +++ b/configure.ac @@ -99,7 +99,6 @@ AM_PROG_CC_C_O AM_PROG_AS AX_CHECK_GNU_MAKE AC_CHECK_PROGS([PYTHON2], [python2.7 python2 python]) -AC_CHECK_PROGS([PYTHON3], [python3.5 python3.4 python3]) AC_PROG_SED AC_PROG_MKDIR_P @@ -224,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) @@ -248,7 +249,11 @@ _SAVE_CPPFLAGS="$CPPFLAGS" dnl Compiler 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" ;; @@ -260,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" @@ -514,6 +521,8 @@ else DEFINES="$DEFINES -DNDEBUG" fi +DEFAULT_GL_LIB_NAME=GL + dnl dnl Check if linker supports -Bsymbolic dnl @@ -611,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 @@ -648,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 @@ -799,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], @@ -1030,10 +1060,40 @@ xno) ;; esac +AM_CONDITIONAL(HAVE_GLX, test "x$enable_glx" != xno) 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 + + PKG_CHECK_MODULES([GLVND], libglvnd >= 0.1.0) + DEFINES="${DEFINES} -DUSE_LIBGLVND_GLX=1" + DEFAULT_GL_LIB_NAME=GLX_mesa +fi + # Check for libdrm PKG_CHECK_MODULES([LIBDRM], [libdrm >= $LIBDRM_REQUIRED], [have_libdrm=yes], [have_libdrm=no]) @@ -1318,7 +1378,7 @@ xdri) 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 @@ -1581,7 +1641,7 @@ 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']) + [VULKAN_ICD_INSTALL_DIR='${datarootdir}/vulkan/icd.d']) AC_SUBST([VULKAN_ICD_INSTALL_DIR]) if test -n "$with_vulkan_drivers"; then @@ -1779,7 +1839,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) @@ -1970,6 +2035,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]) ;; @@ -1994,6 +2062,7 @@ 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') AM_CONDITIONAL(HAVE_EGL_DRIVER_DRI2, test "x$HAVE_EGL_DRIVER_DRI2" != "x") @@ -2034,6 +2103,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' \ @@ -2111,7 +2183,7 @@ if test "x$enable_gallium_llvm" = xyes; then LLVM_COMPONENTS="engine bitwriter mcjit mcdisassembler" if test "x$enable_opencl" = xyes; then - llvm_check_version_for "3" "5" "0" "opencl" + llvm_check_version_for "3" "6" "0" "opencl" LLVM_COMPONENTS="${LLVM_COMPONENTS} all-targets ipo linker instrumentation" LLVM_COMPONENTS="${LLVM_COMPONENTS} irreader option objcarcopts profiledata" @@ -2259,6 +2331,45 @@ swr_llvm_check() { fi } +swr_require_cxx_feature_flags() { + feature_name="$1" + preprocessor_test="$2" + option_list="$3" + output_var="$4" + + AC_MSG_CHECKING([whether $CXX supports $feature_name]) + AC_LANG_PUSH([C++]) + save_CXXFLAGS="$CXXFLAGS" + save_IFS="$IFS" + IFS="," + found=0 + for opts in $option_list + do + unset IFS + CXXFLAGS="$opts $save_CXXFLAGS" + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [ #if !($preprocessor_test) + #error + #endif + ])], + [found=1; break], + []) + IFS="," + done + IFS="$save_IFS" + CXXFLAGS="$save_CXXFLAGS" + AC_LANG_POP([C++]) + if test $found -eq 1; then + AC_MSG_RESULT([$opts]) + eval "$output_var=\$opts" + return 0 + fi + AC_MSG_RESULT([no]) + AC_MSG_ERROR([swr requires $feature_name support]) + return 1 +} + 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` @@ -2328,29 +2439,20 @@ if test -n "$with_gallium_drivers"; then xswr) swr_llvm_check "swr" - AC_MSG_CHECKING([whether $CXX supports c++11/AVX/AVX2]) - AVX_CXXFLAGS="-march=core-avx-i" - AVX2_CXXFLAGS="-march=core-avx2" - - 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="$AVX_CXXFLAGS $CXXFLAGS" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],[], - [AC_MSG_ERROR([AVX compiler support not detected])]) - CXXFLAGS="$save_CXXFLAGS" - - save_CFLAGS="$CXXFLAGS" - CXXFLAGS="$AVX2_CXXFLAGS $CXXFLAGS" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],[], - [AC_MSG_ERROR([AVX2 compiler support not detected])]) - CXXFLAGS="$save_CXXFLAGS" - AC_LANG_POP([C++]) + 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" \ + 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]) HAVE_GALLIUM_SWR=yes ;; @@ -2519,6 +2621,8 @@ AC_SUBST([XA_MINOR], $XA_MINOR) AC_SUBST([XA_TINY], $XA_TINY) AC_SUBST([XA_VERSION], "$XA_MAJOR.$XA_MINOR.$XA_TINY") +AC_SUBST([TIMESTAMP_CMD], '`test $(SOURCE_DATE_EPOCH) && echo $(SOURCE_DATE_EPOCH) || date +%s`') + AC_ARG_ENABLE(valgrind, [AS_HELP_STRING([--enable-valgrind], [Build mesa with valgrind support (default: auto)])], @@ -2799,7 +2903,6 @@ if test "x$MESA_LLVM" = x1; then echo "" fi echo " PYTHON2: $PYTHON2" -echo " PYTHON3: $PYTHON3" echo "" echo " Run '${MAKE-make}' to build Mesa"