Package: setuptools-cuda-cpp
Setuptools CUDA C++The setuptools-cuda-cpp is a module that extends setuptools functionality for building hybrid C++ and CUDA extensions
for Python wrapper modules.Table of ContentsSummaryFeaturesInstallationUsageIssuesLicenseAcknowledgementsSummaryThis project meant to be a soft solution to include mixed c++/CUDA extensions in your projects, no matter if you are
using old python version (3.6+) or old GPU drivers (sm/compute arch 3.0+).FeaturesPython version >= 3.6 .SM(StreamingMultiprocessor)/Compute architecture >= 3.0 .Cython compatible but not mandatory.Any CUDA version (since you can configure nvcc flags).Preloaded flags for cpp and CUDA compilers.Mixed compilations (.cpp and .cu files can be included in a single extension).Advanced find_cuda features (automatically try to find the CUDAHOME directory).Include NVIDIA Management Library (NVML) capabilities info.Installationpip install setuptools-cuda-cppUsageAdd the library to your project configuration files ("pyproject.toml" and/or "setup.py/.cfg").1. Example for "legacy build" (old python versions with setuptools < 61.0.0):setup.pyfrompathlibimportPathfromsetuptoolsimportsetupfromsetuptools_cuda_cppimportCUDAExtension,BuildExtension,fix_dllcuda_ext_path=Path('src/my_cuda_package/cuda_ext')cuda_ext=CUDAExtension(name='my_cuda_package.cuda_ext',include_dirs=[cuda_ext_path/'include'],sources=[cuda_ext_path/'cuda_ext.cu',cuda_ext_path/'cuda_ext_wrapper.cpp',],libraries=fix_dll(['cudart']),# Use fix_dll() only for Windows compatibility (check documentation for more info).extra_compile_args={'cxx':['-g'],# cpp compiler flags'nvcc':['-O2'],# nvcc flags},)setup(name='my-cuda-package',version='0.0.1',install_requires=['numpy',],extras_require={'cython':['cython'],},ext_modules=[cuda_ext],cmdclass={'build_ext':BuildExtension},)You can also use pyproject.toml withFlitmaking
acustom build-backend.2. Example for "pyproject.toml build" (with setuptools >= 61.0.0):pyproject.toml[build-system]requires=["setuptools-cuda-cpp","flit_core >=3.2,<4","wheel","cython"]build-backend="flit_core.buildapi"[project]name="my-cuda-package"dependencies=["numpy"]dynamic=["version","description"]# ...And configure the setup.py for the different extensions you want to use:setup.pyfrompathlibimportPathfromsetuptoolsimportsetupfromsetuptools_cuda_cppimportCUDAExtension,BuildExtension,fix_dllcuda_ext_path=Path('src/my_cuda_package/cuda_ext')cuda_ext=CUDAExtension(name='my_cuda_package.cuda_ext',include_dirs=[cuda_ext_path/'include'],sources=[cuda_ext_path/'cuda_ext.cu',cuda_ext_path/'cuda_ext_wrapper.cpp',],libraries=fix_dll(['cudart']),# Use fix_dll() only for Windows compatibility (check documentation for more info).extra_compile_args={'cxx':['-g'],# cpp compiler flags'nvcc':['-O2'],# nvcc flags},)setup(ext_modules=[cuda_ext],cmdclass={'build_ext':BuildExtension},)IssuesIf you receive a EnvironmentError exception you should set CUDAHOME environment variable pointing to the CUDA
installation path. This would happen if the find_cuda() method is not capable of locate it.
As reference the directory should contain:CUDAHOME
├── bin
│   └── nvcc
├── include
│   └── cudart.h
├── lib
└── nvmlLicensesetuptools-cuda-cppis distributed under the terms of theMITlicense.AcknowledgementsThe package is based oncpp_extension, but it also includes:Support for deprecated older architectures (from sm / compute 3.0).Improved find_cuda system.Pathlib library and Windows missing dll support.