From 2b55f914c3198f9b07399d10502fbdb22b7d6e47 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Fri, 30 Jul 2021 17:04:40 +0200 Subject: gnu: python-onnx: Install libonnx.so and libonnx_proto.so. * gnu/packages/patches/python-onnx-shared-libraries.patch: New file. * gnu/local.mk (dist_patch_DATA): Add it. * gnu/packages/machine-learning.scm (python-onnx)[source]: Use it. [arguments]: New field. --- gnu/packages/machine-learning.scm | 39 +++++++++++++++++++++- .../patches/python-onnx-shared-libraries.patch | 24 +++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/python-onnx-shared-libraries.patch (limited to 'gnu/packages') diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learning.scm index 268ec9b5ce..1cea91977f 100644 --- a/gnu/packages/machine-learning.scm +++ b/gnu/packages/machine-learning.scm @@ -589,12 +589,49 @@ in terms of new algorithms.") (origin (method url-fetch) (uri (pypi-uri "onnx" version)) - (patches (search-patches "python-onnx-use-system-googletest.patch")) + (patches (search-patches "python-onnx-use-system-googletest.patch" + "python-onnx-shared-libraries.patch")) (sha256 (base32 "0yjv2axz2vc2ysniwislsp53fsb8f61y1warrr2ppn2d9ijml1d9")) (modules '((guix build utils))) (snippet '(delete-file-recursively "third_party")))) (build-system python-build-system) + (arguments + '(#:phases (modify-phases %standard-phases + (add-before 'build 'pass-cmake-arguments + (lambda* (#:key outputs #:allow-other-keys) + ;; Pass options to the CMake-based build process. + (define out + (assoc-ref outputs "out")) + + (define args + ;; Copy arguments from 'cmake-build-system', plus ask + ;; for shared libraries. + (list "-DCMAKE_BUILD_TYPE=RelWithDebInfo" + (string-append "-DCMAKE_INSTALL_PREFIX=" out) + "-DCMAKE_INSTALL_LIBDIR=lib" + "-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE" + (string-append "-DCMAKE_INSTALL_RPATH=" out + "/lib") + "-DCMAKE_VERBOSE_MAKEFILE=ON" + + "-DBUILD_SHARED_LIBS=ON")) + + ;; This environment variable is honored by 'setup.py', + ;; which passes it down to 'cmake'. + (setenv "CMAKE_ARGS" (string-join args)) + + ;; This one is honored by 'setup.py' and passed to 'make + ;; -j'. + (setenv "MAX_JOBS" + (number->string (parallel-job-count))))) + (add-after 'install 'install-from-cmake + (lambda _ + ;; Run "make install" in the build tree 'setup.py' + ;; created for CMake so that libonnx.so, + ;; libonnx_proto.so, etc. are installed. + (invoke "make" "install" + "-C" ".setuptools-cmake-build")))))) (native-inputs `(("cmake" ,cmake) ("googletest" ,googletest) diff --git a/gnu/packages/patches/python-onnx-shared-libraries.patch b/gnu/packages/patches/python-onnx-shared-libraries.patch new file mode 100644 index 0000000000..00583b35da --- /dev/null +++ b/gnu/packages/patches/python-onnx-shared-libraries.patch @@ -0,0 +1,24 @@ +These linker options for the 'onnx_cpp2py_export.cpython-38-*-gnu.so' +(or similar) extension are meant to be used when building 'libonn.a', +a static archive. This patch adapts the link flags to linking with +'libonnx.so'. + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index cede3073..52f846ed 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -475,11 +475,10 @@ if(BUILD_ONNX_PYTHON) + PRIVATE $) + else() + # Assume everything else is like gcc +- target_link_libraries(onnx_cpp2py_export +- PRIVATE "-Wl,--whole-archive" $ +- "-Wl,--no-whole-archive") ++ target_link_libraries(onnx_cpp2py_export PRIVATE onnx) + set_target_properties(onnx_cpp2py_export +- PROPERTIES LINK_FLAGS "-Wl,--exclude-libs,ALL") ++ PROPERTIES LINK_FLAGS ++ "-Wl,-rpath=${CMAKE_INSTALL_PREFIX}/lib") + endif() + + target_link_libraries(onnx_cpp2py_export PRIVATE onnx) -- cgit 1.4.1