From 13e252af79ffb85bc68d8104fdf700269b903875 Mon Sep 17 00:00:00 2001 From: Efraim Flashner Date: Mon, 15 May 2023 11:11:49 +0300 Subject: [PATCH] gnu: mariadb: Fix building on riscv64-linux. * gnu/packages/databases.scm (mariadb)[arguments]: Add a phase when building for riscv64-linux to apply a patch. [native-inputs]: When building for riscv64-linux add patch and a patch file. * gnu/packages/patches/mariadb-rocksdb-atomic-linking.patch: New file. * gnu/local.mk (dist_patch_DATA): Register it. --- gnu/local.mk | 1 + gnu/packages/databases.scm | 17 +++++- .../mariadb-rocksdb-atomic-linking.patch | 54 +++++++++++++++++++ 3 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 gnu/packages/patches/mariadb-rocksdb-atomic-linking.patch diff --git a/gnu/local.mk b/gnu/local.mk index 012ce84d2d..ba865afdcb 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1544,6 +1544,7 @@ dist_patch_DATA = \ %D%/packages/patches/lvm2-static-link.patch \ %D%/packages/patches/mailutils-variable-lookup.patch \ %D%/packages/patches/make-impure-dirs.patch \ + %D%/packages/patches/mariadb-rocksdb-atomic-linking.patch \ %D%/packages/patches/mathjax-disable-webpack.patch \ %D%/packages/patches/mathjax-no-a11y.patch \ %D%/packages/patches/mathjax-3.1.2-no-a11y.patch \ diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm index 496aab918a..2b4ec5e09a 100644 --- a/gnu/packages/databases.scm +++ b/gnu/packages/databases.scm @@ -10,7 +10,7 @@ ;;; Copyright © 2015 Eric Dvorsak ;;; Copyright © 2016, 2022 Hartmut Goebel ;;; Copyright © 2016 Christine Lemmer-Webber -;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Efraim Flashner +;;; Copyright © 2015-2023 Efraim Flashner ;;; Copyright © 2016, 2017 Nikita ;;; Copyright © 2016, 2017, 2018 Roel Janssen ;;; Copyright © 2016 David Craven @@ -968,6 +968,14 @@ Language.") #:parallel-tests? ,(target-x86-64?) #:phases (modify-phases %standard-phases + ;; TODO: Move this patch to the source field. + ,@(if (target-riscv64?) + `((add-after 'unpack 'patch-source + (lambda* (#:key inputs native-inputs #:allow-other-keys) + (invoke "patch" "-p1" "--force" "--input" + (assoc-ref (or native-inputs inputs) + "patch-file"))))) + '()) (add-after 'unpack 'adjust-output-references (lambda _ ;; The build system invariably prepends $CMAKE_INSTALL_PREFIX @@ -1103,7 +1111,12 @@ Language.") (("-lssl -lcrypto" all) (string-append "-L" openssl " " all))))))))) (native-inputs - (list bison perl)) + `(,@(if (target-riscv64?) + `(("patch" ,patch) + ("patch-file" ,(search-patch "mariadb-rocksdb-atomic-linking.patch"))) + `()) + ("bison" ,bison) + ("perl" ,perl))) (inputs (list fmt jemalloc diff --git a/gnu/packages/patches/mariadb-rocksdb-atomic-linking.patch b/gnu/packages/patches/mariadb-rocksdb-atomic-linking.patch new file mode 100644 index 0000000000..03e8acd907 --- /dev/null +++ b/gnu/packages/patches/mariadb-rocksdb-atomic-linking.patch @@ -0,0 +1,54 @@ +https://github.com/MariaDB/server/pull/2477 +https://github.com/MariaDB/server/commit/195c0e81493c41f1d20b91a5bcc6aaaf4979d781.patch + +From 195c0e81493c41f1d20b91a5bcc6aaaf4979d781 Mon Sep 17 00:00:00 2001 +From: Daniel Black +Date: Fri, 3 Feb 2023 11:51:20 +1100 +Subject: [PATCH] MDEV-30554 RockDB libatomic linking on riscv64 + +The existing storage/rocksdb/CMakeCache.txt defined +ATOMIC_EXTRA_LIBS when atomics where required. This was +determined by the toplevel configure.cmake test +(HAVE_GCC_C11_ATOMICS_WITH_LIBATOMIC). + +As build_rocksdb.cmake is included after ATOMIC_EXTRA_LIBS +was set, we just need to use it. As such no riscv64 +specific macro is needed in build_rocksdb.cmake. + +As highlighted by Gianfranco Costamagna (@LocutusOfBorg) +in #2472 overwriting SYSTEM_LIBS was problematic. +This is corrected in case in future SYSTEM_LIBS is changed +elsewhere. + +Closes #2472. +--- + storage/rocksdb/build_rocksdb.cmake | 8 ++------ + 1 file changed, 2 insertions(+), 6 deletions(-) + +diff --git a/storage/rocksdb/build_rocksdb.cmake b/storage/rocksdb/build_rocksdb.cmake +index e23862ee65901..647e51e2f90d9 100644 +--- a/storage/rocksdb/build_rocksdb.cmake ++++ b/storage/rocksdb/build_rocksdb.cmake +@@ -129,10 +129,6 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64") + ADD_DEFINITIONS(-DHAVE_POWER8 -DHAS_ALTIVEC) + endif(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64") + +-if(CMAKE_SYSTEM_PROCESSOR STREQUAL "riscv64") +- set(SYSTEM_LIBS ${SYSTEM_LIBS} -latomic) +-endif() +- + option(WITH_FALLOCATE "build with fallocate" ON) + + if(WITH_FALLOCATE AND UNIX) +@@ -161,9 +157,9 @@ include_directories(SYSTEM ${ROCKSDB_SOURCE_DIR}/third-party/gtest-1.7.0/fused-s + + find_package(Threads REQUIRED) + if(WIN32) +- set(SYSTEM_LIBS ${SYSTEM_LIBS} Shlwapi.lib Rpcrt4.lib) ++ set(SYSTEM_LIBS ${SYSTEM_LIBS} ${ATOMIC_EXTRA_LIBS} Shlwapi.lib Rpcrt4.lib) + else() +- set(SYSTEM_LIBS ${CMAKE_THREAD_LIBS_INIT} ${LIBRT} ${CMAKE_DL_LIBS}) ++ set(SYSTEM_LIBS ${SYSTEM_LIBS} ${CMAKE_THREAD_LIBS_INIT} ${LIBRT} ${CMAKE_DL_LIBS} ${ATOMIC_EXTRA_LIBS}) + endif() + + set(ROCKSDB_LIBS rocksdblib})