[Mesa-dev] [PATCH] autoconf: Better client API selection.
Kristian Høgsberg
krh at bitplanet.net
Wed Oct 27 13:54:11 PDT 2010
On Wed, Oct 27, 2010 at 6:30 AM, Chia-I Wu <olvaffe at gmail.com> wrote:
> From: Chia-I Wu <olv at lunarg.com>
>
> Make autoconf decide the client APIs enabled first. Then when OpenGL
> and OpenGL ES are disabled, there is no need to build src/mesa/; when
> OpenGL is disabled, no $mesa_driver should be built. Finally, add
> --enable-openvg to enable OpenVG.
>
> With these changes, an OpenVG only build can be configured with
>
> $ ./configure --disable-opengl --enable-openvg
>
> src/mesa, src/glsl, and src/glx will be skipped, which saves a great
> deal of compilation time.
>
> And an OpenGL ES only build can be configured with
>
> $ ./configure --disable-opengl --enable-gles-overlay
I only looked throught the changes briefly, but I agree with Dan, it
looks like the right way to go.
Acked-by: Kristian Høgsberg <krh at bitplanet.net>
> ---
> configure.ac | 277 +++++++++++++++++++++++++++++++++++++--------------------
> 1 files changed, 180 insertions(+), 97 deletions(-)
>
> diff --git a/configure.ac b/configure.ac
> index 364ee03..11cac58 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -464,6 +464,61 @@ if test "x$enable_selinux" = "xyes"; then
> DEFINES="$DEFINES -DMESA_SELINUX"
> fi
>
> +dnl Determine which APIs to support
> +AC_ARG_ENABLE([opengl],
> + [AS_HELP_STRING([--disable-opengl],
> + [disable support for standard OpenGL API @<:@default=no@:>@])],
> + [enable_opengl="$enableval"],
> + [enable_opengl=yes])
> +AC_ARG_ENABLE([gles1],
> + [AS_HELP_STRING([--enable-gles1],
> + [enable support for OpenGL ES 1.x API @<:@default=no@:>@])],
> + [enable_gles1="$enableval"],
> + [enable_gles1=no])
> +AC_ARG_ENABLE([gles2],
> + [AS_HELP_STRING([--enable-gles2],
> + [enable support for OpenGL ES 2.x API @<:@default=no@:>@])],
> + [enable_gles2="$enableval"],
> + [enable_gles2=no])
> +AC_ARG_ENABLE([gles-overlay],
> + [AS_HELP_STRING([--enable-gles-overlay],
> + [build separate OpenGL ES only libraries @<:@default=no@:>@])],
> + [enable_gles_overlay="$enableval"],
> + [enable_gles_overlay=no])
> +
> +AC_ARG_ENABLE([openvg],
> + [AS_HELP_STRING([--enable-openvg],
> + [enable support for OpenVG API @<:@default=no@:>@])],
> + [enable_openvg="$enableval"],
> + [enable_openvg=no])
> +
> +if test "x$enable_opengl" = xno -a \
> + "x$enable_gles1" = xno -a \
> + "x$enable_gles2" = xno -a \
> + "x$enable_gles_overlay" = xno -a \
> + "x$enable_openvg" = xno; then
> + AC_MSG_ERROR([at least one API should be enabled])
> +fi
> +
> +API_DEFINES=""
> +GLES_OVERLAY=0
> +if test "x$enable_opengl" = xno; then
> + API_DEFINES="$API_DEFINES -DFEATURE_GL=0"
> +else
> + API_DEFINES="$API_DEFINES -DFEATURE_GL=1"
> +fi
> +if test "x$enable_gles1" = xyes; then
> + API_DEFINES="$API_DEFINES -DFEATURE_ES1=1"
> +fi
> +if test "x$enable_gles2" = xyes; then
> + API_DEFINES="$API_DEFINES -DFEATURE_ES2=1"
> +fi
> +if test "x$enable_gles_overlay" = xyes; then
> + GLES_OVERLAY=1
> +fi
> +AC_SUBST([API_DEFINES])
> +AC_SUBST([GLES_OVERLAY])
> +
> dnl
> dnl Driver configuration. Options are xlib, dri and osmesa right now.
> dnl More later: fbdev, ...
> @@ -483,6 +538,10 @@ linux*)
> ;;
> esac
>
> +if test "x$enable_opengl" = xno; then
> + default_driver="no"
> +fi
> +
> AC_ARG_WITH([driver],
> [AS_HELP_STRING([--with-driver=DRIVER],
> [driver for Mesa: xlib,dri,osmesa @<:@default=dri when available, or xlib@:>@])],
> @@ -491,6 +550,11 @@ AC_ARG_WITH([driver],
> 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])
> + fi
> + ;;
> +xno)
> ;;
> *)
> AC_MSG_ERROR([Driver '$mesa_driver' is not a valid option])
> @@ -506,7 +570,7 @@ dnl Driver specific build directories
> dnl
>
> dnl this variable will be prepended to SRC_DIRS and is not exported
> -CORE_DIRS="mapi/glapi glsl mesa"
> +CORE_DIRS=""
>
> SRC_DIRS=""
> GLU_DIRS="sgi"
> @@ -516,6 +580,30 @@ GALLIUM_WINSYS_DIRS="sw"
> GALLIUM_DRIVERS_DIRS="softpipe failover galahad trace rbug identity"
> GALLIUM_STATE_TRACKERS_DIRS=""
>
> +# build glapi if OpenGL is enabled
> +if test "x$enable_opengl" = xyes; then
> + CORE_DIRS="$CORE_DIRS mapi/glapi"
> +fi
> +
> +# build es1api and es2api if OpenGL ES is enabled
> +case "x$enable_gles1$enable_gles2$enable_gles_overlay" in
> +x*yes*)
> + CORE_DIRS="$CORE_DIRS mapi/es1api mapi/es2api"
> + ;;
> +esac
> +
> +# build vgapi if OpenVG is enabled
> +if test "x$enable_openvg" = xyes; then
> + CORE_DIRS="$CORE_DIRS mapi/vgapi"
> +fi
> +
> +# build glsl and mesa if OpenGL or OpenGL ES is enabled
> +case "x$enable_opengl$enable_gles1$enable_gles2$enable_gles_overlay" in
> +x*yes*)
> + CORE_DIRS="$CORE_DIRS glsl mesa"
> + ;;
> +esac
> +
> case "$mesa_driver" in
> xlib)
> DRIVER_DIRS="x11"
> @@ -530,6 +618,9 @@ dri)
> osmesa)
> DRIVER_DIRS="osmesa"
> ;;
> +no)
> + DRIVER_DRIS=""
> + ;;
> esac
> AC_SUBST([SRC_DIRS])
> AC_SUBST([GLU_DIRS])
> @@ -622,7 +713,7 @@ xlib)
> GL_LIB_DEPS=""
> fi
> ;;
> -dri)
> +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])
> @@ -747,51 +838,6 @@ if test "x$with_dri_drivers" = x; then
> with_dri_drivers=no
> fi
>
> -dnl Determine which APIs to support
> -AC_ARG_ENABLE([opengl],
> - [AS_HELP_STRING([--disable-opengl],
> - [disable support for standard OpenGL API @<:@default=no@:>@])],
> - [enable_opengl="$enableval"],
> - [enable_opengl=yes])
> -AC_ARG_ENABLE([gles1],
> - [AS_HELP_STRING([--enable-gles1],
> - [enable support for OpenGL ES 1.x API @<:@default=no@:>@])],
> - [enable_gles1="$enableval"],
> - [enable_gles1=no])
> -AC_ARG_ENABLE([gles2],
> - [AS_HELP_STRING([--enable-gles2],
> - [enable support for OpenGL ES 2.x API @<:@default=no@:>@])],
> - [enable_gles2="$enableval"],
> - [enable_gles2=no])
> -AC_ARG_ENABLE([gles-overlay],
> - [AS_HELP_STRING([--enable-gles-overlay],
> - [build separate OpenGL ES only libraries @<:@default=no@:>@])],
> - [enable_gles_overlay="$enableval"],
> - [enable_gles_overlay=no])
> -
> -API_DEFINES=""
> -GLES_OVERLAY=0
> -if test "x$enable_opengl" = xno; then
> - API_DEFINES="$API_DEFINES -DFEATURE_GL=0"
> -else
> - API_DEFINES="$API_DEFINES -DFEATURE_GL=1"
> -fi
> -if test "x$enable_gles1" = xyes; then
> - API_DEFINES="$API_DEFINES -DFEATURE_ES1=1"
> -fi
> -if test "x$enable_gles2" = xyes; then
> - API_DEFINES="$API_DEFINES -DFEATURE_ES2=1"
> -fi
> -if test "x$enable_gles_overlay" = xyes -o \
> - "x$enable_gles1" = xyes -o "x$enable_gles2" = xyes; then
> - CORE_DIRS="mapi/es1api mapi/es2api $CORE_DIRS"
> - if test "x$enable_gles_overlay" = xyes; then
> - GLES_OVERLAY=1
> - fi
> -fi
> -AC_SUBST([API_DEFINES])
> -AC_SUBST([GLES_OVERLAY])
> -
> dnl If $with_dri_drivers is yes, directories will be added through
> dnl platform checks
> DRI_DIRS=""
> @@ -812,7 +858,7 @@ yes)
> esac
>
> dnl Set DRI_DIRS, DEFINES and LIB_DEPS
> -if test "$mesa_driver" = dri; then
> +if test "$mesa_driver" = dri -o "$mesa_driver" = no; then
> # Use TLS in GLX?
> if test "x$GLX_USE_TLS" = xyes; then
> DEFINES="$DEFINES -DGLX_USE_TLS -DPTHREADS"
> @@ -890,19 +936,21 @@ if test "$mesa_driver" = dri; then
> DRI_DIRS=`echo "$DRI_DIRS" | $SED 's/ */ /g'`
>
> # Check for expat
> - EXPAT_INCLUDES=""
> - EXPAT_LIB=-lexpat
> - AC_ARG_WITH([expat],
> - [AS_HELP_STRING([--with-expat=DIR],
> - [expat install directory])],[
> - EXPAT_INCLUDES="-I$withval/include"
> - CPPFLAGS="$CPPFLAGS $EXPAT_INCLUDES"
> - LDFLAGS="$LDFLAGS -L$withval/$LIB_DIR"
> - EXPAT_LIB="-L$withval/$LIB_DIR -lexpat"
> - ])
> - AC_CHECK_HEADER([expat.h],[],[AC_MSG_ERROR([Expat required for DRI.])])
> - AC_CHECK_LIB([expat],[XML_ParserCreate],[],
> - [AC_MSG_ERROR([Expat required for DRI.])])
> + if test "$mesa_driver" = dri; then
> + EXPAT_INCLUDES=""
> + EXPAT_LIB=-lexpat
> + AC_ARG_WITH([expat],
> + [AS_HELP_STRING([--with-expat=DIR],
> + [expat install directory])],[
> + EXPAT_INCLUDES="-I$withval/include"
> + CPPFLAGS="$CPPFLAGS $EXPAT_INCLUDES"
> + LDFLAGS="$LDFLAGS -L$withval/$LIB_DIR"
> + EXPAT_LIB="-L$withval/$LIB_DIR -lexpat"
> + ])
> + AC_CHECK_HEADER([expat.h],[],[AC_MSG_ERROR([Expat required for DRI.])])
> + AC_CHECK_LIB([expat],[XML_ParserCreate],[],
> + [AC_MSG_ERROR([Expat required for DRI.])])
> + fi
>
> # put all the necessary libs together
> DRI_LIB_DEPS="$SELINUX_LIBS $LIBDRM_LIBS $EXPAT_LIB -lm -lpthread $DLOPEN_LIBS $TALLOC_LIBS"
> @@ -943,6 +991,9 @@ AC_ARG_ENABLE([gl-osmesa],
> [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
> @@ -999,13 +1050,21 @@ AC_ARG_ENABLE([egl],
> [disable EGL library @<:@default=enabled@:>@])],
> [enable_egl="$enableval"],
> [enable_egl=yes])
> +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
> + if test "x$enable_openvg" = xyes; then
> + AC_MSG_ERROR([cannot enable OpenVG without EGL])
> + fi
> +fi
> if test "x$enable_egl" = xyes; then
> SRC_DIRS="$SRC_DIRS egl"
> EGL_LIB_DEPS="$DLOPEN_LIBS -lpthread"
> EGL_DRIVERS_DIRS=""
> if test "$enable_static" != yes; then
> # build egl_glx when libGL is built
> - if test "$mesa_driver" != osmesa; then
> + if test "$mesa_driver" = xlib -o "$mesa_driver" = dri; then
> EGL_DRIVERS_DIRS="glx"
> fi
>
> @@ -1039,6 +1098,12 @@ AC_ARG_ENABLE([glu],
> [enable OpenGL Utility library @<:@default=enabled@:>@])],
> [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
> +fi
> +
> if test "x$enable_glu" = xyes; then
> SRC_DIRS="$SRC_DIRS glu"
>
> @@ -1088,9 +1153,13 @@ AC_ARG_ENABLE([glw],
> [enable_glw="$enableval"],
> [enable_glw=yes])
> dnl Don't build GLw on osmesa
> -if test "x$enable_glw" = xyes && test "$mesa_driver" = osmesa; then
> - AC_MSG_WARN([Disabling GLw since the driver is OSMesa])
> - enable_glw=no
> +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
> fi
> AC_ARG_ENABLE([motif],
> [AS_HELP_STRING([--enable-motif],
> @@ -1164,16 +1233,20 @@ 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
> +fi
> dnl Can't build glut if GLU not available
> if test "x$enable_glu$enable_glut" = xnoyes; then
> AC_MSG_WARN([Disabling glut since GLU is disabled])
> enable_glut=no
> fi
> -dnl Don't build glut on osmesa
> -if test "x$enable_glut" = xyes && test "$mesa_driver" = osmesa; then
> - AC_MSG_WARN([Disabling glut since the driver is OSMesa])
> - enable_glut=no
> -fi
>
> if test "x$enable_glut" = xyes; then
> SRC_DIRS="$SRC_DIRS glut/glx"
> @@ -1238,6 +1311,9 @@ AC_ARG_ENABLE([gallium],
> [build gallium @<:@default=enabled@:>@])],
> [enable_gallium="$enableval"],
> [enable_gallium=yes])
> +if test "x$enable_gallium" = xno -a "x$enable_openvg" = xyes; then
> + AC_MSG_ERROR([cannot enable OpenVG without Gallium])
> +fi
> if test "x$enable_gallium" = xyes; then
> SRC_DIRS="$SRC_DIRS gallium gallium/winsys gallium/targets"
> AC_CHECK_HEADER([udis86.h], [HAS_UDIS86="yes"],
> @@ -1250,12 +1326,6 @@ AC_SUBST([LLVM_LIBS])
> AC_SUBST([LLVM_LDFLAGS])
> AC_SUBST([LLVM_VERSION])
>
> -VG_LIB_DEPS=""
> -EGL_CLIENT_APIS='$(GL_LIB)'
> -if test "x$enable_gles_overlay" = xyes; then
> - EGL_CLIENT_APIS="$EGL_CLIENT_APIS "'$(GLESv1_CM_LIB) $(GLESv2_LIB)'
> -fi
> -
> dnl
> dnl Gallium state trackers configuration
> dnl
> @@ -1271,6 +1341,8 @@ no)
> GALLIUM_STATE_TRACKERS_DIRS=""
> ;;
> yes)
> + st_egl="no"
> +
> # look at what else is built
> case "$mesa_driver" in
> xlib)
> @@ -1279,16 +1351,27 @@ yes)
> dri)
> GALLIUM_STATE_TRACKERS_DIRS="dri"
> HAVE_ST_DRI="yes"
> - if test "x$enable_egl" = xyes; then
> - GALLIUM_STATE_TRACKERS_DIRS="$GALLIUM_STATE_TRACKERS_DIRS egl"
> - HAVE_ST_EGL="yes"
> - fi
> + st_egl="yes"
> # Have only tested st/xorg on 1.6.0 servers
> PKG_CHECK_MODULES(XORG, [xorg-server >= 1.6.0 libdrm >= $LIBDRM_XORG_REQUIRED libkms >= $LIBKMS_XORG_REQUIRED],
> HAVE_ST_XORG="yes"; GALLIUM_STATE_TRACKERS_DIRS="$GALLIUM_STATE_TRACKERS_DIRS xorg",
> HAVE_ST_XORG="no")
> ;;
> + no)
> + st_egl="yes"
> esac
> +
> + if test "x$enable_egl" = xyes; then
> + if test "$enable_openvg" = yes; then
> + GALLIUM_STATE_TRACKERS_DIRS="$GALLIUM_STATE_TRACKERS_DIRS vega"
> + st_egl="yes"
> + fi
> +
> + if test "$st_egl" = yes; then
> + GALLIUM_STATE_TRACKERS_DIRS="$GALLIUM_STATE_TRACKERS_DIRS egl"
> + HAVE_ST_EGL="yes"
> + fi
> + fi
> ;;
> *)
> # verify the requested state tracker exist
> @@ -1314,23 +1397,6 @@ yes)
> PKG_CHECK_MODULES([LIBKMS_XORG], [libkms >= $LIBKMS_XORG_REQUIRED])
> HAVE_ST_XORG="yes"
> ;;
> - es)
> - AC_MSG_WARN([state tracker 'es' has been replaced by --enable-gles-overlay])
> -
> - if test "x$enable_gles_overlay" != xyes; then
> - if test "x$enable_gles1" != xyes -a "x$enable_gles2" != xyes; then
> - CORE_DIRS="mapi/es1api mapi/es2api $CORE_DIRS"
> - fi
> - GLES_OVERLAY=1
> - EGL_CLIENT_APIS="$EGL_CLIENT_APIS "'$(GLESv1_CM_LIB) $(GLESv2_LIB)'
> - fi
> - tracker=""
> - ;;
> - vega)
> - CORE_DIRS="$CORE_DIRS mapi/vgapi"
> - VG_LIB_DEPS="$VG_LIB_DEPS -lpthread"
> - EGL_CLIENT_APIS="$EGL_CLIENT_APIS "'$(VG_LIB)'
> - ;;
> esac
>
> if test -n "$tracker"; then
> @@ -1347,6 +1413,23 @@ yes)
> ;;
> esac
>
> +
> +EGL_CLIENT_APIS=""
> +VG_LIB_DEPS=""
> +
> +case "x$enable_opengl$enable_gles1$enable_gles2" in
> +x*yes*)
> + EGL_CLIENT_APIS="$EGL_CLIENT_APIS "'$(GL_LIB)'
> + ;;
> +esac
> +if test "x$enable_gles_overlay" = xyes; then
> + EGL_CLIENT_APIS="$EGL_CLIENT_APIS "'$(GLESv1_CM_LIB) $(GLESv2_LIB)'
> +fi
> +if test "x$enable_openvg" = xyes; then
> + EGL_CLIENT_APIS="$EGL_CLIENT_APIS "'$(VG_LIB)'
> + VG_LIB_DEPS="$VG_LIB_DEPS -lpthread"
> +fi
> +
> AC_SUBST([VG_LIB_DEPS])
> AC_SUBST([EGL_CLIENT_APIS])
>
> --
> 1.7.1
>
>
More information about the mesa-dev
mailing list