blob: dcad062c0a1982bd001063750c00b6f57b6ae693 [file] [log] [blame]
Dylan Bakerbc17ac52017-10-17 12:19:49 -07001<!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 Meson</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 Meson</h1>
18
19<h2 id="basic">1. Basic Usage</h2>
20
Dylan Baker2aad12b2018-03-01 11:32:56 -080021<p><strong>The Meson build system is generally considered stable and ready
22for production</strong></p>
Dylan Bakerbc17ac52017-10-17 12:19:49 -070023
Dylan Baker1da60662018-09-18 09:01:45 -070024<p>The meson build is tested on Linux, macOS, Cygwin and Haiku, FreeBSD,
25DragonflyBSD, NetBSD, and should work on OpenBSD.</p>
Dylan Baker2aad12b2018-03-01 11:32:56 -080026
Dylan Baker1da60662018-09-18 09:01:45 -070027<p><strong>Mesa requires Meson >= 0.45.0 to build.</strong>
Dylan Baker2aad12b2018-03-01 11:32:56 -080028
29Some older versions of meson do not check that they are too old and will error
30out in odd ways.
31</p>
Dylan Bakerbc17ac52017-10-17 12:19:49 -070032
33<p>
34The meson program is used to configure the source directory and generates
35either a ninja build file or Visual Studio® build files. The latter must
Eric Engestrom37d44e22018-05-14 16:47:57 +010036be enabled via the <code>--backend</code> switch, as ninja is the default backend on all
Dylan Bakerbc17ac52017-10-17 12:19:49 -070037operating systems. Meson only supports out-of-tree builds, and must be passed a
38directory to put built and generated sources into. We'll call that directory
39"build" for examples.
40</p>
41
42<pre>
43 meson build/
44</pre>
45
46<p>
47To see a description of your options you can run <code>meson configure</code>
48along with a build directory to view the selected options for. This will show
49your meson global arguments and project arguments, along with their defaults
50and your local settings.
51
Eric Engestromdc2dc1f2018-05-14 16:44:08 +010052Meson does not currently support listing options before configure a build
Dylan Bakerbc17ac52017-10-17 12:19:49 -070053directory, but this feature is being discussed upstream.
54</p>
55
56<pre>
57 meson configure build/
58</pre>
59
60<p>
61With additional arguments <code>meson configure</code> is used to change
62options on already configured build directory. All options passed to this
Eric Engestrom37d44e22018-05-14 16:47:57 +010063command are in the form <code>-D "command"="value"</code>.
Dylan Bakerbc17ac52017-10-17 12:19:49 -070064</p>
65
66<pre>
67 meson configure build/ -Dprefix=/tmp/install -Dglx=true
68</pre>
69
70<p>
Eric Engestrom57fbc2a2018-05-14 16:39:42 +010071Note that options taking lists (such as <code>platforms</code>) are
72<a href="http://mesonbuild.com/Build-options.html#using-build-options">a bit
73more complicated</a>, but the simplest form compatible with Mesa options
74is to use a comma to separate values (<code>-D platforms=drm,wayland</code>)
75and brackets to represent an empty list (<code>-D platforms=[]</code>).
76</p>
77
78<p>
Dylan Bakerbc17ac52017-10-17 12:19:49 -070079Once you've run the initial <code>meson</code> command successfully you can use
80your configured backend to build the project. With ninja, the -C option can be
81be used to point at a directory to build.
82</p>
83
84<pre>
85 ninja -C build/
86</pre>
87
88<p>
89Without arguments, it will produce libGL.so and/or several other libraries
90depending on the options you have chosen. Later, if you want to rebuild for a
91different configuration, you should run <code>ninja clean</code> before
92changing the configuration, or create a new out of tree build directory for
Eric Engestrom5829f612018-05-14 16:47:18 +010093each configuration you want to build
94<a href="http://mesonbuild.com/Using-multiple-build-directories.html">as
95recommended in the documentation</a>
Dylan Bakerbc17ac52017-10-17 12:19:49 -070096</p>
97
Eric Engestrom67c55072018-05-14 16:45:31 +010098<dl>
Dylan Bakerbc17ac52017-10-17 12:19:49 -070099<dt><code>Environment Variables</code></dt>
Eric Engestromdc2dc1f2018-05-14 16:44:08 +0100100<dd><p>Meson supports the standard CC and CXX environment variables for
Dylan Bakerbc17ac52017-10-17 12:19:49 -0700101changing the default compiler, and CFLAGS, CXXFLAGS, and LDFLAGS for setting
Dylan Bakere0829f92018-09-18 09:07:25 -0700102options to the compiler and linker during the initial configuration.
Dylan Bakerbc17ac52017-10-17 12:19:49 -0700103
Dylan Bakere0829f92018-09-18 09:07:25 -0700104These arguments are consumed and stored by meson when it is initialized. To
105change these flags after the build is initialized (or when doing a first
106initialization), consider using <code>-D${lang}_args</code> and
107<code>-D${lang}_link_args</code> instead. Meson will never change compiler in a
108configured build directory.
Dylan Bakerbc17ac52017-10-17 12:19:49 -0700109</p>
110
111<pre>
112 CC=clang CXX=clang++ meson build-clang
113 ninja -C build-clang
114 ninja -C build-clang clean
Dylan Bakere0829f92018-09-18 09:07:25 -0700115 meson configure build -Dc_args="-Wno-typedef-redefinition"
116 ninja -C build-clang
Dylan Bakerbc17ac52017-10-17 12:19:49 -0700117</pre>
118
Dylan Bakere0829f92018-09-18 09:07:25 -0700119<p>
120The default compilers depends on your operating system. Meson supports most of
121the popular compilers, a complete list is available
122<a href="http://mesonbuild.com/Reference-tables.html#compiler-ids">here</a>.
123</p>
124
Eric Engestrom37d44e22018-05-14 16:47:57 +0100125<p>Meson also honors <code>DESTDIR</code> for installs</p>
Dylan Bakerbc17ac52017-10-17 12:19:49 -0700126</dd>
127
128
129<dt><code>LLVM</code></dt>
130<dd><p>Meson includes upstream logic to wrap llvm-config using it's standard
Eric Engestrom37d44e22018-05-14 16:47:57 +0100131dependency interface. It will search <code>$PATH</code> (or <code>%PATH%</code> on windows) for
Dylan Bakerbc17ac52017-10-17 12:19:49 -0700132llvm-config, so using an LLVM from a non-standard path is as easy as
133<code>PATH=/path/with/llvm-config:$PATH meson build</code>.
134</p></dd>
135</dl>
136
Dylan Baker2aad12b2018-03-01 11:32:56 -0800137<dl>
Dylan Bakerbc17ac52017-10-17 12:19:49 -0700138<dt><code>PKG_CONFIG_PATH</code></dt>
139<dd><p>The
140<code>pkg-config</code> utility is a hard requirement for configuring and
Dylan Baker2aad12b2018-03-01 11:32:56 -0800141building Mesa on Unix-like systems. It is used to search for external libraries
142on the system. This environment variable is used to control the search path for
143<code>pkg-config</code>. For instance, setting
144<code>PKG_CONFIG_PATH=/usr/X11R6/lib/pkgconfig</code> will search for package
145metadata in <code>/usr/X11R6</code> before the standard directories.</p>
Dylan Bakerbc17ac52017-10-17 12:19:49 -0700146</dd>
147</dl>
148
149<p>
150One of the oddities of meson is that some options are different when passed to
151the <code>meson</code> than to <code>meson configure</code>. These options are
152passed as --option=foo to <code>meson</code>, but -Doption=foo to <code>meson
153configure</code>. Mesa defined options are always passed as -Doption=foo.
Eric Engestrom67c55072018-05-14 16:45:31 +0100154</p>
Dylan Bakerbc17ac52017-10-17 12:19:49 -0700155
156<p>For those coming from autotools be aware of the following:</p>
157
158<dl>
159<dt><code>--buildtype/-Dbuildtype</code></dt>
160<dd><p>This option will set the compiler debug/optimisation levels to aid
161debugging the Mesa libraries.</p>
162
Eric Engestrom37d44e22018-05-14 16:47:57 +0100163<p>Note that in meson this defaults to <code>debugoptimized</code>, and
164not setting it to <code>release</code> will yield non-optimal
165performance and binary size. Not using <code>debug</code> may interfere
166with debugging as some code and validation will be optimized away.
Dylan Bakerbc17ac52017-10-17 12:19:49 -0700167</p>
168
Eric Engestrom37d44e22018-05-14 16:47:57 +0100169<p> For those wishing to pass their own optimization flags, use the <code>plain</code>
Dylan Baker2aad12b2018-03-01 11:32:56 -0800170buildtype, which causes meson to inject no additional compiler arguments, only
171those in the C/CXXFLAGS and those that mesa itself defines.</p>
Dylan Bakerbc17ac52017-10-17 12:19:49 -0700172</dd>
173</dl>
174
175<dl>
176<dt><code>-Db_ndebug</code></dt>
Eric Engestrom37d44e22018-05-14 16:47:57 +0100177<dd><p>This option controls assertions in meson projects. When set to <code>false</code>
Dylan Bakerbc17ac52017-10-17 12:19:49 -0700178(the default) assertions are enabled, when set to true they are disabled. This
179is unrelated to the <code>buildtype</code>; setting the latter to
180<code>release</code> will not turn off assertions.
181</p>
182</dd>
183</dl>
Eric Engestrom67c55072018-05-14 16:45:31 +0100184
185</div>
186</body>
187</html>