1 # Copyright © 2017-2019 Intel Corporation
3 # Permission is hereby granted, free of charge, to any person obtaining a copy
4 # of this software and associated documentation files (the "Software"), to deal
5 # in the Software without restriction, including without limitation the rights
6 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 # copies of the Software, and to permit persons to whom the Software is
8 # furnished to do so, subject to the following conditions:
10 # The above copyright notice and this permission notice shall be included in
11 # all copies or substantial portions of the Software.
13 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24 version : run_command(
25 [find_program('python', 'python2', 'python3'), 'bin/meson_get_version.py']
28 meson_version : '>= 0.45',
29 default_options : ['buildtype=debugoptimized', 'b_ndebug=if-release', 'c_std=c99', 'cpp_std=c++11']
32 cc = meson.get_compiler('c')
33 cpp = meson.get_compiler('cpp')
35 null_dep = dependency('', required : false)
37 # Arguments for the preprocessor, put these in a separate array from the C and
38 # C++ (cpp in meson terminology) arguments since they need to be added to the
39 # default arguments for both C and C++.
41 '-D__STDC_CONSTANT_MACROS',
42 '-D__STDC_FORMAT_MACROS',
43 '-D__STDC_LIMIT_MACROS',
44 '-DPACKAGE_VERSION="@0@"'.format(meson.project_version()),
45 '-DPACKAGE_BUGREPORT="https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa"',
48 with_vulkan_icd_dir = get_option('vulkan-icd-dir')
49 with_tests = get_option('build-tests')
50 with_valgrind = get_option('valgrind')
51 with_libunwind = get_option('libunwind')
52 with_asm = get_option('asm')
53 with_glx_read_only_text = get_option('glx-read-only-text')
54 with_glx_direct = get_option('glx-direct')
55 with_osmesa = get_option('osmesa')
56 with_swr_arches = get_option('swr-arches')
57 with_tools = get_option('tools')
58 if with_tools.contains('all')
59 with_tools = ['etnaviv', 'freedreno', 'glsl', 'intel', 'nir', 'nouveau', 'xvmc']
62 dri_drivers_path = get_option('dri-drivers-path')
63 if dri_drivers_path == ''
64 dri_drivers_path = join_paths(get_option('prefix'), get_option('libdir'), 'dri')
66 dri_search_path = get_option('dri-search-path')
67 if dri_search_path == ''
68 dri_search_path = dri_drivers_path
71 with_gles1 = get_option('gles1')
72 with_gles2 = get_option('gles2')
73 with_opengl = get_option('opengl')
74 with_any_opengl = with_opengl or with_gles1 or with_gles2
75 # Only build shared_glapi if at least one OpenGL API is enabled
76 with_shared_glapi = get_option('shared-glapi') and with_any_opengl
79 # shared-glapi is required if at least two OpenGL APIs are being built
80 if not with_shared_glapi
81 if ((with_gles1 and with_gles2) or (with_gles1 and with_opengl)
82 or (with_gles2 and with_opengl))
83 error('shared-glapi required for building two or more of OpenGL, OpenGL ES 1.x, OpenGL ES 2.x')
87 # We require OpenGL for OpenGL ES
88 if (with_gles1 or with_gles2) and not with_opengl
89 error('building OpenGL ES without OpenGL is not supported.')
92 system_has_kms_drm = ['openbsd', 'netbsd', 'freebsd', 'dragonfly', 'linux'].contains(host_machine.system())
94 _drivers = get_option('dri-drivers')
95 if _drivers.contains('auto')
98 if ['x86', 'x86_64'].contains(host_machine.cpu_family())
99 _drivers = ['i915', 'i965', 'r100', 'r200', 'nouveau']
100 elif ['arm', 'aarch64'].contains(host_machine.cpu_family())
103 error('Unknown architecture @0@. Please pass -Ddri-drivers to set driver options. Patches gladly accepted to fix this.'.format(
104 host_machine.cpu_family()))
106 elif ['darwin', 'windows', 'cygwin', 'haiku'].contains(host_machine.system())
107 # only swrast would make sense here, but gallium swrast is a much better default
110 error('Unknown OS @0@. Please pass -Ddri-drivers to set driver options. Patches gladly accepted to fix this.'.format(
111 host_machine.system()))
115 with_dri_i915 = _drivers.contains('i915')
116 with_dri_i965 = _drivers.contains('i965')
117 with_dri_r100 = _drivers.contains('r100')
118 with_dri_r200 = _drivers.contains('r200')
119 with_dri_nouveau = _drivers.contains('nouveau')
120 with_dri_swrast = _drivers.contains('swrast')
122 with_dri = _drivers.length() != 0 and _drivers != ['']
124 _drivers = get_option('gallium-drivers')
125 if _drivers.contains('auto')
126 if system_has_kms_drm
128 if ['x86', 'x86_64'].contains(host_machine.cpu_family())
130 'r300', 'r600', 'radeonsi', 'nouveau', 'virgl', 'svga', 'swrast'
132 elif ['arm', 'aarch64'].contains(host_machine.cpu_family())
134 'kmsro', 'v3d', 'vc4', 'freedreno', 'etnaviv', 'nouveau',
135 'tegra', 'virgl', 'swrast'
138 error('Unknown architecture @0@. Please pass -Dgallium-drivers to set driver options. Patches gladly accepted to fix this.'.format(
139 host_machine.cpu_family()))
141 elif ['darwin', 'windows', 'cygwin', 'haiku'].contains(host_machine.system())
142 _drivers = ['swrast']
144 error('Unknown OS @0@. Please pass -Dgallium-drivers to set driver options. Patches gladly accepted to fix this.'.format(
145 host_machine.system()))
148 with_gallium_kmsro = _drivers.contains('kmsro')
149 with_gallium_radeonsi = _drivers.contains('radeonsi')
150 with_gallium_r300 = _drivers.contains('r300')
151 with_gallium_r600 = _drivers.contains('r600')
152 with_gallium_nouveau = _drivers.contains('nouveau')
153 with_gallium_freedreno = _drivers.contains('freedreno')
154 with_gallium_softpipe = _drivers.contains('swrast')
155 with_gallium_vc4 = _drivers.contains('vc4')
156 with_gallium_v3d = _drivers.contains('v3d')
157 with_gallium_panfrost = _drivers.contains('panfrost')
158 with_gallium_etnaviv = _drivers.contains('etnaviv')
159 with_gallium_tegra = _drivers.contains('tegra')
160 with_gallium_iris = _drivers.contains('iris')
161 with_gallium_i915 = _drivers.contains('i915')
162 with_gallium_svga = _drivers.contains('svga')
163 with_gallium_virgl = _drivers.contains('virgl')
164 with_gallium_swr = _drivers.contains('swr')
166 if cc.get_id() == 'intel'
167 if meson.version().version_compare('< 0.49.0')
168 error('Meson does not have sufficient support of ICC before 0.49.0 to compile mesa')
169 elif with_gallium_swr and meson.version().version_compare('== 0.49.0')
170 warning('Meson as of 0.49.0 is sufficient for compiling mesa with ICC, but there are some caveats with SWR. 0.49.1 should resolve all of these')
174 with_gallium = _drivers.length() != 0 and _drivers != ['']
176 if with_gallium and system_has_kms_drm
177 _glx = get_option('glx')
178 _egl = get_option('egl')
179 if _glx == 'dri' or _egl == 'true' or (_glx == 'disabled' and _egl != 'false')
184 _vulkan_drivers = get_option('vulkan-drivers')
185 if _vulkan_drivers.contains('auto')
186 if system_has_kms_drm
187 if host_machine.cpu_family().startswith('x86')
188 _vulkan_drivers = ['amd', 'intel']
189 elif ['arm', 'aarch64'].contains(host_machine.cpu_family())
192 error('Unknown architecture @0@. Please pass -Dvulkan-drivers to set driver options. Patches gladly accepted to fix this.'.format(
193 host_machine.cpu_family()))
195 elif ['darwin', 'windows', 'cygwin', 'haiku'].contains(host_machine.system())
196 # No vulkan driver supports windows or macOS currently
199 error('Unknown OS @0@. Please pass -Dvulkan-drivers to set driver options. Patches gladly accepted to fix this.'.format(
200 host_machine.system()))
204 with_intel_vk = _vulkan_drivers.contains('intel')
205 with_amd_vk = _vulkan_drivers.contains('amd')
206 with_freedreno_vk = _vulkan_drivers.contains('freedreno')
207 with_any_vk = _vulkan_drivers.length() != 0 and _vulkan_drivers != ['']
209 if with_dri_swrast and (with_gallium_softpipe or with_gallium_swr)
210 error('Only one swrast provider can be built')
212 if with_dri_i915 and with_gallium_i915
213 error('Only one i915 provider can be built')
215 if with_gallium_kmsro and not (with_gallium_vc4 or with_gallium_etnaviv or with_gallium_freedreno or with_gallium_panfrost)
216 error('kmsro driver requires one or more renderonly drivers (vc4, etnaviv, freedreno, panfrost)')
218 if with_gallium_tegra and not with_gallium_nouveau
219 error('tegra driver requires nouveau driver')
222 if host_machine.system() == 'darwin'
223 with_dri_platform = 'apple'
224 elif ['windows', 'cygwin'].contains(host_machine.system())
225 with_dri_platform = 'windows'
226 elif system_has_kms_drm
227 with_dri_platform = 'drm'
229 # FIXME: haiku doesn't use dri, and xlib doesn't use dri, probably should
230 # assert here that one of those cases has been met.
231 # FIXME: illumos ends up here as well
232 with_dri_platform = 'none'
235 _platforms = get_option('platforms')
236 if _platforms.contains('auto')
237 if system_has_kms_drm
238 _platforms = ['x11', 'wayland', 'drm', 'surfaceless']
239 elif ['darwin', 'windows', 'cygwin'].contains(host_machine.system())
240 _platforms = ['x11', 'surfaceless']
241 elif ['haiku'].contains(host_machine.system())
242 _platforms = ['haiku']
244 error('Unknown OS @0@. Please pass -Dplatforms to set platforms. Patches gladly accepted to fix this.'.format(
245 host_machine.system()))
249 with_platform_android = _platforms.contains('android')
250 with_platform_x11 = _platforms.contains('x11')
251 with_platform_wayland = _platforms.contains('wayland')
252 with_platform_drm = _platforms.contains('drm')
253 with_platform_haiku = _platforms.contains('haiku')
254 with_platform_surfaceless = _platforms.contains('surfaceless')
256 with_platforms = false
257 if _platforms.length() != 0 and _platforms != ['']
258 with_platforms = true
259 egl_native_platform = _platforms[0]
262 _xlib_lease = get_option('xlib-lease')
263 if _xlib_lease == 'auto'
264 with_xlib_lease = with_platform_x11 and with_platform_drm
266 with_xlib_lease = _xlib_lease == 'true'
269 with_glx = get_option('glx')
270 if with_glx == 'auto'
273 elif with_platform_haiku
274 with_glx = 'disabled'
276 # Even when building just gallium drivers the user probably wants dri
278 elif with_platform_x11 and with_any_opengl and not with_any_vk
279 # The automatic behavior should not be to turn on xlib based glx when
280 # building only vulkan drivers
283 with_glx = 'disabled'
292 if not (with_dri or with_gallium or with_glx == 'xlib' or with_glx == 'gallium-xlib')
296 with_any_opengl = false
297 with_shared_glapi = false
300 _gbm = get_option('gbm')
302 with_gbm = system_has_kms_drm and with_dri
304 with_gbm = _gbm == 'true'
306 if with_gbm and not system_has_kms_drm
307 error('GBM only supports DRM/KMS platforms')
310 _egl = get_option('egl')
313 not ['darwin', 'windows'].contains(host_machine.system()) and
314 with_dri and with_shared_glapi and with_platforms
318 error('EGL requires dri')
319 elif not with_shared_glapi
320 error('EGL requires shared-glapi')
321 elif not with_platforms
322 error('No platforms specified, consider -Dplatforms=drm,x11,surfaceless at least')
323 elif not ['disabled', 'dri'].contains(with_glx)
324 error('EGL requires dri, but a GLX is being built without dri')
325 elif ['darwin', 'windows'].contains(host_machine.system())
326 error('EGL is not available on Windows or MacOS')
333 if with_egl and not (with_platform_drm or with_platform_surfaceless)
334 if with_gallium_radeonsi
335 error('RadeonSI requires drm or surfaceless platform when using EGL')
337 if with_gallium_virgl
338 error('Virgl requires drm or surfaceless platform when using EGL')
342 pre_args += '-DGLX_USE_TLS'
343 if with_glx != 'disabled'
344 if not (with_platform_x11 and with_any_opengl)
345 error('Cannot build GLX support without X11 platform support and at least one OpenGL API')
346 elif with_glx == 'gallium-xlib'
348 error('Gallium-xlib based GLX requires at least one gallium driver')
349 elif not with_gallium_softpipe
350 error('Gallium-xlib based GLX requires softpipe or llvmpipe.')
352 error('gallium-xlib conflicts with any dri driver')
354 elif with_glx == 'xlib'
356 error('xlib conflicts with any dri driver')
358 elif with_glx == 'dri'
360 error('dri based GLX requires at least one DRI driver')
361 elif not with_shared_glapi
362 error('dri based GLX requires shared-glapi')
367 with_glvnd = get_option('glvnd')
369 if with_glx == 'xlib' or with_glx == 'gallium-xlib'
370 error('Cannot build glvnd support for GLX that is not DRI based.')
371 elif with_glx == 'disabled' and not with_egl
372 error('glvnd requires DRI based GLX and/or EGL')
376 if with_vulkan_icd_dir == ''
377 with_vulkan_icd_dir = join_paths(get_option('datadir'), 'vulkan/icd.d')
380 with_dri2 = (with_dri or with_any_vk) and (with_dri_platform == 'drm' or
381 host_machine.system() == 'gnu')
382 _dri3 = get_option('dri3')
384 with_dri3 = system_has_kms_drm and with_dri2
386 with_dri3 = _dri3 == 'true'
389 if with_any_vk and (with_platform_x11 and not with_dri3)
390 error('Vulkan drivers require dri3 for X11 support')
393 if with_glx == 'disabled' and not with_egl and not with_gbm and with_osmesa != 'classic'
394 error('building dri drivers require at least one windowing system or classic osmesa')
398 prog_pkgconfig = find_program('pkg-config')
400 _vdpau = get_option('gallium-vdpau')
401 if not system_has_kms_drm
403 error('VDPAU state tracker can only be build on unix-like OSes.')
407 elif not with_platform_x11
409 error('VDPAU state tracker requires X11 support.')
413 elif not (with_gallium_r300 or with_gallium_r600 or with_gallium_radeonsi or
414 with_gallium_nouveau)
416 error('VDPAU state tracker requires at least one of the following gallium drivers: r300, r600, radeonsi, nouveau.')
422 with_gallium_vdpau = false
424 dep_vdpau = dependency('vdpau', version : '>= 1.1', required : _vdpau == 'true')
426 dep_vdpau = declare_dependency(
427 compile_args : run_command(prog_pkgconfig, ['vdpau', '--cflags']).stdout().split()
429 with_gallium_vdpau = true
433 if with_gallium_vdpau
434 pre_args += '-DHAVE_ST_VDPAU'
436 vdpau_drivers_path = get_option('vdpau-libs-path')
437 if vdpau_drivers_path == ''
438 vdpau_drivers_path = join_paths(get_option('libdir'), 'vdpau')
441 _xvmc = get_option('gallium-xvmc')
442 if not system_has_kms_drm
444 error('XVMC state tracker can only be build on unix-like OSes.')
448 elif not with_platform_x11
450 error('XVMC state tracker requires X11 support.')
454 elif not (with_gallium_r600 or with_gallium_nouveau)
456 error('XVMC state tracker requires at least one of the following gallium drivers: r600, nouveau.')
462 with_gallium_xvmc = false
464 dep_xvmc = dependency('xvmc', version : '>= 1.0.6', required : _xvmc == 'true')
465 with_gallium_xvmc = dep_xvmc.found()
468 xvmc_drivers_path = get_option('xvmc-libs-path')
469 if xvmc_drivers_path == ''
470 xvmc_drivers_path = get_option('libdir')
473 _omx = get_option('gallium-omx')
474 if not system_has_kms_drm
475 if ['auto', 'disabled'].contains(_omx)
478 error('OMX state tracker can only be built on unix-like OSes.')
480 elif not (with_platform_x11 or with_platform_drm)
481 if ['auto', 'disabled'].contains(_omx)
484 error('OMX state tracker requires X11 or drm platform support.')
486 elif not (with_gallium_r600 or with_gallium_radeonsi or with_gallium_nouveau)
487 if ['auto', 'disabled'].contains(_omx)
490 error('OMX state tracker requires at least one of the following gallium drivers: r600, radeonsi, nouveau.')
493 with_gallium_omx = _omx
496 if ['auto', 'bellagio'].contains(_omx)
497 dep_omx = dependency(
498 'libomxil-bellagio', required : _omx == 'bellagio'
501 with_gallium_omx = 'bellagio'
504 if ['auto', 'tizonia'].contains(_omx)
505 if with_dri and with_egl
506 dep_omx = dependency(
507 'libtizonia', version : '>= 0.10.0',
508 required : _omx == 'tizonia',
511 dependency('libtizplatform', required : _omx == 'tizonia'),
512 dependency('tizilheaders', required : _omx == 'tizonia'),
514 if dep_omx.found() and dep_omx_other[0].found() and dep_omx_other[1].found()
515 with_gallium_omx = 'tizonia'
517 elif _omx == 'tizonia'
518 error('OMX-Tizonia state tracker requires dri and egl')
522 with_gallium_omx = 'disabled'
524 with_gallium_omx = _omx
528 '-DENABLE_ST_OMX_BELLAGIO=' + (with_gallium_omx == 'bellagio' ? '1' : '0'),
529 '-DENABLE_ST_OMX_TIZONIA=' + (with_gallium_omx == 'tizonia' ? '1' : '0'),
533 omx_drivers_path = get_option('omx-libs-path')
535 if with_gallium_omx != 'disabled'
536 # Figure out where to put the omx driver.
537 # FIXME: this could all be vastly simplified by adding a 'defined_variable'
538 # argument to meson's get_pkgconfig_variable method.
539 if omx_drivers_path == ''
540 _omx_libdir = dep_omx.get_pkgconfig_variable('libdir')
541 _omx_drivers_dir = dep_omx.get_pkgconfig_variable('pluginsdir')
542 if _omx_libdir == get_option('libdir')
543 omx_drivers_path = _omx_drivers_dir
546 # This will fail on windows. Does OMX run on windows?
547 _omx_libdir = _omx_libdir.split('/')
548 _omx_drivers_dir = _omx_drivers_dir.split('/')
549 foreach o : _omx_drivers_dir
550 if not _omx_libdir.contains(o)
554 omx_drivers_path = join_paths(get_option('libdir'), _omx_base_dir)
559 _va = get_option('gallium-va')
560 if not system_has_kms_drm
562 error('VA state tracker can only be built on unix-like OSes.')
566 elif not (with_platform_x11 or with_platform_drm)
568 error('VA state tracker requires X11 or drm or wayland platform support.')
572 elif not (with_gallium_r600 or with_gallium_radeonsi or with_gallium_nouveau)
574 error('VA state tracker requires at least one of the following gallium drivers: r600, radeonsi, nouveau.')
579 with_gallium_va = false
582 dep_va = dependency('libva', version : '>= 0.38.0', required : _va == 'true')
584 dep_va_headers = declare_dependency(
585 compile_args : run_command(prog_pkgconfig, ['libva', '--cflags']).stdout().split()
587 with_gallium_va = true
591 va_drivers_path = get_option('va-libs-path')
592 if va_drivers_path == ''
593 va_drivers_path = join_paths(get_option('libdir'), 'dri')
596 _xa = get_option('gallium-xa')
597 if not system_has_kms_drm
599 error('XA state tracker can only be built on unix-like OSes.')
603 elif not (with_gallium_nouveau or with_gallium_freedreno or with_gallium_i915
604 or with_gallium_svga)
606 error('XA state tracker requires at least one of the following gallium drivers: nouveau, freedreno, i915, svga.')
611 with_gallium_xa = _xa != 'false'
613 d3d_drivers_path = get_option('d3d-drivers-path')
614 if d3d_drivers_path == ''
615 d3d_drivers_path = join_paths(get_option('prefix'), get_option('libdir'), 'd3d')
618 with_gallium_st_nine = get_option('gallium-nine')
619 if with_gallium_st_nine
620 if not with_gallium_softpipe
621 error('The nine state tracker requires gallium softpipe/llvmpipe.')
622 elif not (with_gallium_radeonsi or with_gallium_nouveau or with_gallium_r600
623 or with_gallium_r300 or with_gallium_svga or with_gallium_i915
624 or with_gallium_iris)
625 error('The nine state tracker requires at least one non-swrast gallium driver.')
628 error('Using nine with wine requires dri3')
632 if get_option('power8') != 'false'
633 # on old versions of meson the cpu family would return as ppc64le on little
634 # endian power8, this was changed in 0.48 such that the family would always
635 # be ppc64 regardless of endianness, and the the machine.endian() value
636 # should be checked. Since we support versions < 0.48 we need to use
638 if host_machine.cpu_family().startswith('ppc64') and host_machine.endian() == 'little'
639 if cc.get_id() == 'gcc' and cc.version().version_compare('< 4.8')
640 error('Altivec is not supported with gcc version < 4.8.')
645 vector unsigned char r;
646 vector unsigned int v = vec_splat_u32 (1);
647 r = __builtin_vec_vgbbd ((vector unsigned char) v);
650 args : '-mpower8-vector',
651 name : 'POWER8 intrinsics')
652 pre_args += ['-D_ARCH_PWR8', '-mpower8-vector']
653 elif get_option('power8') == 'true'
654 error('POWER8 intrinsic support required but not found.')
659 _opencl = get_option('gallium-opencl')
661 if _opencl != 'disabled'
663 error('OpenCL Clover implementation requires at least one gallium driver.')
666 dep_clc = dependency('libclc')
667 with_gallium_opencl = true
668 with_opencl_icd = _opencl == 'icd'
670 if host_machine.cpu_family().startswith('ppc') and cpp.compiles('''
671 #if !defined(__VEC__) || !defined(__ALTIVEC__)
672 #error "AltiVec not enabled"
675 clover_cpp_std += ['cpp_std=gnu++11']
679 with_gallium_opencl = false
680 with_opencl_icd = false
683 gl_pkgconfig_c_flags = []
685 if with_any_vk or with_egl or (with_glx == 'dri' and with_dri_platform == 'drm')
686 pre_args += '-DHAVE_X11_PLATFORM'
688 if with_glx == 'xlib' or with_glx == 'gallium-xlib'
689 pre_args += '-DUSE_XSHM'
691 pre_args += '-DGLX_INDIRECT_RENDERING'
693 pre_args += '-DGLX_DIRECT_RENDERING'
695 if with_dri_platform == 'drm'
696 pre_args += '-DGLX_USE_DRM'
697 elif with_dri_platform == 'apple'
698 pre_args += '-DGLX_USE_APPLEGL'
699 elif with_dri_platform == 'windows'
700 pre_args += '-DGLX_USE_WINDOWSGL'
704 pre_args += '-DMESA_EGL_NO_X11_HEADERS'
705 gl_pkgconfig_c_flags += '-DMESA_EGL_NO_X11_HEADERS'
708 if with_egl and not with_gbm
709 error('EGL drm platform requires gbm')
711 pre_args += '-DHAVE_DRM_PLATFORM'
713 if with_platform_surfaceless
714 pre_args += '-DHAVE_SURFACELESS_PLATFORM'
716 if with_platform_android
718 dependency('cutils'),
719 dependency('hardware'),
722 pre_args += '-DHAVE_ANDROID_PLATFORM'
724 if with_platform_haiku
725 pre_args += '-DHAVE_HAIKU_PLATFORM'
728 prog_python = import('python3').find_python()
729 has_mako = run_command(
732 from distutils.version import StrictVersion
734 assert StrictVersion(mako.__version__) > StrictVersion("0.8.0")
736 if has_mako.returncode() != 0
737 error('Python (3.x) mako module >= 0.8.0 required to build mesa.')
740 if cc.get_id() == 'gcc' and cc.version().version_compare('< 4.4.6')
741 error('When using GCC, version 4.4.6 or later is required.')
744 # Define DEBUG for debug builds only (debugoptimized is not included on this one)
745 if get_option('buildtype') == 'debug'
746 pre_args += '-DDEBUG'
749 if get_option('shader-cache')
750 pre_args += '-DENABLE_SHADER_CACHE'
752 error('Radv requires shader cache support')
755 # Check for GCC style builtins
756 foreach b : ['bswap32', 'bswap64', 'clz', 'clzll', 'ctz', 'expect', 'ffs',
757 'ffsll', 'popcount', 'popcountll', 'unreachable']
758 if cc.has_function(b)
759 pre_args += '-DHAVE___BUILTIN_@0@'.format(b.to_upper())
763 # check for GCC __attribute__
764 foreach a : ['const', 'flatten', 'malloc', 'pure', 'unused',
765 'warn_unused_result', 'weak',]
766 if cc.compiles('int foo(void) __attribute__((@0@));'.format(a),
767 name : '__attribute__((@0@))'.format(a))
768 pre_args += '-DHAVE_FUNC_ATTRIBUTE_@0@'.format(a.to_upper())
771 if cc.compiles('int foo(const char *p, ...) __attribute__((format(printf, 1, 2)));',
772 name : '__attribute__((format(...)))')
773 pre_args += '-DHAVE_FUNC_ATTRIBUTE_FORMAT'
775 if cc.compiles('struct __attribute__((packed)) foo { int bar; };',
776 name : '__attribute__((packed))')
777 pre_args += '-DHAVE_FUNC_ATTRIBUTE_PACKED'
779 if cc.compiles('int *foo(void) __attribute__((returns_nonnull));',
780 name : '__attribute__((returns_nonnull))')
781 pre_args += '-DHAVE_FUNC_ATTRIBUTE_RETURNS_NONNULL'
783 if cc.compiles('''int foo_def(void) __attribute__((visibility("default")));
784 int foo_hid(void) __attribute__((visibility("hidden")));
785 int foo_int(void) __attribute__((visibility("internal")));
786 int foo_pro(void) __attribute__((visibility("protected")));''',
787 name : '__attribute__((visibility(...)))')
788 pre_args += '-DHAVE_FUNC_ATTRIBUTE_VISIBILITY'
790 if cc.compiles('int foo(void) { return 0; } int bar(void) __attribute__((alias("foo")));',
791 name : '__attribute__((alias(...)))')
792 pre_args += '-DHAVE_FUNC_ATTRIBUTE_ALIAS'
794 if cc.compiles('int foo(void) __attribute__((__noreturn__));',
795 name : '__attribute__((__noreturn__))')
796 pre_args += '-DHAVE_FUNC_ATTRIBUTE_NORETURN'
799 # TODO: this is very incomplete
800 if ['linux', 'cygwin', 'gnu'].contains(host_machine.system())
801 pre_args += '-D_GNU_SOURCE'
804 # Check for generic C arguments
806 foreach a : ['-Werror=implicit-function-declaration',
807 '-Werror=missing-prototypes', '-Werror=return-type',
808 '-Werror=incompatible-pointer-types',
810 '-fno-trapping-math', '-Qunused-arguments']
811 if cc.has_argument(a)
816 foreach a : ['missing-field-initializers', 'format-truncation']
817 if cc.has_argument('-W' + a)
818 c_args += '-Wno-' + a
823 if cc.has_argument('-fvisibility=hidden')
824 c_vis_args += '-fvisibility=hidden'
827 # Check for generic C++ arguments
829 foreach a : ['-Werror=return-type',
830 '-fno-math-errno', '-fno-trapping-math',
831 '-Qunused-arguments']
832 if cpp.has_argument(a)
837 # For some reason, the test for -Wno-foo always succeeds with gcc, even if the
838 # option is not supported. Hence, check for -Wfoo instead.
840 foreach a : ['non-virtual-dtor', 'missing-field-initializers', 'format-truncation']
841 if cpp.has_argument('-W' + a)
842 cpp_args += '-Wno-' + a
846 no_override_init_args = []
847 foreach a : ['override-init', 'initializer-overrides']
848 if cc.has_argument('-W' + a)
849 no_override_init_args += '-Wno-' + a
854 if cpp.has_argument('-fvisibility=hidden')
855 cpp_vis_args += '-fvisibility=hidden'
858 # Check for C and C++ arguments for MSVC2013 compatibility. These are only used
859 # in parts of the mesa code base that need to compile with old versions of
860 # MSVC, mainly common code
861 c_msvc_compat_args = []
862 cpp_msvc_compat_args = []
863 foreach a : ['-Werror=pointer-arith', '-Werror=vla']
864 if cc.has_argument(a)
865 c_msvc_compat_args += a
867 if cpp.has_argument(a)
868 cpp_msvc_compat_args += a
872 if host_machine.cpu_family().startswith('x86')
873 pre_args += '-DUSE_SSE41'
875 sse41_args = ['-msse4.1']
877 # GCC on x86 (not x86_64) with -msse* assumes a 16 byte aligned stack, but
878 # that's not guaranteed
879 if host_machine.cpu_family() == 'x86'
880 sse41_args += '-mstackrealign'
887 # Check for GCC style atomics
888 dep_atomic = null_dep
890 if cc.compiles('''#include <stdint.h>
895 return (int)__atomic_load_n(x.v, __ATOMIC_ACQUIRE) &
896 (int)__atomic_add_fetch(x.v, (uint64_t)1, __ATOMIC_ACQ_REL);
899 name : 'GCC atomic builtins')
900 pre_args += '-DUSE_GCC_ATOMIC_BUILTINS'
902 # Not all atomic calls can be turned into lock-free instructions, in which
903 # GCC will make calls into the libatomic library. Check whether we need to
904 # link with -latomic.
906 # This can happen for 64-bit atomic operations on 32-bit architectures such
908 if not cc.links('''#include <stdint.h>
913 return (int)__atomic_load_n(x.v, __ATOMIC_ACQUIRE) &
914 (int)__atomic_add_fetch(x.v, (uint64_t)1, __ATOMIC_ACQ_REL);
916 name : 'GCC atomic builtins required -latomic')
917 dep_atomic = cc.find_library('atomic')
920 if not cc.links('''#include <stdint.h>
923 return __sync_add_and_fetch(&v, (uint64_t)1);
925 dependencies : dep_atomic,
926 name : 'GCC 64bit atomics')
927 pre_args += '-DMISSING_64BIT_ATOMICS'
930 # TODO: shared/static? Is this even worth doing?
932 # When cross compiling we generally need to turn off the use of assembly,
933 # because mesa's assembly relies on building an executable for the host system,
934 # and running it to get information about struct sizes. There is at least one
935 # case of cross compiling where we can use asm, and that's x86_64 -> x86 when
936 # host OS == build OS, since in that case the build machine can run the host's
938 if with_asm and meson.is_cross_build()
939 if build_machine.system() != host_machine.system()
940 # TODO: It may be possible to do this with an exe_wrapper (like wine).
941 message('Cross compiling from one OS to another, disabling assembly.')
943 elif not (build_machine.cpu_family().startswith('x86') and host_machine.cpu_family() == 'x86')
944 # FIXME: Gentoo always sets -m32 for x86_64 -> x86 builds, resulting in an
945 # x86 -> x86 cross compile. We use startswith rather than == to handle this
947 # TODO: There may be other cases where the 64 bit version of the
948 # architecture can run 32 bit binaries (aarch64 and armv7 for example)
950 Cross compiling to different architectures, and the host cannot run
951 the build machine's binaries. Disabling assembly.
959 if host_machine.cpu_family() == 'x86'
960 if system_has_kms_drm or host_machine.system() == 'gnu'
961 with_asm_arch = 'x86'
962 pre_args += ['-DUSE_X86_ASM', '-DUSE_MMX_ASM', '-DUSE_3DNOW_ASM',
965 if with_glx_read_only_text
966 pre_args += ['-DGLX_X86_READONLY_TEXT']
969 elif host_machine.cpu_family() == 'x86_64'
970 if system_has_kms_drm
971 with_asm_arch = 'x86_64'
972 pre_args += ['-DUSE_X86_64_ASM']
974 elif host_machine.cpu_family() == 'arm'
975 if system_has_kms_drm
976 with_asm_arch = 'arm'
977 pre_args += ['-DUSE_ARM_ASM']
979 elif host_machine.cpu_family() == 'aarch64'
980 if system_has_kms_drm
981 with_asm_arch = 'aarch64'
982 pre_args += ['-DUSE_AARCH64_ASM']
984 elif host_machine.cpu_family() == 'sparc64'
985 if system_has_kms_drm
986 with_asm_arch = 'sparc'
987 pre_args += ['-DUSE_SPARC_ASM']
989 elif host_machine.cpu_family().startswith('ppc64') and host_machine.endian() == 'little'
990 if system_has_kms_drm
991 with_asm_arch = 'ppc64le'
992 pre_args += ['-DUSE_PPC64LE_ASM']
997 # Check for standard headers and functions
998 if cc.has_header_symbol('sys/sysmacros.h', 'major')
999 pre_args += '-DMAJOR_IN_SYSMACROS'
1000 elif cc.has_header_symbol('sys/mkdev.h', 'major')
1001 pre_args += '-DMAJOR_IN_MKDEV'
1004 foreach h : ['xlocale.h', 'sys/sysctl.h', 'linux/futex.h', 'endian.h', 'dlfcn.h']
1005 if cc.compiles('#include <@0@>'.format(h), name : '@0@'.format(h))
1006 pre_args += '-DHAVE_@0@'.format(h.to_upper().underscorify())
1010 foreach f : ['strtof', 'mkostemp', 'posix_memalign', 'timespec_get', 'memfd_create']
1011 if cc.has_function(f)
1012 pre_args += '-DHAVE_@0@'.format(f.to_upper())
1016 # strtod locale support
1021 #ifdef HAVE_XLOCALE_H
1022 #include <xlocale.h>
1025 locale_t loc = newlocale(LC_CTYPE_MASK, "C", NULL);
1026 const char *s = "1.0";
1028 double d = strtod_l(s, end, loc);
1029 float f = strtof_l(s, end, loc);
1034 name : 'strtod has locale support')
1035 pre_args += '-DHAVE_STRTOD_L'
1038 # Check for some linker flags
1039 ld_args_bsymbolic = []
1040 if cc.links('int main() { return 0; }', args : '-Wl,-Bsymbolic', name : 'Bsymbolic')
1041 ld_args_bsymbolic += '-Wl,-Bsymbolic'
1043 ld_args_gc_sections = []
1044 if cc.links('static char unused() { return 5; } int main() { return 0; }',
1045 args : '-Wl,--gc-sections', name : 'gc-sections')
1046 ld_args_gc_sections += '-Wl,--gc-sections'
1048 with_ld_version_script = false
1049 if cc.links('int main() { return 0; }',
1050 args : '-Wl,--version-script=@0@'.format(
1051 join_paths(meson.source_root(), 'build-support/conftest.map')),
1052 name : 'version-script')
1053 with_ld_version_script = true
1055 with_ld_dynamic_list = false
1056 if cc.links('int main() { return 0; }',
1057 args : '-Wl,--dynamic-list=@0@'.format(
1058 join_paths(meson.source_root(), 'build-support/conftest.dyn')),
1059 name : 'dynamic-list')
1060 with_ld_dynamic_list = true
1062 ld_args_build_id = []
1063 if build_machine.system() != 'darwin'
1064 ld_args_build_id += '-Wl,--build-id=sha1'
1067 # check for dl support
1068 if cc.has_function('dlopen')
1071 dep_dl = cc.find_library('dl')
1073 if cc.has_function('dladdr', dependencies : dep_dl)
1074 # This is really only required for megadrivers
1075 pre_args += '-DHAVE_DLADDR'
1078 if cc.has_function('dl_iterate_phdr')
1079 pre_args += '-DHAVE_DL_ITERATE_PHDR'
1081 error('Intel "Anvil" Vulkan driver requires the dl_iterate_phdr function')
1082 elif with_dri_i965 and get_option('shader-cache')
1083 error('Intel i965 GL driver requires dl_iterate_phdr when built with shader caching.')
1086 # Determine whether or not the rt library is needed for time functions
1087 if cc.has_function('clock_gettime')
1088 dep_clock = null_dep
1090 dep_clock = cc.find_library('rt')
1093 # TODO: some of these may be conditional
1094 dep_zlib = dependency('zlib', version : '>= 1.2.3')
1095 pre_args += '-DHAVE_ZLIB'
1096 dep_thread = dependency('threads')
1097 if dep_thread.found() and host_machine.system() != 'windows'
1098 pre_args += '-DHAVE_PTHREAD'
1100 'pthread_setaffinity_np',
1101 dependencies : dep_thread,
1102 prefix : '#include <pthread.h>',
1103 args : '-D_GNU_SOURCE')
1104 pre_args += '-DHAVE_PTHREAD_SETAFFINITY'
1107 dep_expat = dependency('expat')
1108 # this only exists on linux so either this is linux and it will be found, or
1109 # its not linux and and wont
1110 dep_m = cc.find_library('m', required : false)
1112 # Check for libdrm. various drivers have different libdrm version requirements,
1113 # but we always want to use the same version for all libdrm modules. That means
1114 # even if driver foo requires 2.4.0 and driver bar requires 2.4.3, if foo and
1115 # bar are both on use 2.4.3 for both of them
1116 dep_libdrm_amdgpu = null_dep
1117 dep_libdrm_radeon = null_dep
1118 dep_libdrm_nouveau = null_dep
1119 dep_libdrm_etnaviv = null_dep
1120 dep_libdrm_intel = null_dep
1122 _drm_amdgpu_ver = '2.4.97'
1123 _drm_radeon_ver = '2.4.71'
1124 _drm_nouveau_ver = '2.4.66'
1125 _drm_etnaviv_ver = '2.4.89'
1126 _drm_intel_ver = '2.4.75'
1130 ['intel', with_dri_i915 or with_gallium_i915],
1131 ['amdgpu', with_amd_vk or with_gallium_radeonsi],
1132 ['radeon', (with_gallium_radeonsi or with_dri_r100 or with_dri_r200 or
1133 with_gallium_r300 or with_gallium_r600)],
1134 ['nouveau', (with_gallium_nouveau or with_dri_nouveau)],
1135 ['etnaviv', with_gallium_etnaviv],
1138 # VC4 only needs core libdrm support of this version, not a libdrm_vc4
1144 # Loop over the enables versions and get the highest libdrm requirement for all
1147 foreach d : _libdrm_checks
1148 ver = get_variable('_drm_@0@_ver'.format(d[0]))
1149 if d[1] and ver.version_compare('>' + _drm_ver)
1155 message('libdrm @0@ needed because @1@ has the highest requirement'.format(_drm_ver, _drm_blame))
1158 # Then get each libdrm module
1159 foreach d : _libdrm_checks
1162 'dep_libdrm_' + d[0],
1163 dependency('libdrm_' + d[0], version : '>=' + _drm_ver)
1168 with_gallium_drisw_kms = false
1169 dep_libdrm = dependency(
1170 'libdrm', version : '>=' + _drm_ver,
1171 required : with_dri2 or with_dri3
1173 if dep_libdrm.found()
1174 pre_args += '-DHAVE_LIBDRM'
1175 if with_dri_platform == 'drm' and with_dri
1176 with_gallium_drisw_kms = true
1180 llvm_modules = ['bitwriter', 'engine', 'mcdisassembler', 'mcjit']
1181 llvm_optional_modules = []
1182 if with_amd_vk or with_gallium_radeonsi or with_gallium_r600
1183 llvm_modules += ['amdgpu', 'native', 'bitreader', 'ipo']
1184 if with_gallium_r600
1185 llvm_modules += 'asmparser'
1188 if with_gallium_opencl
1190 'all-targets', 'linker', 'coverage', 'instrumentation', 'ipo', 'irreader',
1191 'lto', 'option', 'objcarcopts', 'profiledata',
1193 llvm_optional_modules += ['coroutines']
1196 if with_amd_vk or with_gallium_radeonsi
1197 _llvm_version = '>= 7.0.0'
1198 elif with_gallium_swr
1199 _llvm_version = '>= 6.0.0'
1200 elif with_gallium_opencl or with_gallium_r600
1201 _llvm_version = '>= 3.9.0'
1203 _llvm_version = '>= 3.3.0'
1206 _shared_llvm = get_option('shared-llvm')
1208 _llvm = get_option('llvm')
1212 dep_llvm = dependency(
1214 version : _llvm_version,
1215 modules : llvm_modules,
1216 optional_modules : llvm_optional_modules,
1218 with_amd_vk or with_gallium_radeonsi or with_gallium_swr or
1219 with_gallium_opencl or _llvm == 'true'
1221 static : not _shared_llvm,
1223 with_llvm = dep_llvm.found()
1226 _llvm_version = dep_llvm.version().split('.')
1228 # 3 digits versions in LLVM only started from 3.4.1 on
1229 if dep_llvm.version().version_compare('>= 3.4.1')
1230 _llvm_patch = _llvm_version[2]
1236 '-DHAVE_LLVM=0x0@0@0@1@'.format(_llvm_version[0], _llvm_version[1]),
1237 '-DMESA_LLVM_VERSION_PATCH=@0@'.format(_llvm_patch),
1240 # LLVM can be built without rtti, turning off rtti changes the ABI of C++
1241 # programs, so we need to build all C++ code in mesa without rtti as well to
1242 # ensure that linking works.
1243 if dep_llvm.get_configtool_variable('has-rtti') == 'NO'
1244 if with_gallium_nouveau
1245 error('The Nouveau driver requires rtti. You either need to turn off nouveau or use an LLVM built with LLVM_ENABLE_RTTI.')
1247 cpp_args += '-fno-rtti'
1249 elif with_amd_vk or with_gallium_radeonsi or with_gallium_swr
1250 error('The following drivers require LLVM: Radv, RadeonSI, SWR. One of these is enabled, but LLVM is disabled.')
1253 if (with_amd_vk or with_gallium_radeonsi or with_gallium_opencl or
1254 (with_gallium_r600 and with_llvm))
1255 dep_elf = dependency('libelf', required : false)
1256 if not dep_elf.found()
1257 dep_elf = cc.find_library('elf')
1263 dep_glvnd = null_dep
1265 dep_glvnd = dependency('libglvnd', version : '>= 0.2.0')
1266 pre_args += '-DUSE_LIBGLVND=1'
1269 if with_valgrind != 'false'
1270 dep_valgrind = dependency('valgrind', required : with_valgrind == 'true')
1271 if dep_valgrind.found()
1272 pre_args += '-DHAVE_VALGRIND'
1275 dep_valgrind = null_dep
1278 # pthread stubs. Lets not and say we didn't
1280 prog_bison = find_program('bison', required : with_any_opengl)
1281 prog_flex = find_program('flex', required : with_any_opengl)
1283 dep_selinux = null_dep
1284 if get_option('selinux')
1285 dep_selinux = dependency('libselinux')
1286 pre_args += '-DMESA_SELINUX'
1289 if with_libunwind != 'false'
1290 dep_unwind = dependency('libunwind', required : with_libunwind == 'true')
1291 if dep_unwind.found()
1292 pre_args += '-DHAVE_LIBUNWIND'
1295 dep_unwind = null_dep
1298 if with_osmesa != 'none'
1299 if with_osmesa == 'classic' and not with_dri_swrast
1300 error('OSMesa classic requires dri (classic) swrast.')
1302 if with_osmesa == 'gallium' and not with_gallium_softpipe
1303 error('OSMesa gallium requires gallium softpipe or llvmpipe.')
1305 osmesa_lib_name = 'OSMesa'
1306 osmesa_bits = get_option('osmesa-bits')
1307 if osmesa_bits != '8'
1308 if with_dri or with_glx != 'disabled'
1309 error('OSMesa bits must be 8 if building glx or dir based drivers')
1311 osmesa_lib_name = osmesa_lib_name + osmesa_bits
1313 '-DCHAN_BITS=@0@'.format(osmesa_bits), '-DDEFAULT_SOFTWARE_DEPTH_BITS=31'
1318 # TODO: symbol mangling
1320 if with_platform_wayland
1321 dep_wl_scanner = dependency('wayland-scanner', native: true)
1322 prog_wl_scanner = find_program(dep_wl_scanner.get_pkgconfig_variable('wayland_scanner'))
1323 if dep_wl_scanner.version().version_compare('>= 1.15')
1324 wl_scanner_arg = 'private-code'
1326 wl_scanner_arg = 'code'
1328 dep_wl_protocols = dependency('wayland-protocols', version : '>= 1.8')
1329 dep_wayland_client = dependency('wayland-client', version : '>=1.11')
1330 dep_wayland_server = dependency('wayland-server', version : '>=1.11')
1332 dep_wayland_egl = dependency('wayland-egl-backend', version : '>= 3')
1333 dep_wayland_egl_headers = declare_dependency(
1334 compile_args : run_command(prog_pkgconfig, ['wayland-egl-backend', '--cflags']).stdout().split())
1336 wayland_dmabuf_xml = join_paths(
1337 dep_wl_protocols.get_pkgconfig_variable('pkgdatadir'), 'unstable',
1338 'linux-dmabuf', 'linux-dmabuf-unstable-v1.xml'
1340 pre_args += ['-DHAVE_WAYLAND_PLATFORM', '-DWL_HIDE_DEPRECATED']
1345 dep_xdamage = null_dep
1346 dep_xfixes = null_dep
1347 dep_x11_xcb = null_dep
1349 dep_xcb_glx = null_dep
1350 dep_xcb_dri2 = null_dep
1351 dep_xcb_dri3 = null_dep
1352 dep_dri2proto = null_dep
1353 dep_glproto = null_dep
1354 dep_xxf86vm = null_dep
1355 dep_xcb_dri3 = null_dep
1356 dep_xcb_present = null_dep
1357 dep_xcb_sync = null_dep
1358 dep_xcb_xfixes = null_dep
1359 dep_xshmfence = null_dep
1360 dep_xcb_xrandr = null_dep
1361 dep_xlib_xrandr = null_dep
1362 if with_platform_x11
1363 if with_glx == 'xlib' or with_glx == 'gallium-xlib'
1364 dep_x11 = dependency('x11')
1365 dep_xext = dependency('xext')
1366 dep_xcb = dependency('xcb')
1367 elif with_glx == 'dri'
1368 dep_x11 = dependency('x11')
1369 dep_xext = dependency('xext')
1370 dep_xdamage = dependency('xdamage', version : '>= 1.1')
1371 dep_xfixes = dependency('xfixes')
1372 dep_xcb_glx = dependency('xcb-glx', version : '>= 1.8.1')
1374 if (with_any_vk or with_glx == 'dri' or with_egl or
1375 (with_gallium_vdpau or with_gallium_xvmc or with_gallium_va or
1376 with_gallium_omx != 'disabled'))
1377 dep_xcb = dependency('xcb')
1378 dep_x11_xcb = dependency('x11-xcb')
1380 if with_any_vk or with_egl or (with_glx == 'dri' and with_dri_platform == 'drm')
1381 dep_xcb_dri2 = dependency('xcb-dri2', version : '>= 1.8')
1384 pre_args += '-DHAVE_DRI3'
1385 dep_xcb_dri3 = dependency('xcb-dri3')
1386 dep_xcb_present = dependency('xcb-present')
1387 # until xcb-dri3 has been around long enough to make a hard-dependency:
1388 if (dep_xcb_dri3.version().version_compare('>= 1.13') and
1389 dep_xcb_present.version().version_compare('>= 1.13'))
1390 pre_args += '-DHAVE_DRI3_MODIFIERS'
1392 dep_xcb_sync = dependency('xcb-sync')
1393 dep_xshmfence = dependency('xshmfence', version : '>= 1.1')
1396 if with_glx == 'dri'
1397 if with_dri_platform == 'drm'
1398 dep_dri2proto = dependency('dri2proto', version : '>= 2.8')
1399 dep_xxf86vm = dependency('xxf86vm')
1401 dep_glproto = dependency('glproto', version : '>= 1.4.14')
1404 with_gallium_vdpau or with_gallium_xvmc or with_gallium_xa or
1405 with_gallium_omx != 'disabled'))
1406 dep_xcb_xfixes = dependency('xcb-xfixes')
1409 dep_xcb_xrandr = dependency('xcb-randr')
1410 dep_xlib_xrandr = dependency('xrandr', version : '>= 1.3')
1414 if get_option('gallium-extra-hud')
1415 pre_args += '-DHAVE_GALLIUM_EXTRA_HUD=1'
1418 _sensors = get_option('lmsensors')
1419 if _sensors != 'false'
1420 dep_lmsensors = cc.find_library('sensors', required : _sensors == 'true')
1421 if dep_lmsensors.found()
1422 pre_args += '-DHAVE_LIBSENSORS=1'
1425 dep_lmsensors = null_dep
1428 foreach a : pre_args
1429 add_project_arguments(a, language : ['c', 'cpp'])
1432 add_project_arguments(a, language : ['c'])
1434 foreach a : cpp_args
1435 add_project_arguments(a, language : ['cpp'])
1440 if with_glx == 'xlib' or with_glx == 'gallium-xlib'
1441 gl_priv_reqs += ['x11', 'xext', 'xcb']
1442 elif with_glx == 'dri'
1444 'x11', 'xext', 'xdamage >= 1.1', 'xfixes', 'x11-xcb', 'xcb',
1446 if with_dri_platform == 'drm'
1447 gl_priv_reqs += 'xcb-dri2 >= 1.8'
1448 gl_priv_reqs += 'xxf86vm'
1451 if dep_libdrm.found()
1452 gl_priv_reqs += 'libdrm >= 2.4.75'
1456 if dep_thread.found()
1457 gl_priv_libs += ['-lpthread', '-pthread']
1460 gl_priv_libs += '-lm'
1463 gl_priv_libs += '-ldl'
1466 pkg = import('pkgconfig')
1468 env_test = environment()
1469 env_test.set('NM', find_program('nm').path())
1471 # This quirk needs to be applied to sources with functions defined in assembly
1472 # as GCC LTO drops them. See: https://bugs.freedesktop.org/show_bug.cgi?id=109391
1473 gcc_lto_quirk = (cc.get_id() == 'gcc') ? ['-fno-lto'] : []