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 system_has_kms_drm = ['openbsd', 'netbsd', 'freebsd', 'dragonfly', 'linux'].contains(host_machine.system())
39 # Arguments for the preprocessor, put these in a separate array from the C and
40 # C++ (cpp in meson terminology) arguments since they need to be added to the
41 # default arguments for both C and C++.
43 '-D__STDC_CONSTANT_MACROS',
44 '-D__STDC_FORMAT_MACROS',
45 '-D__STDC_LIMIT_MACROS',
46 '-DVERSION="@0@"'.format(meson.project_version()),
47 '-DPACKAGE_VERSION=VERSION',
48 '-DPACKAGE_BUGREPORT="https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa"',
51 with_vulkan_icd_dir = get_option('vulkan-icd-dir')
52 with_tests = get_option('build-tests')
53 with_valgrind = get_option('valgrind')
54 with_libunwind = get_option('libunwind')
55 with_asm = get_option('asm')
56 with_glx_read_only_text = get_option('glx-read-only-text')
57 with_glx_direct = get_option('glx-direct')
58 with_osmesa = get_option('osmesa')
59 with_swr_arches = get_option('swr-arches')
60 with_tools = get_option('tools')
61 if with_tools.contains('all')
62 with_tools = ['freedreno', 'glsl', 'intel', 'nir', 'nouveau', 'xvmc']
65 dri_drivers_path = get_option('dri-drivers-path')
66 if dri_drivers_path == ''
67 dri_drivers_path = join_paths(get_option('prefix'), get_option('libdir'), 'dri')
69 dri_search_path = get_option('dri-search-path')
70 if dri_search_path == ''
71 dri_search_path = dri_drivers_path
74 with_gles1 = get_option('gles1')
75 with_gles2 = get_option('gles2')
76 with_opengl = get_option('opengl')
77 with_any_opengl = with_opengl or with_gles1 or with_gles2
78 # Only build shared_glapi if at least one OpenGL API is enabled
79 with_shared_glapi = get_option('shared-glapi') and with_any_opengl
82 # shared-glapi is required if at least two OpenGL APIs are being built
83 if not with_shared_glapi
84 if ((with_gles1 and with_gles2) or (with_gles1 and with_opengl)
85 or (with_gles2 and with_opengl))
86 error('shared-glapi required for building two or more of OpenGL, OpenGL ES 1.x, OpenGL ES 2.x')
90 # We require OpenGL for OpenGL ES
91 if (with_gles1 or with_gles2) and not with_opengl
92 error('building OpenGL ES without OpenGL is not supported.')
95 system_has_kms_drm = ['openbsd', 'netbsd', 'freebsd', 'dragonfly', 'linux'].contains(host_machine.system())
97 _drivers = get_option('dri-drivers')
98 if _drivers.contains('auto')
101 if ['x86', 'x86_64'].contains(host_machine.cpu_family())
102 _drivers = ['i915', 'i965', 'r100', 'r200', 'nouveau']
103 elif ['arm', 'aarch64'].contains(host_machine.cpu_family())
106 error('Unknown architecture @0@. Please pass -Ddri-drivers to set driver options. Patches gladly accepted to fix this.'.format(
107 host_machine.cpu_family()))
109 elif ['darwin', 'windows', 'cygwin', 'haiku'].contains(host_machine.system())
110 # only swrast would make sense here, but gallium swrast is a much better default
113 error('Unknown OS @0@. Please pass -Ddri-drivers to set driver options. Patches gladly accepted to fix this.'.format(
114 host_machine.system()))
118 with_dri_i915 = _drivers.contains('i915')
119 with_dri_i965 = _drivers.contains('i965')
120 with_dri_r100 = _drivers.contains('r100')
121 with_dri_r200 = _drivers.contains('r200')
122 with_dri_nouveau = _drivers.contains('nouveau')
123 with_dri_swrast = _drivers.contains('swrast')
125 with_dri = _drivers.length() != 0 and _drivers != ['']
127 _drivers = get_option('gallium-drivers')
128 if _drivers.contains('auto')
129 if system_has_kms_drm
131 if ['x86', 'x86_64'].contains(host_machine.cpu_family())
133 'r300', 'r600', 'radeonsi', 'nouveau', 'virgl', 'svga', 'swrast'
135 elif ['arm', 'aarch64'].contains(host_machine.cpu_family())
137 'pl111', 'v3d', 'vc4', 'freedreno', 'etnaviv', 'imx', 'nouveau',
138 'tegra', 'virgl', 'swrast',
141 error('Unknown architecture @0@. Please pass -Dgallium-drivers to set driver options. Patches gladly accepted to fix this.'.format(
142 host_machine.cpu_family()))
144 elif ['darwin', 'windows', 'cygwin', 'haiku'].contains(host_machine.system())
145 _drivers = ['swrast']
147 error('Unknown OS @0@. Please pass -Dgallium-drivers to set driver options. Patches gladly accepted to fix this.'.format(
148 host_machine.system()))
151 with_gallium_pl111 = _drivers.contains('pl111')
152 with_gallium_radeonsi = _drivers.contains('radeonsi')
153 with_gallium_r300 = _drivers.contains('r300')
154 with_gallium_r600 = _drivers.contains('r600')
155 with_gallium_nouveau = _drivers.contains('nouveau')
156 with_gallium_freedreno = _drivers.contains('freedreno')
157 with_gallium_softpipe = _drivers.contains('swrast')
158 with_gallium_vc4 = _drivers.contains('vc4')
159 with_gallium_v3d = _drivers.contains('v3d')
160 with_gallium_etnaviv = _drivers.contains('etnaviv')
161 with_gallium_imx = _drivers.contains('imx')
162 with_gallium_tegra = _drivers.contains('tegra')
163 with_gallium_i915 = _drivers.contains('i915')
164 with_gallium_svga = _drivers.contains('svga')
165 with_gallium_virgl = _drivers.contains('virgl')
166 with_gallium_swr = _drivers.contains('swr')
168 if cc.get_id() == 'intel'
169 if meson.version().version_compare('< 0.49.0')
170 error('Meson does not have sufficient support of ICC before 0.49.0 to compile mesa')
171 elif with_gallium_swr and meson.version().version_compare('== 0.49.0')
172 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')
176 with_gallium = _drivers.length() != 0 and _drivers != ['']
178 if with_gallium and system_has_kms_drm
179 _glx = get_option('glx')
180 _egl = get_option('egl')
181 if _glx == 'dri' or _egl == 'true' or (_glx == 'disabled' and _egl != 'false')
186 _vulkan_drivers = get_option('vulkan-drivers')
187 if _vulkan_drivers.contains('auto')
188 if system_has_kms_drm
189 if host_machine.cpu_family().startswith('x86')
190 _vulkan_drivers = ['amd', 'intel']
191 elif ['arm', 'aarch64'].contains(host_machine.cpu_family())
194 error('Unknown architecture @0@. Please pass -Dvulkan-drivers to set driver options. Patches gladly accepted to fix this.'.format(
195 host_machine.cpu_family()))
197 elif ['darwin', 'windows', 'cygwin', 'haiku'].contains(host_machine.system())
198 # No vulkan driver supports windows or macOS currently
201 error('Unknown OS @0@. Please pass -Dvulkan-drivers to set driver options. Patches gladly accepted to fix this.'.format(
202 host_machine.system()))
206 with_intel_vk = _vulkan_drivers.contains('intel')
207 with_amd_vk = _vulkan_drivers.contains('amd')
208 with_any_vk = _vulkan_drivers.length() != 0 and _vulkan_drivers != ['']
210 if with_dri_swrast and (with_gallium_softpipe or with_gallium_swr)
211 error('Only one swrast provider can be built')
213 if with_dri_i915 and with_gallium_i915
214 error('Only one i915 provider can be built')
216 if with_gallium_imx and not with_gallium_etnaviv
217 error('IMX driver requires etnaviv driver')
219 if with_gallium_pl111 and not with_gallium_vc4
220 error('pl111 driver requires vc4 driver')
222 if with_gallium_tegra and not with_gallium_nouveau
223 error('tegra driver requires nouveau driver')
226 if host_machine.system() == 'darwin'
227 with_dri_platform = 'apple'
228 elif ['windows', 'cygwin'].contains(host_machine.system())
229 with_dri_platform = 'windows'
230 elif system_has_kms_drm
231 with_dri_platform = 'drm'
233 # FIXME: haiku doesn't use dri, and xlib doesn't use dri, probably should
234 # assert here that one of those cases has been met.
235 # FIXME: illumos ends up here as well
236 with_dri_platform = 'none'
239 _platforms = get_option('platforms')
240 if _platforms.contains('auto')
241 if system_has_kms_drm
242 _platforms = ['x11', 'wayland', 'drm', 'surfaceless']
243 elif ['darwin', 'windows', 'cygwin'].contains(host_machine.system())
244 _platforms = ['x11', 'surfaceless']
245 elif ['haiku'].contains(host_machine.system())
246 _platforms = ['haiku']
248 error('Unknown OS @0@. Please pass -Dplatforms to set platforms. Patches gladly accepted to fix this.'.format(
249 host_machine.system()))
253 with_platform_android = _platforms.contains('android')
254 with_platform_x11 = _platforms.contains('x11')
255 with_platform_wayland = _platforms.contains('wayland')
256 with_platform_drm = _platforms.contains('drm')
257 with_platform_haiku = _platforms.contains('haiku')
258 with_platform_surfaceless = _platforms.contains('surfaceless')
260 with_platforms = false
261 if _platforms.length() != 0 and _platforms != ['']
262 with_platforms = true
263 egl_native_platform = _platforms[0]
266 _xlib_lease = get_option('xlib-lease')
267 if _xlib_lease == 'auto'
268 with_xlib_lease = with_platform_x11 and with_platform_drm
270 with_xlib_lease = _xlib_lease == 'true'
273 with_glx = get_option('glx')
274 if with_glx == 'auto'
277 elif with_platform_haiku
278 with_glx = 'disabled'
280 # Even when building just gallium drivers the user probably wants dri
282 elif with_platform_x11 and with_any_opengl and not with_any_vk
283 # The automatic behavior should not be to turn on xlib based glx when
284 # building only vulkan drivers
287 with_glx = 'disabled'
296 if not (with_dri or with_gallium or with_glx == 'xlib' or with_glx == 'gallium-xlib')
300 with_any_opengl = false
301 with_shared_glapi = false
304 _gbm = get_option('gbm')
306 with_gbm = system_has_kms_drm and with_dri
308 with_gbm = _gbm == 'true'
310 if with_gbm and not system_has_kms_drm
311 error('GBM only supports DRM/KMS platforms')
314 _egl = get_option('egl')
317 not ['darwin', 'windows'].contains(host_machine.system()) and
318 with_dri and with_shared_glapi and with_platforms
322 error('EGL requires dri')
323 elif not with_shared_glapi
324 error('EGL requires shared-glapi')
325 elif not with_platforms
326 error('No platforms specified, consider -Dplatforms=drm,x11,surfaceless at least')
327 elif not ['disabled', 'dri'].contains(with_glx)
328 error('EGL requires dri, but a GLX is being built without dri')
329 elif ['darwin', 'windows'].contains(host_machine.system())
330 error('EGL is not available on Windows or MacOS')
337 if with_egl and not (with_platform_drm or with_platform_surfaceless)
338 if with_gallium_radeonsi
339 error('RadeonSI requires drm or surfaceless platform when using EGL')
341 if with_gallium_virgl
342 error('Virgl requires drm or surfaceless platform when using EGL')
346 pre_args += '-DGLX_USE_TLS'
347 if with_glx != 'disabled'
348 if not (with_platform_x11 and with_any_opengl)
349 error('Cannot build GLX support without X11 platform support and at least one OpenGL API')
350 elif with_glx == 'gallium-xlib'
352 error('Gallium-xlib based GLX requires at least one gallium driver')
353 elif not with_gallium_softpipe
354 error('Gallium-xlib based GLX requires softpipe or llvmpipe.')
356 error('gallium-xlib conflicts with any dri driver')
358 elif with_glx == 'xlib'
360 error('xlib conflicts with any dri driver')
362 elif with_glx == 'dri'
364 error('dri based GLX requires at least one DRI driver')
365 elif not with_shared_glapi
366 error('dri based GLX requires shared-glapi')
371 with_glvnd = get_option('glvnd')
373 if with_glx == 'xlib' or with_glx == 'gallium-xlib'
374 error('Cannot build glvnd support for GLX that is not DRI based.')
375 elif with_glx == 'disabled' and not with_egl
376 error('glvnd requires DRI based GLX and/or EGL')
380 if with_vulkan_icd_dir == ''
381 with_vulkan_icd_dir = join_paths(get_option('datadir'), 'vulkan/icd.d')
384 with_dri2 = (with_dri or with_any_vk) and with_dri_platform == 'drm'
385 _dri3 = get_option('dri3')
387 with_dri3 = system_has_kms_drm and with_dri2
389 with_dri3 = _dri3 == 'true'
392 if with_any_vk and (with_platform_x11 and not with_dri3)
393 error('Vulkan drivers require dri3 for X11 support')
396 if with_glx == 'disabled' and not with_egl and not with_gbm and with_osmesa != 'classic'
397 error('building dri drivers require at least one windowing system or classic osmesa')
401 prog_pkgconfig = find_program('pkg-config')
403 _vdpau = get_option('gallium-vdpau')
404 if not system_has_kms_drm
406 error('VDPAU state tracker can only be build on unix-like OSes.')
410 elif not with_platform_x11
412 error('VDPAU state tracker requires X11 support.')
416 elif not (with_gallium_r300 or with_gallium_r600 or with_gallium_radeonsi or
417 with_gallium_nouveau)
419 error('VDPAU state tracker requires at least one of the following gallium drivers: r300, r600, radeonsi, nouveau.')
425 with_gallium_vdpau = false
427 dep_vdpau = dependency('vdpau', version : '>= 1.1', required : _vdpau == 'true')
429 dep_vdpau = declare_dependency(
430 compile_args : run_command(prog_pkgconfig, ['vdpau', '--cflags']).stdout().split()
432 with_gallium_vdpau = true
436 if with_gallium_vdpau
437 pre_args += '-DHAVE_ST_VDPAU'
439 vdpau_drivers_path = get_option('vdpau-libs-path')
440 if vdpau_drivers_path == ''
441 vdpau_drivers_path = join_paths(get_option('libdir'), 'vdpau')
444 _xvmc = get_option('gallium-xvmc')
445 if not system_has_kms_drm
447 error('XVMC state tracker can only be build on unix-like OSes.')
451 elif not with_platform_x11
453 error('XVMC state tracker requires X11 support.')
457 elif not (with_gallium_r600 or with_gallium_nouveau)
459 error('XVMC state tracker requires at least one of the following gallium drivers: r600, nouveau.')
465 with_gallium_xvmc = false
467 dep_xvmc = dependency('xvmc', version : '>= 1.0.6', required : _xvmc == 'true')
468 with_gallium_xvmc = dep_xvmc.found()
471 xvmc_drivers_path = get_option('xvmc-libs-path')
472 if xvmc_drivers_path == ''
473 xvmc_drivers_path = get_option('libdir')
476 _omx = get_option('gallium-omx')
477 if not system_has_kms_drm
478 if ['auto', 'disabled'].contains(_omx)
481 error('OMX state tracker can only be built on unix-like OSes.')
483 elif not (with_platform_x11 or with_platform_drm)
484 if ['auto', 'disabled'].contains(_omx)
487 error('OMX state tracker requires X11 or drm platform support.')
489 elif not (with_gallium_r600 or with_gallium_radeonsi or with_gallium_nouveau)
490 if ['auto', 'disabled'].contains(_omx)
493 error('OMX state tracker requires at least one of the following gallium drivers: r600, radeonsi, nouveau.')
496 with_gallium_omx = _omx
499 if ['auto', 'bellagio'].contains(_omx)
500 dep_omx = dependency(
501 'libomxil-bellagio', required : _omx == 'bellagio'
504 with_gallium_omx = 'bellagio'
507 if ['auto', 'tizonia'].contains(_omx)
508 if with_dri and with_egl
509 dep_omx = dependency(
510 'libtizonia', version : '>= 0.10.0',
511 required : _omx == 'tizonia',
514 dependency('libtizplatform', required : _omx == 'tizonia'),
515 dependency('tizilheaders', required : _omx == 'tizonia'),
517 if dep_omx.found() and dep_omx_other[0].found() and dep_omx_other[1].found()
518 with_gallium_omx = 'tizonia'
520 elif _omx == 'tizonia'
521 error('OMX-Tizonia state tracker requires dri and egl')
525 with_gallium_omx = 'disabled'
527 with_gallium_omx = _omx
531 '-DENABLE_ST_OMX_BELLAGIO=' + (with_gallium_omx == 'bellagio' ? '1' : '0'),
532 '-DENABLE_ST_OMX_TIZONIA=' + (with_gallium_omx == 'tizonia' ? '1' : '0'),
536 omx_drivers_path = get_option('omx-libs-path')
538 if with_gallium_omx != 'disabled'
539 # Figure out where to put the omx driver.
540 # FIXME: this could all be vastly simplified by adding a 'defined_variable'
541 # argument to meson's get_pkgconfig_variable method.
542 if omx_drivers_path == ''
543 _omx_libdir = dep_omx.get_pkgconfig_variable('libdir')
544 _omx_drivers_dir = dep_omx.get_pkgconfig_variable('pluginsdir')
545 if _omx_libdir == get_option('libdir')
546 omx_drivers_path = _omx_drivers_dir
549 # This will fail on windows. Does OMX run on windows?
550 _omx_libdir = _omx_libdir.split('/')
551 _omx_drivers_dir = _omx_drivers_dir.split('/')
552 foreach o : _omx_drivers_dir
553 if not _omx_libdir.contains(o)
557 omx_drivers_path = join_paths(get_option('libdir'), _omx_base_dir)
562 _va = get_option('gallium-va')
563 if not system_has_kms_drm
565 error('VA state tracker can only be built on unix-like OSes.')
569 elif not (with_platform_x11 or with_platform_drm)
571 error('VA state tracker requires X11 or drm or wayland platform support.')
575 elif not (with_gallium_r600 or with_gallium_radeonsi or with_gallium_nouveau)
577 error('VA state tracker requires at least one of the following gallium drivers: r600, radeonsi, nouveau.')
582 with_gallium_va = false
585 dep_va = dependency('libva', version : '>= 0.38.0', required : _va == 'true')
587 dep_va_headers = declare_dependency(
588 compile_args : run_command(prog_pkgconfig, ['libva', '--cflags']).stdout().split()
590 with_gallium_va = true
594 va_drivers_path = get_option('va-libs-path')
595 if va_drivers_path == ''
596 va_drivers_path = join_paths(get_option('libdir'), 'dri')
599 _xa = get_option('gallium-xa')
600 if not system_has_kms_drm
602 error('XA state tracker can only be built on unix-like OSes.')
606 elif not (with_gallium_nouveau or with_gallium_freedreno or with_gallium_i915
607 or with_gallium_svga)
609 error('XA state tracker requires at least one of the following gallium drivers: nouveau, freedreno, i915, svga.')
614 with_gallium_xa = _xa != 'false'
616 d3d_drivers_path = get_option('d3d-drivers-path')
617 if d3d_drivers_path == ''
618 d3d_drivers_path = join_paths(get_option('prefix'), get_option('libdir'), 'd3d')
621 with_gallium_st_nine = get_option('gallium-nine')
622 if with_gallium_st_nine
623 if not with_gallium_softpipe
624 error('The nine state tracker requires gallium softpipe/llvmpipe.')
625 elif not (with_gallium_radeonsi or with_gallium_nouveau or with_gallium_r600
626 or with_gallium_r300 or with_gallium_svga or with_gallium_i915)
627 error('The nine state tracker requires at least one non-swrast gallium driver.')
630 error('Using nine with wine requires dri3')
634 if get_option('power8') != 'false'
635 # on old versions of meson the cpu family would return as ppc64le on little
636 # endian power8, this was changed in 0.48 such that the family would always
637 # be ppc64 regardless of endianness, and the the machine.endian() value
638 # should be checked. Since we support versions < 0.48 we need to use
640 if host_machine.cpu_family().startswith('ppc64') and host_machine.endian() == 'little'
641 if cc.get_id() == 'gcc' and cc.version().version_compare('< 4.8')
642 error('Altivec is not supported with gcc version < 4.8.')
647 vector unsigned char r;
648 vector unsigned int v = vec_splat_u32 (1);
649 r = __builtin_vec_vgbbd ((vector unsigned char) v);
652 args : '-mpower8-vector',
653 name : 'POWER8 intrinsics')
654 pre_args += ['-D_ARCH_PWR8', '-mpower8-vector']
655 elif get_option('power8') == 'true'
656 error('POWER8 intrinsic support required but not found.')
661 _opencl = get_option('gallium-opencl')
663 if _opencl != 'disabled'
665 error('OpenCL Clover implementation requires at least one gallium driver.')
668 dep_clc = dependency('libclc')
669 with_gallium_opencl = true
670 with_opencl_icd = _opencl == 'icd'
672 if host_machine.cpu_family().startswith('ppc') and cpp.compiles('''
673 #if !defined(__VEC__) || !defined(__ALTIVEC__)
674 #error "AltiVec not enabled"
677 clover_cpp_std += ['cpp_std=gnu++11']
681 with_gallium_opencl = false
682 with_opencl_icd = false
685 gl_pkgconfig_c_flags = []
687 if with_any_vk or with_egl or (with_glx == 'dri' and with_dri_platform == 'drm')
688 pre_args += '-DHAVE_X11_PLATFORM'
690 if with_glx == 'xlib' or with_glx == 'gallium-xlib'
691 pre_args += '-DUSE_XSHM'
693 pre_args += '-DGLX_INDIRECT_RENDERING'
695 pre_args += '-DGLX_DIRECT_RENDERING'
697 if with_dri_platform == 'drm'
698 pre_args += '-DGLX_USE_DRM'
699 elif with_dri_platform == 'apple'
700 pre_args += '-DGLX_USE_APPLEGL'
701 elif with_dri_platform == 'windows'
702 pre_args += '-DGLX_USE_WINDOWSGL'
706 pre_args += '-DMESA_EGL_NO_X11_HEADERS'
707 gl_pkgconfig_c_flags += '-DMESA_EGL_NO_X11_HEADERS'
710 if with_egl and not with_gbm
711 error('EGL drm platform requires gbm')
713 pre_args += '-DHAVE_DRM_PLATFORM'
715 if with_platform_surfaceless
716 pre_args += '-DHAVE_SURFACELESS_PLATFORM'
718 if with_platform_android
720 dependency('cutils'),
721 dependency('hardware'),
724 pre_args += '-DHAVE_ANDROID_PLATFORM'
726 if with_platform_haiku
727 pre_args += '-DHAVE_HAIKU_PLATFORM'
730 prog_python = import('python3').find_python()
731 has_mako = run_command(
734 from distutils.version import StrictVersion
736 assert StrictVersion(mako.__version__) > StrictVersion("0.8.0")
738 if has_mako.returncode() != 0
739 error('Python (3.x) mako module >= 0.8.0 required to build mesa.')
742 if cc.get_id() == 'gcc' and cc.version().version_compare('< 4.4.6')
743 error('When using GCC, version 4.4.6 or later is required.')
746 # Define DEBUG for debug builds only (debugoptimized is not included on this one)
747 if get_option('buildtype') == 'debug'
748 pre_args += '-DDEBUG'
751 if get_option('shader-cache')
752 pre_args += '-DENABLE_SHADER_CACHE'
754 error('Radv requires shader cache support')
757 # Check for GCC style builtins
758 foreach b : ['bswap32', 'bswap64', 'clz', 'clzll', 'ctz', 'expect', 'ffs',
759 'ffsll', 'popcount', 'popcountll', 'unreachable']
760 if cc.has_function(b)
761 pre_args += '-DHAVE___BUILTIN_@0@'.format(b.to_upper())
765 # check for GCC __attribute__
766 foreach a : ['const', 'flatten', 'malloc', 'pure', 'unused',
767 'warn_unused_result', 'weak',]
768 if cc.compiles('int foo(void) __attribute__((@0@));'.format(a),
769 name : '__attribute__((@0@))'.format(a))
770 pre_args += '-DHAVE_FUNC_ATTRIBUTE_@0@'.format(a.to_upper())
773 if cc.compiles('int foo(const char *p, ...) __attribute__((format(printf, 1, 2)));',
774 name : '__attribute__((format(...)))')
775 pre_args += '-DHAVE_FUNC_ATTRIBUTE_FORMAT'
777 if cc.compiles('struct __attribute__((packed)) foo { int bar; };',
778 name : '__attribute__((packed))')
779 pre_args += '-DHAVE_FUNC_ATTRIBUTE_PACKED'
781 if cc.compiles('int *foo(void) __attribute__((returns_nonnull));',
782 name : '__attribute__((returns_nonnull))')
783 pre_args += '-DHAVE_FUNC_ATTRIBUTE_RETURNS_NONNULL'
785 if cc.compiles('''int foo_def(void) __attribute__((visibility("default")));
786 int foo_hid(void) __attribute__((visibility("hidden")));
787 int foo_int(void) __attribute__((visibility("internal")));
788 int foo_pro(void) __attribute__((visibility("protected")));''',
789 name : '__attribute__((visibility(...)))')
790 pre_args += '-DHAVE_FUNC_ATTRIBUTE_VISIBILITY'
792 if cc.compiles('int foo(void) { return 0; } int bar(void) __attribute__((alias("foo")));',
793 name : '__attribute__((alias(...)))')
794 pre_args += '-DHAVE_FUNC_ATTRIBUTE_ALIAS'
796 if cc.compiles('int foo(void) __attribute__((__noreturn__));',
797 name : '__attribute__((__noreturn__))')
798 pre_args += '-DHAVE_FUNC_ATTRIBUTE_NORETURN'
801 # TODO: this is very incomplete
802 if ['linux', 'cygwin', 'gnu'].contains(host_machine.system())
803 pre_args += '-D_GNU_SOURCE'
806 # Check for generic C arguments
808 foreach a : ['-Werror=implicit-function-declaration',
809 '-Werror=missing-prototypes', '-Werror=return-type',
811 '-fno-trapping-math', '-Qunused-arguments']
812 if cc.has_argument(a)
817 foreach a : ['missing-field-initializers', 'format-truncation']
818 if cc.has_argument('-W' + a)
819 c_args += '-Wno-' + a
824 if cc.has_argument('-fvisibility=hidden')
825 c_vis_args += '-fvisibility=hidden'
828 # Check for generic C++ arguments
830 foreach a : ['-Werror=return-type',
831 '-fno-math-errno', '-fno-trapping-math',
832 '-Qunused-arguments']
833 if cpp.has_argument(a)
838 # For some reason, the test for -Wno-foo always succeeds with gcc, even if the
839 # option is not supported. Hence, check for -Wfoo instead.
841 foreach a : ['non-virtual-dtor', 'missing-field-initializers', 'format-truncation']
842 if cpp.has_argument('-W' + a)
843 cpp_args += '-Wno-' + a
847 no_override_init_args = []
848 foreach a : ['override-init', 'initializer-overrides']
849 if cc.has_argument('-W' + a)
850 no_override_init_args += '-Wno-' + a
855 if cpp.has_argument('-fvisibility=hidden')
856 cpp_vis_args += '-fvisibility=hidden'
859 # Check for C and C++ arguments for MSVC2013 compatibility. These are only used
860 # in parts of the mesa code base that need to compile with old versions of
861 # MSVC, mainly common code
862 c_msvc_compat_args = []
863 cpp_msvc_compat_args = []
864 foreach a : ['-Werror=pointer-arith', '-Werror=vla']
865 if cc.has_argument(a)
866 c_msvc_compat_args += a
868 if cpp.has_argument(a)
869 cpp_msvc_compat_args += a
873 if host_machine.cpu_family().startswith('x86')
874 pre_args += '-DUSE_SSE41'
876 sse41_args = ['-msse4.1']
878 # GCC on x86 (not x86_64) with -msse* assumes a 16 byte aligned stack, but
879 # that's not guaranteed
880 if host_machine.cpu_family() == 'x86'
881 sse41_args += '-mstackrealign'
888 # Check for GCC style atomics
889 dep_atomic = null_dep
891 if cc.compiles('''#include <stdint.h>
896 return (int)__atomic_load_n(x.v, __ATOMIC_ACQUIRE) &
897 (int)__atomic_add_fetch(x.v, (uint64_t)1, __ATOMIC_ACQ_REL);
900 name : 'GCC atomic builtins')
901 pre_args += '-DUSE_GCC_ATOMIC_BUILTINS'
903 # Not all atomic calls can be turned into lock-free instructions, in which
904 # GCC will make calls into the libatomic library. Check whether we need to
905 # link with -latomic.
907 # This can happen for 64-bit atomic operations on 32-bit architectures such
909 if not cc.links('''#include <stdint.h>
914 return (int)__atomic_load_n(x.v, __ATOMIC_ACQUIRE) &
915 (int)__atomic_add_fetch(x.v, (uint64_t)1, __ATOMIC_ACQ_REL);
917 name : 'GCC atomic builtins required -latomic')
918 dep_atomic = cc.find_library('atomic')
921 if not cc.links('''#include <stdint.h>
924 return __sync_add_and_fetch(&v, (uint64_t)1);
926 dependencies : dep_atomic,
927 name : 'GCC 64bit atomics')
928 pre_args += '-DMISSING_64BIT_ATOMICS'
931 # TODO: shared/static? Is this even worth doing?
933 # When cross compiling we generally need to turn off the use of assembly,
934 # because mesa's assembly relies on building an executable for the host system,
935 # and running it to get information about struct sizes. There is at least one
936 # case of cross compiling where we can use asm, and that's x86_64 -> x86 when
937 # host OS == build OS, since in that case the build machine can run the host's
939 if meson.is_cross_build()
940 if build_machine.system() != host_machine.system()
941 # TODO: It may be possible to do this with an exe_wrapper (like wine).
942 message('Cross compiling from one OS to another, disabling assembly.')
944 elif not (build_machine.cpu_family().startswith('x86') and host_machine.cpu_family() == 'x86')
945 # FIXME: Gentoo always sets -m32 for x86_64 -> x86 builds, resulting in an
946 # x86 -> x86 cross compile. We use startswith rather than == to handle this
948 # TODO: There may be other cases where the 64 bit version of the
949 # architecture can run 32 bit binaries (aarch64 and armv7 for example)
951 Cross compiling to different architectures, and the host cannot run
952 the build machine's binaries. Disabling assembly.
960 if host_machine.cpu_family() == 'x86'
961 if system_has_kms_drm or host_machine.system() == 'gnu'
962 with_asm_arch = 'x86'
963 pre_args += ['-DUSE_X86_ASM', '-DUSE_MMX_ASM', '-DUSE_3DNOW_ASM',
966 if with_glx_read_only_text
967 pre_args += ['-DGLX_X86_READONLY_TEXT']
970 elif host_machine.cpu_family() == 'x86_64'
971 if system_has_kms_drm
972 with_asm_arch = 'x86_64'
973 pre_args += ['-DUSE_X86_64_ASM']
975 elif host_machine.cpu_family() == 'arm'
976 if system_has_kms_drm
977 with_asm_arch = 'arm'
978 pre_args += ['-DUSE_ARM_ASM']
980 elif host_machine.cpu_family() == 'aarch64'
981 if system_has_kms_drm
982 with_asm_arch = 'aarch64'
983 pre_args += ['-DUSE_AARCH64_ASM']
985 elif host_machine.cpu_family() == 'sparc64'
986 if system_has_kms_drm
987 with_asm_arch = 'sparc'
988 pre_args += ['-DUSE_SPARC_ASM']
990 elif host_machine.cpu_family().startswith('ppc64') and host_machine.endian() == 'little'
991 if system_has_kms_drm
992 with_asm_arch = 'ppc64le'
993 pre_args += ['-DUSE_PPC64LE_ASM']
998 # Check for standard headers and functions
999 if cc.has_header_symbol('sys/sysmacros.h', 'major')
1000 pre_args += '-DMAJOR_IN_SYSMACROS'
1001 elif cc.has_header_symbol('sys/mkdev.h', 'major')
1002 pre_args += '-DMAJOR_IN_MKDEV'
1005 foreach h : ['xlocale.h', 'sys/sysctl.h', 'linux/futex.h', 'endian.h', 'dlfcn.h']
1006 if cc.compiles('#include <@0@>'.format(h), name : '@0@'.format(h))
1007 pre_args += '-DHAVE_@0@'.format(h.to_upper().underscorify())
1011 foreach f : ['strtof', 'mkostemp', 'posix_memalign', 'timespec_get', 'memfd_create']
1012 if cc.has_function(f)
1013 pre_args += '-DHAVE_@0@'.format(f.to_upper())
1017 # strtod locale support
1022 #ifdef HAVE_XLOCALE_H
1023 #include <xlocale.h>
1026 locale_t loc = newlocale(LC_CTYPE_MASK, "C", NULL);
1027 const char *s = "1.0";
1029 double d = strtod_l(s, end, loc);
1030 float f = strtof_l(s, end, loc);
1035 name : 'strtod has locale support')
1036 pre_args += '-DHAVE_STRTOD_L'
1039 # Check for some linker flags
1040 ld_args_bsymbolic = []
1041 if cc.links('int main() { return 0; }', args : '-Wl,-Bsymbolic', name : 'Bsymbolic')
1042 ld_args_bsymbolic += '-Wl,-Bsymbolic'
1044 ld_args_gc_sections = []
1045 if cc.links('static char unused() { return 5; } int main() { return 0; }',
1046 args : '-Wl,--gc-sections', name : 'gc-sections')
1047 ld_args_gc_sections += '-Wl,--gc-sections'
1049 with_ld_version_script = false
1050 if cc.links('int main() { return 0; }',
1051 args : '-Wl,--version-script=@0@'.format(
1052 join_paths(meson.source_root(), 'build-support/conftest.map')),
1053 name : 'version-script')
1054 with_ld_version_script = true
1056 with_ld_dynamic_list = false
1057 if cc.links('int main() { return 0; }',
1058 args : '-Wl,--dynamic-list=@0@'.format(
1059 join_paths(meson.source_root(), 'build-support/conftest.dyn')),
1060 name : 'dynamic-list')
1061 with_ld_dynamic_list = true
1063 ld_args_build_id = []
1064 if build_machine.system() != 'darwin'
1065 ld_args_build_id += '-Wl,--build-id=sha1'
1068 # check for dl support
1069 if cc.has_function('dlopen')
1072 dep_dl = cc.find_library('dl')
1074 if cc.has_function('dladdr', dependencies : dep_dl)
1075 # This is really only required for megadrivers
1076 pre_args += '-DHAVE_DLADDR'
1079 if cc.has_function('dl_iterate_phdr')
1080 pre_args += '-DHAVE_DL_ITERATE_PHDR'
1082 error('Intel "Anvil" Vulkan driver requires the dl_iterate_phdr function')
1083 elif with_dri_i965 and get_option('shader-cache')
1084 error('Intel i965 GL driver requires dl_iterate_phdr when built with shader caching.')
1087 # Determine whether or not the rt library is needed for time functions
1088 if cc.has_function('clock_gettime')
1089 dep_clock = null_dep
1091 dep_clock = cc.find_library('rt')
1094 # TODO: some of these may be conditional
1095 dep_zlib = dependency('zlib', version : '>= 1.2.3')
1096 pre_args += '-DHAVE_ZLIB'
1097 dep_thread = dependency('threads')
1098 if dep_thread.found() and host_machine.system() != 'windows'
1099 pre_args += '-DHAVE_PTHREAD'
1101 'pthread_setaffinity_np',
1102 dependencies : dep_thread,
1103 prefix : '#include <pthread.h>',
1104 args : '-D_GNU_SOURCE')
1105 pre_args += '-DHAVE_PTHREAD_SETAFFINITY'
1108 dep_expat = dependency('expat')
1109 # this only exists on linux so either this is linux and it will be found, or
1110 # its not linux and and wont
1111 dep_m = cc.find_library('m', required : false)
1113 # Check for libdrm. various drivers have different libdrm version requirements,
1114 # but we always want to use the same version for all libdrm modules. That means
1115 # even if driver foo requires 2.4.0 and driver bar requires 2.4.3, if foo and
1116 # bar are both on use 2.4.3 for both of them
1117 dep_libdrm_amdgpu = null_dep
1118 dep_libdrm_radeon = null_dep
1119 dep_libdrm_nouveau = null_dep
1120 dep_libdrm_etnaviv = null_dep
1121 dep_libdrm_intel = null_dep
1123 _drm_amdgpu_ver = '2.4.95'
1124 _drm_radeon_ver = '2.4.71'
1125 _drm_nouveau_ver = '2.4.66'
1126 _drm_etnaviv_ver = '2.4.89'
1127 _drm_intel_ver = '2.4.75'
1131 ['intel', with_dri_i915 or with_gallium_i915],
1132 ['amdgpu', with_amd_vk or with_gallium_radeonsi],
1133 ['radeon', (with_gallium_radeonsi or with_dri_r100 or with_dri_r200 or
1134 with_gallium_r300 or with_gallium_r600)],
1135 ['nouveau', (with_gallium_nouveau or with_dri_nouveau)],
1136 ['etnaviv', with_gallium_etnaviv],
1139 # VC4 only needs core libdrm support of this version, not a libdrm_vc4
1145 # Loop over the enables versions and get the highest libdrm requirement for all
1148 foreach d : _libdrm_checks
1149 ver = get_variable('_drm_@0@_ver'.format(d[0]))
1150 if d[1] and ver.version_compare('>' + _drm_ver)
1156 message('libdrm @0@ needed because @1@ has the highest requirement'.format(_drm_ver, _drm_blame))
1159 # Then get each libdrm module
1160 foreach d : _libdrm_checks
1163 'dep_libdrm_' + d[0],
1164 dependency('libdrm_' + d[0], version : '>=' + _drm_ver)
1169 with_gallium_drisw_kms = false
1170 dep_libdrm = dependency(
1171 'libdrm', version : '>=' + _drm_ver,
1172 required : with_dri2 or with_dri3
1174 if dep_libdrm.found()
1175 pre_args += '-DHAVE_LIBDRM'
1176 if with_dri_platform == 'drm' and with_dri
1177 with_gallium_drisw_kms = true
1181 llvm_modules = ['bitwriter', 'engine', 'mcdisassembler', 'mcjit']
1182 llvm_optional_modules = []
1183 if with_amd_vk or with_gallium_radeonsi or with_gallium_r600
1184 llvm_modules += ['amdgpu', 'native', 'bitreader', 'ipo']
1185 if with_gallium_r600
1186 llvm_modules += 'asmparser'
1189 if with_gallium_opencl
1191 'all-targets', 'linker', 'coverage', 'instrumentation', 'ipo', 'irreader',
1192 'lto', 'option', 'objcarcopts', 'profiledata',
1194 llvm_optional_modules += ['coroutines']
1197 if with_amd_vk or with_gallium_radeonsi
1198 _llvm_version = '>= 6.0.0'
1199 elif with_gallium_swr
1200 _llvm_version = '>= 6.0.0'
1201 elif with_gallium_opencl or with_gallium_r600
1202 _llvm_version = '>= 3.9.0'
1204 _llvm_version = '>= 3.3.0'
1207 _shared_llvm = get_option('shared-llvm')
1209 _llvm = get_option('llvm')
1213 dep_llvm = dependency(
1215 version : _llvm_version,
1216 modules : llvm_modules,
1217 optional_modules : llvm_optional_modules,
1219 with_amd_vk or with_gallium_radeonsi or with_gallium_swr or
1220 with_gallium_opencl or _llvm == 'true'
1222 static : not _shared_llvm,
1224 with_llvm = dep_llvm.found()
1227 _llvm_version = dep_llvm.version().split('.')
1229 # 3 digits versions in LLVM only started from 3.4.1 on
1230 if dep_llvm.version().version_compare('>= 3.4.1')
1231 _llvm_patch = _llvm_version[2]
1237 '-DHAVE_LLVM=0x0@0@0@1@'.format(_llvm_version[0], _llvm_version[1]),
1238 '-DMESA_LLVM_VERSION_PATCH=@0@'.format(_llvm_patch),
1241 # LLVM can be built without rtti, turning off rtti changes the ABI of C++
1242 # programs, so we need to build all C++ code in mesa without rtti as well to
1243 # ensure that linking works.
1244 if dep_llvm.get_configtool_variable('has-rtti') == 'NO'
1245 if with_gallium_nouveau
1246 error('The Nouveau driver requires rtti. You either need to turn off nouveau or use an LLVM built with LLVM_ENABLE_RTTI.')
1248 cpp_args += '-fno-rtti'
1250 elif with_amd_vk or with_gallium_radeonsi or with_gallium_swr
1251 error('The following drivers require LLVM: Radv, RadeonSI, SWR. One of these is enabled, but LLVM is disabled.')
1254 if (with_amd_vk or with_gallium_radeonsi or with_gallium_opencl or
1255 (with_gallium_r600 and with_llvm))
1256 dep_elf = dependency('libelf', required : false)
1257 if not dep_elf.found()
1258 dep_elf = cc.find_library('elf')
1264 dep_glvnd = null_dep
1266 dep_glvnd = dependency('libglvnd', version : '>= 0.2.0')
1267 pre_args += '-DUSE_LIBGLVND=1'
1270 if with_valgrind != 'false'
1271 dep_valgrind = dependency('valgrind', required : with_valgrind == 'true')
1272 if dep_valgrind.found()
1273 pre_args += '-DHAVE_VALGRIND'
1276 dep_valgrind = null_dep
1279 # pthread stubs. Lets not and say we didn't
1281 prog_bison = find_program('bison', required : with_any_opengl)
1282 prog_flex = find_program('flex', required : with_any_opengl)
1284 dep_selinux = null_dep
1285 if get_option('selinux')
1286 dep_selinux = dependency('libselinux')
1287 pre_args += '-DMESA_SELINUX'
1290 if with_libunwind != 'false'
1291 dep_unwind = dependency('libunwind', required : with_libunwind == 'true')
1292 if dep_unwind.found()
1293 pre_args += '-DHAVE_LIBUNWIND'
1296 dep_unwind = null_dep
1299 if with_osmesa != 'none'
1300 if with_osmesa == 'classic' and not with_dri_swrast
1301 error('OSMesa classic requires dri (classic) swrast.')
1303 if with_osmesa == 'gallium' and not with_gallium_softpipe
1304 error('OSMesa gallium requires gallium softpipe or llvmpipe.')
1306 osmesa_lib_name = 'OSMesa'
1307 osmesa_bits = get_option('osmesa-bits')
1308 if osmesa_bits != '8'
1309 if with_dri or with_glx != 'disabled'
1310 error('OSMesa bits must be 8 if building glx or dir based drivers')
1312 osmesa_lib_name = osmesa_lib_name + osmesa_bits
1314 '-DCHAN_BITS=@0@'.format(osmesa_bits), '-DDEFAULT_SOFTWARE_DEPTH_BITS=31'
1319 # TODO: symbol mangling
1321 if with_platform_wayland
1322 dep_wl_scanner = dependency('wayland-scanner', native: true)
1323 prog_wl_scanner = find_program(dep_wl_scanner.get_pkgconfig_variable('wayland_scanner'))
1324 if dep_wl_scanner.version().version_compare('>= 1.15')
1325 wl_scanner_arg = 'private-code'
1327 wl_scanner_arg = 'code'
1329 dep_wl_protocols = dependency('wayland-protocols', version : '>= 1.8')
1330 dep_wayland_client = dependency('wayland-client', version : '>=1.11')
1331 dep_wayland_server = dependency('wayland-server', version : '>=1.11')
1333 dep_wayland_egl = dependency('wayland-egl-backend', version : '>= 3')
1334 dep_wayland_egl_headers = declare_dependency(
1335 compile_args : run_command(prog_pkgconfig, ['wayland-egl-backend', '--cflags']).stdout().split())
1337 wayland_dmabuf_xml = join_paths(
1338 dep_wl_protocols.get_pkgconfig_variable('pkgdatadir'), 'unstable',
1339 'linux-dmabuf', 'linux-dmabuf-unstable-v1.xml'
1341 pre_args += ['-DHAVE_WAYLAND_PLATFORM', '-DWL_HIDE_DEPRECATED']
1346 dep_xdamage = null_dep
1347 dep_xfixes = null_dep
1348 dep_x11_xcb = null_dep
1350 dep_xcb_glx = null_dep
1351 dep_xcb_dri2 = null_dep
1352 dep_xcb_dri3 = null_dep
1353 dep_dri2proto = null_dep
1354 dep_glproto = null_dep
1355 dep_xxf86vm = null_dep
1356 dep_xcb_dri3 = null_dep
1357 dep_xcb_present = null_dep
1358 dep_xcb_sync = null_dep
1359 dep_xcb_xfixes = null_dep
1360 dep_xshmfence = null_dep
1361 dep_xcb_xrandr = null_dep
1362 dep_xlib_xrandr = null_dep
1363 if with_platform_x11
1364 if with_glx == 'xlib' or with_glx == 'gallium-xlib'
1365 dep_x11 = dependency('x11')
1366 dep_xext = dependency('xext')
1367 dep_xcb = dependency('xcb')
1368 elif with_glx == 'dri'
1369 dep_x11 = dependency('x11')
1370 dep_xext = dependency('xext')
1371 dep_xdamage = dependency('xdamage', version : '>= 1.1')
1372 dep_xfixes = dependency('xfixes')
1373 dep_xcb_glx = dependency('xcb-glx', version : '>= 1.8.1')
1375 if (with_any_vk or with_glx == 'dri' or
1376 (with_gallium_vdpau or with_gallium_xvmc or with_gallium_va or
1377 with_gallium_omx != 'disabled'))
1378 dep_xcb = dependency('xcb')
1379 dep_x11_xcb = dependency('x11-xcb')
1381 if with_any_vk or with_egl or (with_glx == 'dri' and with_dri_platform == 'drm')
1382 dep_xcb_dri2 = dependency('xcb-dri2', version : '>= 1.8')
1385 pre_args += '-DHAVE_DRI3'
1386 dep_xcb_dri3 = dependency('xcb-dri3')
1387 dep_xcb_present = dependency('xcb-present')
1388 # until xcb-dri3 has been around long enough to make a hard-dependency:
1389 if (dep_xcb_dri3.version().version_compare('>= 1.13') and
1390 dep_xcb_present.version().version_compare('>= 1.13'))
1391 pre_args += '-DHAVE_DRI3_MODIFIERS'
1393 dep_xcb_sync = dependency('xcb-sync')
1394 dep_xshmfence = dependency('xshmfence', version : '>= 1.1')
1397 if with_glx == 'dri'
1398 if with_dri_platform == 'drm'
1399 dep_dri2proto = dependency('dri2proto', version : '>= 2.8')
1400 dep_xxf86vm = dependency('xxf86vm')
1402 dep_glproto = dependency('glproto', version : '>= 1.4.14')
1405 with_gallium_vdpau or with_gallium_xvmc or with_gallium_xa or
1406 with_gallium_omx != 'disabled'))
1407 dep_xcb_xfixes = dependency('xcb-xfixes')
1410 dep_xcb_xrandr = dependency('xcb-randr')
1411 dep_xlib_xrandr = dependency('xrandr', version : '>= 1.3')
1415 if get_option('gallium-extra-hud')
1416 pre_args += '-DHAVE_GALLIUM_EXTRA_HUD=1'
1419 _sensors = get_option('lmsensors')
1420 if _sensors != 'false'
1421 dep_lmsensors = cc.find_library('sensors', required : _sensors == 'true')
1422 if dep_lmsensors.found()
1423 pre_args += '-DHAVE_LIBSENSORS=1'
1426 dep_lmsensors = null_dep
1429 foreach a : pre_args
1430 add_project_arguments(a, language : ['c', 'cpp'])
1433 add_project_arguments(a, language : ['c'])
1435 foreach a : cpp_args
1436 add_project_arguments(a, language : ['cpp'])
1439 inc_include = include_directories('include')
1443 if with_glx == 'xlib' or with_glx == 'gallium-xlib'
1444 gl_priv_reqs += ['x11', 'xext', 'xcb']
1445 elif with_glx == 'dri'
1447 'x11', 'xext', 'xdamage >= 1.1', 'xfixes', 'x11-xcb', 'xcb',
1449 if with_dri_platform == 'drm'
1450 gl_priv_reqs += 'xcb-dri2 >= 1.8'
1451 gl_priv_reqs += 'xxf86vm'
1454 if dep_libdrm.found()
1455 gl_priv_reqs += 'libdrm >= 2.4.75'
1459 if dep_thread.found()
1460 gl_priv_libs += ['-lpthread', '-pthread']
1463 gl_priv_libs += '-lm'
1466 gl_priv_libs += '-ldl'
1469 pkg = import('pkgconfig')
1471 env_test = environment()
1472 env_test.set('NM', find_program('nm').path())