diff options
Diffstat (limited to 'setup.py')
-rw-r--r-- | setup.py | 40 |
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}, +) |