| |
| |
|
|
| 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}, |
| ) |
|
|