# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # pylint: disable=invalid-name, exec-used """Setup TOPI package.""" from __future__ import absolute_import import os import shutil import sys from setuptools import find_packages from setuptools.dist import Distribution if "--inplace" in sys.argv: from distutils.core import setup from distutils.extension import Extension else: from setuptools import setup from setuptools.extension import Extension CURRENT_DIR = os.path.dirname(__file__) def get_lib_names(): if sys.platform.startswith('win32'): return ['libtvm_topi.dll', 'tvm_topi.dll'] if sys.platform.startswith('darwin'): return ['libtvm_topi.dylib', 'tvm_topi.dylib'] return ['libtvm_topi.so', 'tvm_topi.so'] def get_lib_path(): """Get library path, name and version""" # We can not import `libinfo.py` in setup.py directly since __init__.py # Will be invoked which introduces dependences libinfo_py = os.path.join(CURRENT_DIR, '../../python/tvm/_ffi/libinfo.py') libinfo = {'__file__': libinfo_py} exec(compile(open(libinfo_py, "rb").read(), libinfo_py, 'exec'), libinfo, libinfo) version = libinfo['__version__'] if not os.getenv('CONDA_BUILD'): lib_path = libinfo['find_lib_path'](get_lib_names()) libs = [lib_path[0]] if libs[0].find("runtime") == -1: for name in lib_path[1:]: if name.find("runtime") != -1: libs.append(name) break else: libs = None return libs, version LIB_LIST, __version__ = get_lib_path() if not os.getenv('CONDA_BUILD'): curr_path = os.path.dirname(os.path.abspath(os.path.expanduser(__file__))) for i, path in enumerate(LIB_LIST): LIB_LIST[i] = os.path.relpath(path, curr_path) setup_kwargs = { "include_package_data": True, "data_files": [('topi', LIB_LIST)] } else: setup_kwargs = {} include_libs = False wheel_include_libs = False if not os.getenv('CONDA_BUILD'): if "bdist_wheel" in sys.argv: wheel_include_libs = True else: include_libs = True # For bdist_wheel only if wheel_include_libs: with open("MANIFEST.in", "w") as fo: for path in LIB_LIST: shutil.copy(path, os.path.join(CURRENT_DIR, 'topi')) _, libname = os.path.split(path) fo.write("include topi/%s\n" % libname) setup_kwargs = { "include_package_data": True } if include_libs: curr_path = os.path.dirname(os.path.abspath(os.path.expanduser(__file__))) for i, path in enumerate(LIB_LIST): LIB_LIST[i] = os.path.relpath(path, curr_path) setup_kwargs = { "include_package_data": True, "data_files": [('topi', LIB_LIST)] } setup(name='topi', version=__version__, description="TOPI: TVM operator index", install_requires=[ "numpy", "decorator", ], packages=find_packages(), url='https://github.com/apache/incubator-tvm', **setup_kwargs) if wheel_include_libs: # Wheel cleanup os.remove("MANIFEST.in") for path in LIB_LIST: _, libname = os.path.split(path) os.remove("topi/%s" % libname)