From 9e7a4147c730adda047aae66c17f07d9de5b4a28 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Sun, 26 Jun 2011 13:24:32 +0900 Subject: [PATCH] autoconf: add --enable-{dri,glx,osmesa} The idea is that DRI driver, libGL and libOSMesa are libraries that can be independently enabled, yet --with-driver does not allow us to easily do that, if not impossible. This also matches what --enable-{egl,xorg,d3d1x} do for the respective libraries. There are two libGL providers: Xlib-based and DRI-based. They cannot coexist. To be able to choose between them, --enable-xlib-glx is also added. With this commit, --with-driver=dri can be replaced by $ ./configure --enable-dri --enable-glx --disable-osmesa --with-driver=xlib can be replaced by $ ./configure --disable-dri --enable-glx --enable-osmesa \ --enable-xlib-glx and --with-driver=osmesa can be replaced by $ ./configure --disable-dri --disable-glx --enable-osmesa Some combinations that cannot be supported with --with-driver will produce errors at the moment. But in the future, we would like to support, for example, $ ./configure --enable-dri --disable-glx --enable-egl (build libEGL and DRI drivers, but not libGL) Note that this commit still keeps --with-driver for transitional purpose. --- configure.ac | 301 ++++++++++++++++++++++++++++++--------------------- 1 file changed, 177 insertions(+), 124 deletions(-) diff --git a/configure.ac b/configure.ac index acf9f0604c6..73f57869b2a 100644 --- a/configure.ac +++ b/configure.ac @@ -543,6 +543,28 @@ AC_ARG_ENABLE([openvg], [enable support for OpenVG API @<:@default=no@:>@])], [enable_openvg="$enableval"], [enable_openvg=no]) + +AC_ARG_ENABLE([dri], + [AS_HELP_STRING([--enable-dri], + [enable DRI modules @<:@default=auto@:>@])], + [enable_dri="$enableval"], + [enable_dri=auto]) +AC_ARG_ENABLE([glx], + [AS_HELP_STRING([--enable-glx], + [enable GLX library @<:@default=auto@:>@])], + [enable_glx="$enableval"], + [enable_glx=auto]) +AC_ARG_ENABLE([osmesa], + [AS_HELP_STRING([--enable-osmesa], + [enable OSMesa library @<:@default=auto@:>@])], + [enable_osmesa="$enableval"], + [enable_osmesa=auto]) +AC_ARG_ENABLE([egl], + [AS_HELP_STRING([--disable-egl], + [disable EGL library @<:@default=enabled@:>@])], + [enable_egl="$enableval"], + [enable_egl=yes]) + AC_ARG_ENABLE([xorg], [AS_HELP_STRING([--enable-xorg], [enable support for X.Org DDX API @<:@default=no@:>@])], @@ -553,16 +575,17 @@ AC_ARG_ENABLE([d3d1x], [enable support for Direct3D 10 & 11 low-level API @<:@default=no@:>@])], [enable_d3d1x="$enableval"], [enable_d3d1x=no]) -AC_ARG_ENABLE([egl], - [AS_HELP_STRING([--disable-egl], - [disable EGL library @<:@default=enabled@:>@])], - [enable_egl="$enableval"], - [enable_egl=yes]) AC_ARG_ENABLE([gbm], [AS_HELP_STRING([--enable-gbm], [enable gbm library @<:@default=auto@:>@])], [enable_gbm="$enableval"], [enable_gbm=auto]) + +AC_ARG_ENABLE([xlib_glx], + [AS_HELP_STRING([--enable-xlib-glx], + [make GLX library Xlib-based instead of DRI-based @<:@default=disable@:>@])], + [enable_xlib_glx="$enableval"], + [enable_xlib_glx=auto]) AC_ARG_ENABLE([gallium_egl], [AS_HELP_STRING([--enable-gallium-egl], [enable optional EGL state tracker (not required @@ -648,24 +671,66 @@ if test "x$enable_opengl" = xno; then fi AC_ARG_WITH([driver], - [AS_HELP_STRING([--with-driver=DRIVER], - [driver for Mesa: xlib,dri,osmesa @<:@default=dri when available, or xlib@:>@])], + [AS_HELP_STRING([--with-driver=DRIVER], [DEPRECATED])], [mesa_driver="$withval"], - [mesa_driver="$default_driver"]) + [mesa_driver=auto]) dnl Check for valid option case "x$mesa_driver" in -xxlib|xdri|xosmesa) - if test "x$enable_opengl" = xno; then - AC_MSG_ERROR([Driver '$mesa_driver' requires OpenGL enabled]) +xxlib|xdri|xosmesa|xno) + if test "x$enable_dri" != xauto -o \ + "x$enable_glx" != xauto -o \ + "x$enable_osmesa" != xauto -o \ + "x$enable_xlib_glx" != xauto; then + AC_MSG_ERROR([--with-driver=$mesa_driver is deprecated]) fi ;; -xno) +xauto) + mesa_driver="$default_driver" ;; *) AC_MSG_ERROR([Driver '$mesa_driver' is not a valid option]) ;; esac +# map $mesa_driver to APIs +if test "x$enable_dri" = xauto; then + case "x$mesa_driver" in + xdri) enable_dri=yes ;; + *) enable_dri=no ;; + esac +fi + +if test "x$enable_glx" = xauto; then + case "x$mesa_driver" in + xdri|xxlib) enable_glx=yes ;; + *) enable_glx=no ;; + esac +fi + +if test "x$enable_osmesa" = xauto; then + case "x$mesa_driver" in + xxlib|xosmesa) enable_osmesa=yes ;; + *) enable_osmesa=no ;; + esac +fi + +if test "x$enable_xlib_glx" = xauto; then + case "x$mesa_driver" in + xxlib) enable_xlib_glx=yes ;; + *) enable_xlib_glx=no ;; + esac +fi + +if test "x$enable_glx" = xno; then + enable_xlib_glx=no +fi + +if test "x$enable_dri" = xyes; then + if test "x$enable_glx" = xno -o "x$enable_xlib_glx" = xyes; then + AC_MSG_ERROR([cannot build DRI drivers without DRI-based GLX yet]) + fi +fi + dnl dnl Driver specific build directories dnl @@ -710,27 +775,36 @@ x*yes*) ;; esac -case "$mesa_driver" in -xlib) - DRIVER_DIRS="x11" +case "x$enable_glx$enable_xlib_glx" in +xyesyes) + DRIVER_DIRS="$DRIVER_DIRS x11" GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/xlib" GALLIUM_TARGET_DIRS="$GALLIUM_TARGET_DIRS libgl-xlib" GALLIUM_STATE_TRACKERS_DIRS="glx $GALLIUM_STATE_TRACKERS_DIRS" ;; -dri) +xyesno) + # DRI-based GLX SRC_DIRS="$SRC_DIRS glx" - DRIVER_DIRS="dri" + ;; +esac + +if test "x$enable_dri" = xyes; then + DRIVER_DIRS="$DRIVER_DIRS dri" + GALLIUM_WINSYS_DIRS="$GALLIUM_WINSYS_DIRS sw/xlib sw/dri" GALLIUM_STATE_TRACKERS_DIRS="dri $GALLIUM_STATE_TRACKERS_DIRS" HAVE_ST_DRI="yes" - ;; -osmesa) - DRIVER_DIRS="osmesa" - ;; -no) - DRIVER_DRIS="" - ;; -esac +fi + +if test "x$enable_osmesa" = xyes; then + # the empty space matters for osmesa... (see src/mesa/Makefile) + if test -n "$DRIVER_DIRS"; then + DRIVER_DIRS="$DRIVER_DIRS osmesa" + else + DRIVER_DIRS="osmesa" + fi +fi + AC_SUBST([SRC_DIRS]) AC_SUBST([GLU_DIRS]) AC_SUBST([DRIVER_DIRS]) @@ -775,13 +849,9 @@ m4_divert_once([HELP_BEGIN], pkg-config utility.]) dnl We need X for xlib and dri, so bomb now if it's not found -case "$mesa_driver" in -xlib|dri) - if test "$no_x" = yes; then - AC_MSG_ERROR([X11 development libraries needed for $mesa_driver driver]) - fi - ;; -esac +if test "x$enable_glx" = xyes -a "x$no_x" = xyes; then + AC_MSG_ERROR([X11 development libraries needed for GLX]) +fi dnl XCB - this is only used for GLX right now AC_ARG_ENABLE([xcb], @@ -819,8 +889,9 @@ AC_ARG_ENABLE([driglx-direct], dnl dnl libGL configuration per driver dnl -case "$mesa_driver" in -xlib) +case "x$enable_glx$enable_xlib_glx" in +xyesyes) + # Xlib-based GLX if test "$x11_pkgconfig" = yes; then PKG_CHECK_MODULES([XLIBGL], [x11 xext]) GL_PC_REQ_PRIV="x11 xext" @@ -843,22 +914,15 @@ xlib) GL_LIB_DEPS="" fi ;; -dri|no) # these checks are still desired when there is no mesa_driver - # DRI must be shared, I think - if test "$enable_static" = yes; then - AC_MSG_ERROR([Can't use static libraries for DRI drivers]) - fi - +xyesno) + # DRI-based GLX PKG_CHECK_MODULES([GLPROTO], [glproto >= $GLPROTO_REQUIRED]) GL_PC_REQ_PRIV="glproto >= $GLPROTO_REQUIRED" - DRI_PC_REQ_PRIV="" - if test x"$driglx_direct" = xyes; then # Check for libdrm PKG_CHECK_MODULES([LIBDRM], [libdrm >= $LIBDRM_REQUIRED]) PKG_CHECK_MODULES([DRI2PROTO], [dri2proto >= $DRI2PROTO_REQUIRED]) GL_PC_REQ_PRIV="$GL_PC_REQ_PRIV libdrm >= $LIBDRM_REQUIRED dri2proto >= $DRI2PROTO_REQUIRED" - DRI_PC_REQ_PRIV="libdrm >= $LIBDRM_REQUIRED" fi # find the DRI deps for libGL @@ -903,16 +967,22 @@ dri|no) # these checks are still desired when there is no mesa_driver # need DRM libs, -lpthread, etc. GL_LIB_DEPS="$GL_LIB_DEPS $LIBDRM_LIBS -lm -lpthread $DLOPEN_LIBS" GL_PC_LIB_PRIV="-lm -lpthread $DLOPEN_LIBS" - GLESv1_CM_LIB_DEPS="$LIBDRM_LIBS -lm -lpthread $DLOPEN_LIBS" - GLESv1_CM_PC_LIB_PRIV="-lm -lpthread $DLOPEN_LIBS" - GLESv2_LIB_DEPS="$LIBDRM_LIBS -lm -lpthread $DLOPEN_LIBS" - GLESv2_PC_LIB_PRIV="-lm -lpthread $DLOPEN_LIBS" - ;; -osmesa) - # No libGL for osmesa - GL_LIB_DEPS="" ;; esac + +if test "x$enable_dri" = xyes; then + # DRI must be shared, I think + if test "$enable_static" = yes; then + AC_MSG_ERROR([Can't use static libraries for DRI drivers]) + fi +fi + +DRI_PC_REQ_PRIV="libdrm >= $LIBDRM_REQUIRED" +GLESv1_CM_LIB_DEPS="$LIBDRM_LIBS -lm -lpthread $DLOPEN_LIBS" +GLESv1_CM_PC_LIB_PRIV="-lm -lpthread $DLOPEN_LIBS" +GLESv2_LIB_DEPS="$LIBDRM_LIBS -lm -lpthread $DLOPEN_LIBS" +GLESv2_PC_LIB_PRIV="-lm -lpthread $DLOPEN_LIBS" + AC_SUBST([GL_LIB_DEPS]) AC_SUBST([GL_PC_REQ_PRIV]) AC_SUBST([GL_PC_LIB_PRIV]) @@ -938,7 +1008,7 @@ AC_ARG_ENABLE([shared-dricore], [link DRI modules with shared core DRI routines @<:@default=disabled@:>@])], [enable_dricore="$enableval"], [enable_dricore=no]) -if test "$mesa_driver" = dri ; then +if test "x$enable_dri" = xyes ; then if test "$enable_dricore" = yes ; then if test "$GCC$GXX" != yesyes ; then AC_MSG_WARN([Shared dricore requires GCC-compatible rpath handling. Disabling shared dricore]) @@ -971,7 +1041,7 @@ PKG_CHECK_MODULES([LIBDRM_RADEON], dnl dnl More X11 setup dnl -if test "$mesa_driver" = xlib; then +if test "x$enable_xlib_glx" = xyes; then DEFINES="$DEFINES -DUSE_XSHM" fi @@ -1023,7 +1093,10 @@ DRI_DIRS="" case "$with_dri_drivers" in no) ;; yes) - DRI_DIRS="yes" + # classic DRI drivers require FEATURE_GL to build + if test "x$enable_opengl" = xyes; then + DRI_DIRS="yes" + fi ;; *) # verify the requested driver directories exist @@ -1033,11 +1106,14 @@ yes) AC_MSG_ERROR([DRI driver directory '$driver' doesn't exist]) done DRI_DIRS="$dri_drivers" + if test -n "$DRI_DIRS" -a "x$enable_opengl" != xyes; then + AC_MSG_ERROR([--with-dri-drivers requires OpenGL]) + fi ;; esac dnl Set DRI_DIRS, DEFINES and LIB_DEPS -if test "$mesa_driver" = dri -o "$mesa_driver" = no; then +if test "x$enable_dri" = xyes; then # Platform specific settings and drivers to build case "$host_os" in linux*) @@ -1117,7 +1193,7 @@ if test "$mesa_driver" = dri -o "$mesa_driver" = no; then DRI_DIRS=`echo "$DRI_DIRS" | $SED 's/ */ /g'` # Check for expat - if test "$mesa_driver" = dri; then + if test "x$enable_dri" = xyes; then EXPAT_INCLUDES="" EXPAT_LIB=-lexpat AC_ARG_WITH([expat], @@ -1167,26 +1243,6 @@ AC_SUBST([RADEON_LDFLAGS]) dnl dnl OSMesa configuration dnl -if test "$mesa_driver" = xlib; then - default_gl_osmesa=yes -else - default_gl_osmesa=no -fi -AC_ARG_ENABLE([gl-osmesa], - [AS_HELP_STRING([--enable-gl-osmesa], - [enable OSMesa with libGL @<:@default=enabled for xlib driver@:>@])], - [gl_osmesa="$enableval"], - [gl_osmesa="$default_gl_osmesa"]) -if test "x$gl_osmesa" = xyes; then - if test "x$enable_opengl" = xno; then - AC_MSG_ERROR([OpenGL is not available for OSMesa driver]) - fi - if test "$mesa_driver" = osmesa; then - AC_MSG_ERROR([libGL is not available for OSMesa driver]) - else - DRIVER_DIRS="$DRIVER_DIRS osmesa" - fi -fi dnl Configure the channel bits for OSMesa (libOSMesa, libOSMesa16, ...) AC_ARG_WITH([osmesa-bits], @@ -1194,9 +1250,11 @@ AC_ARG_WITH([osmesa-bits], [OSMesa channel bits and library name: 8, 16, 32 @<:@default=8@:>@])], [osmesa_bits="$withval"], [osmesa_bits=8]) -if test "$mesa_driver" != osmesa && test "x$osmesa_bits" != x8; then - AC_MSG_WARN([Ignoring OSMesa channel bits for non-OSMesa driver]) - osmesa_bits=8 +if test "x$osmesa_bits" != x8; then + if test "x$enable_dri" = xyes -o "x$enable_glx" = xyes; then + AC_MSG_WARN([Ignoring OSMesa channel bits because of non-OSMesa driver]) + osmesa_bits=8 + fi fi case "x$osmesa_bits" in x8) @@ -1212,8 +1270,7 @@ x16|x32) esac AC_SUBST([OSMESA_LIB]) -case "$DRIVER_DIRS" in -*osmesa*) +if test "x$enable_osmesa" = xyes; then # only link libraries with osmesa if shared if test "$enable_static" = no; then OSMESA_LIB_DEPS="-lm -lpthread $SELINUX_LIBS $DLOPEN_LIBS" @@ -1222,8 +1279,7 @@ case "$DRIVER_DIRS" in fi OSMESA_MESA_DEPS="" OSMESA_PC_LIB_PRIV="-lm -lpthread $SELINUX_LIBS $DLOPEN_LIBS" - ;; -esac +fi AC_SUBST([OSMESA_LIB_DEPS]) AC_SUBST([OSMESA_MESA_DEPS]) AC_SUBST([OSMESA_PC_REQ]) @@ -1234,11 +1290,6 @@ dnl EGL configuration dnl EGL_CLIENT_APIS="" -if test "x$enable_egl" = xno; then - if test "x$mesa_driver" = xno; then - AC_MSG_ERROR([cannot disable EGL when there is no mesa driver]) - fi -fi if test "x$enable_egl" = xyes; then SRC_DIRS="$SRC_DIRS egl" EGL_LIB_DEPS="$DLOPEN_LIBS $SELINUX_LIBS -lpthread" @@ -1246,7 +1297,7 @@ if test "x$enable_egl" = xyes; then if test "$enable_static" != yes; then # build egl_glx when libGL is built - if test "$mesa_driver" = xlib -o "$mesa_driver" = dri; then + if test "x$enable_glx" = xyes; then EGL_DRIVERS_DIRS="glx" fi @@ -1255,7 +1306,7 @@ if test "x$enable_egl" = xyes; then if test "$have_libudev" = yes; then DEFINES="$DEFINES -DHAVE_LIBUDEV" fi - if test "$mesa_driver" = dri; then + if test "x$enable_dri" = xyes; then # build egl_dri2 when xcb-dri2 is available PKG_CHECK_MODULES([XCB_DRI2], [x11-xcb xcb-dri2 xcb-xfixes], [have_xcb_dri2=yes],[have_xcb_dri2=no]) @@ -1294,7 +1345,7 @@ if test "x$enable_gbm" = xyes; then AC_MSG_ERROR([gbm needs udev])) GBM_LIB_DEPS="$DLOPEN_LIBS $LIBUDEV_LIBS" - if test "$mesa_driver" = dri; then + if test "x$enable_dri" = xyes; then GBM_BACKEND_DIRS="$GBM_BACKEND_DIRS dri" if test "$SHARED_GLAPI" -eq 0; then AC_MSG_ERROR([gbm_dri requires --enable-shared-glapi]) @@ -1401,16 +1452,17 @@ AC_ARG_ENABLE([glu], [enable_glu="$enableval"], [enable_glu=yes]) -if test "x$enable_glu" = xyes -a "x$mesa_driver" = xno; then - AC_MSG_NOTICE([Disabling GLU since there is no OpenGL driver]) - enable_glu=no +if test "x$enable_glu" = xyes; then + if test "x$enable_glx" = xno -a "x$enable_osmesa" = xno; then + AC_MSG_NOTICE([Disabling GLU since there is no OpenGL driver]) + enable_glu=no + fi fi if test "x$enable_glu" = xyes; then SRC_DIRS="$SRC_DIRS glu" - case "$mesa_driver" in - osmesa) + if test "x$enable_glx" = xno; then # Link libGLU to libOSMesa instead of libGL GLU_LIB_DEPS="" GLU_PC_REQ="osmesa" @@ -1419,8 +1471,7 @@ if test "x$enable_glu" = xyes; then else GLU_MESA_DEPS="" fi - ;; - *) + else # If static, empty GLU_LIB_DEPS and add libs for programs to link GLU_PC_REQ="gl" GLU_PC_LIB_PRIV="-lm" @@ -1432,8 +1483,7 @@ if test "x$enable_glu" = xyes; then GLU_MESA_DEPS="" APP_LIB_DEPS="$APP_LIB_DEPS -lstdc++" fi - ;; - esac + fi fi if test "$enable_static" = no; then GLU_LIB_DEPS="$GLU_LIB_DEPS $OS_CPLUSPLUS_LIBS" @@ -1455,13 +1505,9 @@ AC_ARG_ENABLE([glw], [enable_glw="$enableval"], [enable_glw=yes]) dnl Don't build GLw on osmesa -if test "x$enable_glw" = xyes; then - case "$mesa_driver" in - osmesa|no) - AC_MSG_NOTICE([Disabling GLw since there is no OpenGL driver]) - enable_glw=no - ;; - esac +if test "x$enable_glw" = xyes -a "x$enable_glx" = xno; then + AC_MSG_NOTICE([Disabling GLw since there is no OpenGL driver]) + enable_glw=no fi AC_ARG_ENABLE([motif], [AS_HELP_STRING([--enable-motif], @@ -1535,14 +1581,10 @@ AC_ARG_ENABLE([glut], [enable_glut="$enableval"], [enable_glut="$default_glut"]) -dnl Don't build glut on osmesa -if test "x$enable_glut" = xyes; then - case "$mesa_driver" in - osmesa|no) - AC_MSG_NOTICE([Disabling glut since there is no OpenGL driver]) - enable_glut=no - ;; - esac +dnl Don't build glut without GLX +if test "x$enable_glut" = xyes -a "x$enable_glx" = xno; then + AC_MSG_NOTICE([Disabling glut since there is no OpenGL driver]) + enable_glut=no fi dnl Can't build glut if GLU not available if test "x$enable_glu$enable_glut" = xnoyes; then @@ -1643,7 +1685,7 @@ WAYLAND_EGL_LIB_DEPS="" case "$with_egl_platforms" in yes) - if test "x$enable_egl" = xyes && test "x$mesa_driver" != xosmesa; then + if test "x$enable_egl" = xyes; then EGL_PLATFORMS="x11" fi ;; @@ -1853,14 +1895,13 @@ echo " OpenVG: $enable_openvg" dnl Driver info echo "" -echo " Driver: $mesa_driver" -if test "$mesa_driver" != no; then - if echo "$DRIVER_DIRS" | grep 'osmesa' >/dev/null 2>&1; then +if test "x$enable_osmesa" != xno; then echo " OSMesa: lib$OSMESA_LIB" - else +else echo " OSMesa: no" - fi - if test "$mesa_driver" = dri; then +fi + +if test "x$enable_dri" != xno; then # cleanup the drivers var dri_dirs=`echo $DRI_DIRS | $SED 's/^ *//;s/ */ /;s/ *$//'` if test "x$DRI_DIRS" = x; then @@ -1869,10 +1910,22 @@ if test "$mesa_driver" != no; then echo " DRI drivers: $dri_dirs" fi echo " DRI driver dir: $DRI_DRIVER_INSTALL_DIR" - echo " Use XCB: $enable_xcb" echo " Shared dricore: $enable_dricore" - fi fi + +case "x$enable_glx$enable_xlib_glx" in +xyesyes) + echo " GLX: Xlib-based" + ;; +xyesno) + echo " GLX: DRI-based" + echo " Use XCB: $enable_xcb" + ;; +*) + echo " GLX: $enable_glx" + ;; +esac + echo "" echo " GLU: $enable_glu" echo " GLw: $enable_glw (Motif: $enable_motif)" -- 2.30.2