From c8c5ece0a855fdd489d090e7c14a73df386fcae1 Mon Sep 17 00:00:00 2001 From: meator Date: Fri, 22 Aug 2025 21:04:05 +0200 Subject: [PATCH] protobuf: fix compilation on armv6l (libatomic) --- releases.json | 1 + subprojects/packagefiles/protobuf/meson.build | 39 ++++++++++++++++++- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/releases.json b/releases.json index 86cf3ecc2..1823c02b5 100644 --- a/releases.json +++ b/releases.json @@ -3346,6 +3346,7 @@ "protoc" ], "versions": [ + "25.2-4", "25.2-3", "25.2-2", "25.2-1", diff --git a/subprojects/packagefiles/protobuf/meson.build b/subprojects/packagefiles/protobuf/meson.build index 78a8a2630..0a8b94106 100644 --- a/subprojects/packagefiles/protobuf/meson.build +++ b/subprojects/packagefiles/protobuf/meson.build @@ -37,6 +37,39 @@ absl_string_view_dep = dependency( default_options: ['cpp_std=c++17'], ) +if meson.version().version_compare('>=1.7.0') + atomic_dep = dependency( + 'atomic', + required: false, + ) +else + atomic_dep = cc.find_library( + 'atomic', + required: false, + ) +endif + +# Make reasonable effort (volatile) to prevent the compiler from optimizing the atomic away without using tested +# functionality. +if not cc.links( + ''' +#include +#include + +int main() { + volatile std::atomic testvar; + // The line below will lead to + // undefined reference to `__atomic_fetch_add_8' + // on armv6l to give an example. + volatile auto unused = testvar.fetch_add(0); +} + ''', + name: 'Check if libatomic is required', + dependencies: atomic_dep, +) + error('Host machine cannot handle atomics!') +endif + deps = [ dependency('absl_base'), dependency('absl_cord'), @@ -58,6 +91,7 @@ deps = [ 'dbghelp', required: host_machine.system() == 'windows', ), + atomic_dep, ] incdir = include_directories('src') @@ -136,6 +170,7 @@ protobuf_lite_dep = declare_dependency( compile_args: imp, link_with: libprotobuf_lite, include_directories: incdir, + dependencies: atomic_dep, ) libprotobuf_src = files( @@ -218,8 +253,8 @@ libprotobuf_src = files( 'src/google/protobuf/wrappers.pb.cc', ) libprotobuf_linker_args = (is_msvc ? [ - '/export:??$MergeFrom@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@RepeatedPtrFieldBase@internal@protobuf@google@@QEAAXAEBV0123@@Z', -] : [] + '/export:??$MergeFrom@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@RepeatedPtrFieldBase@internal@protobuf@google@@QEAAXAEBV0123@@Z', + ] : [] ) libprotobuf = library( 'protobuf',