| import os |
| import sys |
| |
| from setuptools import setup |
| |
| import torch.cuda |
| from torch.testing._internal.common_utils import IS_WINDOWS |
| from torch.utils.cpp_extension import ( |
| BuildExtension, |
| CppExtension, |
| CUDA_HOME, |
| CUDAExtension, |
| ROCM_HOME, |
| ) |
| |
| |
| 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.maia", |
| ["maia_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)}, |
| entry_points={ |
| "torch.backends": [ |
| "device_backend = torch_test_cpp_extension:_autoload", |
| ], |
| }, |
| ) |