diff options
author | Rosen Penev <rosenp@gmail.com> | 2025-06-30 13:44:54 -0700 |
---|---|---|
committer | Jussi Pakkanen <jussi.pakkanen@mailbox.org> | 2025-07-02 18:27:57 +0300 |
commit | 60d0410c0ae22fd8f37a798736973a53128b2966 (patch) | |
tree | 40821c7169ff01712a767448e0f0c5674bb9671f | |
parent | 1e6986b99d1b3f615987d6984301b3e9f1639090 (diff) | |
download | meson-60d0410c0ae22fd8f37a798736973a53128b2966.zip meson-60d0410c0ae22fd8f37a798736973a53128b2966.tar.gz meson-60d0410c0ae22fd8f37a798736973a53128b2966.tar.bz2 |
test 64-bit types for atomic
The check is currently broken as atomic_flag_clear is a macro, not a
function. Change it to test linkage instead.
Also test if atomics work with 64-bit types. On certain platforms like
MIPS, external libatomic is needed.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
-rw-r--r-- | mesonbuild/dependencies/misc.py | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/mesonbuild/dependencies/misc.py b/mesonbuild/dependencies/misc.py index 3ab2194..1b45418 100644 --- a/mesonbuild/dependencies/misc.py +++ b/mesonbuild/dependencies/misc.py @@ -56,22 +56,24 @@ packages['netcdf'] = netcdf_factory class AtomicBuiltinDependency(BuiltinDependency): def __init__(self, name: str, env: Environment, kwargs: T.Dict[str, T.Any]): super().__init__(name, env, kwargs) - self.feature_since = ('1.7.0', "consider checking for `atomic_flag_clear` with and without `find_library('atomic')`") + self.feature_since = ('1.7.0', "consider checking for `atomic_fetch_add` of a 64-bit type with and without `find_library('atomic')`") - if self.clib_compiler.has_function('atomic_flag_clear', '#include <stdatomic.h>', env)[0]: - self.is_found = True + code = '''#include <stdatomic.h>\n\nint main() {\n atomic_int_least64_t a;\n return atomic_fetch_add(&b, 1);\n}''' # [ignore encoding] this is C, not python, Mr. Lint + + self.is_found = bool(self.clib_compiler.links(code, env)[0]) class AtomicSystemDependency(SystemDependency): def __init__(self, name: str, env: Environment, kwargs: T.Dict[str, T.Any]): super().__init__(name, env, kwargs) - self.feature_since = ('1.7.0', "consider checking for `atomic_flag_clear` with and without `find_library('atomic')`") + self.feature_since = ('1.7.0', "consider checking for `atomic_fetch_add` of a 64-bit type with and without `find_library('atomic')`") h = self.clib_compiler.has_header('stdatomic.h', '', env) - self.link_args = self.clib_compiler.find_library('atomic', env, [], self.libtype) + if not h[0]: + return - if h[0] and self.link_args: - self.is_found = True + self.link_args = self.clib_compiler.find_library('atomic', env, [], self.libtype) + self.is_found = bool(self.link_args) class DlBuiltinDependency(BuiltinDependency): |