+++ /dev/null
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <title>Compilation and Installation using Autoconf</title>
- <link rel="stylesheet" type="text/css" href="mesa.css">
-</head>
-<body>
-
-<div class="header">
- <h1>The Mesa 3D Graphics Library</h1>
-</div>
-
-<iframe src="contents.html"></iframe>
-<div class="content">
-
-<h1>Compilation and Installation using Autoconf</h1>
-
-<ol>
-<li><p><a href="#basic">Basic Usage</a></li>
-<li><p><a href="#driver">Driver Options</a>
- <ul>
- <li><a href="#xlib">Xlib Driver Options</a></li>
- <li><a href="#dri">DRI Driver Options</a></li>
- <li><a href="#osmesa">OSMesa Driver Options</a></li>
- </ul>
-</ol>
-
-<h2>ATTENTION:</h2>
-<p>
- The autotools build is being replaced by the <a href="meson.html">meson</a>
- build system. If you haven't yet now is a good time to try using meson and
- report any issues you run into.
-</p>
-
-<h2 id="basic">1. Basic Usage</h2>
-
-<p>
-The autoconf generated configure script can be used to guess your
-platform and change various options for building Mesa. To use the
-configure script, type:
-</p>
-
-<pre>
- ./configure
-</pre>
-
-<p>
-To see a short description of all the options, type <code>./configure
---help</code>. If you are using a development snapshot and the configure
-script does not exist, type <code>./autogen.sh</code> to generate it
-first. If you know the options you want to pass to
-<code>configure</code>, you can pass them to <code>autogen.sh</code>. It
-will run <code>configure</code> with these options after it is
-generated. Once you have run <code>configure</code> and set the options
-to your preference, type:
-</p>
-
-<pre>
- make
-</pre>
-
-<p>
-This will produce libGL.so and/or several other libraries depending on the
-options you have chosen. Later, if you want to rebuild for a different
-configuration run <code>make realclean</code> before rebuilding.
-</p>
-
-<p>
-Some of the generic autoconf options are used with Mesa:
-</p>
-<dl>
-<dt><code>--prefix=PREFIX</code></dt>
-<dd><p>This is the root directory where
-files will be installed by <code>make install</code>. The default is
-<code>/usr/local</code>.</p>
-</dd>
-
-<dt><code>--exec-prefix=EPREFIX</code></dt>
-<dd><p>This is the root directory
-where architecture-dependent files will be installed. In Mesa, this is
-only used to derive the directory for the libraries. The default is
-<code>${prefix}</code>.</p>
-</dd>
-
-<dt><code>--libdir=LIBDIR</code></dt>
-<dd><p>This option specifies the directory
-where the GL libraries will be installed. The default is
-<code>${exec_prefix}/lib</code>. It also serves as the name of the
-library staging area in the source tree. For instance, if the option
-<code>--libdir=/usr/local/lib64</code> is used, the libraries will be
-created in a <code>lib64</code> directory at the top of the Mesa source
-tree.</p>
-</dd>
-
-<dt><code>--sysconfdir=DIR</code></dt>
-<dd><p>This option specifies the directory where the configuration
-files will be installed. The default is <code>${prefix}/etc</code>.
-Currently there's only one config file provided when dri drivers are
-enabled - it's <code>drirc</code>.</p>
-</dd>
-
-<dt><code>--datadir=DIR</code></dt>
-<dd><p>This option specifies the directory where the data files will
-be installed. The default is <code>${prefix}/share</code>.
-Currently when dri drivers are enabled, <code>drirc.d/</code> is at
-this place.</p>
-</dd>
-
-<dt><code>--enable-static, --disable-shared</code></dt>
-<dd><p>By default, Mesa
-will build shared libraries. Either of these options will force static
-libraries to be built. It is not currently possible to build static and
-shared libraries in a single pass.</p>
-</dd>
-
-<dt><code>CC, CFLAGS, CXX, CXXFLAGS</code></dt>
-<dd><p>These environment variables
-control the C and C++ compilers used during the build. By default,
-<code>gcc</code> and <code>g++</code> are used and the debug/optimisation
-level is left unchanged.</p>
-</dd>
-
-<dt><code>LDFLAGS</code></dt>
-<dd><p>An environment variable specifying flags to
-pass when linking programs. These should be empty and
-<code>PKG_CONFIG_PATH</code> is recommended to be used instead. If needed
-it can be used to direct the linker to use libraries in nonstandard
-directories. For example, <code>LDFLAGS="-L/usr/X11R6/lib"</code>.</p>
-</dd>
-
-<dt><code>PKG_CONFIG_PATH</code></dt>
-<dd><p>The
-<code>pkg-config</code> utility is a hard requirement for configuring and
-building mesa. It is used to search for external libraries
-on the system. This environment variable is used to control the search
-path for <code>pkg-config</code>. For instance, setting
-<code>PKG_CONFIG_PATH=/usr/X11R6/lib/pkgconfig</code> will search for
-package metadata in <code>/usr/X11R6</code> before the standard
-directories.</p>
-</dd>
-</dl>
-
-<p>
-There are also a few general options for altering the Mesa build:
-</p>
-<dl>
-<dt><code>--enable-debug</code></dt>
-<dd><p>This option will set the compiler debug/optimisation levels (if the user
-hasn't already set them via the CFLAGS/CXXFLAGS) and macros to aid in
-debugging the Mesa libraries.</p>
-
-<p>Note that enabling this option can lead to noticeable loss of performance.</p>
-
-<dt><code>--disable-asm</code></dt>
-<dd><p>There are assembly routines
-available for a few architectures. These will be used by default if
-one of these architectures is detected. This option ensures that
-assembly will not be used.</p>
-</dd>
-
-<dt><code>--build=</code></dt>
-<dt><code>--host=</code></dt>
-<dd><p>By default, the build will compile code for the architecture that
-it's running on. In order to build cross-compile Mesa on a x86-64 machine
-that is to run on a i686, one would need to set the options to:</p>
-
-<p><code>--build=x86_64-pc-linux-gnu --host=i686-pc-linux-gnu</code></p>
-
-Note that these can vary from distribution to distribution. For more
-information check with the
-<a href="https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Specifying-Target-Triplets.html">
-autoconf manual</a>.
-Note that you will need to correctly set <code>PKG_CONFIG_PATH</code> as well.
-
-
-<p>In some cases a single compiler is capable of handling both architectures
-(multilib) in that case one would need to set the <code>CC,CXX</code> variables
-appending the correct machine options. Seek your compiler documentation for
-further information -
-<a href="https://gcc.gnu.org/onlinedocs/gcc/Submodel-Options.html"> gcc
-machine dependent options</a></p>
-
-<p>In addition to specifying correct <code>PKG_CONFIG_PATH</code> for the target
-architecture, the following should be sufficient to configure multilib Mesa</p>
-
-<code>./configure CC="gcc -m32" CXX="g++ -m32" --build=x86_64-pc-linux-gnu --host=i686-pc-linux-gnu ...</code>
-</dd>
-</dl>
-
-
-<h2 id="driver">2. GL Driver Options</h2>
-
-<p>
-There are several different driver modes that Mesa can use. These are
-described in more detail in the <a href="install.html">basic
-installation instructions</a>. The Mesa driver is controlled through the
-configure options <code>--enable-glx</code> and <code>--enable-osmesa</code>
-</p>
-
-<h3 id="xlib">Xlib</h3><p>
-It uses Xlib as a software renderer to do all rendering. It corresponds
-to the option <code>--enable-glx=xlib</code> or <code>--enable-glx=gallium-xlib</code>.
-
-<h3 id="dri">DRI</h3><p>This mode uses the DRI hardware drivers for
-accelerated OpenGL rendering. To enable use <code>--enable-glx=dri
---enable-dri</code>.
-
-<!-- DRI specific options -->
-<dl>
-<dt><code>--with-dri-driverdir=DIR</code>
-<dd><p> This option specifies the
-location the DRI drivers will be installed to and the location libGL
-will search for DRI drivers. The default is <code>${libdir}/dri</code>.
-<dt><code>--with-dri-drivers=DRIVER,DRIVER,...</code>
-<dd><p> This option
-allows a specific set of DRI drivers to be built. For example,
-<code>--with-dri-drivers="swrast,i965,radeon,nouveau"</code>. By
-default, the drivers will be chosen depending on the target platform.
-See the directory <code>src/mesa/drivers/dri</code> in the source tree
-for available drivers. Beware that the swrast DRI driver is used by both
-libGL and the X.Org xserver GLX module to do software rendering, so you
-may run into problems if it is not available.
-<!-- This explanation might be totally bogus. Kristian? -->
-<dt><code>--disable-driglx-direct</code>
-<dd><p> Disable direct rendering in
-GLX. Normally, direct hardware rendering through the DRI drivers and
-indirect software rendering are enabled in GLX. This option disables
-direct rendering entirely. It can be useful on architectures where
-kernel DRM modules are not available.
-<dt><code>--enable-glx-tls</code> <dd><p>
-Enable Thread Local Storage (TLS) in
-GLX.
-<dt><code>--with-expat=DIR</code>
-<dd><p><strong>DEPRECATED</strong>, use <code>PKG_CONFIG_PATH</code> instead.</p>
-<p>The DRI-enabled libGL uses expat to
-parse the DRI configuration files in <code>${sysconfdir}/drirc</code> and
-<code>~/.drirc</code>. This option allows a specific expat installation
-to be used. For example, <code>--with-expat=/usr/local</code> will
-search for expat headers and libraries in <code>/usr/local/include</code>
-and <code>/usr/local/lib</code>, respectively.
-</dl>
-
-<h3 id="osmesa">OSMesa </h3><p> No libGL is built in this
-mode. Instead, the driver code is built into the Off-Screen Mesa
-(OSMesa) library. See the <a href="osmesa.html">Off-Screen Rendering</a>
-page for more details. It corresponds to the option
-<code>--enable-osmesa</code>.
-
-<!-- OSMesa specific options -->
-<dl>
-<dt><code>--with-osmesa-bits=BITS</code>
-<dd><p> This option allows the size
-of the color channel in bits to be specified. By default, an 8-bit
-channel will be used, and the driver will be named libOSMesa. Other
-options are 16- and 32-bit color channels, which will add the bit size
-to the library name. For example, <code>--with-osmesa-bits=16</code>
-will create the libOSMesa16 library with a 16-bit color channel.
-</dl>
-
-
-<h2 id="library">3. Library Options</h2>
-
-<p>
-The configure script provides more fine grained control over the libraries
-that will be built.
-
-</div>
-</body>
-</html>
</p>
<ul>
-<li>make distcheck (you can omit this if you're not using --dist below)
+<li>meson dist
<li>scons (from release tarball)
<li>the produced binaries work
</ul>
<p>
-Here is one solution that I've been using.
+ Here is one solution:
</p>
<pre>
- # Set MAKEFLAGS if you haven't already
- git clean -fXd; git clean -nxd
- read # quick cross check any outstanding files
- export __version=`cat VERSION`
- export __mesa_root=../
- export __build_root=./foo
- chmod 755 -fR $__build_root; rm -rf $__build_root
- mkdir -p $__build_root && cd $__build_root
-
- # For the native builds - such as distcheck, scons, sanity test, you
- # may want to specify which LLVM to use:
- # export LLVM_CONFIG=/usr/lib/llvm-3.9/bin/llvm-config
-
- # Do a full distcheck
- $__mesa_root/autogen.sh && make distcheck
-
- # Build check the tarballs (scons, linux)
- tar -xaf mesa-$__version.tar.xz && cd mesa-$__version
- scons
- cd .. && rm -rf mesa-$__version
-
- # Build check the tarballs (scons, windows/mingw)
- # Temporary drop LLVM_CONFIG, unless you have a Windows/mingw one.
- # save_LLVM_CONFIG=`echo $LLVM_CONFIG`; unset LLVM_CONFIG
- tar -xaf mesa-$__version.tar.xz && cd mesa-$__version
- scons platform=windows toolchain=crossmingw
- cd .. && rm -rf mesa-$__version
-
- # Test the automake binaries
- # Restore LLVM_CONFIG, if applicable:
- # export LLVM_CONFIG=`echo $save_LLVM_CONFIG`; unset save_LLVM_CONFIG
- tar -xaf mesa-$__version.tar.xz && cd mesa-$__version
- ./configure \
- --with-dri-drivers=i965,swrast \
- --with-gallium-drivers=swrast \
- --with-vulkan-drivers=intel \
- --enable-llvm-shared-libs \
- --enable-llvm \
- --enable-glx-tls \
- --enable-gbm \
- --enable-egl \
- --with-platforms=x11,drm,wayland,surfaceless
- make && DESTDIR=`pwd`/test make install
-
- # Drop LLVM_CONFIG, if applicable:
- # unset LLVM_CONFIG
-
- __glxinfo_cmd='glxinfo 2>&1 | egrep -o "Mesa.*|Gallium.*|.*dri\.so"'
- __glxgears_cmd='glxgears 2>&1 | grep -v "configuration file"'
- __es2info_cmd='es2_info 2>&1 | egrep "GL_VERSION|GL_RENDERER|.*dri\.so"'
- __es2gears_cmd='es2gears_x11 2>&1 | grep -v "configuration file"'
- test "x$LD_LIBRARY_PATH" != 'x' && __old_ld="$LD_LIBRARY_PATH"
- export LD_LIBRARY_PATH=`pwd`/test/usr/local/lib/:"${__old_ld}"
- export LIBGL_DRIVERS_PATH=`pwd`/test/usr/local/lib/dri/
- export LIBGL_DEBUG=verbose
- eval $__glxinfo_cmd
- eval $__glxgears_cmd
- eval $__es2info_cmd
- eval $__es2gears_cmd
- export LIBGL_ALWAYS_SOFTWARE=true
- eval $__glxinfo_cmd
- eval $__glxgears_cmd
- eval $__es2info_cmd
- eval $__es2gears_cmd
- export LIBGL_ALWAYS_SOFTWARE=true
- export GALLIUM_DRIVER=softpipe
- eval $__glxinfo_cmd
- eval $__glxgears_cmd
- eval $__es2info_cmd
- eval $__es2gears_cmd
- # Smoke test DOTA2
- unset LD_LIBRARY_PATH
- test "x$__old_ld" != 'x' && export LD_LIBRARY_PATH="$__old_ld" && unset __old_ld
- unset LIBGL_DRIVERS_PATH
- unset LIBGL_DEBUG
- unset LIBGL_ALWAYS_SOFTWARE
- unset GALLIUM_DRIVER
- export VK_ICD_FILENAMES=`pwd`/src/intel/vulkan/dev_icd.json
- steam steam://rungameid/570 -vconsole -vulkan
- unset VK_ICD_FILENAMES
+ __glxgears_cmd='glxgears 2>&1 | grep -v "configuration file"'
+ __es2info_cmd='es2_info 2>&1 | egrep "GL_VERSION|GL_RENDERER|.*dri\.so"'
+ __es2gears_cmd='es2gears_x11 2>&1 | grep -v "configuration file"'
+ test "x$LD_LIBRARY_PATH" != 'x' && __old_ld="$LD_LIBRARY_PATH"
+ export LD_LIBRARY_PATH=`pwd`/test/usr/local/lib/:"${__old_ld}"
+ export LIBGL_DRIVERS_PATH=`pwd`/test/usr/local/lib/dri/
+ export LIBGL_DEBUG=verbose
+ eval $__glxinfo_cmd
+ eval $__glxgears_cmd
+ eval $__es2info_cmd
+ eval $__es2gears_cmd
+ export LIBGL_ALWAYS_SOFTWARE=true
+ eval $__glxinfo_cmd
+ eval $__glxgears_cmd
+ eval $__es2info_cmd
+ eval $__es2gears_cmd
+ export LIBGL_ALWAYS_SOFTWARE=true
+ export GALLIUM_DRIVER=softpipe
+ eval $__glxinfo_cmd
+ eval $__glxgears_cmd
+ eval $__es2info_cmd
+ eval $__es2gears_cmd
+ # Smoke test DOTA2
+ unset LD_LIBRARY_PATH
+ test "x$__old_ld" != 'x' && export LD_LIBRARY_PATH="$__old_ld" && unset __old_ld
+ unset LIBGL_DRIVERS_PATH
+ unset LIBGL_DEBUG
+ unset LIBGL_ALWAYS_SOFTWARE
+ unset GALLIUM_DRIVER
+ export VK_ICD_FILENAMES=`pwd`/src/intel/vulkan/dev_icd.json
+ steam steam://rungameid/570 -vconsole -vulkan
+ unset VK_ICD_FILENAMES
</pre>
<h3>Update version in file VERSION</h3>