[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#1014594: muse: FTBFS on riscv64



Source: muse
Version: 4.1.0-1
Severity: normal
Tags: ftbfs, patch, upstream
User: debian-riscv@lists.debian.org
Usertags: riscv64
X-Debbugs-Cc: debian-riscv@lists.debian.org

Dear maintainer,

The package muse, version 4.1.0-1, has a FTFBS issue for riscv.

[100%] Linking CXX executable muse
cd /<<PKGBUILDDIR>>/obj-riscv64-linux-gnu/muse && /usr/bin/cmake -E cmake_link_script CMakeFiles/muse.dir/link.txt --verbose=1
/usr/bin/c++ -Werror=format-security -Wextra -Winvalid-pch -fexceptions -Wall -fPIC -Wl,-z,relro -Wl,-z,now CMakeFiles/muse.dir/main.cpp.o CMakeFiles/muse.dir/qrc_resources.cpp.o -o muse  -Wl,-rpath,/usr/lib/muse/modules libmuse_core.so midiedit/libmuse_midiedit.so ctrl/libmuse_ctrl.so function_dialogs/libmuse_widgets_functiondialogs.so ../al/libmuse_al.so arranger/libmuse_arranger.so cliplist/libmuse_cliplist.so driver/libmuse_driver.so -lasound -L/usr/lib/riscv64-linux-gnu -ljack -ljack -lrtaudio instruments/libmuse_instruments.so libmuse_latency_compensator_module.so liste/libmuse_liste.so marker/libmuse_marker.so master/libmuse_master.so mixer/libmuse_mixer.so mplugins/libmuse_mplugins.so ../libs/string/libmuse_string.so ../libs/plugin/libmuse_plugin_cache_writer_module.so ../libs/plugin/libmuse_plugin_rdf_module.so ../libs/plugin/libmuse_plugin_cache_reader_module.so ../libs/plugin/libmuse_plugin_list_module.so ../libs/plugin/libmuse_plugin_scan_module.so ../synti/libsynti/libmuse_synti.so ../libs/wave/libmuse_wave_module.so ../audio_convert/libaudio_converter_plugin.so ../libs/time_stretch/libmuse_time_stretch_module.so waveedit/libmuse_waveedit.so libmuse_wavepreview_module.so components/libmuse_components.so libmuse_icons.so widgets/libmuse_widgets.so -lsndfile -lsamplerate -llo -lpthread libmuse_lv2host_module.so ../libs/midnam/libmuse_midnam_module.so ../libs/midi_controller/libmuse_midi_controller_module.so ../libs/mpevent/libmuse_mpevent_module.so ../libs/evdata/libmuse_evdata_module.so ../libs/memory/libmuse_memory_module.so ../libs/sysex_helper/libmuse_sysex_helper_module.so ../libs/xml/libmuse_xml_module.so /usr/lib/riscv64-linux-gnu/libQt5UiTools.a -lpthread /usr/lib/riscv64-linux-gnu//libQt5Widgets.so /usr/lib/riscv64-linux-gnu//libQt5Gui.so /usr/lib/riscv64-linux-gnu//libQt5Core.so /usr/lib/riscv64-linux-gnu//libQt5Widgets.so /usr/lib/riscv64-linux-gnu//libQt5Gui.so /usr/lib/riscv64-linux-gnu//libQt5Core.so /usr/lib/riscv64-linux-gnu/libGL.so /usr/lib/riscv64-linux-gnu/libQt5Xml.so.5.15.2 /usr/lib/riscv64-linux-gnu/libQt5Svg.so.5.15.2 /usr/lib/riscv64-linux-gnu/libQt5Widgets.so.5.15.2 /usr/lib/riscv64-linux-gnu/libQt5Gui.so.5.15.2 /usr/lib/riscv64-linux-gnu/libQt5Core.so.5.15.2 -llilv-0 -ldl -lsratom-0 -lsord-0 -lserd-0
/usr/bin/ld: libmuse_lv2host_module.so: undefined reference to `__atomic_fetch_sub_2'
/usr/bin/ld: libmuse_lv2host_module.so: undefined reference to `__atomic_fetch_add_2'
collect2: error: ld returned 1 exit status
make[3]: *** [muse/CMakeFiles/muse.dir/build.make:384: muse/muse] Error 1
make[3]: Leaving directory '/<<PKGBUILDDIR>>/obj-riscv64-linux-gnu'
make[2]: *** [CMakeFiles/Makefile2:2203: muse/CMakeFiles/muse.dir/all] Error 2
make[2]: Leaving directory '/<<PKGBUILDDIR>>/obj-riscv64-linux-gnu'
make[1]: *** [Makefile:159: all] Error 2
make[1]: Leaving directory '/<<PKGBUILDDIR>>/obj-riscv64-linux-gnu'
dh_auto_build: error: cd obj-riscv64-linux-gnu && make -j4 "INSTALL=install --strip-program=true" VERBOSE=1 returned exit code 2
make: *** [debian/rules:6: binary-arch] Error 25
dpkg-buildpackage: error: debian/rules binary-arch subprocess returned exit status 2

The attached patch fixes the issue, and I will create a merge request on the salsa repo at https://salsa.debian.org/multimedia-team/muse.

Ileana Dumitrescu
From: Ileana Dumitrescu <ileanadumi95@protonmail.com>
Date: Fri, 8 Jul 2022 16:10:14 +0300
Subject: [PATCH] link with libatomic if needed

---
 src/CMakeLists.txt          |  1 +
 src/cmake/CheckAtomic.cmake | 78 +++++++++++++++++++++++++++++++++++++
 src/muse/CMakeLists.txt     |  6 ++-
 3 files changed, 84 insertions(+), 1 deletion(-)
 create mode 100644 src/cmake/CheckAtomic.cmake

diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 1f861f7..0bd53f1 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -30,6 +30,7 @@ include(CheckIncludeFiles)
 include (CheckCSourceCompiles)
 include(cmake/Summary.cmake)
 include(CheckCXXSymbolExists)
+include(cmake/CheckAtomic.cmake)
 
 CMAKE_MINIMUM_REQUIRED(VERSION 3.10.2)
 if (COMMAND cmake_policy)
diff --git a/src/cmake/CheckAtomic.cmake b/src/cmake/CheckAtomic.cmake
new file mode 100644
index 0000000..eaf801f
--- /dev/null
+++ b/src/cmake/CheckAtomic.cmake
@@ -0,0 +1,78 @@
+# atomic builtins are required for threading support.
+
+INCLUDE(CheckCXXSourceCompiles)
+INCLUDE(CheckLibraryExists)
+
+# Sometimes linking against libatomic is required for atomic ops, if
+# the platform doesn't support lock-free atomics.
+
+function(check_working_cxx_atomics varname)
+  set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
+  set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -std=c++11")
+  CHECK_CXX_SOURCE_COMPILES("
+#include <atomic>
+std::atomic<int> x;
+int main() {
+  return x;
+}
+" ${varname})
+  set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS})
+endfunction(check_working_cxx_atomics)
+
+function(check_working_cxx_atomics64 varname)
+  set(OLD_CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS})
+  set(CMAKE_REQUIRED_FLAGS "-std=c++11 ${CMAKE_REQUIRED_FLAGS}")
+  CHECK_CXX_SOURCE_COMPILES("
+#include <atomic>
+#include <cstdint>
+std::atomic<uint64_t> x (0);
+int main() {
+  uint64_t i = x.load(std::memory_order_relaxed);
+  return 0;
+}
+" ${varname})
+  set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS})
+endfunction(check_working_cxx_atomics64)
+
+
+# This isn't necessary on MSVC, so avoid command-line switch annoyance
+# by only running on GCC-like hosts.
+if (LLVM_COMPILER_IS_GCC_COMPATIBLE)
+  # First check if atomics work without the library.
+  check_working_cxx_atomics(HAVE_CXX_ATOMICS_WITHOUT_LIB)
+  # If not, check if the library exists, and atomics work with it.
+  if(NOT HAVE_CXX_ATOMICS_WITHOUT_LIB)
+    check_library_exists(atomic __atomic_fetch_add_4 "" HAVE_LIBATOMIC)
+    if( HAVE_LIBATOMIC )
+      list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic")
+      check_working_cxx_atomics(HAVE_CXX_ATOMICS_WITH_LIB)
+      if (NOT HAVE_CXX_ATOMICS_WITH_LIB)
+	message(FATAL_ERROR "Host compiler must support std::atomic!")
+      endif()
+    else()
+      message(FATAL_ERROR "Host compiler appears to require libatomic, but cannot find it.")
+    endif()
+  endif()
+endif()
+
+# Check for 64 bit atomic operations.
+if(MSVC)
+  set(HAVE_CXX_ATOMICS64_WITHOUT_LIB True)
+else()
+  check_working_cxx_atomics64(HAVE_CXX_ATOMICS64_WITHOUT_LIB)
+endif()
+
+# If not, check if the library exists, and atomics work with it.
+if(NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB)
+  check_library_exists(atomic __atomic_load_8 "" HAVE_CXX_LIBATOMICS64)
+  if(HAVE_CXX_LIBATOMICS64)
+    list(APPEND CMAKE_REQUIRED_LIBRARIES "atomic")
+    check_working_cxx_atomics64(HAVE_CXX_ATOMICS64_WITH_LIB)
+    if (NOT HAVE_CXX_ATOMICS64_WITH_LIB)
+      message(FATAL_ERROR "Host compiler must support 64-bit std::atomic!")
+    endif()
+  else()
+    message(FATAL_ERROR "Host compiler appears to require libatomic for 64-bit operations, but cannot find it.")
+  endif()
+endif()
+
diff --git a/src/muse/CMakeLists.txt b/src/muse/CMakeLists.txt
index 52cdaeb..4f6b166 100644
--- a/src/muse/CMakeLists.txt
+++ b/src/muse/CMakeLists.txt
@@ -355,7 +355,11 @@ if(LV2_SUPPORT)
             PROPERTIES COMPILE_FLAGS "-Wno-error"
             OUTPUT_NAME muse_lv2host_module
             )
-            
+      
+      if(NOT HAVE_CXX_ATOMICS_WITHOUT_LIB)
+	    target_link_libraries(lv2host_module atomic)
+      endif()
+
       target_link_libraries(lv2host_module ${LILV_LIBRARIES})
       target_link_libraries(lv2host_module ${SORD_LIBRARIES})
       target_link_libraries(lv2host_module ${LV2_LIBRARIES})
-- 
2.35.2


Reply to: