1from setuptools import setup, find_packages
2from setuptools.command.build_ext import build_ext
3from setuptools import Extension
4import os
5import sys
6import subprocess
8class CMakeExtension(Extension):
9 def __init__(self, name, sourcedir=""):
10 Extension.__init__(self, name, sources=[])
11 self.sourcedir = os.path.abspath(sourcedir)
13class CMakeBuild(build_ext):
14 def build_extension(self, ext):
15 extdir = os.path.abspath(os.path.dirname(self.get_ext_fullpath(ext.name)))
17 cmake_args = [
18 f"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY={extdir}",
19 f"-DPYTHON_EXECUTABLE={sys.executable}"
20 ]
22 build_args = []
24 if not os.path.exists(self.build_temp):
25 os.makedirs(self.build_temp)
27 subprocess.check_call(["cmake", ext.sourcedir] + cmake_args, cwd=self.build_temp)
28 subprocess.check_call(["cmake", "--build", "."] + build_args, cwd=self.build_temp)
30setup(
31 name="benchcompress",
32 version="0.1.0",
33 packages=find_packages(where="src"),
34 package_dir={"": "src"},
35 ext_modules=[
36 CMakeExtension("benchcompress.algorithms.ans.markov_reconstruct_cpp_ext",
37 sourcedir="src/benchcompress/algorithms/ans"),
38 CMakeExtension("benchcompress.algorithms.ans.markov_predict_cpp_ext",
39 sourcedir="src/benchcompress/algorithms/ans"),
40 CMakeExtension("benchcompress.algorithms.ans.get_run_lengths_cpp_ext",
41 sourcedir="src/benchcompress/algorithms/ans")
42 ],
43 cmdclass={
44 "build_ext": CMakeBuild,
45 },
46 python_requires=">=3.8",
47 entry_points={
48 "console_scripts": [
49 "benchcompress=benchcompress.cli:main",
50 ],
51 },
52 author="Jeremy Magland",
53 description="Benchmarking compression methods for scientific data arrays",
54 long_description=open("README.md").read(),
55 long_description_content_type="text/markdown",
56 keywords="compression, signal processing",
57 classifiers=[
58 "Development Status :: 3 - Alpha",
59 "Intended Audience :: Science/Research",
60 "Programming Language :: Python :: 3",
61 "Programming Language :: Python :: 3.8",
62 "Programming Language :: Python :: 3.9",
63 "Programming Language :: Python :: 3.10",
64 "Programming Language :: Python :: 3.11"
65 ],
66)