|
|
|
|
|
|
| import glob
|
| import os
|
| from setuptools import find_packages, setup
|
| import torch
|
| from torch.utils.cpp_extension import CUDA_HOME, CppExtension, CUDAExtension
|
|
|
|
|
| def get_extensions():
|
| this_dir = os.path.dirname(os.path.abspath(__file__))
|
| extensions_dir = os.path.join(this_dir, "tensormask", "layers", "csrc")
|
|
|
| main_source = os.path.join(extensions_dir, "vision.cpp")
|
| sources = glob.glob(os.path.join(extensions_dir, "**", "*.cpp"))
|
| source_cuda = glob.glob(os.path.join(extensions_dir, "**", "*.cu")) + glob.glob(
|
| os.path.join(extensions_dir, "*.cu")
|
| )
|
|
|
| sources = [main_source] + sources
|
|
|
| extension = CppExtension
|
|
|
| extra_compile_args = {"cxx": []}
|
| define_macros = []
|
|
|
| if (torch.cuda.is_available() and CUDA_HOME is not None) or os.getenv("FORCE_CUDA", "0") == "1":
|
| extension = CUDAExtension
|
| sources += source_cuda
|
| define_macros += [("WITH_CUDA", None)]
|
| extra_compile_args["nvcc"] = [
|
| "-DCUDA_HAS_FP16=1",
|
| "-D__CUDA_NO_HALF_OPERATORS__",
|
| "-D__CUDA_NO_HALF_CONVERSIONS__",
|
| "-D__CUDA_NO_HALF2_OPERATORS__",
|
| ]
|
|
|
|
|
| CC = os.environ.get("CC", None)
|
| if CC is not None:
|
| extra_compile_args["nvcc"].append("-ccbin={}".format(CC))
|
|
|
| sources = [os.path.join(extensions_dir, s) for s in sources]
|
|
|
| include_dirs = [extensions_dir]
|
|
|
| ext_modules = [
|
| extension(
|
| "tensormask._C",
|
| sources,
|
| include_dirs=include_dirs,
|
| define_macros=define_macros,
|
| extra_compile_args=extra_compile_args,
|
| )
|
| ]
|
|
|
| return ext_modules
|
|
|
|
|
| setup(
|
| name="tensormask",
|
| version="0.1",
|
| author="FAIR",
|
| packages=find_packages(exclude=("configs", "tests")),
|
| python_requires=">=3.6",
|
| ext_modules=get_extensions(),
|
| cmdclass={"build_ext": torch.utils.cpp_extension.BuildExtension},
|
| )
|
|
|