import os import sys import platform import subprocess from setuptools import setup, find_packages, Extension from setuptools.command.build_ext import build_ext class CMakeExtension(Extension): def __init__(self, name, sourcedir=""): Extension.__init__(self, name, sources=[]) self.sourcedir = os.path.abspath(sourcedir) class CMakeBuild(build_ext): def build_extension(self, ext): extdir = os.path.abspath(os.path.dirname(self.get_ext_fullpath(ext.name))) cmake_args = [ f"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY={extdir}", f"-DPYTHON_EXECUTABLE={sys.executable}", f"-DPython3_EXECUTABLE={sys.executable}", ] cfg = "Debug" if self.debug else "Release" build_args = ["--config", cfg] if platform.system() == "Windows": cmake_args += [ f"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY_{cfg.upper()}={extdir}", "-A", "x64" ] else: cmake_args += [f"-DCMAKE_BUILD_TYPE={cfg}"] build_args += ["--", f"-j{os.cpu_count() or 4}"] build_temp = os.path.join(self.build_temp, ext.name) os.makedirs(build_temp, exist_ok=True) subprocess.check_call(["cmake", ext.sourcedir] + cmake_args, cwd=build_temp) subprocess.check_call(["cmake", "--build", "."] + build_args, cwd=build_temp) setup( name="cudaslicer", version="1.0.0", package_dir={"": "python"}, packages=find_packages(where="python"), ext_modules=[CMakeExtension("cudaslicer._cudaslicer_backend")], cmdclass={"build_ext": CMakeBuild}, )