-# Copyright © 2017-2019 Intel Corporation
+# Copyright © 2017-2020 Intel Corporation
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
[find_program('python', 'python3'), 'bin/meson_get_version.py']
).stdout(),
license : 'MIT',
- meson_version : '>= 0.46',
+ meson_version : '>= 0.52',
default_options : ['buildtype=debugoptimized', 'b_ndebug=if-release', 'c_std=c99', 'cpp_std=c++14']
)
'-D__STDC_FORMAT_MACROS',
'-D__STDC_LIMIT_MACROS',
'-DPACKAGE_VERSION="@0@"'.format(meson.project_version()),
- '-DPACKAGE_BUGREPORT="https://gitlab.freedesktop.org/mesa/mesa/issues"',
+ '-DPACKAGE_BUGREPORT="https://gitlab.freedesktop.org/mesa/mesa/-/issues"',
]
with_vulkan_icd_dir = get_option('vulkan-icd-dir')
with_gallium_lima = gallium_drivers.contains('lima')
with_gallium_zink = gallium_drivers.contains('zink')
-if cc.get_id().startswith('intel') and meson.version().version_compare('< 0.49.1')
- error('Meson does not have sufficient support of ICC before 0.49.1 to compile mesa')
-endif
-
with_gallium = gallium_drivers.length() != 0 and gallium_drivers != ['']
if with_gallium and system_has_kms_drm
endif
endif
-prog_pkgconfig = find_program('pkg-config')
-
_vdpau = get_option('gallium-vdpau')
if not system_has_kms_drm
if _vdpau == 'true'
if _vdpau != 'false'
dep_vdpau = dependency('vdpau', version : '>= 1.1', required : _vdpau == 'true')
if dep_vdpau.found()
- dep_vdpau = declare_dependency(
- compile_args : run_command(prog_pkgconfig, ['vdpau', '--cflags']).stdout().split()
- )
+ dep_vdpau = dep_vdpau.partial_dependency(compile_args : true)
with_gallium_vdpau = true
endif
endif
if _va != 'false'
dep_va = dependency('libva', version : '>= 0.38.0', required : _va == 'true')
if dep_va.found()
- dep_va_headers = declare_dependency(
- compile_args : run_command(prog_pkgconfig, ['libva', '--cflags']).stdout().split()
- )
+ dep_va_headers = dep_va.partial_dependency(compile_args : true)
with_gallium_va = true
endif
endif
dependency('hardware'),
dependency('sync'),
]
+ if with_gallium
+ dep_android += dependency('backtrace')
+ endif
if get_option('platform-sdk-version') >= 26
dep_android += dependency('nativewindow')
endif
pre_args += '-DHAVE_HAIKU_PLATFORM'
endif
-if meson.version().version_compare('>=0.50')
- prog_python = import('python').find_installation('python3')
-else
- prog_python = import('python3').find_python()
-endif
+prog_python = import('python').find_installation('python3')
has_mako = run_command(
prog_python, '-c',
'''
endforeach
# check for GCC __attribute__
-foreach a : ['const', 'flatten', 'malloc', 'pure', 'unused',
- 'warn_unused_result', 'weak',]
- if cc.compiles('int foo(void) __attribute__((@0@));'.format(a),
- name : '__attribute__((@0@))'.format(a))
- pre_args += '-DHAVE_FUNC_ATTRIBUTE_@0@'.format(a.to_upper())
- endif
+_attributes = [
+ 'const', 'flatten', 'malloc', 'pure', 'unused', 'warn_unused_result',
+ 'weak', 'format', 'packed', 'returns_nonnull', 'alias', 'noreturn',
+]
+foreach a : cc.get_supported_function_attributes(_attributes)
+ pre_args += '-DHAVE_FUNC_ATTRIBUTE_@0@'.format(a.to_upper())
endforeach
-if cc.compiles('int foo(const char *p, ...) __attribute__((format(printf, 1, 2)));',
- name : '__attribute__((format(...)))')
- pre_args += '-DHAVE_FUNC_ATTRIBUTE_FORMAT'
-endif
-if cc.compiles('struct __attribute__((packed)) foo { int bar; };',
- name : '__attribute__((packed))')
- pre_args += '-DHAVE_FUNC_ATTRIBUTE_PACKED'
-endif
-if cc.compiles('int *foo(void) __attribute__((returns_nonnull));',
- name : '__attribute__((returns_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(...)))')
+if cc.has_function_attribute('visibility:hidden')
pre_args += '-DHAVE_FUNC_ATTRIBUTE_VISIBILITY'
endif
-if cc.compiles('int foo(void) { return 0; } int bar(void) __attribute__((alias("foo")));',
- name : '__attribute__((alias(...)))')
- pre_args += '-DHAVE_FUNC_ATTRIBUTE_ALIAS'
-endif
-if cc.compiles('int foo(void) __attribute__((__noreturn__));',
- name : '__attribute__((__noreturn__))')
- pre_args += '-DHAVE_FUNC_ATTRIBUTE_NORETURN'
-endif
if cc.compiles('__uint128_t foo(void) { return 0; }',
name : '__uint128_t')
pre_args += '-DHAVE_UINT128'
pre_args += '-D__EXTENSIONS__'
elif host_machine.system() == 'windows'
pre_args += [
- '-D_WINDOWS', '-D_WIN32_WINNT=0x0601', '-D_WINVER=0x0601',
+ '-D_WINDOWS', '-D_WIN32_WINNT=0x0601', '-DWINVER=0x0601',
'-DPIPE_SUBSYSTEM_WINDOWS_USER',
'-D_USE_MATH_DEFINES', # XXX: scons doesn't use this for mingw
]
'/wd4996', # disabled deprecated POSIX name warnings
'/wd4291', # no matching operator delete found
'/wd4146', # unary minus operator applied to unsigned type, result still unsigned
- '/wd4200'] # nonstandard extension used: zero-sized array in struct/union
+ '/wd4200', # nonstandard extension used: zero-sized array in struct/union
+ '/wd4624', # destructor was implicitly defined as deleted [from LLVM]
+ ]
if cc.has_argument(a)
c_args += a
endif
'-fno-math-errno',
'-fno-trapping-math',
'-Qunused-arguments',
+ # Some classes use custom new operator which zeroes memory, however
+ # gcc does aggressive dead-store elimination which threats all writes
+ # to the memory before the constructor as "dead stores".
+ # For now we disable this optimization.
+ '-flifetime-dse=1',
]
# MinGW chokes on format specifiers and I can't get it all working
if not (cc.get_id() == 'gcc' and host_machine.system() == 'windows')
if cc.get_id() == 'msvc'
add_project_link_arguments(
'/fixed:no',
- '/incremental:no',
'/dynamicbase',
'/nxcompat',
language : ['c', 'cpp'],
)
+ if get_option('buildtype') != 'debug'
+ add_project_link_arguments(
+ '/incremental:no',
+ language : ['c', 'cpp'],
+ )
+ endif
else
add_project_link_arguments(
'-Wl,--nxcompat',
endif
foreach h : ['xlocale.h', 'sys/sysctl.h', 'linux/futex.h', 'endian.h', 'dlfcn.h', 'execinfo.h', 'sys/shm.h', 'cet.h']
- if cc.compiles('#include <@0@>'.format(h), name : '@0@'.format(h))
+ if cc.check_header(h)
pre_args += '-DHAVE_@0@'.format(h.to_upper().underscorify())
endif
endforeach
-foreach f : ['strtof', 'mkostemp', 'timespec_get', 'memfd_create', 'random_r', 'flock', 'strtok_r']
+foreach f : ['strtof', 'mkostemp', 'timespec_get', 'memfd_create', 'random_r', 'flock', 'strtok_r', 'getrandom']
if cc.has_function(f)
pre_args += '-DHAVE_@0@'.format(f.to_upper())
endif
endif
_shared_llvm = get_option('shared-llvm')
+if _shared_llvm == 'auto'
+ _shared_llvm = (host_machine.system() != 'windows')
+else
+ _shared_llvm = (_shared_llvm == 'true')
+endif
_llvm = get_option('llvm')
-# The cmake method will never find libllvm.so|dylib; this is fine for windows
-# because llvm doesn't support libllvm.dll
-_llvm_method = 'config-tool'
-if (meson.version().version_compare('>= 0.51.0') and
- host_machine.system() == 'windows')
- _llvm_method = 'cmake'
+# the cmake method can only link statically, so don't attempt to use it if we
+# want to link dynamically. Before 0.54.0 meson will try cmake even when shared
+# linking is requested, so we need to force the config-tool method to be used
+# in that case, but in 0.54.0 meson won't try the cmake method if shared
+# linking is requested.
+_llvm_method = 'auto'
+if meson.version().version_compare('< 0.54.0') and _shared_llvm
+ _llvm_method = 'config-tool'
endif
dep_llvm = null_dep
# has also been added, so we'll use that if we can, to cover the cmake case.
if dep_llvm.type_name() == 'internal'
_rtti = subproject('llvm').get_variable('has_rtti', true)
- elif meson.version().version_compare('>=0.51')
+ else
# The CMake finder will return 'ON', the llvm-config will return 'YES'
_rtti = ['ON', 'YES'].contains(dep_llvm.get_variable(cmake : 'LLVM_ENABLE_RTTI', configtool: 'has-rtti'))
- else
- _rtti = dep_llvm.get_configtool_variable('has-rtti') == 'YES'
endif
if not _rtti
if with_gallium_nouveau
if prog_flex.found()
# windows compatibility (uses <io.h> instead of <unistd.h> and _isatty,
# _fileno functions)
- prog_flex = [prog_flex, '--wincompat']
+ prog_flex = [prog_flex, '--wincompat', '-D__STDC_VERSION__=199901']
else
prog_flex = [find_program('lex', 'flex', required : with_any_opengl)]
endif
# Disable deprecated keyword warnings, since we have to use them for
# old-bison compat. See discussion in
# https://gitlab.freedesktop.org/mesa/mesa/merge_requests/2161
- if meson.version().version_compare('>= 0.52.0') and find_program('bison', required : false, version : '> 2.3').found()
+ if find_program('bison', required : false, version : '> 2.3').found()
prog_bison = [prog_bison, '-Wno-deprecated']
endif
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())
+ dep_wayland_egl_headers = dep_wayland_egl.partial_dependency(compile_args : true)
endif
wayland_dmabuf_xml = join_paths(
dep_wl_protocols.get_pkgconfig_variable('pkgdatadir'), 'unstable',