47 lines
1.6 KiB
Python
47 lines
1.6 KiB
Python
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},
|
|
)
|