From f2b5c0b6020b50f5173e449b45a6f7a7be31c48f Mon Sep 17 00:00:00 2001 From: Marc Leeman Date: Wed, 22 Jan 2025 15:02:03 +0100 Subject: [PATCH] meson.build: test for and link against libatomic if it exists It's needed on some platforms for some subset (or all) atomic operations and checking for the cases when it's actually needed is quite complex. Fixes https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/4300 Part-of: --- .../gst-plugins-bad/gst-libs/gst/cuda/meson.build | 15 ++++++--------- .../gst-libs/gst/audio/meson.build | 2 +- subprojects/gst-plugins-base/meson.build | 9 +++++++++ subprojects/gstreamer/meson.build | 7 +++++++ 4 files changed, 23 insertions(+), 10 deletions(-) diff --git a/subprojects/gst-plugins-bad/gst-libs/gst/cuda/meson.build b/subprojects/gst-plugins-bad/gst-libs/gst/cuda/meson.build index 3a2524420b..50ae0276ce 100644 --- a/subprojects/gst-plugins-bad/gst-libs/gst/cuda/meson.build +++ b/subprojects/gst-plugins-bad/gst-libs/gst/cuda/meson.build @@ -48,15 +48,12 @@ if host_system not in ['windows', 'linux'] subdir_done() endif -# Linux ARM would need -latomic for std::atomic -if host_system == 'linux' and host_machine.cpu_family() in ['aarch64', 'arm'] - libatomic_dep = cxx.find_library('atomic', required: get_option('cuda-nvmm')) - if not libatomic_dep.found() - subdir_done() - endif - - gstcuda_platform_dep += [libatomic_dep] -endif +# Check for libatomic for use of C11 atomics: some architectures need +# to link explicitly to this library. +# TODO: Once meson 1.7 is in use, this can be updated to +# dependency('atomic') +atomic_dep = cxx.find_library('atomic', required: false) +gstcuda_platform_dep += [atomic_dep] cuda_win32_headers = [ 'initguid.h', diff --git a/subprojects/gst-plugins-base/gst-libs/gst/audio/meson.build b/subprojects/gst-plugins-base/gst-libs/gst/audio/meson.build index 1d69713e61..cf8935bace 100644 --- a/subprojects/gst-plugins-base/gst-libs/gst/audio/meson.build +++ b/subprojects/gst-plugins-base/gst-libs/gst/audio/meson.build @@ -162,7 +162,7 @@ gstaudio = library('gstaudio-@0@'.format(api_version), soversion : soversion, darwin_versions : osxversion, install : true, - dependencies : gstaudio_deps, + dependencies : [ gstaudio_deps, base_platform_dep ], ) pkg_name = 'gstreamer-audio-1.0' pkgconfig.generate(gstaudio, diff --git a/subprojects/gst-plugins-base/meson.build b/subprojects/gst-plugins-base/meson.build index 947dc10d88..5a40f44c0a 100644 --- a/subprojects/gst-plugins-base/meson.build +++ b/subprojects/gst-plugins-base/meson.build @@ -398,6 +398,15 @@ else core_conf.set('DISABLE_ORC', 1) endif +base_platform_dep = [] +# Check for libatomic for use of C11 atomics: some architectures need +# to link explicitly to this library. +# TODO: Once meson 1.7 is in use, this can be updated to +# dependency('atomic') +atomic_dep = cc.find_library('atomic', required: false) + +base_platform_dep += [atomic_dep] + # Used to build SSE* things in audio-resampler sse_args = '-msse' sse2_args = '-msse2' diff --git a/subprojects/gstreamer/meson.build b/subprojects/gstreamer/meson.build index 82b9046ee6..7e6cbe2808 100644 --- a/subprojects/gstreamer/meson.build +++ b/subprojects/gstreamer/meson.build @@ -599,6 +599,13 @@ if nsl_lib.found() network_deps += nsl_lib endif +# Check for libatomic for use of C11 atomics: some architectures need +# to link explicitly to this library. +# TODO: Once meson 1.7 is in use, this can be updated to +# dependency('atomic') +atomic_dep = cc.find_library('atomic', required: false) +platform_deps += atomic_dep + gir = find_program('g-ir-scanner', required : get_option('introspection')) gnome = import('gnome')