X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=meson.build;h=df9043e03fd8a1a1132b8ea0cb5ce130df5d28e7;hb=35eb81987c0f93215680138fab6595602b7c49a4;hp=c9ef70346a157452231f4aa0521ae31a9d3d98ce;hpb=52194ae4df18c7211cef69354a686eabc297a18d;p=mesa.git diff --git a/meson.build b/meson.build index c9ef70346a1..df9043e03fd 100644 --- a/meson.build +++ b/meson.build @@ -25,8 +25,8 @@ project( [find_program('python', 'python2', 'python3'), 'bin/meson_get_version.py'] ).stdout(), license : 'MIT', - meson_version : '>= 0.44.1', - default_options : ['buildtype=debugoptimized', 'c_std=c99', 'cpp_std=c++11'] + meson_version : '>= 0.45', + default_options : ['buildtype=debugoptimized', 'b_ndebug=if-release', 'c_std=c99', 'cpp_std=c++11'] ) cc = meson.get_compiler('c') @@ -43,8 +43,7 @@ pre_args = [ '-D__STDC_CONSTANT_MACROS', '-D__STDC_FORMAT_MACROS', '-D__STDC_LIMIT_MACROS', - '-DVERSION="@0@"'.format(meson.project_version()), - '-DPACKAGE_VERSION=VERSION', + '-DPACKAGE_VERSION="@0@"'.format(meson.project_version()), '-DPACKAGE_BUGREPORT="https://bugs.freedesktop.org/enter_bug.cgi?product=Mesa"', ] @@ -102,13 +101,15 @@ if _drivers.contains('auto') elif ['arm', 'aarch64'].contains(host_machine.cpu_family()) _drivers = [] else - error('Unknown architecture. Please pass -Ddri-drivers to set driver options. Patches gladly accepted to fix this.') + error('Unknown architecture @0@. Please pass -Ddri-drivers to set driver options. Patches gladly accepted to fix this.'.format( + host_machine.cpu_family())) 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 = [] else - error('Unknown OS. Please pass -Ddri-drivers to set driver options. Patches gladly accepted to fix this.') + error('Unknown OS @0@. Please pass -Ddri-drivers to set driver options. Patches gladly accepted to fix this.'.format( + host_machine.system())) endif endif @@ -135,12 +136,14 @@ if _drivers.contains('auto') 'tegra', 'virgl', 'swrast', ] else - error('Unknown architecture. Please pass -Dgallium-drivers to set driver options. Patches gladly accepted to fix this.') + error('Unknown architecture @0@. Please pass -Dgallium-drivers to set driver options. Patches gladly accepted to fix this.'.format( + host_machine.cpu_family())) endif elif ['darwin', 'windows', 'cygwin', 'haiku'].contains(host_machine.system()) _drivers = ['swrast'] else - error('Unknown OS. Please pass -Dgallium-drivers to set driver options. Patches gladly accepted to fix this.') + error('Unknown OS @0@. Please pass -Dgallium-drivers to set driver options. Patches gladly accepted to fix this.'.format( + host_machine.system())) endif endif with_gallium_pl111 = _drivers.contains('pl111') @@ -175,14 +178,18 @@ if _vulkan_drivers.contains('auto') if system_has_kms_drm if host_machine.cpu_family().startswith('x86') _vulkan_drivers = ['amd', 'intel'] + elif ['arm', 'aarch64'].contains(host_machine.cpu_family()) + _vulkan_drivers = [] else - error('Unknown architecture. Please pass -Dvulkan-drivers to set driver options. Patches gladly accepted to fix this.') + error('Unknown architecture @0@. Please pass -Dvulkan-drivers to set driver options. Patches gladly accepted to fix this.'.format( + host_machine.cpu_family())) endif elif ['darwin', 'windows', 'cygwin', 'haiku'].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.') + error('Unknown OS @0@. Please pass -Dvulkan-drivers to set driver options. Patches gladly accepted to fix this.'.format( + host_machine.system())) endif endif @@ -230,7 +237,8 @@ if _platforms.contains('auto') elif ['haiku'].contains(host_machine.system()) _platforms = ['haiku'] else - error('Unknown OS. Please pass -Dplatforms to set platforms. Patches gladly accepted to fix this.') + error('Unknown OS @0@. Please pass -Dplatforms to set platforms. Patches gladly accepted to fix this.'.format( + host_machine.system())) endif endif @@ -297,7 +305,10 @@ endif _egl = get_option('egl') if _egl == 'auto' - with_egl = with_dri and with_shared_glapi and with_platforms + with_egl = ( + not ['darwin', 'windows'].contains(host_machine.system()) and + with_dri and with_shared_glapi and with_platforms + ) elif _egl == 'true' if not with_dri error('EGL requires dri') @@ -307,6 +318,8 @@ elif _egl == 'true' error('No platforms specified, consider -Dplatforms=drm,x11,surfaceless at least') elif not ['disabled', 'dri'].contains(with_glx) error('EGL requires dri, but a GLX is being built without dri') + elif ['darwin', 'windows'].contains(host_machine.system()) + error('EGL is not available on Windows or MacOS') endif with_egl = true else @@ -560,8 +573,6 @@ elif not (with_gallium_r600 or with_gallium_radeonsi or with_gallium_nouveau) else _va = 'false' endif -elif _va == 'auto' - _va = 'true' endif with_gallium_va = false dep_va = null_dep @@ -697,7 +708,7 @@ if with_platform_haiku pre_args += '-DHAVE_HAIKU_PLATFORM' endif -prog_python = find_program('python3') +prog_python = import('python3').find_python() has_mako = run_command( prog_python, '-c', ''' @@ -775,16 +786,20 @@ endif # Check for generic C arguments c_args = [] -foreach a : ['-Wall', '-Werror=implicit-function-declaration', - '-Werror=missing-prototypes', '-fno-math-errno', +foreach a : ['-Werror=implicit-function-declaration', + '-Werror=missing-prototypes', '-Werror=return-type', + '-fno-math-errno', '-fno-trapping-math', '-Qunused-arguments'] if cc.has_argument(a) c_args += a endif endforeach -if cc.has_argument('-Wmissing-field-initializers') - c_args += '-Wno-missing-field-initializers' -endif + +foreach a : ['missing-field-initializers', 'format-truncation'] + if cc.has_argument('-W' + a) + c_args += '-Wno-' + a + endif +endforeach c_vis_args = [] if cc.has_argument('-fvisibility=hidden') @@ -793,7 +808,8 @@ endif # Check for generic C++ arguments cpp_args = [] -foreach a : ['-Wall', '-fno-math-errno', '-fno-trapping-math', +foreach a : ['-Werror=return-type', + '-fno-math-errno', '-fno-trapping-math', '-Qunused-arguments'] if cpp.has_argument(a) cpp_args += a @@ -803,7 +819,7 @@ endforeach # For some reason, the test for -Wno-foo always succeeds with gcc, even if the # option is not supported. Hence, check for -Wfoo instead. -foreach a : ['non-virtual-dtor', 'missing-field-initializers'] +foreach a : ['non-virtual-dtor', 'missing-field-initializers', 'format-truncation'] if cpp.has_argument('-W' + a) cpp_args += '-Wno-' + a endif @@ -888,8 +904,9 @@ if not cc.links('''#include int main() { return __sync_add_and_fetch(&v, (uint64_t)1); }''', + dependencies : dep_atomic, name : 'GCC 64bit atomics') - pre_args += '-DMISSING_64_BIT_ATOMICS' + pre_args += '-DMISSING_64BIT_ATOMICS' endif # TODO: shared/static? Is this even worth doing? @@ -1061,14 +1078,13 @@ pre_args += '-DHAVE_ZLIB' dep_thread = dependency('threads') if dep_thread.found() and host_machine.system() != 'windows' pre_args += '-DHAVE_PTHREAD' -endif -if with_amd_vk or with_gallium_radeonsi or with_gallium_r600 or with_gallium_opencl - dep_elf = dependency('libelf', required : false) - if not dep_elf.found() - dep_elf = cc.find_library('elf') + if cc.has_function( + 'pthread_setaffinity_np', + dependencies : dep_thread, + prefix : '#include ', + args : '-D_GNU_SOURCE') + pre_args += '-DHAVE_PTHREAD_SETAFFINITY' endif -else - dep_elf = null_dep endif dep_expat = dependency('expat') # this only exists on linux so either this is linux and it will be found, or @@ -1083,14 +1099,12 @@ dep_libdrm_amdgpu = null_dep dep_libdrm_radeon = null_dep dep_libdrm_nouveau = null_dep dep_libdrm_etnaviv = null_dep -dep_libdrm_freedreno = null_dep dep_libdrm_intel = null_dep -_drm_amdgpu_ver = '2.4.93' +_drm_amdgpu_ver = '2.4.95' _drm_radeon_ver = '2.4.71' _drm_nouveau_ver = '2.4.66' _drm_etnaviv_ver = '2.4.89' -_drm_freedreno_ver = '2.4.92' _drm_intel_ver = '2.4.75' _drm_ver = '2.4.75' @@ -1101,7 +1115,6 @@ _libdrm_checks = [ with_gallium_r300 or with_gallium_r600)], ['nouveau', (with_gallium_nouveau or with_dri_nouveau)], ['etnaviv', with_gallium_etnaviv], - ['freedreno', with_gallium_freedreno], ] # VC4 only needs core libdrm support of this version, not a libdrm_vc4 @@ -1112,12 +1125,17 @@ endif # Loop over the enables versions and get the highest libdrm requirement for all # active drivers. +_drm_blame = '' foreach d : _libdrm_checks ver = get_variable('_drm_@0@_ver'.format(d[0])) if d[1] and ver.version_compare('>' + _drm_ver) _drm_ver = ver + _drm_blame = d[0] endif endforeach +if _drm_blame != '' + message('libdrm @0@ needed because @1@ has the highest requirement'.format(_drm_ver, _drm_blame)) +endif # Then get each libdrm module foreach d : _libdrm_checks @@ -1154,47 +1172,40 @@ if with_gallium_opencl 'all-targets', 'linker', 'coverage', 'instrumentation', 'ipo', 'irreader', 'lto', 'option', 'objcarcopts', 'profiledata', ] - llvm_optional_modules += ['coroutines', 'opencl'] + llvm_optional_modules += ['coroutines'] endif if with_amd_vk or with_gallium_radeonsi _llvm_version = '>= 6.0.0' elif with_gallium_swr - _llvm_version = '>= 5.0.0' + _llvm_version = '>= 6.0.0' elif with_gallium_opencl or with_gallium_r600 _llvm_version = '>= 3.9.0' else _llvm_version = '>= 3.3.0' endif +_shared_llvm = get_option('shared-llvm') + _llvm = get_option('llvm') -if _llvm == 'auto' +dep_llvm = null_dep +with_llvm = false +if _llvm != 'false' dep_llvm = dependency( 'llvm', version : _llvm_version, modules : llvm_modules, optional_modules : llvm_optional_modules, - required : with_amd_vk or with_gallium_radeonsi or with_gallium_swr or with_gallium_opencl, + required : ( + with_amd_vk or with_gallium_radeonsi or with_gallium_swr or + with_gallium_opencl or _llvm == 'true' + ), + static : not _shared_llvm, ) with_llvm = dep_llvm.found() -elif _llvm == 'true' - dep_llvm = dependency( - 'llvm', - version : _llvm_version, - modules : llvm_modules, - optional_modules : llvm_optional_modules, - ) - with_llvm = true -else - dep_llvm = null_dep - with_llvm = false endif if with_llvm _llvm_version = dep_llvm.version().split('.') - # 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. # 3 digits versions in LLVM only started from 3.4.1 on if dep_llvm.version().version_compare('>= 3.4.1') @@ -1203,11 +1214,6 @@ if with_llvm _llvm_patch = '0' endif - 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@0@1@'.format(_llvm_version[0], _llvm_version[1]), '-DMESA_LLVM_VERSION_PATCH=@0@'.format(_llvm_patch), @@ -1223,6 +1229,16 @@ elif with_amd_vk or with_gallium_radeonsi or with_gallium_swr error('The following drivers require LLVM: Radv, RadeonSI, SWR. One of these is enabled, but LLVM is disabled.') endif +if (with_amd_vk or with_gallium_radeonsi or with_gallium_opencl or + (with_gallium_r600 and with_llvm)) + dep_elf = dependency('libelf', required : false) + if not dep_elf.found() + dep_elf = cc.find_library('elf') + endif +else + dep_elf = null_dep +endif + dep_glvnd = null_dep if with_glvnd dep_glvnd = dependency('libglvnd', version : '>= 0.2.0') @@ -1301,13 +1317,6 @@ if with_platform_wayland 'linux-dmabuf', 'linux-dmabuf-unstable-v1.xml' ) pre_args += ['-DHAVE_WAYLAND_PLATFORM', '-DWL_HIDE_DEPRECATED'] -else - prog_wl_scanner = [] - wl_scanner_arg = '' - dep_wl_protocols = null_dep - dep_wayland_client = null_dep - dep_wayland_server = null_dep - wayland_dmabuf_xml = '' endif dep_x11 = null_dep @@ -1340,7 +1349,7 @@ if with_platform_x11 dep_xdamage = dependency('xdamage', version : '>= 1.1') dep_xfixes = dependency('xfixes') dep_xcb_glx = dependency('xcb-glx', version : '>= 1.8.1') - dep_xxf86vm = dependency('xxf86vm', required : false) + dep_xxf86vm = dependency('xxf86vm') endif if (with_any_vk or with_glx == 'dri' or (with_gallium_vdpau or with_gallium_xvmc or with_gallium_va or @@ -1418,13 +1427,11 @@ elif with_glx == 'dri' if with_dri_platform == 'drm' gl_priv_reqs += 'xcb-dri2 >= 1.8' endif + gl_priv_reqs += 'xxf86vm' endif if dep_libdrm.found() gl_priv_reqs += 'libdrm >= 2.4.75' endif -if dep_xxf86vm.found() - gl_priv_reqs += 'xxf86vm' -endif gl_priv_libs = [] if dep_thread.found()