66# - https://peps.python.org/pep-0517/
77# - https://setuptools.pypa.io/en/latest/build_meta.html#dynamic-build-dependencies-and-other-build-meta-tweaks
88# Specifically, there are 5 APIs required to create a proper build backend, see below.
9- #
10- # TODO: also implement PEP-660 API hooks
119
1210import functools
1311import glob
1917from setuptools import Extension
2018from setuptools import build_meta as _build_meta
2119
20+ prepare_metadata_for_build_editable = _build_meta .prepare_metadata_for_build_editable
2221prepare_metadata_for_build_wheel = _build_meta .prepare_metadata_for_build_wheel
2322build_sdist = _build_meta .build_sdist
2423get_requires_for_build_sdist = _build_meta .get_requires_for_build_sdist
@@ -57,10 +56,13 @@ def _get_proper_cuda_bindings_major_version() -> str:
5756_extensions = None
5857
5958
60- def build_wheel ( wheel_directory , config_settings = None , metadata_directory = None ):
61- # Customizing this hook is needed because we must defer cythonization until cuda-bindings,
59+ def _build_cuda_core ( ):
60+ # Customizing the build hooks is needed because we must defer cythonization until cuda-bindings,
6261 # now a required build-time dependency that's dynamically installed via the other hook below,
6362 # is installed. Otherwise, cimport any cuda.bindings modules would fail!
63+ #
64+ # This function populates "_extensions".
65+ global _extensions
6466
6567 # It seems setuptools' wildcard support has problems for namespace packages,
6668 # so we explicitly spell out all Extension instances.
@@ -94,8 +96,6 @@ def get_cuda_paths():
9496
9597 nthreads = int (os .environ .get ("CUDA_PYTHON_PARALLEL_LEVEL" , os .cpu_count () // 2 ))
9698 compile_time_env = {"CUDA_CORE_BUILD_MAJOR" : _get_proper_cuda_bindings_major_version ()}
97-
98- global _extensions
9999 _extensions = cythonize (
100100 ext_modules ,
101101 verbose = True ,
@@ -105,10 +105,27 @@ def get_cuda_paths():
105105 compile_time_env = compile_time_env ,
106106 )
107107
108+ return
109+
110+
111+ def build_editable (wheel_directory , config_settings = None , metadata_directory = None ):
112+ _build_cuda_core ()
113+ return _build_meta .build_editable (wheel_directory , config_settings , metadata_directory )
114+
115+
116+ def build_wheel (wheel_directory , config_settings = None , metadata_directory = None ):
117+ _build_cuda_core ()
108118 return _build_meta .build_wheel (wheel_directory , config_settings , metadata_directory )
109119
110120
111- def get_requires_for_build_wheel ( config_settings = None ):
121+ def _get_cuda_bindings_require ( ):
112122 cuda_major = _get_proper_cuda_bindings_major_version ()
113- cuda_bindings_require = [f"cuda-bindings=={ cuda_major } .*" ]
114- return _build_meta .get_requires_for_build_wheel (config_settings ) + cuda_bindings_require
123+ return [f"cuda-bindings=={ cuda_major } .*" ]
124+
125+
126+ def get_requires_for_build_editable (config_settings = None ):
127+ return _build_meta .get_requires_for_build_editable (config_settings ) + _get_cuda_bindings_require ()
128+
129+
130+ def get_requires_for_build_wheel (config_settings = None ):
131+ return _build_meta .get_requires_for_build_wheel (config_settings ) + _get_cuda_bindings_require ()
0 commit comments