X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;ds=sidebyside;f=meson.build;h=b61c285bf00c3f1865881a6bc73a4fbd9e53f13e;hb=b9ff185e41e2d310f70182fca06a9140a79e07ad;hp=77e4e894b230659686a4b231a0fc00d4302c8834;hpb=73ce7cb47406ec3e0fd56945dc66f7e258187630;p=mesa.git diff --git a/meson.build b/meson.build index 77e4e894b23..b61c285bf00 100644 --- a/meson.build +++ b/meson.build @@ -57,6 +57,10 @@ dri_drivers_path = get_option('dri-drivers-path') if dri_drivers_path == '' dri_drivers_path = join_paths(get_option('libdir'), 'dri') endif +dri_search_path = get_option('dri-search-path') +if dri_search_path == '' + dri_search_path = join_paths(get_option('prefix'), dri_drivers_path) +endif with_gles1 = get_option('gles1') with_gles2 = get_option('gles2') @@ -88,13 +92,16 @@ with_dri_nouveau = false with_dri_swrast = false _drivers = get_option('dri-drivers') if _drivers == 'auto' - # TODO: PPC, Sparc - if not ['darwin', 'windows'].contains(host_machine.system()) + if host_machine.system() == 'linux' + # TODO: PPC, Sparc if ['x86', 'x86_64'].contains(host_machine.cpu_family()) _drivers = 'i915,i965,r100,r200,nouveau' else error('Unknown architecture. Please pass -Ddri-drivers to set driver options. Patches gladly accepted to fix this.') endif + elif ['darwin', 'windows', 'cygwin'].contains(host_machine.system()) + # only swrast would make sense here, but gallium swrast is a much better default + _drivers = '' else error('Unknown OS. Please pass -Ddri-drivers to set driver options. Patches gladly accepted to fix this.') endif @@ -128,7 +135,7 @@ with_gallium_virgl = false with_gallium_swr = false _drivers = get_option('gallium-drivers') if _drivers == 'auto' - if not ['darwin', 'windows'].contains(host_machine.system()) + if host_machine.system() == 'linux' # TODO: PPC, Sparc if ['x86', 'x86_64'].contains(host_machine.cpu_family()) _drivers = 'r300,r600,radeonsi,nouveau,virgl,svga,swrast' @@ -137,6 +144,8 @@ if _drivers == 'auto' else error('Unknown architecture. Please pass -Dgallium-drivers to set driver options. Patches gladly accepted to fix this.') endif + elif ['darwin', 'windows', 'cygwin'].contains(host_machine.system()) + _drivers = 'swrast' else error('Unknown OS. Please pass -Dgallium-drivers to set driver options. Patches gladly accepted to fix this.') endif @@ -166,15 +175,17 @@ with_amd_vk = false with_any_vk = false _vulkan_drivers = get_option('vulkan-drivers') if _vulkan_drivers == 'auto' - if not ['darwin', 'windows'].contains(host_machine.system()) + if host_machine.system() == 'linux' if host_machine.cpu_family().startswith('x86') _vulkan_drivers = 'amd,intel' else error('Unknown architecture. Please pass -Dvulkan-drivers to set driver options. Patches gladly accepted to fix this.') endif - else + elif ['darwin', 'windows', 'cygwin'].contains(host_machine.system()) # No vulkan driver supports windows or macOS currently _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 != '' @@ -202,18 +213,20 @@ if with_dri_i915 or with_gallium_i915 dep_libdrm_intel = dependency('libdrm_intel', version : '>= 2.4.75') endif +system_has_kms_drm = ['openbsd', 'netbsd', 'freebsd', 'dragonfly', 'linux'].contains(host_machine.system()) + if host_machine.system() == 'darwin' with_dri_platform = 'apple' elif ['windows', 'cygwin'].contains(host_machine.system()) with_dri_platform = 'windows' -elif host_machine.system() == 'linux' - # FIXME: This should include BSD and possibly other systems +elif system_has_kms_drm with_dri_platform = 'drm' else # FIXME: haiku doesn't use dri, and xlib doesn't use dri, probably should # assert here that one of those cases has been met. # FIXME: GNU (hurd) ends up here as well, but meson doesn't officially # support Hurd at time of writing (2017/11) + # FIXME: illumos ends up here as well with_dri_platform = 'none' endif @@ -225,10 +238,12 @@ with_platform_surfaceless = false egl_native_platform = '' _platforms = get_option('platforms') if _platforms == 'auto' - if ['linux'].contains(host_machine.system()) + if system_has_kms_drm _platforms = 'x11,wayland,drm,surfaceless' + elif ['darwin', 'windows', 'cygwin'].contains(host_machine.system()) + _platforms = 'x11,surfaceless' else - error('Unknown OS, no platforms enabled. Patches gladly accepted to fix this.') + error('Unknown OS. Please pass -Dplatforms to set platforms. Patches gladly accepted to fix this.') endif endif if _platforms != '' @@ -248,7 +263,6 @@ if with_glx == 'auto' elif with_gallium # Even when building just gallium drivers the user probably wants dri with_glx = 'dri' - with_dri = true elif with_platform_x11 and with_any_opengl and not with_any_vk # The automatic behavior should not be to turn on xlib based glx when # building only vulkan drivers @@ -257,6 +271,11 @@ if with_glx == 'auto' with_glx = 'disabled' endif endif +if with_glx == 'dri' + if with_gallium + with_dri = true + endif +endif if not (with_dri or with_gallium or with_glx == 'xlib' or with_glx == 'gallium-xlib') with_gles1 = false @@ -268,10 +287,10 @@ endif with_gbm = get_option('gbm') if with_gbm == 'auto' and with_dri # TODO: or gallium - with_gbm = host_machine.system() == 'linux' + with_gbm = system_has_kms_drm elif with_gbm == 'true' - if not ['linux', 'bsd'].contains(host_machine.system()) - error('GBM only supports unix-like platforms') + if not system_has_kms_drm + error('GBM only supports DRM/KMS platforms') endif with_gbm = true else @@ -347,15 +366,9 @@ endif with_dri2 = (with_dri or with_any_vk) and with_dri_platform == 'drm' with_dri3 = get_option('dri3') if with_dri3 == 'auto' - if host_machine.system() == 'linux' and with_dri2 - with_dri3 = true - else - with_dri3 = false - endif -elif with_dri3 == 'true' - with_dri3 = true + with_dri3 = system_has_kms_drm and with_dri2 else - with_dri3 = false + with_dri3 = with_dri3 == 'true' endif if with_any_vk and (with_platform_x11 and not with_dri3) @@ -367,38 +380,37 @@ if with_dri or with_gallium endif endif -dep_vdpau = [] +prog_pkgconfig = find_program('pkg-config') + _vdpau = get_option('gallium-vdpau') -if _vdpau == 'auto' - if not ['linux', 'bsd'].contains(host_machine.system()) - with_gallium_vdpau = false - elif not with_platform_x11 - with_gallium_vdpau = false - elif not (with_gallium_r300 or with_gallium_r600 or with_gallium_radeonsi or - with_gallium_nouveau) - with_gallium_vdpau = false +if not system_has_kms_drm + if _vdpau == 'true' + error('VDPAU state tracker can only be build on unix-like OSes.') else - dep_vdpau = dependency('vdpau', version : '>= 1.1', required : false) - with_gallium_vdpau = dep_vdpau.found() + _vdpau = 'false' endif -elif _vdpau == 'true' - if not ['linux', 'bsd'].contains(host_machine.system()) - error('VDPAU state tracker can only be build on unix-like OSes.') - elif not with_platform_x11 +elif not with_platform_x11 + if _vdpau == 'true' error('VDPAU state tracker requires X11 support.') - with_gallium_vdpau = false - elif not (with_gallium_r300 or with_gallium_r600 or with_gallium_radeonsi or - with_gallium_nouveau) + else + _vdpau = 'false' + endif +elif not (with_gallium_r300 or with_gallium_r600 or with_gallium_radeonsi or + with_gallium_nouveau) + if _vdpau == 'true' error('VDPAU state tracker requires at least one of the following gallium drivers: r300, r600, radeonsi, nouveau.') + else + _vdpau = 'false' endif - dep_vdpau = dependency('vdpau', version : '>= 1.1') - with_gallium_vdpau = true -else - with_gallium_vdpau = false +elif _vdpau == 'auto' + _vdpau = 'true' endif +with_gallium_vdpau = _vdpau == 'true' +dep_vdpau = [] if with_gallium_vdpau + dep_vdpau = dependency('vdpau', version : '>= 1.1') dep_vdpau = declare_dependency( - compile_args : dep_vdpau.get_pkgconfig_variable('cflags').split() + compile_args : run_command(prog_pkgconfig, ['vdpau', '--cflags']).stdout().split() ) endif @@ -410,36 +422,34 @@ if vdpau_drivers_path == '' vdpau_drivers_path = join_paths(get_option('libdir'), 'vdpau') endif -dep_xvmc = [] _xvmc = get_option('gallium-xvmc') -if _xvmc == 'auto' - if not ['linux', 'bsd'].contains(host_machine.system()) - with_gallium_xvmc = false - elif not with_platform_x11 - with_gallium_xvmc = false - elif not (with_gallium_r600 or with_gallium_nouveau) - with_gallium_xvmc = false +if not system_has_kms_drm + if _xvmc == 'true' + error('XVMC state tracker can only be build on unix-like OSes.') else - dep_xvmc = dependency('xvmc', version : '>= 1.0.6', required : false) - with_gallium_xvmc = dep_xvmc.found() + _xvmc = 'false' endif -elif _xvmc == 'true' - if not ['linux', 'bsd'].contains(host_machine.system()) - error('XVMC state tracker can only be build on unix-like OSes.') - elif not with_platform_x11 +elif not with_platform_x11 + if _xvmc == 'true' error('XVMC state tracker requires X11 support.') - with_gallium_xvmc = false - elif not (with_gallium_r600 or with_gallium_nouveau) + else + _xvmc = 'false' + endif +elif not (with_gallium_r600 or with_gallium_nouveau) + if _xvmc == 'true' error('XVMC state tracker requires at least one of the following gallium drivers: r600, nouveau.') + else + _xvmc = 'false' endif - dep_xvmc = dependency('xvmc', version : '>= 1.0.6') - with_gallium_xvmc = true -else - with_gallium_xvmc = false +elif _xvmc == 'auto' + _xvmc = 'true' endif +with_gallium_xvmc = _xvmc == 'true' +dep_xvmc = [] if with_gallium_xvmc + dep_xvmc = dependency('xvmc', version : '>= 1.0.6') dep_xvmc = declare_dependency( - compile_args : dep_xvmc.get_pkgconfig_variable('cflags').split() + compile_args : run_command(prog_pkgconfig, ['xvmc', '--cflags']).stdout().split() ) endif @@ -448,32 +458,32 @@ if xvmc_drivers_path == '' xvmc_drivers_path = get_option('libdir') endif -dep_omx = [] _omx = get_option('gallium-omx') -if _omx == 'auto' - if not ['linux', 'bsd'].contains(host_machine.system()) - with_gallium_omx = false - elif not with_platform_x11 - with_gallium_omx = false - elif not (with_gallium_r600 or with_gallium_radeonsi or with_gallium_nouveau) - with_gallium_omx = false +if not system_has_kms_drm + if _omx == 'true' + error('OMX state tracker can only be built on unix-like OSes.') else - dep_omx = dependency('libomxil-bellagio', required : false) - with_gallium_omx = dep_omx.found() + _omx = 'false' endif -elif _omx == 'true' - if not ['linux', 'bsd'].contains(host_machine.system()) - error('OMX state tracker can only be built on unix-like OSes.') - elif not (with_platform_x11 or with_platform_drm) +elif not (with_platform_x11 or with_platform_drm) + if _omx == 'true' error('OMX state tracker requires X11 or drm platform support.') - with_gallium_omx = false - elif not (with_gallium_r600 or with_gallium_radeonsi or with_gallium_nouveau) + else + _omx = 'false' + endif +elif not (with_gallium_r600 or with_gallium_radeonsi or with_gallium_nouveau) + if _omx == 'true' error('OMX state tracker requires at least one of the following gallium drivers: r600, radeonsi, nouveau.') + else + _omx = 'false' endif +elif _omx == 'auto' + _omx = 'true' +endif +with_gallium_omx = _omx == 'true' +dep_omx = [] +if with_gallium_omx dep_omx = dependency('libomxil-bellagio') - with_gallium_omx = true -else - with_gallium_omx = false endif omx_drivers_path = get_option('omx-libs-path') @@ -502,40 +512,38 @@ if with_gallium_omx endif if with_gallium_omx dep_omx = declare_dependency( - compile_args : dep_omx.get_pkgconfig_variable('cflags').split() + compile_args : run_command(prog_pkgconfig, ['libomxil-bellagio', '--cflags']).stdout().split() ) endif -dep_va = [] _va = get_option('gallium-va') -if _va == 'auto' - if not ['linux', 'bsd'].contains(host_machine.system()) - with_gallium_va = false - elif not with_platform_x11 - with_gallium_va = false - elif not (with_gallium_r600 or with_gallium_radeonsi or with_gallium_nouveau) - with_gallium_va = false +if not system_has_kms_drm + if _va == 'true' + error('VA state tracker can only be built on unix-like OSes.') else - dep_va = dependency('libva', version : '>= 0.38.0', required : false) - with_gallium_va = dep_va.found() + _va = 'false' endif -elif _va == 'true' - if not ['linux', 'bsd'].contains(host_machine.system()) - error('VA state tracker can only be built on unix-like OSes.') - elif not (with_platform_x11 or with_platform_drm) +elif not (with_platform_x11 or with_platform_drm) + if _va == 'true' error('VA state tracker requires X11 or drm or wayland platform support.') - with_gallium_va = false - elif not (with_gallium_r600 or with_gallium_radeonsi or with_gallium_nouveau) + else + _va = 'false' + endif +elif not (with_gallium_r600 or with_gallium_radeonsi or with_gallium_nouveau) + if _va == 'true' error('VA state tracker requires at least one of the following gallium drivers: r600, radeonsi, nouveau.') + else + _va = 'false' endif - dep_va = dependency('libva', version : '>= 0.38.0') - with_gallium_va = true -else - with_gallium_va = false +elif _va == 'auto' + _va = 'true' endif +with_gallium_va = _va == 'true' +dep_va = [] if with_gallium_va + dep_va = dependency('libva', version : '>= 0.38.0') dep_va = declare_dependency( - compile_args : dep_va.get_pkgconfig_variable('cflags').split() + compile_args : run_command(prog_pkgconfig, ['libva', '--cflags']).stdout().split() ) endif @@ -545,26 +553,21 @@ if va_drivers_path == '' endif _xa = get_option('gallium-xa') -if _xa == 'auto' - if not ['linux', 'bsd'].contains(host_machine.system()) - with_gallium_xa = false - elif not (with_gallium_nouveau or with_gallium_freedreno or with_gallium_i915 - or with_gallium_svga) - with_gallium_xa = false +if not system_has_kms_drm + if _xa == 'true' + error('XA state tracker can only be built on unix-like OSes.') else - with_gallium_xa = true + _xa = 'false' endif -elif _xa == 'true' - if not ['linux', 'bsd'].contains(host_machine.system()) - error('XA state tracker can only be built on unix-like OSes.') - elif not (with_gallium_nouveau or with_gallium_freedreno or with_gallium_i915 - or with_gallium_svga) +elif not (with_gallium_nouveau or with_gallium_freedreno or with_gallium_i915 + or with_gallium_svga) + if _xa == 'true' error('XA state tracker requires at least one of the following gallium drivers: nouveau, freedreno, i915, svga.') + else + _xa = 'false' endif - with_gallium_xa = true -else - with_gallium_xa = false endif +with_gallium_xa = _xa != 'false' d3d_drivers_path = get_option('d3d-drivers-path') if d3d_drivers_path == '' @@ -614,6 +617,8 @@ if with_platform_x11 endif if with_dri_platform == 'drm' pre_args += '-DGLX_USE_DRM' + elif with_dri_platform == 'apple' + pre_args += '-DGLX_USE_APPLEGL' elif with_dri_platform == 'windows' pre_args += '-DGLX_USE_WINDOWSGL' endif @@ -688,14 +693,14 @@ if cc.compiles('struct __attribute__((packed)) foo { int bar; };', endif if cc.compiles('int *foo(void) __attribute__((returns_nonnull));', name : '__attribute__((returns_nonnull))') - pre_args += '-DHAVE_FUNC_ATTRIBUTE_NONNULL' + pre_args += '-DHAVE_FUNC_ATTRIBUTE_RETURNS_NONNULL' endif if cc.compiles('''int foo_def(void) __attribute__((visibility("default"))); int foo_hid(void) __attribute__((visibility("hidden"))); int foo_int(void) __attribute__((visibility("internal"))); int foo_pro(void) __attribute__((visibility("protected")));''', name : '__attribute__((visibility(...)))') - pre_args += '-DHAVE_FUNC_ATTRIBUTE_VISBILITY' + pre_args += '-DHAVE_FUNC_ATTRIBUTE_VISIBILITY' endif if cc.compiles('int foo(void) { return 0; } int bar(void) __attribute__((alias("foo")));', name : '__attribute__((alias(...)))') @@ -768,7 +773,7 @@ foreach a : ['-Werror=pointer-arith', '-Werror=vla'] endforeach if host_machine.cpu_family().startswith('x86') - pre_args += '-DHAVE_SSE41' + pre_args += '-DUSE_SSE41' with_sse41 = true sse41_args = ['-msse4.1'] @@ -816,23 +821,23 @@ with_asm_arch = '' if with_asm # TODO: SPARC and PPC if host_machine.cpu_family() == 'x86' - if ['linux', 'bsd'].contains(host_machine.system()) # FIXME: hurd? + if system_has_kms_drm with_asm_arch = 'x86' pre_args += ['-DUSE_X86_ASM', '-DUSE_MMX_ASM', '-DUSE_3DNOW_ASM', '-DUSE_SSE_ASM'] endif elif host_machine.cpu_family() == 'x86_64' - if host_machine.system() == 'linux' + if system_has_kms_drm with_asm_arch = 'x86_64' pre_args += ['-DUSE_X86_64_ASM'] endif elif host_machine.cpu_family() == 'arm' - if host_machine.system() == 'linux' + if system_has_kms_drm with_asm_arch = 'arm' pre_args += ['-DUSE_ARM_ASM'] endif elif host_machine.cpu_family() == 'aarch64' - if host_machine.system() == 'linux' + if system_has_kms_drm with_asm_arch = 'aarch64' pre_args += ['-DUSE_AARCH64_ASM'] endif @@ -904,6 +909,10 @@ if cc.links('int main() { return 0; }', name : 'dynamic-list') with_ld_dynamic_list = true endif +ld_args_build_id = [] +if build_machine.system() != 'darwin' + ld_args_build_id += '-Wl,--build-id=sha1' +endif # check for dl support if cc.has_function('dlopen') @@ -943,6 +952,7 @@ endif # TODO: some of these may be conditional dep_zlib = dependency('zlib', version : '>= 1.2.3') +pre_args += '-DHAVE_ZLIB' dep_thread = dependency('threads') if dep_thread.found() and host_machine.system() != 'windows' pre_args += '-DHAVE_PTHREAD' @@ -997,15 +1007,23 @@ if with_gallium_opencl # TODO: optional modules endif +if with_amd_vk or with_gallium_radeonsi + _llvm_version = '>= 4.0.0' +elif with_gallium_opencl or with_gallium_swr or with_gallium_r600 + _llvm_version = '>= 3.9.0' +else + _llvm_version = '>= 3.3.0' +endif + _llvm = get_option('llvm') if _llvm == 'auto' dep_llvm = dependency( - 'llvm', version : '>= 3.9.0', modules : llvm_modules, + 'llvm', version : _llvm_version, modules : llvm_modules, required : with_amd_vk or with_gallium_radeonsi or with_gallium_swr or with_gallium_opencl, ) with_llvm = dep_llvm.found() elif _llvm == 'true' - dep_llvm = dependency('llvm', version : '>= 3.9.0', modules : llvm_modules) + dep_llvm = dependency('llvm', version : _llvm_version, modules : llvm_modules) with_llvm = true else dep_llvm = [] @@ -1013,18 +1031,22 @@ else endif if with_llvm _llvm_version = dep_llvm.version().split('.') - # Development versions of LLVM have an 'svn' suffix, we don't want that for - # our version checks. + # Development versions of LLVM have an 'svn' or 'git' suffix, we don't want + # that for our version checks. + # svn suffixes are stripped by meson as of 0.43, and git suffixes are + # strippped as of 0.44, but we support older meson versions. _llvm_patch = _llvm_version[2] if _llvm_patch.endswith('svn') _llvm_patch = _llvm_patch.split('s')[0] + elif _llvm_patch.contains('git') + _llvm_patch = _llvm_patch.split('g')[0] endif pre_args += [ - '-DHAVE_LLVM=0x0@0@@1@@2@'.format(_llvm_version[0], _llvm_version[1], _llvm_patch), + '-DHAVE_LLVM=0x0@0@0@1@'.format(_llvm_version[0], _llvm_version[1]), '-DMESA_LLVM_VERSION_PATCH=@0@'.format(_llvm_patch), ] elif with_amd_vk or with_gallium_radeonsi or with_gallium_swr - error('The following drivers requires LLVM: Radv, RadeonSI, SWR. One of these is enabled, but LLVM is disabled.') + error('The following drivers require LLVM: Radv, RadeonSI, SWR. One of these is enabled, but LLVM is disabled.') endif dep_glvnd = [] @@ -1206,8 +1228,10 @@ inc_include = include_directories('include') gl_priv_reqs = [ 'x11', 'xext', 'xdamage >= 1.1', 'xfixes', 'x11-xcb', 'xcb', - 'xcb-glx >= 1.8.1', 'libdrm >= 2.4.75', -] + 'xcb-glx >= 1.8.1'] +if dep_libdrm.found() + gl_priv_reqs += 'libdrm >= 2.4.75' +endif if dep_xxf86vm != [] and dep_xxf86vm.found() gl_priv_reqs += 'xxf86vm' endif