xref: /aosp_15_r20/external/mesa3d/docs/install.rst (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard WorkerCompiling and Installing
2*61046927SAndroid Build Coastguard Worker========================
3*61046927SAndroid Build Coastguard Worker
4*61046927SAndroid Build Coastguard Worker.. toctree::
5*61046927SAndroid Build Coastguard Worker   :maxdepth: 1
6*61046927SAndroid Build Coastguard Worker   :hidden:
7*61046927SAndroid Build Coastguard Worker
8*61046927SAndroid Build Coastguard Worker   meson
9*61046927SAndroid Build Coastguard Worker
10*61046927SAndroid Build Coastguard Worker1. Prerequisites for building
11*61046927SAndroid Build Coastguard Worker-----------------------------
12*61046927SAndroid Build Coastguard Worker
13*61046927SAndroid Build Coastguard Worker1.1 General
14*61046927SAndroid Build Coastguard Worker~~~~~~~~~~~
15*61046927SAndroid Build Coastguard Worker
16*61046927SAndroid Build Coastguard WorkerBuild system
17*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^
18*61046927SAndroid Build Coastguard Worker
19*61046927SAndroid Build Coastguard Worker- `Meson <https://mesonbuild.com>`__ is required when building on \*nix
20*61046927SAndroid Build Coastguard Worker  platforms and on Windows.
21*61046927SAndroid Build Coastguard Worker- Android Build system when building as native Android component. Meson
22*61046927SAndroid Build Coastguard Worker  is used when building ARC.
23*61046927SAndroid Build Coastguard Worker
24*61046927SAndroid Build Coastguard WorkerCompiler
25*61046927SAndroid Build Coastguard Worker^^^^^^^^
26*61046927SAndroid Build Coastguard Worker
27*61046927SAndroid Build Coastguard WorkerThe following compilers are known to work, if you know of others or
28*61046927SAndroid Build Coastguard Workeryou're willing to maintain support for other compiler get in touch.
29*61046927SAndroid Build Coastguard Worker
30*61046927SAndroid Build Coastguard Worker- GCC 8.0.0 or later (some parts of Mesa may require later versions)
31*61046927SAndroid Build Coastguard Worker- Clang 5.0 or later (some parts of Mesa may require later versions)
32*61046927SAndroid Build Coastguard Worker- Microsoft Visual Studio 2019 Version 16.11 or later and
33*61046927SAndroid Build Coastguard Worker  Windows SDK of at least 20348 is required, for building on Windows.
34*61046927SAndroid Build Coastguard Worker
35*61046927SAndroid Build Coastguard WorkerThird party/extra tools.
36*61046927SAndroid Build Coastguard Worker^^^^^^^^^^^^^^^^^^^^^^^^
37*61046927SAndroid Build Coastguard Worker
38*61046927SAndroid Build Coastguard Worker- `Python <https://www.python.org/>`__ - Python 3.6 or newer is required.
39*61046927SAndroid Build Coastguard Worker- Python package ``packaging`` is required on Python 3.12+:
40*61046927SAndroid Build Coastguard Worker  ``pip install packaging``
41*61046927SAndroid Build Coastguard Worker- `Python Mako module <https://www.makotemplates.org/>`__ - Python Mako
42*61046927SAndroid Build Coastguard Worker  module is required. Version 0.8.0 or later should work.
43*61046927SAndroid Build Coastguard Worker- Lex / Yacc - for building the Mesa IR and GLSL compiler.
44*61046927SAndroid Build Coastguard Worker
45*61046927SAndroid Build Coastguard Worker   On Linux systems, Flex and Bison versions 2.5.35 and 2.4.1,
46*61046927SAndroid Build Coastguard Worker   respectively, (or later) should work. On Windows with MinGW, install
47*61046927SAndroid Build Coastguard Worker   Flex and Bison with:
48*61046927SAndroid Build Coastguard Worker
49*61046927SAndroid Build Coastguard Worker   .. code-block:: sh
50*61046927SAndroid Build Coastguard Worker
51*61046927SAndroid Build Coastguard Worker      mingw-get install msys-flex msys-bison
52*61046927SAndroid Build Coastguard Worker
53*61046927SAndroid Build Coastguard Worker   For MSVC on Windows, install `Win
54*61046927SAndroid Build Coastguard Worker   flex-bison <https://sourceforge.net/projects/winflexbison/>`__.
55*61046927SAndroid Build Coastguard Worker
56*61046927SAndroid Build Coastguard Worker.. note::
57*61046927SAndroid Build Coastguard Worker
58*61046927SAndroid Build Coastguard Worker   Some versions can be buggy (e.g. Flex 2.6.2) so do try others
59*61046927SAndroid Build Coastguard Worker   if things fail.
60*61046927SAndroid Build Coastguard Worker
61*61046927SAndroid Build Coastguard Worker1.2 Requirements
62*61046927SAndroid Build Coastguard Worker~~~~~~~~~~~~~~~~
63*61046927SAndroid Build Coastguard Worker
64*61046927SAndroid Build Coastguard WorkerThe requirements depends on the features selected at configure stage.
65*61046927SAndroid Build Coastguard WorkerCheck/install the respective development package as prompted by the
66*61046927SAndroid Build Coastguard Workerconfigure error message.
67*61046927SAndroid Build Coastguard Worker
68*61046927SAndroid Build Coastguard WorkerHere are some common ways to retrieve most/all of the dependencies based
69*61046927SAndroid Build Coastguard Workeron the packaging tool used by your distro.
70*61046927SAndroid Build Coastguard Worker
71*61046927SAndroid Build Coastguard Worker.. code-block:: sh
72*61046927SAndroid Build Coastguard Worker
73*61046927SAndroid Build Coastguard Worker     zypper source-install --build-deps-only Mesa # openSUSE/SLED/SLES
74*61046927SAndroid Build Coastguard Worker     yum-builddep mesa # yum Fedora, OpenSuse(?)
75*61046927SAndroid Build Coastguard Worker     dnf builddep mesa # dnf Fedora
76*61046927SAndroid Build Coastguard Worker     apt-get build-dep mesa # Debian and derivatives
77*61046927SAndroid Build Coastguard Worker     ... # others
78*61046927SAndroid Build Coastguard Worker
79*61046927SAndroid Build Coastguard Worker1. Building with meson
80*61046927SAndroid Build Coastguard Worker----------------------
81*61046927SAndroid Build Coastguard Worker
82*61046927SAndroid Build Coastguard WorkerMeson is the latest build system in mesa, it is currently able to build
83*61046927SAndroid Build Coastguard Workerfor \*nix systems like Linux and BSD, macOS, Haiku, and Windows.
84*61046927SAndroid Build Coastguard Worker
85*61046927SAndroid Build Coastguard WorkerThe general approach is:
86*61046927SAndroid Build Coastguard Worker
87*61046927SAndroid Build Coastguard Worker.. code-block:: sh
88*61046927SAndroid Build Coastguard Worker
89*61046927SAndroid Build Coastguard Worker     meson setup builddir/
90*61046927SAndroid Build Coastguard Worker     meson compile -C builddir/
91*61046927SAndroid Build Coastguard Worker     sudo meson install -C builddir/
92*61046927SAndroid Build Coastguard Worker
93*61046927SAndroid Build Coastguard WorkerOn Windows you can also use the Visual Studio backend
94*61046927SAndroid Build Coastguard Worker
95*61046927SAndroid Build Coastguard Worker.. code-block:: sh
96*61046927SAndroid Build Coastguard Worker
97*61046927SAndroid Build Coastguard Worker     meson setup builddir --backend=vs
98*61046927SAndroid Build Coastguard Worker     cd builddir
99*61046927SAndroid Build Coastguard Worker     msbuild mesa.sln /m
100*61046927SAndroid Build Coastguard Worker
101*61046927SAndroid Build Coastguard WorkerPlease read the :doc:`detailed meson instructions <meson>` for more
102*61046927SAndroid Build Coastguard Workerinformation
103*61046927SAndroid Build Coastguard Worker
104*61046927SAndroid Build Coastguard Worker1. Running against a local build (easy way)
105*61046927SAndroid Build Coastguard Worker-------------------------------------------
106*61046927SAndroid Build Coastguard Worker
107*61046927SAndroid Build Coastguard WorkerIt's often necessary or useful when debugging driver issues or testing new
108*61046927SAndroid Build Coastguard Workerbranches to run against a local build of Mesa without doing a system-wide
109*61046927SAndroid Build Coastguard Workerinstall. Meson has built-in support for this with its ``devenv`` subcommand:
110*61046927SAndroid Build Coastguard Worker
111*61046927SAndroid Build Coastguard Worker.. code-block:: sh
112*61046927SAndroid Build Coastguard Worker
113*61046927SAndroid Build Coastguard Worker     meson devenv -C builddir glxinfo
114*61046927SAndroid Build Coastguard Worker
115*61046927SAndroid Build Coastguard WorkerThis will run the given command against the build in ``builddir``. Note that meson
116*61046927SAndroid Build Coastguard Workerwill ``chdir`` into the directory first, so any relative paths in the command line
117*61046927SAndroid Build Coastguard Workerwill be relative to ``builddir`` which may not be what you expect.
118*61046927SAndroid Build Coastguard Worker
119*61046927SAndroid Build Coastguard Worker1. Running against a local build (hard way)
120*61046927SAndroid Build Coastguard Worker-------------------------------------------
121*61046927SAndroid Build Coastguard Worker
122*61046927SAndroid Build Coastguard WorkerIf you prefer you can configure your test environment manually. To do this,
123*61046927SAndroid Build Coastguard Workerchoose a temporary location for the install.  A directory called ``installdir``
124*61046927SAndroid Build Coastguard Workerinside your mesa tree is as good as anything.  All of the commands below will
125*61046927SAndroid Build Coastguard Workerassume ``$MESA_INSTALLDIR`` is an absolute path to this location.
126*61046927SAndroid Build Coastguard Worker
127*61046927SAndroid Build Coastguard WorkerFirst, configure Mesa and install in the temporary location:
128*61046927SAndroid Build Coastguard Worker
129*61046927SAndroid Build Coastguard Worker.. code-block:: sh
130*61046927SAndroid Build Coastguard Worker
131*61046927SAndroid Build Coastguard Worker   meson setup builddir/ -Dprefix="$MESA_INSTALLDIR" OTHER_OPTIONS
132*61046927SAndroid Build Coastguard Worker   meson install -C builddir/
133*61046927SAndroid Build Coastguard Worker
134*61046927SAndroid Build Coastguard Workerwhere ``OTHER_OPTIONS`` is replaced by any meson configuration options you may
135*61046927SAndroid Build Coastguard Workerwant.  For instance, if you want to build the LLVMpipe drivers, it would look
136*61046927SAndroid Build Coastguard Workerlike this:
137*61046927SAndroid Build Coastguard Worker
138*61046927SAndroid Build Coastguard Worker.. code-block:: sh
139*61046927SAndroid Build Coastguard Worker
140*61046927SAndroid Build Coastguard Worker   meson setup builddir/ -Dprefix="$MESA_INSTALLDIR" \
141*61046927SAndroid Build Coastguard Worker      -Dgallium-drivers=swrast -Dvulkan-drivers=swrast
142*61046927SAndroid Build Coastguard Worker   meson install -C builddir/
143*61046927SAndroid Build Coastguard Worker
144*61046927SAndroid Build Coastguard WorkerOnce Mesa has built and installed to ``$MESA_INSTALLDIR``, you can run any app
145*61046927SAndroid Build Coastguard Workeragainst your temporary install by setting the right environment variables.
146*61046927SAndroid Build Coastguard WorkerWhich variable you have to set depends on the API.
147*61046927SAndroid Build Coastguard Worker
148*61046927SAndroid Build Coastguard WorkerOpenGL
149*61046927SAndroid Build Coastguard Worker~~~~~~
150*61046927SAndroid Build Coastguard Worker
151*61046927SAndroid Build Coastguard Worker.. code-block:: sh
152*61046927SAndroid Build Coastguard Worker
153*61046927SAndroid Build Coastguard Worker   LD_LIBRARY_PATH="$MESA_INSTALLDIR/lib64" glxinfo
154*61046927SAndroid Build Coastguard Worker
155*61046927SAndroid Build Coastguard WorkerYou may need to use ``lib`` instead of ``lib64`` on some systems or a full
156*61046927SAndroid Build Coastguard Workerlibrary specifier on Debian.  Look inside ``installdir`` for the directory that
157*61046927SAndroid Build Coastguard Workercontains ``libGL.so`` and use that one.
158*61046927SAndroid Build Coastguard Worker
159*61046927SAndroid Build Coastguard WorkerVulkan
160*61046927SAndroid Build Coastguard Worker~~~~~~
161*61046927SAndroid Build Coastguard Worker
162*61046927SAndroid Build Coastguard Worker.. code-block:: sh
163*61046927SAndroid Build Coastguard Worker
164*61046927SAndroid Build Coastguard Worker   VK_DRIVER_FILES="$MESA_INSTALLDIR/share/vulkan/icd/my_icd.json" vulkaninfo
165*61046927SAndroid Build Coastguard Worker
166*61046927SAndroid Build Coastguard Workerwhere ``my_icd.json`` is replaced with the actual ICD json file name.  This
167*61046927SAndroid Build Coastguard Workerwill depend on your driver.  For instance, the 64-bit Lavapipe driver ICD file
168*61046927SAndroid Build Coastguard Workeris named ``lvp_icd.x86_64.json``.
169*61046927SAndroid Build Coastguard Worker
170*61046927SAndroid Build Coastguard WorkerOpenCL
171*61046927SAndroid Build Coastguard Worker~~~~~~
172*61046927SAndroid Build Coastguard Worker
173*61046927SAndroid Build Coastguard Worker.. code-block:: sh
174*61046927SAndroid Build Coastguard Worker
175*61046927SAndroid Build Coastguard Worker   OCL_ICD_VENDORS="$MESA_INSTALLDIR/etc/OpenCL/vendors" clinfo
176*61046927SAndroid Build Coastguard Worker
177*61046927SAndroid Build Coastguard WorkerUnlike Vulkan, OpenCL takes a path to the whole ``vendors`` folder and will
178*61046927SAndroid Build Coastguard Workerenumerate any drivers found there.
179*61046927SAndroid Build Coastguard Worker
180*61046927SAndroid Build Coastguard WorkerTroubleshooting local builds
181*61046927SAndroid Build Coastguard Worker~~~~~~~~~~~~~~~~~~~~~~~~~~~~
182*61046927SAndroid Build Coastguard Worker
183*61046927SAndroid Build Coastguard WorkerIf you are trying to run an app against a local build and it's not working,
184*61046927SAndroid Build Coastguard Workerhere are a few things to check:
185*61046927SAndroid Build Coastguard Worker
186*61046927SAndroid Build Coastguard Worker 1. Double-check your paths and try with the simplest app you can.  Before
187*61046927SAndroid Build Coastguard Worker    banging your head on a Steam game, make sure your path works with
188*61046927SAndroid Build Coastguard Worker    ``glxgears`` first.
189*61046927SAndroid Build Coastguard Worker
190*61046927SAndroid Build Coastguard Worker 2. Watch out for wrapper scripts.  Some more complex apps such as games have
191*61046927SAndroid Build Coastguard Worker    big start-up scripts.  Sometimes those scripts scrub the environment or set
192*61046927SAndroid Build Coastguard Worker    ``LD_LIBRARY_PATH`` to something in the game's install directory.
193*61046927SAndroid Build Coastguard Worker
194*61046927SAndroid Build Coastguard Worker 3. Is your Mesa build the same arch as your app?  Lots of games are still
195*61046927SAndroid Build Coastguard Worker    32-bit and your Mesa build is probably 64-bit by default.
196*61046927SAndroid Build Coastguard Worker
197*61046927SAndroid Build Coastguard Worker 4. 32 and 64-bit builds in the same local install directory doesn't typically
198*61046927SAndroid Build Coastguard Worker    work.  Distributions go to great lengths to make this work in your system
199*61046927SAndroid Build Coastguard Worker    install and it's hard to get it right for a local install.  If you've
200*61046927SAndroid Build Coastguard Worker    recently built 64-bit and are now building 32-bit, throw away the install
201*61046927SAndroid Build Coastguard Worker    directory first to prevent conflicts.
202*61046927SAndroid Build Coastguard Worker
203*61046927SAndroid Build Coastguard Worker1. Building with AOSP (Android)
204*61046927SAndroid Build Coastguard Worker-------------------------------
205*61046927SAndroid Build Coastguard Worker
206*61046927SAndroid Build Coastguard Worker<TODO>
207*61046927SAndroid Build Coastguard Worker
208*61046927SAndroid Build Coastguard Worker1. Library Information
209*61046927SAndroid Build Coastguard Worker----------------------
210*61046927SAndroid Build Coastguard Worker
211*61046927SAndroid Build Coastguard WorkerWhen compilation has finished, look in the top-level ``lib/`` (or
212*61046927SAndroid Build Coastguard Worker``lib64/``) directory. You'll see a set of library files similar to
213*61046927SAndroid Build Coastguard Workerthis:
214*61046927SAndroid Build Coastguard Worker
215*61046927SAndroid Build Coastguard Worker.. code-block:: text
216*61046927SAndroid Build Coastguard Worker
217*61046927SAndroid Build Coastguard Worker   lrwxrwxrwx    1 brian    users          10 Mar 26 07:53 libGL.so -> libGL.so.1*
218*61046927SAndroid Build Coastguard Worker   lrwxrwxrwx    1 brian    users          19 Mar 26 07:53 libGL.so.1 -> libGL.so.1.5.060100*
219*61046927SAndroid Build Coastguard Worker   -rwxr-xr-x    1 brian    users     3375861 Mar 26 07:53 libGL.so.1.5.060100*
220*61046927SAndroid Build Coastguard Worker   lrwxrwxrwx    1 brian    users          14 Mar 26 07:53 libOSMesa.so -> libOSMesa.so.6*
221*61046927SAndroid Build Coastguard Worker   lrwxrwxrwx    1 brian    users          23 Mar 26 07:53 libOSMesa.so.6 -> libOSMesa.so.6.1.060100*
222*61046927SAndroid Build Coastguard Worker   -rwxr-xr-x    1 brian    users       23871 Mar 26 07:53 libOSMesa.so.6.1.060100*
223*61046927SAndroid Build Coastguard Worker
224*61046927SAndroid Build Coastguard Worker**libGL** is the main OpenGL library (i.e. Mesa), while **libOSMesa** is
225*61046927SAndroid Build Coastguard Workerthe OSMesa (Off-Screen) interface library.
226*61046927SAndroid Build Coastguard Worker
227*61046927SAndroid Build Coastguard WorkerIf you built the DRI hardware drivers, you'll also see the DRI drivers:
228*61046927SAndroid Build Coastguard Worker
229*61046927SAndroid Build Coastguard Worker.. code-block:: text
230*61046927SAndroid Build Coastguard Worker
231*61046927SAndroid Build Coastguard Worker   -rwxr-xr-x   1 brian users 16895413 Jul 21 12:11 i915_dri.so
232*61046927SAndroid Build Coastguard Worker   -rwxr-xr-x   1 brian users 16895413 Jul 21 12:11 i965_dri.so
233*61046927SAndroid Build Coastguard Worker   -rwxr-xr-x   1 brian users 11849858 Jul 21 12:12 r200_dri.so
234*61046927SAndroid Build Coastguard Worker   -rwxr-xr-x   1 brian users 11757388 Jul 21 12:12 radeon_dri.so
235*61046927SAndroid Build Coastguard Worker
236*61046927SAndroid Build Coastguard WorkerIf you built with Gallium support, look in lib/gallium/ for
237*61046927SAndroid Build Coastguard WorkerGallium-based versions of libGL and device drivers.
238*61046927SAndroid Build Coastguard Worker
239*61046927SAndroid Build Coastguard Worker1. Building OpenGL programs with pkg-config
240*61046927SAndroid Build Coastguard Worker-------------------------------------------
241*61046927SAndroid Build Coastguard Worker
242*61046927SAndroid Build Coastguard WorkerRunning ``meson install`` will install package configuration files for
243*61046927SAndroid Build Coastguard Workerthe pkg-config utility.
244*61046927SAndroid Build Coastguard Worker
245*61046927SAndroid Build Coastguard WorkerWhen compiling your OpenGL application you can use pkg-config to
246*61046927SAndroid Build Coastguard Workerdetermine the proper compiler and linker flags.
247*61046927SAndroid Build Coastguard Worker
248*61046927SAndroid Build Coastguard WorkerFor example, compiling and linking a GLUT application can be done with:
249*61046927SAndroid Build Coastguard Worker
250*61046927SAndroid Build Coastguard Worker.. code-block:: sh
251*61046927SAndroid Build Coastguard Worker
252*61046927SAndroid Build Coastguard Worker      gcc `pkg-config --cflags --libs glut` mydemo.c -o mydemo
253