| import sys |
| import torch.cuda |
| import os |
| from setuptools import setup |
| from torch.utils.cpp_extension import BuildExtension, CppExtension, CUDAExtension |
| from torch.utils.cpp_extension import CUDA_HOME, ROCM_HOME |
| from torch.testing._internal.common_utils import IS_WINDOWS |
| |
| if sys.platform == 'win32': |
| vc_version = os.getenv('VCToolsVersion', '') |
| if vc_version.startswith('14.16.'): |
| CXX_FLAGS = ['/sdl'] |
| else: |
| CXX_FLAGS = ['/sdl', '/permissive-'] |
| else: |
| CXX_FLAGS = ['-g'] |
| |
| USE_NINJA = os.getenv('USE_NINJA') == '1' |
| |
| ext_modules = [ |
| CppExtension( |
| 'torch_test_cpp_extension.cpp', ['extension.cpp'], |
| extra_compile_args=CXX_FLAGS), |
| CppExtension( |
| 'torch_test_cpp_extension.ort', ['ort_extension.cpp'], |
| extra_compile_args=CXX_FLAGS), |
| CppExtension( |
| 'torch_test_cpp_extension.rng', ['rng_extension.cpp'], |
| extra_compile_args=CXX_FLAGS), |
| ] |
| |
| if torch.cuda.is_available() and (CUDA_HOME is not None or ROCM_HOME is not None): |
| extension = CUDAExtension( |
| 'torch_test_cpp_extension.cuda', [ |
| 'cuda_extension.cpp', |
| 'cuda_extension_kernel.cu', |
| 'cuda_extension_kernel2.cu', |
| ], |
| extra_compile_args={'cxx': CXX_FLAGS, |
| 'nvcc': ['-O2']}) |
| ext_modules.append(extension) |
| |
| if torch.cuda.is_available() and (CUDA_HOME is not None or ROCM_HOME is not None): |
| extension = CUDAExtension( |
| 'torch_test_cpp_extension.torch_library', [ |
| 'torch_library.cu' |
| ], |
| extra_compile_args={'cxx': CXX_FLAGS, |
| 'nvcc': ['-O2']}) |
| ext_modules.append(extension) |
| |
| if torch.backends.mps.is_available(): |
| extension = CppExtension( |
| 'torch_test_cpp_extension.mps', |
| ['mps_extension.mm'], |
| extra_compile_args=CXX_FLAGS, |
| ) |
| ext_modules.append(extension) |
| |
| # todo(mkozuki): Figure out the root cause |
| if (not IS_WINDOWS) and torch.cuda.is_available() and CUDA_HOME is not None: |
| # malfet: One should not assume that PyTorch re-exports CUDA dependencies |
| cublas_extension = CUDAExtension( |
| name='torch_test_cpp_extension.cublas_extension', |
| sources=['cublas_extension.cpp'], |
| libraries=['cublas'] if torch.version.hip is None else [], |
| ) |
| ext_modules.append(cublas_extension) |
| |
| cusolver_extension = CUDAExtension( |
| name='torch_test_cpp_extension.cusolver_extension', |
| sources=['cusolver_extension.cpp'], |
| libraries=['cusolver'] if torch.version.hip is None else [], |
| ) |
| ext_modules.append(cusolver_extension) |
| |
| if USE_NINJA and (not IS_WINDOWS) and torch.cuda.is_available() and CUDA_HOME is not None: |
| extension = CUDAExtension( |
| name='torch_test_cpp_extension.cuda_dlink', |
| sources=[ |
| 'cuda_dlink_extension.cpp', |
| 'cuda_dlink_extension_kernel.cu', |
| 'cuda_dlink_extension_add.cu', |
| ], |
| dlink=True, |
| extra_compile_args={'cxx': CXX_FLAGS, |
| 'nvcc': ['-O2', '-dc']}) |
| ext_modules.append(extension) |
| |
| setup( |
| name='torch_test_cpp_extension', |
| packages=['torch_test_cpp_extension'], |
| ext_modules=ext_modules, |
| include_dirs='self_compiler_include_dirs_test', |
| cmdclass={'build_ext': BuildExtension.with_options(use_ninja=USE_NINJA)}) |