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