gnu: python-onnx: Install libonnx.so and libonnx_proto.so.
authorLudovic Courtès <ludo@gnu.org>
Fri, 30 Jul 2021 15:04:40 +0000 (17:04 +0200)
committerLudovic Courtès <ludo@gnu.org>
Fri, 30 Jul 2021 23:03:23 +0000 (01:03 +0200)
* 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/local.mk
gnu/packages/machine-learning.scm
gnu/packages/patches/python-onnx-shared-libraries.patch [new file with mode: 0644]

index 472b030..798560c 100644 (file)
@@ -1634,6 +1634,7 @@ dist_patch_DATA =                                         \
   %D%/packages/patches/python-mox3-python3.6-compat.patch      \
   %D%/packages/patches/python-testtools.patch                  \
   %D%/packages/patches/python-onnx-use-system-googletest.patch \
+  %D%/packages/patches/python-onnx-shared-libraries.patch      \
   %D%/packages/patches/python-packaging-test-arch.patch                \
   %D%/packages/patches/python2-parameterized-docstring-test.patch      \
   %D%/packages/patches/python-paste-remove-timing-test.patch   \
index 268ec9b..1cea919 100644 (file)
@@ -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 (file)
index 0000000..00583b3
--- /dev/null
@@ -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 $<TARGET_OBJECTS:onnx>)
+   else()
+     # Assume everything else is like gcc
+-    target_link_libraries(onnx_cpp2py_export
+-                          PRIVATE "-Wl,--whole-archive" $<TARGET_FILE:onnx>
+-                                  "-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)