Skip to content

Commit 8ddbb42

Browse files
authored
fix editable installation (#1091)
1 parent 6ae4cfa commit 8ddbb42

File tree

1 file changed

+26
-9
lines changed

1 file changed

+26
-9
lines changed

cuda_core/build_hooks.py

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
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

1210
import functools
1311
import glob
@@ -19,6 +17,7 @@
1917
from setuptools import Extension
2018
from setuptools import build_meta as _build_meta
2119

20+
prepare_metadata_for_build_editable = _build_meta.prepare_metadata_for_build_editable
2221
prepare_metadata_for_build_wheel = _build_meta.prepare_metadata_for_build_wheel
2322
build_sdist = _build_meta.build_sdist
2423
get_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

Comments
 (0)