radv/vulkan: Move radv_get_driver_version to src/vulkan/util
[mesa.git] / docs / autoconf.html
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2 <html lang="en">
3 <head>
4 <meta http-equiv="content-type" content="text/html; charset=utf-8">
5 <title>Compilation and Installation using Autoconf</title>
6 <link rel="stylesheet" type="text/css" href="mesa.css">
7 </head>
8 <body>
9
10 <div class="header">
11 <h1>The Mesa 3D Graphics Library</h1>
12 </div>
13
14 <iframe src="contents.html"></iframe>
15 <div class="content">
16
17 <h1>Compilation and Installation using Autoconf</h1>
18
19 <ol>
20 <li><p><a href="#basic">Basic Usage</a></li>
21 <li><p><a href="#driver">Driver Options</a>
22 <ul>
23 <li><a href="#xlib">Xlib Driver Options</a></li>
24 <li><a href="#dri">DRI Driver Options</a></li>
25 <li><a href="#osmesa">OSMesa Driver Options</a></li>
26 </ul>
27 </ol>
28
29
30 <h2 id="basic">1. Basic Usage</h2>
31
32 <p>
33 The autoconf generated configure script can be used to guess your
34 platform and change various options for building Mesa. To use the
35 configure script, type:
36 </p>
37
38 <pre>
39 ./configure
40 </pre>
41
42 <p>
43 To see a short description of all the options, type <code>./configure
44 --help</code>. If you are using a development snapshot and the configure
45 script does not exist, type <code>./autogen.sh</code> to generate it
46 first. If you know the options you want to pass to
47 <code>configure</code>, you can pass them to <code>autogen.sh</code>. It
48 will run <code>configure</code> with these options after it is
49 generated. Once you have run <code>configure</code> and set the options
50 to your preference, type:
51 </p>
52
53 <pre>
54 make
55 </pre>
56
57 <p>
58 This will produce libGL.so and/or several other libraries depending on the
59 options you have chosen. Later, if you want to rebuild for a different
60 configuration run <code>make realclean</code> before rebuilding.
61 </p>
62
63 <p>
64 Some of the generic autoconf options are used with Mesa:
65 </p>
66 <dl>
67 <dt><code>--prefix=PREFIX</code></dt>
68 <dd><p>This is the root directory where
69 files will be installed by <code>make install</code>. The default is
70 <code>/usr/local</code>.</p>
71 </dd>
72
73 <dt><code>--exec-prefix=EPREFIX</code></dt>
74 <dd><p>This is the root directory
75 where architecture-dependent files will be installed. In Mesa, this is
76 only used to derive the directory for the libraries. The default is
77 <code>${prefix}</code>.</p>
78 </dd>
79
80 <dt><code>--libdir=LIBDIR</code></dt>
81 <dd><p>This option specifies the directory
82 where the GL libraries will be installed. The default is
83 <code>${exec_prefix}/lib</code>. It also serves as the name of the
84 library staging area in the source tree. For instance, if the option
85 <code>--libdir=/usr/local/lib64</code> is used, the libraries will be
86 created in a <code>lib64</code> directory at the top of the Mesa source
87 tree.</p>
88 </dd>
89
90 <dt><code>--sysconfdir=DIR</code></dt>
91 <dd><p>This option specifies the directory where the configuration
92 files will be installed. The default is <code>${prefix}/etc</code>.
93 Currently there's only one config file provided when dri drivers are
94 enabled - it's <code>drirc</code>.</p>
95 </dd>
96
97 <dt><code>--enable-static, --disable-shared</code></dt>
98 <dd><p>By default, Mesa
99 will build shared libraries. Either of these options will force static
100 libraries to be built. It is not currently possible to build static and
101 shared libraries in a single pass.</p>
102 </dd>
103
104 <dt><code>CC, CFLAGS, CXX, CXXFLAGS</code></dt>
105 <dd><p>These environment variables
106 control the C and C++ compilers used during the build. By default,
107 <code>gcc</code> and <code>g++</code> are used and the debug/optimisation
108 level is left unchanged.</p>
109 </dd>
110
111 <dt><code>LDFLAGS</code></dt>
112 <dd><p>An environment variable specifying flags to
113 pass when linking programs. These should be empty and
114 <code>PKG_CONFIG_PATH</code> is recommended to be used instead. If needed
115 it can be used to direct the linker to use libraries in nonstandard
116 directories. For example, <code>LDFLAGS="-L/usr/X11R6/lib"</code>.</p>
117 </dd>
118
119 <dt><code>PKG_CONFIG_PATH</code></dt>
120 <dd><p>The
121 <code>pkg-config</code> utility is a hard requirement for configuring and
122 building mesa. It is used to search for external libraries
123 on the system. This environment variable is used to control the search
124 path for <code>pkg-config</code>. For instance, setting
125 <code>PKG_CONFIG_PATH=/usr/X11R6/lib/pkgconfig</code> will search for
126 package metadata in <code>/usr/X11R6</code> before the standard
127 directories.</p>
128 </dd>
129 </dl>
130
131 <p>
132 There are also a few general options for altering the Mesa build:
133 </p>
134 <dl>
135 <dt><code>--enable-debug</code></dt>
136 <dd><p>This option will set the compiler debug/optimisation levels (if the user
137 hasn't already set them via the CFLAGS/CXXFLAGS) and macros to aid in
138 debugging the Mesa libraries.</p>
139
140 <p>Note that enabling this option can lead to noticeable loss of performance.</p>
141
142 <dt><code>--disable-asm</code></dt>
143 <dd><p>There are assembly routines
144 available for a few architectures. These will be used by default if
145 one of these architectures is detected. This option ensures that
146 assembly will not be used.</p>
147 </dd>
148
149 <dt><code>--build=</code></dt>
150 <dt><code>--host=</code></dt>
151 <dd><p>By default, the build will compile code for the architecture that
152 it's running on. In order to build cross-compile Mesa on a x86-64 machine
153 that is to run on a i686, one would need to set the options to:</p>
154
155 <p><code>--build=x86_64-pc-linux-gnu --host=i686-pc-linux-gnu</code></p>
156
157 Note that these can vary from distribution to distribution. For more
158 information check with the
159 <a href="https://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Specifying-Target-Triplets.html">
160 autoconf manual</a>.
161 Note that you will need to correctly set <code>PKG_CONFIG_PATH</code> as well.
162
163
164 <p>In some cases a single compiler is capable of handling both architectures
165 (multilib) in that case one would need to set the <code>CC,CXX</code> variables
166 appending the correct machine options. Seek your compiler documentation for
167 further information -
168 <a href="https://gcc.gnu.org/onlinedocs/gcc/Submodel-Options.html"> gcc
169 machine dependent options</a></p>
170
171 <p>In addition to specifying correct <code>PKG_CONFIG_PATH</code> for the target
172 architecture, the following should be sufficient to configure multilib Mesa</p>
173
174 <code>./configure CC="gcc -m32" CXX="g++ -m32" --build=x86_64-pc-linux-gnu --host=i686-pc-linux-gnu ...</code>
175 </dd>
176 </dl>
177
178
179 <h2 id="driver">2. GL Driver Options</h2>
180
181 <p>
182 There are several different driver modes that Mesa can use. These are
183 described in more detail in the <a href="install.html">basic
184 installation instructions</a>. The Mesa driver is controlled through the
185 configure options <code>--enable-glx</code> and <code>--enable-osmesa</code>
186 </p>
187
188 <h3 id="xlib">Xlib</h3><p>
189 It uses Xlib as a software renderer to do all rendering. It corresponds
190 to the option <code>--enable-glx=xlib</code> or <code>--enable-glx=gallium-xlib</code>.
191
192 <h3 id="dri">DRI</h3><p>This mode uses the DRI hardware drivers for
193 accelerated OpenGL rendering. To enable use <code>--enable-glx=dri
194 --enable-dri</code>.
195
196 <!-- DRI specific options -->
197 <dl>
198 <dt><code>--with-dri-driverdir=DIR</code>
199 <dd><p> This option specifies the
200 location the DRI drivers will be installed to and the location libGL
201 will search for DRI drivers. The default is <code>${libdir}/dri</code>.
202 <dt><code>--with-dri-drivers=DRIVER,DRIVER,...</code>
203 <dd><p> This option
204 allows a specific set of DRI drivers to be built. For example,
205 <code>--with-dri-drivers="swrast,i965,radeon,nouveau"</code>. By
206 default, the drivers will be chosen depending on the target platform.
207 See the directory <code>src/mesa/drivers/dri</code> in the source tree
208 for available drivers. Beware that the swrast DRI driver is used by both
209 libGL and the X.Org xserver GLX module to do software rendering, so you
210 may run into problems if it is not available.
211 <!-- This explanation might be totally bogus. Kristian? -->
212 <dt><code>--disable-driglx-direct</code>
213 <dd><p> Disable direct rendering in
214 GLX. Normally, direct hardware rendering through the DRI drivers and
215 indirect software rendering are enabled in GLX. This option disables
216 direct rendering entirely. It can be useful on architectures where
217 kernel DRM modules are not available.
218 <dt><code>--enable-glx-tls</code> <dd><p>
219 Enable Thread Local Storage (TLS) in
220 GLX.
221 <dt><code>--with-expat=DIR</code>
222 <dd><p><strong>DEPRECATED</strong>, use <code>PKG_CONFIG_PATH</code> instead.</p>
223 <p>The DRI-enabled libGL uses expat to
224 parse the DRI configuration files in <code>${sysconfdir}/drirc</code> and
225 <code>~/.drirc</code>. This option allows a specific expat installation
226 to be used. For example, <code>--with-expat=/usr/local</code> will
227 search for expat headers and libraries in <code>/usr/local/include</code>
228 and <code>/usr/local/lib</code>, respectively.
229 </dl>
230
231 <h3 id="osmesa">OSMesa </h3><p> No libGL is built in this
232 mode. Instead, the driver code is built into the Off-Screen Mesa
233 (OSMesa) library. See the <a href="osmesa.html">Off-Screen Rendering</a>
234 page for more details. It corresponds to the option
235 <code>--enable-osmesa</code>.
236
237 <!-- OSMesa specific options -->
238 <dl>
239 <dt><code>--with-osmesa-bits=BITS</code>
240 <dd><p> This option allows the size
241 of the color channel in bits to be specified. By default, an 8-bit
242 channel will be used, and the driver will be named libOSMesa. Other
243 options are 16- and 32-bit color channels, which will add the bit size
244 to the library name. For example, <code>--with-osmesa-bits=16</code>
245 will create the libOSMesa16 library with a 16-bit color channel.
246 </dl>
247
248
249 <h2 id="library">3. Library Options</h2>
250
251 <p>
252 The configure script provides more fine grained control over the libraries
253 that will be built.
254
255 </div>
256 </body>
257 </html>