with_valgrind = get_option('valgrind')
with_libunwind = get_option('libunwind')
with_asm = get_option('asm')
+with_glx_read_only_text = get_option('glx-read-only-text')
with_osmesa = get_option('osmesa')
with_swr_arches = get_option('swr-arches')
with_tools = get_option('tools')
system_has_kms_drm = ['openbsd', 'netbsd', 'freebsd', 'dragonfly', 'linux'].contains(host_machine.system())
-with_dri = false
-with_dri_i915 = false
-with_dri_i965 = false
-with_dri_r100 = false
-with_dri_r200 = false
-with_dri_nouveau = false
-with_dri_swrast = false
_drivers = get_option('dri-drivers')
if _drivers.contains('auto')
if system_has_kms_drm
if ['x86', 'x86_64'].contains(host_machine.cpu_family())
_drivers = ['i915', 'i965', 'r100', 'r200', 'nouveau']
elif ['arm', 'aarch64'].contains(host_machine.cpu_family())
- _drivers = ['']
+ _drivers = []
else
error('Unknown architecture. Please pass -Ddri-drivers to set driver options. Patches gladly accepted to fix this.')
endif
elif ['darwin', 'windows', 'cygwin', 'haiku'].contains(host_machine.system())
# only swrast would make sense here, but gallium swrast is a much better default
- _drivers = ['']
+ _drivers = []
else
error('Unknown OS. Please pass -Ddri-drivers to set driver options. Patches gladly accepted to fix this.')
endif
endif
-if _drivers != ['']
- with_dri_i915 = _drivers.contains('i915')
- with_dri_i965 = _drivers.contains('i965')
- with_dri_r100 = _drivers.contains('r100')
- with_dri_r200 = _drivers.contains('r200')
- with_dri_nouveau = _drivers.contains('nouveau')
- with_dri_swrast = _drivers.contains('swrast')
- with_dri = true
-endif
-
-with_gallium = false
-with_gallium_pl111 = false
-with_gallium_radeonsi = false
-with_gallium_r300 = false
-with_gallium_r600 = false
-with_gallium_nouveau = false
-with_gallium_freedreno = false
-with_gallium_softpipe = false
-with_gallium_vc4 = false
-with_gallium_v3d = false
-with_gallium_etnaviv = false
-with_gallium_imx = false
-with_gallium_tegra = false
-with_gallium_i915 = false
-with_gallium_svga = false
-with_gallium_virgl = false
-with_gallium_swr = false
+
+with_dri_i915 = _drivers.contains('i915')
+with_dri_i965 = _drivers.contains('i965')
+with_dri_r100 = _drivers.contains('r100')
+with_dri_r200 = _drivers.contains('r200')
+with_dri_nouveau = _drivers.contains('nouveau')
+with_dri_swrast = _drivers.contains('swrast')
+
+with_dri = _drivers.length() != 0 and _drivers != ['']
+
_drivers = get_option('gallium-drivers')
if _drivers.contains('auto')
if system_has_kms_drm
error('Unknown OS. Please pass -Dgallium-drivers to set driver options. Patches gladly accepted to fix this.')
endif
endif
-if _drivers != ['']
- with_gallium_pl111 = _drivers.contains('pl111')
- with_gallium_radeonsi = _drivers.contains('radeonsi')
- with_gallium_r300 = _drivers.contains('r300')
- with_gallium_r600 = _drivers.contains('r600')
- with_gallium_nouveau = _drivers.contains('nouveau')
- with_gallium_freedreno = _drivers.contains('freedreno')
- with_gallium_softpipe = _drivers.contains('swrast')
- with_gallium_v3d = _drivers.contains('v3d')
- with_gallium_vc4 = _drivers.contains('vc4')
- with_gallium_etnaviv = _drivers.contains('etnaviv')
- with_gallium_imx = _drivers.contains('imx')
- with_gallium_tegra = _drivers.contains('tegra')
- with_gallium_i915 = _drivers.contains('i915')
- with_gallium_svga = _drivers.contains('svga')
- with_gallium_virgl = _drivers.contains('virgl')
- with_gallium_swr = _drivers.contains('swr')
- with_gallium = true
- if system_has_kms_drm
- _glx = get_option('glx')
- _egl = get_option('egl')
- if _glx == 'dri' or _egl == 'true' or (_glx == 'disabled' and _egl != 'false')
- with_dri = true
- endif
+with_gallium_pl111 = _drivers.contains('pl111')
+with_gallium_radeonsi = _drivers.contains('radeonsi')
+with_gallium_r300 = _drivers.contains('r300')
+with_gallium_r600 = _drivers.contains('r600')
+with_gallium_nouveau = _drivers.contains('nouveau')
+with_gallium_freedreno = _drivers.contains('freedreno')
+with_gallium_softpipe = _drivers.contains('swrast')
+with_gallium_vc4 = _drivers.contains('vc4')
+with_gallium_v3d = _drivers.contains('v3d')
+with_gallium_etnaviv = _drivers.contains('etnaviv')
+with_gallium_imx = _drivers.contains('imx')
+with_gallium_tegra = _drivers.contains('tegra')
+with_gallium_i915 = _drivers.contains('i915')
+with_gallium_svga = _drivers.contains('svga')
+with_gallium_virgl = _drivers.contains('virgl')
+with_gallium_swr = _drivers.contains('swr')
+
+with_gallium = _drivers.length() != 0 and _drivers != ['']
+
+if with_gallium and system_has_kms_drm
+ _glx = get_option('glx')
+ _egl = get_option('egl')
+ if _glx == 'dri' or _egl == 'true' or (_glx == 'disabled' and _egl != 'false')
+ with_dri = true
endif
endif
-with_intel_vk = false
-with_amd_vk = false
-with_any_vk = false
_vulkan_drivers = get_option('vulkan-drivers')
if _vulkan_drivers.contains('auto')
if system_has_kms_drm
endif
elif ['darwin', 'windows', 'cygwin', 'haiku'].contains(host_machine.system())
# No vulkan driver supports windows or macOS currently
- _vulkan_drivers = ['']
+ _vulkan_drivers = []
else
error('Unknown OS. Please pass -Dvulkan-drivers to set driver options. Patches gladly accepted to fix this.')
endif
endif
-if _vulkan_drivers != ['']
- with_intel_vk = _vulkan_drivers.contains('intel')
- with_amd_vk = _vulkan_drivers.contains('amd')
- with_any_vk = true
-endif
+
+with_intel_vk = _vulkan_drivers.contains('intel')
+with_amd_vk = _vulkan_drivers.contains('amd')
+with_any_vk = _vulkan_drivers.length() != 0 and _vulkan_drivers != ['']
if with_dri_swrast and (with_gallium_softpipe or with_gallium_swr)
error('Only one swrast provider can be built')
with_dri_platform = 'none'
endif
-with_platform_android = false
-with_platform_wayland = false
-with_platform_x11 = false
-with_platform_drm = false
-with_platform_surfaceless = false
-egl_native_platform = ''
_platforms = get_option('platforms')
if _platforms.contains('auto')
if system_has_kms_drm
error('Unknown OS. Please pass -Dplatforms to set platforms. Patches gladly accepted to fix this.')
endif
endif
-if _platforms != ['']
- with_platform_android = _platforms.contains('android')
- with_platform_x11 = _platforms.contains('x11')
- with_platform_wayland = _platforms.contains('wayland')
- with_platform_drm = _platforms.contains('drm')
- with_platform_haiku = _platforms.contains('haiku')
- with_platform_surfaceless = _platforms.contains('surfaceless')
+
+with_platform_android = _platforms.contains('android')
+with_platform_x11 = _platforms.contains('x11')
+with_platform_wayland = _platforms.contains('wayland')
+with_platform_drm = _platforms.contains('drm')
+with_platform_haiku = _platforms.contains('haiku')
+with_platform_surfaceless = _platforms.contains('surfaceless')
+
+with_platforms = false
+if _platforms.length() != 0 and _platforms != ['']
+ with_platforms = true
egl_native_platform = _platforms[0]
endif
_egl = get_option('egl')
if _egl == 'auto'
- with_egl = with_dri and with_shared_glapi and egl_native_platform != ''
+ with_egl = with_dri and with_shared_glapi and with_platforms
elif _egl == 'true'
if not with_dri
error('EGL requires dri')
elif not with_shared_glapi
error('EGL requires shared-glapi')
- elif egl_native_platform == ''
+ elif not with_platforms
error('No platforms specified, consider -Dplatforms=drm,x11 at least')
elif not ['disabled', 'dri'].contains(with_glx)
error('EGL requires dri, but a GLX is being built without dri')
# TODO: powr8
# TODO: shared/static? Is this even worth doing?
-# Building x86 assembly code requires running x86 binaries. It is possible for
-# x86_64 OSes to run x86 binaries, so don't disable asm in those cases
-# TODO: it should be possible to use an exe_wrapper to run the binary during
-# the build.
+# When cross compiling we generally need to turn off the use of assembly,
+# because mesa's assembly relies on building an executable for the host system,
+# and running it to get information about struct sizes. There is at least one
+# case of cross compiling where we can use asm, and that's x86_64 -> x86 when
+# host OS == build OS, since in that case the build machine can run the host's
+# binaries.
if meson.is_cross_build()
- if not (build_machine.cpu_family() == 'x86_64' and host_machine.cpu_family() == 'x86'
- and build_machine.system() == host_machine.system())
- message('Cross compiling to x86 from non-x86, disabling asm')
+ if build_machine.system() != host_machine.system()
+ # TODO: It may be possible to do this with an exe_wrapper (like wine).
+ message('Cross compiling from one OS to another, disabling assembly.')
+ with_asm = false
+ elif not (build_machine.cpu_family().startswith('x86') and host_machine.cpu_family() == 'x86')
+ # FIXME: Gentoo always sets -m32 for x86_64 -> x86 builds, resulting in an
+ # x86 -> x86 cross compile. We use startswith rather than == to handle this
+ # case.
+ # TODO: There may be other cases where the 64 bit version of the
+ # architecture can run 32 bit binaries (aarch64 and armv7 for example)
+ message('''
+ Cross compiling to different architectures, and the host cannot run
+ the build machine's binaries. Disabling assembly.
+ ''')
with_asm = false
endif
endif
with_asm_arch = 'x86'
pre_args += ['-DUSE_X86_ASM', '-DUSE_MMX_ASM', '-DUSE_3DNOW_ASM',
'-DUSE_SSE_ASM']
+
+ if with_glx_read_only_text
+ pre_args += ['-DGLX_X86_READONLY_TEXT']
+ endif
endif
elif host_machine.cpu_family() == 'x86_64'
if system_has_kms_drm
dep_wl_protocols = dependency('wayland-protocols', version : '>= 1.8')
dep_wayland_client = dependency('wayland-client', version : '>=1.11')
dep_wayland_server = dependency('wayland-server', version : '>=1.11')
+ if with_egl
+ dep_wayland_egl = dependency('wayland-egl-backend', version : '>= 3')
+ dep_wayland_egl_headers = declare_dependency(
+ compile_args : run_command(prog_pkgconfig, ['wayland-egl-backend', '--cflags']).stdout().split())
+ endif
wayland_dmabuf_xml = join_paths(
dep_wl_protocols.get_pkgconfig_variable('pkgdatadir'), 'unstable',
'linux-dmabuf', 'linux-dmabuf-unstable-v1.xml'