summaryrefslogtreecommitdiff
path: root/setup.py
diff options
context:
space:
mode:
Diffstat (limited to 'setup.py')
-rw-r--r--setup.py40
1 files changed, 40 insertions, 0 deletions
diff --git a/setup.py b/setup.py
new file mode 100644
index 0000000..b6e3626
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,40 @@
+import os
+import pathlib
+
+from setuptools import setup
+from setuptools import Extension
+from setuptools.command.build_ext import build_ext
+
+
+class CMakeExtension(Extension):
+ def __init__(self, name):
+ super().__init__(name, sources=[])
+
+
+class CMakeBuild(build_ext):
+ def run(self):
+ for ext in self.extensions:
+ self.build_cmake(ext)
+ super().run()
+
+ def build_cmake(self, ext):
+ cwd = pathlib.Path().absolute()
+ build_temp = pathlib.Path(self.build_temp)
+ extdir = pathlib.Path(self.get_ext_fullpath(ext.name))
+ for dir in (build_temp, extdir):
+ dir.mkdir(parents=True, exist_ok=True)
+ cmake_args = [
+ f"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY={extdir.parent.absolute()}",
+ ]
+ os.chdir(str(build_temp))
+ self.spawn(["cmake", str(cwd)] + cmake_args)
+ if not self.dry_run:
+ self.spawn(["cmake", "--build", "."])
+ os.chdir(str(cwd))
+
+
+setup(
+ name="hwd",
+ ext_modules=[CMakeExtension("hwd")],
+ cmdclass={"build_ext": CMakeBuild},
+)