summaryrefslogtreecommitdiff
path: root/media-tv/kodi/files/kodi-19.4-atomic.patch
diff options
context:
space:
mode:
authorV3n3RiX <venerix@koprulu.sector>2022-11-23 10:52:27 +0000
committerV3n3RiX <venerix@koprulu.sector>2022-11-23 10:52:27 +0000
commit98fb21d345932e93fb7bf524fc23602f530d462d (patch)
tree3048673e663d6387e298c40d8a4cd402a5d84936 /media-tv/kodi/files/kodi-19.4-atomic.patch
parent27eafc53e5ffc415fd522beb81e5a46f2112743d (diff)
Revert "media-tv/kodi : our dav1d 1.0.0 fix merged into gentoo, drop package"
This reverts commit 27eafc53e5ffc415fd522beb81e5a46f2112743d.
Diffstat (limited to 'media-tv/kodi/files/kodi-19.4-atomic.patch')
-rw-r--r--media-tv/kodi/files/kodi-19.4-atomic.patch108
1 files changed, 108 insertions, 0 deletions
diff --git a/media-tv/kodi/files/kodi-19.4-atomic.patch b/media-tv/kodi/files/kodi-19.4-atomic.patch
new file mode 100644
index 00000000..3811fda8
--- /dev/null
+++ b/media-tv/kodi/files/kodi-19.4-atomic.patch
@@ -0,0 +1,108 @@
+From ac3213e683e4c62c50dc02fef3b168d883245094 Mon Sep 17 00:00:00 2001
+From: Yixun Lan <dlan@gentoo.org>
+Date: Tue, 9 Aug 2022 16:45:09 +0800
+Subject: [PATCH] [cmake] link atomic library for certain CPU architectures
+
+For those CPU architectures:
+RISC-V lack 8-bit and 16-bit atomic instructions, and
+ARM/MIPS/PPC lack 64-bit atomic instruction.
+
+GCC is supposed to convert these atomics via masking and shifting
+like LLVM, which means anything that wants to use these instructions
+needs the link option -latomic.
+
+In this patch, we will try to detect if 8-bit, 64-bit atomic instructions exist,
+otherwise the atomic library will append to the DEPLIBS list.
+
+Original issue:
+* https://gitlab.kitware.com/cmake/cmake/-/issues/23021#note_1098733
+
+For reference:
+* https://gcc.gnu.org/wiki/Atomic/GCCMM
+
+riscv64 specific:
+* https://lists.debian.org/debian-riscv/2022/01/msg00009.html
+
+Signed-off-by: Yixun Lan <dlan@gentoo.org>
+---
+ cmake/modules/FindAtomic.cmake | 56 +++++++++++++++++++++++++++++
+ cmake/scripts/linux/ArchSetup.cmake | 3 ++
+ 2 files changed, 59 insertions(+)
+ create mode 100644 cmake/modules/FindAtomic.cmake
+
+diff --git a/cmake/modules/FindAtomic.cmake b/cmake/modules/FindAtomic.cmake
+new file mode 100644
+index 0000000000..8ea3c815d7
+--- /dev/null
++++ b/cmake/modules/FindAtomic.cmake
+@@ -0,0 +1,56 @@
++#.rst:
++# FindAtomic
++# -----
++# Finds the ATOMIC library
++#
++# This will define the following variables::
++#
++# ATOMIC_FOUND - system has ATOMIC
++# ATOMIC_LIBRARIES - the ATOMIC libraries
++#
++# and the following imported targets::
++#
++# ATOMIC::ATOMIC - The ATOMIC library
++
++
++include(CheckCXXSourceCompiles)
++
++set(atomic_code
++ "
++ #include <atomic>
++ #include <cstdint>
++ std::atomic<uint8_t> n8 (0); // riscv64
++ std::atomic<uint64_t> n64 (0); // armel, mipsel, powerpc
++ int main() {
++ ++n8;
++ ++n64;
++ return 0;
++ }")
++
++check_cxx_source_compiles("${atomic_code}" ATOMIC_LOCK_FREE_INSTRUCTIONS)
++
++if(ATOMIC_LOCK_FREE_INSTRUCTIONS)
++ set(ATOMIC_FOUND TRUE)
++ set(ATOMIC_LIBRARIES)
++else()
++ set(CMAKE_REQUIRED_LIBRARIES "-latomic")
++ check_cxx_source_compiles("${atomic_code}" ATOMIC_IN_LIBRARY)
++ set(CMAKE_REQUIRED_LIBRARIES)
++ if(ATOMIC_IN_LIBRARY)
++ set(ATOMIC_LIBRARY atomic)
++ include(FindPackageHandleStandardArgs)
++ find_package_handle_standard_args(Atomic DEFAULT_MSG ATOMIC_LIBRARY)
++ set(ATOMIC_LIBRARIES ${ATOMIC_LIBRARY})
++ if(NOT TARGET ATOMIC::ATOMIC)
++ add_library(ATOMIC::ATOMIC UNKNOWN IMPORTED)
++ set_target_properties(ATOMIC::ATOMIC PROPERTIES
++ IMPORTED_LOCATION "${ATOMIC_LIBRARY}")
++ endif()
++ unset(ATOMIC_LIBRARY)
++ else()
++ if(Atomic_FIND_REQUIRED)
++ message(FATAL_ERROR "Neither lock free instructions nor -latomic found.")
++ endif()
++ endif()
++endif()
++unset(atomic_code)
+diff --git a/cmake/scripts/linux/ArchSetup.cmake b/cmake/scripts/linux/ArchSetup.cmake
+index 35ab1402f5..848723af1f 100644
+--- a/cmake/scripts/linux/ArchSetup.cmake
++++ b/cmake/scripts/linux/ArchSetup.cmake
+@@ -199,3 +199,6 @@ if(NOT USE_INTERNAL_LIBS)
+ set(USE_INTERNAL_LIBS OFF)
+ endif()
+ endif()
++
++# Atomic library
++list(APPEND PLATFORM_REQUIRED_DEPS Atomic)
+--
+2.35.1
+