X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=meson.build;h=1b475877827ef69dbce8c50e9dfb54147f0ffbb6;hb=03928dd682d0a86bfc5a780614f376163c72d72b;hp=fa3367d1fa7f606fc0f046f1acf5c32ac0c6dcd6;hpb=de3b34df97326b793fac2152eedbd25a0c2d0812;p=mesa.git diff --git a/meson.build b/meson.build index fa3367d1fa7..1b475877827 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') @@ -102,13 +102,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 +137,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 +179,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 +238,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 +306,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 +319,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 +574,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 @@ -775,16 +787,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 +809,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 +820,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 +905,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 +1079,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 +1100,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.93' _drm_intel_ver = '2.4.75' _drm_ver = '2.4.75' @@ -1101,7 +1116,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 +1126,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 +1173,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 +1215,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 +1230,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 +1318,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