ubuntu-22.04.3-desktop-amd64/casper/filesystem/usr/share/doc/xorg/howto/build-mesa.html

290 lines
10 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
<meta name="generator" content="AsciiDoc 10.1.2" />
<title>How to build mesa</title>
<link rel="stylesheet" href="../xsf.css" type="text/css" />
<script type="text/javascript" src="../asciidoc-xhtml11.js"></script>
<script type="text/javascript">
/*<![CDATA[*/
asciidoc.install(2);
/*]]>*/
</script>
</head>
<body class="article">
<div id="header">
<h1><a href="../index.html">XSF</a> / How to build mesa</h1>
<span id="author">Cyril Brulebois</span><br />
<span id="email"><code>&lt;<a href="mailto:kibi@debian.org">kibi@debian.org</a>&gt;</code></span><br />
<div id="toc">
<div id="toctitle">Table of Contents</div>
<noscript><p><b>JavaScript must be enabled in your browser to display the table of contents.</b></p></noscript>
</div>
</div>
<div id="content">
<div class="sect1">
<h2 id="_foreword">Foreword</h2>
<div class="sectionbody">
<div class="paragraph"><p>Mesa is a special package since many flavours are built, which means
it takes quite some time to get all packages ready, as well as some
disc space (over 2GB for the <code>build/</code> directory alone).</p></div>
<div class="paragraph"><p>Also, trying to figure out whether latest <code>master</code> is also affected,
or backporting some bug fixes might lead to some painful I/O while
generating the <code>.deb</code> files, and then installing/unpacking them. This
is why this document was written: Helping users test other mesa
releases, branches, bug fixes without having to build full packages,
and without having to mess with their systems (<em>i.e.</em> no root access
is needed once the build dependencies are installed).</p></div>
<div class="paragraph"><p>Well focus on the DRI (Direct Rendering Infrastructure) flavour
(<code>libgl1-mesa-dri</code>), which is the most common.</p></div>
<div class="paragraph"><p>It might be possible to adapt the following steps to another flavour,
in which case the appropriate options to be passed to <code>./configure</code>
should be looked up in the <code>debian/rules</code> file of the Debian source
package.</p></div>
<div style="page-break-after:always"></div>
</div>
</div>
<div class="sect1">
<h2 id="_gathering_information">Gathering information</h2>
<div class="sectionbody">
<div class="paragraph"><p>Get started by installing <code>mesa-utils</code>, which contains <code>glxinfo</code>.</p></div>
<div class="ulist"><ul>
<li>
<p>
<em>Is direct rendering enabled?</em>
</p>
<div class="literalblock">
<div class="content">
<pre><code>$ glxinfo | grep ^direct
direct rendering: Yes</code></pre>
</div></div>
<div class="paragraph"><p>↪ Yes.</p></div>
</li>
<li>
<p>
<em>Is this the classic or <a href="https://en.wikipedia.org/wiki/Gallium3D">Gallium</a> driver?</em>
</p>
<div class="literalblock">
<div class="content">
<pre><code>$ glxinfo | grep 'renderer string'
OpenGL renderer string: Mesa DRI Intel(R) 945GM GEM 20100330 DEVELOPMENT</code></pre>
</div></div>
<div class="paragraph"><p>↪ No “Gallium” here, therefore: “classic”.</p></div>
</li>
<li>
<p>
<em>Which driver is this, and where is it located?</em>
</p>
<div class="literalblock">
<div class="content">
<pre><code>$ LIBGL_DEBUG=verbose glxinfo 2&gt;&amp;1 &gt;/dev/null | grep so$
libGL: OpenDriver: trying /usr/lib/dri/tls/i915_dri.so
libGL: OpenDriver: trying /usr/lib/dri/i915_dri.so</code></pre>
</div></div>
<div class="paragraph"><p><code>i915</code>, from the system directory: <code>/usr/lib/dri</code> (likely installed through a Debian package).</p></div>
</li>
<li>
<p>
<em>How can I get more debugging information?</em>
</p>
<div class="literalblock">
<div class="content">
<pre><code>export LIBGL_DEBUG=verbose
export MESA_DEBUG=1
export EGL_LOG_LEVEL=debug</code></pre>
</div></div>
</li>
</ul></div>
<div style="page-break-after:always"></div>
</div>
</div>
<div class="sect1">
<h2 id="_preparing_mesa_sources">Preparing mesa sources</h2>
<div class="sectionbody">
<div class="paragraph"><p>To get started, installing all build dependencies of the <code>mesa</code> source
package should be sufficient, along with the essential build tools,
and <code>git</code>:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>$ sudo apt-get install build-essential git
$ sudo apt-get build-dep mesa</code></pre>
</div></div>
<div class="paragraph"><p>Make sure you have some disc space available, since the git repository
is over 120MB, and since the mesa directory is over 500MB after a
build. Once youre ready, grab the upstream mesa sources:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>$ git clone git://anongit.freedesktop.org/mesa/mesa mesa.git
$ cd mesa.git
$ autoreconf -vfi</code></pre>
</div></div>
<div class="paragraph"><p>Heres what the <code>./configure</code> call will look like:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>$ ./configure --prefix=/usr \
--enable-driglx-direct \
--enable-gles1 \
--enable-gles2 \
--enable-glx-tls \
--with-dri-driverdir=/usr/lib/dri \
--with-egl-platforms='drm x11' \
</code></pre>
</div></div>
<div class="paragraph"><p>Now, what are the parameters to replace “<code></code>” with? Basically, if
you determined an Intel driver (<code>i915</code> or <code>i965</code>), you want to use the
classic drivers and to disable the Gallium drivers. Other drivers are
only available on Gallium (<code>r300</code>, <code>r600</code>, <code>radeonsi</code> and more).
Running <code>./configure --help</code> might be useful.</p></div>
<div class="paragraph"><p>Examples for common drivers:</p></div>
<div class="ulist"><ul>
<li>
<p>
For <code>i915</code>, you need:
</p>
<div class="literalblock">
<div class="content">
<pre><code>--with-dri-drivers=i915</code></pre>
</div></div>
</li>
<li>
<p>
For <code>i965</code>, you need:
</p>
<div class="literalblock">
<div class="content">
<pre><code>--with-dri-drivers=i965</code></pre>
</div></div>
</li>
<li>
<p>
For <code>nouveau</code>, you may want to try:
</p>
<div class="literalblock">
<div class="content">
<pre><code>--with-dri-drivers=nouveau --with-gallium-drivers=nouveau</code></pre>
</div></div>
</li>
<li>
<p>
For <code>r300</code>, you need:
</p>
<div class="literalblock">
<div class="content">
<pre><code>--with-gallium-drivers=r300</code></pre>
</div></div>
</li>
<li>
<p>
For <code>r600</code>, you need:
</p>
<div class="literalblock">
<div class="content">
<pre><code>--with-gallium-drivers=r600</code></pre>
</div></div>
</li>
<li>
<p>
For <code>radeonsi</code>, you need:
</p>
<div class="literalblock">
<div class="content">
<pre><code>--with-gallium-drivers=radeonsi</code></pre>
</div></div>
</li>
</ul></div>
<div class="paragraph"><p>Now, once youve run <code>./configure</code>, time for your favorite beverage:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>$ make</code></pre>
</div></div>
<div style="page-break-after:always"></div>
</div>
</div>
<div class="sect1">
<h2 id="_running_the_newly_built_mesa_libraries">Running the newly-built mesa libraries</h2>
<div class="sectionbody">
<div class="paragraph"><p>Shared libraries end up in the <code>lib/</code> directory. It contains the
classic drivers, while Gallium drivers end up under <code>lib/gallium</code>. If
youre not an Intel user, overwrite the classic drivers with the
Gallium ones:</p></div>
<div class="listingblock">
<div class="content">
<pre><code>$ mv lib/gallium/* lib/</code></pre>
</div></div>
<div class="paragraph"><p>Now, 3 variables need to be set, so that the locally-built libraries
are used.</p></div>
<div class="ulist"><ul>
<li>
<p>
To begin with, libGL itself and its drivers:
</p>
<div class="literalblock">
<div class="content">
<pre><code>$ export LIBGL_DRIVERS_PATH=lib</code></pre>
</div></div>
<div class="paragraph"><p><em>Did this work?</em></p></div>
<div class="literalblock">
<div class="content">
<pre><code>$ LIBGL_DEBUG=verbose glxinfo 2&gt;&amp;1 &gt;/dev/null | grep so$
libGL: OpenDriver: trying lib/tls/i915_dri.so
libGL: OpenDriver: trying lib/i915_dri.so</code></pre>
</div></div>
<div class="paragraph"><p>↪ Yes: No system directory, paths are relative to <code>lib/</code>.</p></div>
</li>
<li>
<p>
Set <code>LD_LIBRARY_PATH</code> to make sure the locally-built libraries
(including those pulled through library dependencies) are used,
instead of system ones:
</p>
<div class="literalblock">
<div class="content">
<pre><code>$ export LD_LIBRARY_PATH=lib</code></pre>
</div></div>
<div class="paragraph"><p><em>Did this work?</em></p></div>
<div class="literalblock">
<div class="content">
<pre><code>$ ldd lib/libGLESv2.so | grep glapi
libglapi.so.0 =&gt; lib/libglapi.so.0 (0x00007fee3192e000)</code></pre>
</div></div>
<div class="paragraph"><p>↪ Yes: Path is relative to <code>lib</code>.</p></div>
</li>
<li>
<p>
Set the EGL search path:
</p>
<div class="literalblock">
<div class="content">
<pre><code>$ export EGL_DRIVERS_PATH=lib/egl</code></pre>
</div></div>
<div class="paragraph"><p><em>Did this work?</em></p></div>
<div class="literalblock">
<div class="content">
<pre><code>$ EGL_LOG_LEVEL=debug es2_info 2&gt;&amp;1 &gt;/dev/null | grep '\.so'
libEGL debug: added lib/egl/egl_gallium.so to module array
libEGL debug: dlopen(lib/egl/egl_gallium.so)
libEGL debug: DRI2: dlopen(lib/i915_dri.so)</code></pre>
</div></div>
<div class="paragraph"><p>↪ Yes: No system directory, paths are relative to <code>lib/</code>.</p></div>
</li>
</ul></div>
<h3 id="_the_end" class="float">The end.</h3>
<div class="paragraph"><p>Now you should be ready to test upstreams suggestions!</p></div>
</div>
</div>
</div>
<div id="footnotes"><hr /></div>
<div id="footer">
<div id="footer-text">
Last updated
2020-10-09 09:18:55 UTC
</div>
</div>
</body>
</html>