From 595cc594b65ffe4a55c8b8d53a91a841cf056103 Mon Sep 17 00:00:00 2001 From: David Elsing Date: Sun, 4 Aug 2024 22:15:54 +0000 Subject: [PATCH] gnu: onnx: Update to 1.16.2. * gnu/packages/machine-learning.scm (onnx): Update to 1.16.2. [source]: Remove patch. [build-system]: Move to pyproject-build-system. [arguments]<#:tests?>: Disable for systems where python-nbval is not supported. <#:phases>: Remove 'relax-requirements' phase. Pass "-DONNX_BUILD_TESTS" to CMake depending on tests?. [native-inputs]: Add python-fb-re2 and python-parameterized-next. Remove python-nbval on unsupported systems. * gnu/packages/patches/onnx-shared-libraries.patch: Adjust patch. * gnu/packages/patches/onnx-skip-model-downloads.patch: Adjust patch. * gnu/packages/patches/onnx-use-system-googletest.patch: Remove file. * gnu/local.mk (dist_patch_DATA): Remove it. Co-authored-by: Andy Tai --- gnu/local.mk | 1 - gnu/packages/machine-learning.scm | 133 ++++++++++-------- .../patches/onnx-shared-libraries.patch | 18 ++- .../patches/onnx-skip-model-downloads.patch | 16 +-- .../patches/onnx-use-system-googletest.patch | 57 -------- 5 files changed, 94 insertions(+), 131 deletions(-) delete mode 100644 gnu/packages/patches/onnx-use-system-googletest.patch diff --git a/gnu/local.mk b/gnu/local.mk index e709033c23..cf42e2b6da 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1821,7 +1821,6 @@ dist_patch_DATA = \ %D%/packages/patches/onionshare-cli-async-mode.patch \ %D%/packages/patches/online-judge-tools.patch \ %D%/packages/patches/onnx-optimizer-system-library.patch \ - %D%/packages/patches/onnx-use-system-googletest.patch \ %D%/packages/patches/onnx-1.13.1-use-system-googletest.patch \ %D%/packages/patches/onnx-shared-libraries.patch \ %D%/packages/patches/onnx-skip-model-downloads.patch \ diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learning.scm index c3c5882932..342289143f 100644 --- a/gnu/packages/machine-learning.scm +++ b/gnu/packages/machine-learning.scm @@ -28,6 +28,7 @@ ;;; Copyright © 2024 Timothee Mathieu ;;; Copyright © 2024 Spencer King ;;; Copyright © 2024 David Elsing +;;; Copyright © 2024 Andy Tai ;;; ;;; This file is part of GNU Guix. ;;; @@ -1331,7 +1332,7 @@ (define (delete-ifdefs file) (define-public onnx (package (name "onnx") - (version "1.12.0") + (version "1.16.2") (source (origin (method git-fetch) (uri (git-reference @@ -1339,70 +1340,88 @@ (define-public onnx (commit (string-append "v" version)))) (sha256 (base32 - "1g9f1hviksbn7gi6fnd0dsm7nf0w3yia0mjj33d9mggklrl0db6x")) + "0f5h204ksfz4ir3qq38ckxja1jfhf1vn5xzwrj83vkkbfjq6fv16")) (file-name (git-file-name name version)) - (patches (search-patches "onnx-use-system-googletest.patch" - "onnx-shared-libraries.patch" - "onnx-skip-model-downloads.patch")) + (patches (search-patches + "onnx-shared-libraries.patch" + "onnx-skip-model-downloads.patch")) (modules '((guix build utils))) (snippet '(delete-file-recursively "third_party")))) - (build-system python-build-system) + (build-system pyproject-build-system) (arguments - '(#:phases (modify-phases %standard-phases - (add-after 'unpack 'relax-requirements - (lambda _ - ;; Does this difference really matter? - (substitute* "requirements.txt" - (("3.20.1") "3.20.2")))) - (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")) + (list + ;; python-nbval depends transitively on Rust. + #:tests? + (->bool (member (or (%current-target-system) + (%current-system)) + (package-transitive-supported-systems python-nbval))) + #:phases + #~(modify-phases %standard-phases + (add-before 'build 'pass-cmake-arguments + (lambda* (#:key outputs tests? #:allow-other-keys) + ;; For derived package use + (substitute* "CMakeLists.txt" + (("set\\(ONNX_ROOT.*") + (string-append "set(ONNX_ROOT "#$(package-source this-package) ")\n")) + (("\\$\\{ROOT_DIR\\}(/tools.*)" _ rest) + (string-append "${PROJECT_SOURCE_DIR}" rest))) + ;; 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" + (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" + (string-append "-DONNX_BUILD_TESTS=" + (if tests? "ON" "OFF")) + "-DBUILD_SHARED_LIBS=ON" + "-DONNX_USE_PROTOBUF_SHARED_LIBS=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 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-before 'check 'make-test-directory-writable - (lambda _ - ;; Make things writable for tests. - (setenv "HOME" (getcwd)) - (for-each make-file-writable - (find-files "onnx/examples" "." - #:directories? #t)))) - (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")))))) + ;; This one is honored by 'setup.py' and passed to 'make + ;; -j'. + (setenv "MAX_JOBS" + (number->string (parallel-job-count))))) + (add-before 'check 'make-test-directory-writable + (lambda _ + ;; Make things writable for tests. + (setenv "HOME" (getcwd)) + (for-each make-file-writable + (find-files "onnx/examples" "." + #:directories? #t)))) + (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 - (list cmake - googletest - pybind11 - python-coverage - python-nbval - python-pytest - python-pytest-runner)) + (append + (list cmake-minimal + googletest + pybind11 + python-coverage + python-fb-re2 + python-parameterized-next + python-pytest + python-pytest-runner) + (filter + (lambda (pkg) + (member (or (%current-target-system) + (%current-system)) + (package-transitive-supported-systems pkg))) + (list python-nbval)))) (inputs (list protobuf)) (propagated-inputs diff --git a/gnu/packages/patches/onnx-shared-libraries.patch b/gnu/packages/patches/onnx-shared-libraries.patch index 00583b35da..5a3fd658d0 100644 --- a/gnu/packages/patches/onnx-shared-libraries.patch +++ b/gnu/packages/patches/onnx-shared-libraries.patch @@ -1,13 +1,12 @@ -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'. +These linker options for the 'onnx_cpp2py_export.cpython-310-*-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 +index b666eec4..1525b219 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt -@@ -475,11 +475,10 @@ if(BUILD_ONNX_PYTHON) +@@ -585,16 +585,15 @@ if(BUILD_ONNX_PYTHON) PRIVATE $) else() # Assume everything else is like gcc @@ -15,10 +14,15 @@ index cede3073..52f846ed 100644 - PRIVATE "-Wl,--whole-archive" $ - "-Wl,--no-whole-archive") + target_link_libraries(onnx_cpp2py_export PRIVATE onnx) + # Prevent "undefined symbol: _ZNSt10filesystem7__cxx114path14_M_split_cmptsEv" + # (std::filesystem::__cxx11::path::_M_split_cmpts()) on gcc 8 + if (CMAKE_CXX_STANDARD EQUAL 17 AND CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.0) + target_link_libraries(onnx_cpp2py_export PRIVATE "-lstdc++fs") + endif() set_target_properties(onnx_cpp2py_export - PROPERTIES LINK_FLAGS "-Wl,--exclude-libs,ALL") + PROPERTIES LINK_FLAGS -+ "-Wl,-rpath=${CMAKE_INSTALL_PREFIX}/lib") ++ "-Wl,-rpath=${CMAKE_INSTALL_PREFIX}/lib") endif() target_link_libraries(onnx_cpp2py_export PRIVATE onnx) diff --git a/gnu/packages/patches/onnx-skip-model-downloads.patch b/gnu/packages/patches/onnx-skip-model-downloads.patch index 4ab55b4ceb..55925a3ebf 100644 --- a/gnu/packages/patches/onnx-skip-model-downloads.patch +++ b/gnu/packages/patches/onnx-skip-model-downloads.patch @@ -1,16 +1,14 @@ -A few tests require downloading models from URLs such as - . -Skip those. +A few tests require downloading models. Skip those. diff --git a/onnx/backend/test/runner/__init__.py b/onnx/backend/test/runner/__init__.py -index 049ed57b..f236f1bf 100644 +index 5b60e7c0..838c7ba5 100644 --- a/onnx/backend/test/runner/__init__.py +++ b/onnx/backend/test/runner/__init__.py -@@ -202,6 +202,7 @@ class Runner(object): - print('Start downloading model {} from {}'.format( - model_test.model_name, - model_test.url)) +@@ -236,6 +236,7 @@ class Runner: + print( + f"Start downloading model {model_test.model_name} from {model_test.url}" + ) + raise unittest.SkipTest('Skipping download') urlretrieve(model_test.url, download_file.name) - print('Done') + print("Done") with tarfile.open(download_file.name) as t: diff --git a/gnu/packages/patches/onnx-use-system-googletest.patch b/gnu/packages/patches/onnx-use-system-googletest.patch deleted file mode 100644 index 5dfcbc6dc3..0000000000 --- a/gnu/packages/patches/onnx-use-system-googletest.patch +++ /dev/null @@ -1,57 +0,0 @@ -ONNX will build googletest from a Git checkout. Patch CMake to use our -googletest package and enable tests by default. - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 0aa9fda2..a573170c 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -22,7 +22,7 @@ option(BUILD_ONNX_PYTHON "Build Python binaries" OFF) - option(ONNX_GEN_PB_TYPE_STUBS "Generate protobuf python type stubs" ON) - option(ONNX_WERROR "Build with Werror" OFF) - option(ONNX_COVERAGE "Build with coverage instrumentation" OFF) --option(ONNX_BUILD_TESTS "Build ONNX C++ APIs Tests" OFF) -+option(ONNX_BUILD_TESTS "Build ONNX C++ APIs Tests" ON) - option(ONNX_USE_LITE_PROTO "Use lite protobuf instead of full." OFF) - option(ONNXIFI_ENABLE_EXT "Enable onnxifi extensions." OFF) - if(NOT DEFINED ONNX_ML) -@@ -82,8 +82,10 @@ if(CMAKE_SYSTEM_NAME STREQUAL "AIX") - endif() - - if(ONNX_BUILD_TESTS) -- list(APPEND CMAKE_MODULE_PATH ${ONNX_ROOT}/cmake/external) -- include(googletest) -+ find_package(GTest REQUIRED) -+ if(NOT GTest_FOUND) -+ message(FATAL_ERROR "cannot find googletest") -+ endif() - endif() - - if((ONNX_USE_LITE_PROTO AND TARGET protobuf::libprotobuf-lite) OR ((NOT ONNX_USE_LITE_PROTO) AND TARGET protobuf::libprotobuf)) -diff --git a/cmake/unittest.cmake b/cmake/unittest.cmake -index e29a93ff..ae146390 100644 ---- a/cmake/unittest.cmake -+++ b/cmake/unittest.cmake -@@ -6,8 +6,8 @@ include(${ONNX_ROOT}/cmake/Utils.cmake) - - find_package(Threads) - --set(${UT_NAME}_libs ${googletest_STATIC_LIBRARIES}) --set(${ONNXIFI_TEST_DRIVER}_libs ${googletest_STATIC_LIBRARIES}) -+set(${UT_NAME}_libs ${GTEST_LIBRARIES}) -+set(${ONNXIFI_TEST_DRIVER}_libs ${GTEST_LIBRARIES}) - - list(APPEND ${UT_NAME}_libs onnx) - list(APPEND ${UT_NAME}_libs onnx_proto) -@@ -31,10 +31,10 @@ function(AddTest) - list(REMOVE_DUPLICATES _UT_SOURCES) - - add_executable(${_UT_TARGET} ${_UT_SOURCES}) -- add_dependencies(${_UT_TARGET} onnx onnx_proto googletest) -+ add_dependencies(${_UT_TARGET} onnx onnx_proto) - - target_include_directories(${_UT_TARGET} -- PUBLIC ${googletest_INCLUDE_DIRS} -+ PUBLIC ${GTEST_INCLUDE_DIRS} - ${ONNX_INCLUDE_DIRS} - ${PROTOBUF_INCLUDE_DIRS} - ${ONNX_ROOT}