From a9bc8a25eb9a5851062167a3475622ba6b1a8b9a Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Thu, 29 Jul 2021 15:42:10 +0200 Subject: gnu: Add FXDiv. * gnu/packages/maths.scm (fxdiv): New variable. * gnu/packages/patches/fxdiv-system-libraries.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. --- gnu/local.mk | 1 + gnu/packages/maths.scm | 31 ++++++++++++++++ gnu/packages/patches/fxdiv-system-libraries.patch | 44 +++++++++++++++++++++++ 3 files changed, 76 insertions(+) create mode 100644 gnu/packages/patches/fxdiv-system-libraries.patch diff --git a/gnu/local.mk b/gnu/local.mk index c80a9af78c..e6a2e4023f 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1032,6 +1032,7 @@ dist_patch_DATA = \ %D%/packages/patches/freedink-engine-fix-sdl-hints.patch \ %D%/packages/patches/freeimage-unbundle.patch \ %D%/packages/patches/fuse-overlapping-headers.patch \ + %D%/packages/patches/fxdiv-system-libraries.patch \ %D%/packages/patches/gajim-honour-GAJIM_PLUGIN_PATH.patch \ %D%/packages/patches/ganeti-deterministic-manual.patch \ %D%/packages/patches/ganeti-disable-version-symlinks.patch \ diff --git a/gnu/packages/maths.scm b/gnu/packages/maths.scm index d4e3aca21e..e170fd4db9 100644 --- a/gnu/packages/maths.scm +++ b/gnu/packages/maths.scm @@ -127,6 +127,7 @@ #:use-module (gnu packages netpbm) #:use-module (gnu packages ocaml) #:use-module (gnu packages onc-rpc) + #:use-module (gnu packages parallel) #:use-module (gnu packages pcre) #:use-module (gnu packages popt) #:use-module (gnu packages perl) @@ -6657,3 +6658,33 @@ high-performance multidimensional array containers for scientific computing.") (license (list license:artistic2.0 license:bsd-3 license:lgpl3+)))) + +(define-public fxdiv + ;; There is currently no tag in this repo. + (let ((commit "63058eff77e11aa15bf531df5dd34395ec3017c8") + (version "0.0") + (revision "1")) + (package + (name "fxdiv") + (version (git-version version revision commit)) + (home-page "https://github.com/Maratyszcza/FXdiv") + (source (origin + (method git-fetch) + (uri (git-reference (url home-page) (commit commit))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "0zwzh8gmbx4m6b18s5nf13b0dk5yjkd1fs8f421bl7fz5f9gjd9f")) + (patches (search-patches "fxdiv-system-libraries.patch")))) + (build-system cmake-build-system) + (inputs + `(("googletest" ,googletest) + ("googlebenchmark" ,googlebenchmark))) + (synopsis + "C++ library for division via fixed-point multiplication by inverse") + (description + "On modern CPUs and GPUs, integer division is several times slower than +multiplication. FXdiv implements an algorithm to replace an integer division +with a multiplication and two shifts. This algorithm improves performance +when an application performs repeated divisions by the same divisor.") + (license license:expat)))) diff --git a/gnu/packages/patches/fxdiv-system-libraries.patch b/gnu/packages/patches/fxdiv-system-libraries.patch new file mode 100644 index 0000000000..eecfaf7efc --- /dev/null +++ b/gnu/packages/patches/fxdiv-system-libraries.patch @@ -0,0 +1,44 @@ +This patch allows the build process to use the provided dependencies instead +of adding their source as CMake sub-directories (in which case "make install" +would install googletest's and googlebenchmark's libraries and headers). + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index bcae6b5..ff6710d 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -21,7 +21,7 @@ IF(FXDIV_BUILD_TESTS) + ENDIF() + + # ---[ Download deps +-IF(FXDIV_BUILD_TESTS AND NOT DEFINED GOOGLETEST_SOURCE_DIR) ++IF(FALSE) + MESSAGE(STATUS "Downloading Google Test to ${CMAKE_BINARY_DIR}/googletest-source (define GOOGLETEST_SOURCE_DIR to avoid it)") + CONFIGURE_FILE(cmake/DownloadGoogleTest.cmake "${CMAKE_BINARY_DIR}/googletest-download/CMakeLists.txt") + EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" . +@@ -31,7 +31,7 @@ IF(FXDIV_BUILD_TESTS AND NOT DEFINED GOOGLETEST_SOURCE_DIR) + SET(GOOGLETEST_SOURCE_DIR "${CMAKE_BINARY_DIR}/googletest-source" CACHE STRING "Google Test source directory") + ENDIF() + +-IF(FXDIV_BUILD_BENCHMARKS AND NOT DEFINED GOOGLEBENCHMARK_SOURCE_DIR) ++IF(FALSE) + MESSAGE(STATUS "Downloading Google Benchmark to ${CMAKE_BINARY_DIR}/googlebenchmark-source (define GOOGLEBENCHMARK_SOURCE_DIR to avoid it)") + CONFIGURE_FILE(cmake/DownloadGoogleBenchmark.cmake "${CMAKE_BINARY_DIR}/googlebenchmark-download/CMakeLists.txt") + EXECUTE_PROCESS(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" . +@@ -54,7 +54,7 @@ INSTALL(FILES include/fxdiv.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + + IF(FXDIV_BUILD_TESTS) + # ---[ Build google test +- IF(NOT TARGET gtest) ++ IF(FALSE) + SET(gtest_force_shared_crt ON CACHE BOOL "" FORCE) + ADD_SUBDIRECTORY( + "${GOOGLETEST_SOURCE_DIR}" +@@ -78,7 +78,7 @@ ENDIF() + + IF(FXDIV_BUILD_BENCHMARKS) + # ---[ Build google benchmark +- IF(NOT TARGET benchmark) ++ IF(FALSE) + SET(BENCHMARK_ENABLE_TESTING OFF CACHE BOOL "" FORCE) + ADD_SUBDIRECTORY( + "${GOOGLEBENCHMARK_SOURCE_DIR}" -- cgit v1.2.3