spack/var/spack/repos/builtin/packages/py-onnx-runtime/package.py
iarspider 8ebad6963b
New package: py-onnxmltools and dependencies (#28023)
* New package: py-onnxmltools and dependencies

* Small fix

* Changes from review

* Apply suggestions from code review

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>

* Update recipe following review

Co-authored-by: Adam J. Stewart <ajstewart426@gmail.com>
2021-12-21 11:15:13 -06:00

122 lines
5.1 KiB
Python

# Copyright 2013-2021 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack import *
class PyOnnxRuntime(CMakePackage, PythonPackage):
"""ONNX Runtime is a performance-focused complete scoring
engine for Open Neural Network Exchange (ONNX) models, with
an open extensible architecture to continually address the
latest developments in AI and Deep Learning. ONNX Runtime
stays up to date with the ONNX standard with complete
implementation of all ONNX operators, and supports all
ONNX releases (1.2+) with both future and backwards
compatibility."""
homepage = "https://github.com/microsoft/onnxruntime"
git = "https://github.com/microsoft/onnxruntime.git"
version('1.7.2', tag='v1.7.2', submodules=True)
variant('cuda', default=False, description='Build with CUDA support')
depends_on('cmake@3.1:', type='build')
depends_on('ninja', type='build')
depends_on('python', type=('build', 'run'))
depends_on('protobuf')
depends_on('py-protobuf', type=('build', 'run'))
depends_on('py-setuptools', type='build')
depends_on('py-numpy@1.16.6:', type=('build', 'run'))
depends_on('py-wheel', type='build')
depends_on('py-onnx', type=('build', 'run'))
depends_on('zlib')
depends_on('libpng')
depends_on('py-pybind11', type='build')
depends_on('cuda', when='+cuda')
depends_on('cudnn', when='+cuda')
depends_on('iconv', type=('build', 'link', 'run'))
depends_on('re2+shared')
extends('python')
# Adopted from CMS experiment's fork of onnxruntime
# https://github.com/cms-externals/onnxruntime/compare/5bc92df...d594f80
patch('cms.patch', level=1, when='@1.7.2')
# https://github.com/microsoft/onnxruntime/issues/4234#issuecomment-698077636
patch('libiconv.patch', level=0, when='@1.7.2')
# https://github.com/microsoft/onnxruntime/commit/de4089f8cbe0baffe56a363cc3a41595cc8f0809.patch
patch('gcc11.patch', level=1, when='@1.7.2')
dynamic_cpu_arch_values = ('NOAVX', 'AVX', 'AVX2', 'AVX512')
variant('dynamic_cpu_arch', default='AVX512',
values=dynamic_cpu_arch_values, multi=False,
description='AVX support level')
generator = 'Ninja'
root_cmakelists_dir = 'cmake'
def setup_build_environment(self, env):
value = self.spec.variants['dynamic_cpu_arch'].value
value = self.dynamic_cpu_arch_values.index(value)
env.set('MLAS_DYNAMIC_CPU_ARCH', str(value))
def setup_run_environment(self, env):
value = self.spec.variants['dynamic_cpu_arch'].value
value = self.dynamic_cpu_arch_values.index(value)
env.set('MLAS_DYNAMIC_CPU_ARCH', str(value))
def cmake_args(self):
define = self.define
define_from_variant = self.define_from_variant
args = [define('onnxruntime_ENABLE_PYTHON', True),
define('onnxruntime_BUILD_SHARED_LIB', True),
define_from_variant('onnxruntime_USE_CUDA', 'cuda'),
define('onnxruntime_BUILD_CSHARP', False),
define('onnxruntime_USE_EIGEN_FOR_BLAS', True),
define('onnxruntime_USE_OPENBLAS', False),
define("onnxruntime_USE_MKLML", False),
define("onnxruntime_USE_NGRAPH", False),
define("onnxruntime_USE_OPENMP", False),
define("onnxruntime_USE_TVM", False),
define("onnxruntime_USE_LLVM", False),
define("onnxruntime_ENABLE_MICROSOFT_INTERNAL", False),
define("onnxruntime_USE_BRAINSLICE", False),
define("onnxruntime_USE_NUPHAR", False),
define("onnxruntime_USE_TENSORRT", False),
define("onnxruntime_CROSS_COMPILING", False),
define("onnxruntime_USE_FULL_PROTOBUF", True),
define("onnxruntime_DISABLE_CONTRIB_OPS", False),
define("onnxruntime_USE_PREINSTALLED_PROTOBUF", True),
define("onnxruntime_PREFER_SYSTEM_LIB", True)]
if self.spec.satisfies('+cuda'):
args.extend((
define('onnxruntime_CUDA_VERSION', str(self.spec['cuda'].version)),
define('onnxruntime_CUDA_HOME', self.spec['cuda'].prefix),
define('onnxruntime_CUDNN_HOME', self.spec['cudnn'].prefix),
define('CMAKE_CUDA_FLAGS', '-cudart shared'),
define('CMAKE_CUDA_RUNTIME_LIBRARY', 'Shared'),
define('DCMAKE_TRY_COMPILE_PLATFORM_VARIABLES',
'CMAKE_CUDA_RUNTIME_LIBRARY')
))
return args
def setup_file(self):
return join_path(self.stage.source_path, 'setup.py')
@run_after('build')
def build_python(self):
"""Build everything needed to install."""
with working_dir(self.stage.source_path):
PythonPackage.build(self, self.spec, self.prefix)
@run_after('install')
def install_python(self):
with working_dir(self.stage.source_path):
PythonPackage.install(self, self.spec, self.prefix)