[Debian-pan-maintainers] Bug#1030295: tomopy: please fix build on atomic architectures
Gianfranco Costamagna
locutusofborg at debian.org
Thu Feb 2 07:28:42 GMT 2023
Source: tomopy
Version: 1.10.4+ds1-7
tags: patch
Hello, looks like tomopy is FTBFS on architectures where libatomic is needed
I created a patch from CheckAtomic.cmake (cmake-extras-modules package), and I plan to submit upstream
diff -Nru tomopy-1.10.4+ds1/debian/patches/fix-build.patch tomopy-1.10.4+ds1/debian/patches/fix-build.patch
--- tomopy-1.10.4+ds1/debian/patches/fix-build.patch 1970-01-01 00:00:00.000000000 +0000
+++ tomopy-1.10.4+ds1/debian/patches/fix-build.patch 2023-02-01 10:07:39.000000000 +0000
@@ -0,0 +1,146 @@
+Description: Link with latomic where needed
+Author: Gianfranco Costamagna <locutusofborg at debian.org>
+Bug-Debian: https://bugs.debian.org/
+Forwarded:
+Last-Update: 2023-02-01
+
+Index: tomopy-1.10.4+ds1/CMakeLists.txt
+===================================================================
+--- tomopy-1.10.4+ds1.orig/CMakeLists.txt
++++ tomopy-1.10.4+ds1/CMakeLists.txt
+@@ -40,6 +40,7 @@
+ include(BuildSettings)
+ include(Packages)
+ include(ClangFormat)
++include(CheckAtomic)
+
+ ################################################################################
+ # tomopy source
+Index: tomopy-1.10.4+ds1/PTL/cmake/Modules/Packages.cmake
+===================================================================
+--- tomopy-1.10.4+ds1.orig/PTL/cmake/Modules/Packages.cmake
++++ tomopy-1.10.4+ds1/PTL/cmake/Modules/Packages.cmake
+@@ -165,6 +165,9 @@
+
+ endif()
+
++if(NOT HAVE_CXX_ATOMICS_WITHOUT_LIB OR NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB)
++ list(APPEND EXTERNAL_LIBRARIES "atomic")
++endif()
+
+ ################################################################################
+ #
+Index: tomopy-1.10.4+ds1/cmake/Modules/CheckAtomic.cmake
+===================================================================
+--- /dev/null
++++ tomopy-1.10.4+ds1/cmake/Modules/CheckAtomic.cmake
+@@ -0,0 +1,95 @@
++# SPDX-FileCopyrightText: 2003-2018 University of Illinois at Urbana-Champaign.
++#
++# SPDX-License-Identifier: BSD-3-Clause
++
++#[=======================================================================[.rst:
++CheckAtomic
++-----------
++
++Check if the compiler supports std:atomic out of the box or if libatomic is
++needed for atomic support. If it is needed libatomicis added to
++``CMAKE_REQUIRED_LIBRARIES``. So after running CheckAtomic you can use
++std:atomic.
++
++Since 5.75.0.
++#]=======================================================================]
++
++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;
++ std::atomic<short> y;
++ std::atomic<char> z;
++ int main() {
++ ++z;
++ ++y;
++ return ++x;
++ }
++ " ${varname})
++ set(CMAKE_REQUIRED_FLAGS ${OLD_CMAKE_REQUIRED_FLAGS})
++endfunction()
++
++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 for (non-64-bit) atomic operations.
++if(MSVC)
++ set(HAVE_CXX_ATOMICS_WITHOUT_LIB True)
++elseif(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)
++elseif(LLVM_COMPILER_IS_GCC_COMPATIBLE)
++ # First check if atomics work without the library.
++ check_working_cxx_atomics64(HAVE_CXX_ATOMICS64_WITHOUT_LIB)
++ # 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()
++endif()
+Index: tomopy-1.10.4+ds1/cmake/Modules/Packages.cmake
+===================================================================
+--- tomopy-1.10.4+ds1.orig/cmake/Modules/Packages.cmake
++++ tomopy-1.10.4+ds1/cmake/Modules/Packages.cmake
+@@ -280,6 +280,9 @@
+
+ endif()
+
++if(NOT HAVE_CXX_ATOMICS_WITHOUT_LIB OR NOT HAVE_CXX_ATOMICS64_WITHOUT_LIB)
++ list(APPEND TOMOPY_EXTERNAL_LIBRARIES "atomic")
++endif()
+
+ ################################################################################
+ #
diff -Nru tomopy-1.10.4+ds1/debian/patches/series tomopy-1.10.4+ds1/debian/patches/series
--- tomopy-1.10.4+ds1/debian/patches/series 2023-01-31 10:21:12.000000000 +0000
+++ tomopy-1.10.4+ds1/debian/patches/series 2023-02-01 10:07:39.000000000 +0000
@@ -2,3 +2,4 @@
0002-Don-t-try-to-git-clone-the-PTL-submodule.patch
cmake-args.patch
0004-Check-for-appropriate-version-of-libufo.patch
+fix-build.patch
thanks for considering it,
Gianfranco
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 840 bytes
Desc: OpenPGP digital signature
URL: <http://alioth-lists.debian.net/pipermail/debian-pan-maintainers/attachments/20230202/85d11af5/attachment-0001.sig>
More information about the Debian-pan-maintainers
mailing list