diff --git a/.gitmodules b/.gitmodules index 6e6650ca..a53e5493 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,15 +1,7 @@ -[submodule "pybind11"] - path = gitmodules/pybind11 - url = https://github.com/pybind/pybind11 - shallow = true [submodule "partmc"] path = gitmodules/partmc url = https://github.com/compdyn/partmc shallow = true -[submodule "pybind11_json"] - path = gitmodules/pybind11_json - url = https://github.com/pybind/pybind11_json - shallow = true [submodule "json"] path = gitmodules/json url = https://github.com/nlohmann/json @@ -58,3 +50,9 @@ path = gitmodules/hdf5 url = https://github.com/HDFGroup/hdf5.git shallow = true +[submodule "gitmodules/nanobind"] + path = gitmodules/nanobind + url = https://github.com/wjakob/nanobind +[submodule "gitmodules/nanobind_json"] + path = gitmodules/nanobind_json + url = https://github.com/ianhbell/nanobind_json diff --git a/gitmodules/nanobind b/gitmodules/nanobind new file mode 160000 index 00000000..d4b245ad --- /dev/null +++ b/gitmodules/nanobind @@ -0,0 +1 @@ +Subproject commit d4b245ad69f729c3d2095be4c1cb5b94810dae26 diff --git a/gitmodules/nanobind_json b/gitmodules/nanobind_json new file mode 160000 index 00000000..e1953530 --- /dev/null +++ b/gitmodules/nanobind_json @@ -0,0 +1 @@ +Subproject commit e1953530697f61cbca9dc9b4f51561ea785cb09d diff --git a/gitmodules/pybind11 b/gitmodules/pybind11 deleted file mode 160000 index 68a0b2df..00000000 --- a/gitmodules/pybind11 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 68a0b2dfd8cb3f5ac1846f22b6a8d0d539cb493c diff --git a/gitmodules/pybind11_json b/gitmodules/pybind11_json deleted file mode 160000 index 32043f43..00000000 --- a/gitmodules/pybind11_json +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 32043f433ed987b2c2ce99d689ec337bcbd4ba95 diff --git a/setup.py b/setup.py deleted file mode 100644 index 1816070a..00000000 --- a/setup.py +++ /dev/null @@ -1,158 +0,0 @@ -#################################################################################################### -# This file is a part of PyPartMC licensed under the GNU General Public License v3 (LICENSE file) # -# Copyright (C) 2022 University of Illinois Urbana-Champaign # -# Authors: https://github.com/open-atmos/PyPartMC/graphs/contributors # -#################################################################################################### - -import os -import re -import subprocess -import sys -from pathlib import Path - -from setuptools import Extension, find_packages, setup -from setuptools.command.build_ext import build_ext - -# Convert distutils Windows platform specifiers to CMake -A arguments -PLAT_TO_CMAKE = { - "win32": "Win32", - "win-amd64": "x64", - "win-arm32": "ARM", - "win-arm64": "ARM64", -} - - -# A CMakeExtension needs a sourcedir instead of a file list. -# The name must be the _single_ output extension from the CMake build. -# If you need multiple extensions, see scikit-build. -class CMakeExtension(Extension): # pylint: disable=too-few-public-methods - 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): # pylint: disable=too-many-branches - extdir = os.path.abspath(os.path.dirname(self.get_ext_fullpath(ext.name))) - - # required for auto-detection & inclusion of auxiliary "native" libs - if not extdir.endswith(os.path.sep): - extdir += os.path.sep - - debug = int(os.environ.get("DEBUG", 0)) if self.debug is None else self.debug - cfg = "Debug" if debug else "Release" - - # CMake lets you override the generator - we need to check this. - # Can be set with Conda-Build, for example. - cmake_generator = os.environ.get("CMAKE_GENERATOR", "") - - # Set Python_EXECUTABLE instead if you use PYBIND11_FINDPYTHON - cmake_args = [ - f"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY={extdir}", - f"-DPYTHON_EXECUTABLE={sys.executable}", - f"-DCMAKE_BUILD_TYPE={cfg}", # not used on MSVC, but no harm - ] - build_args = [] - # Adding CMake arguments set as environment variable - # (needed e.g. to build for ARM OSx on conda-forge) - if "CMAKE_ARGS" in os.environ: - cmake_args += [item for item in os.environ["CMAKE_ARGS"].split(" ") if item] - - # In this example, we pass in the version to C++. You might not need to. - cmake_args += [f"-DVERSION_INFO={self.distribution.get_version()}"] - - if self.compiler.compiler_type != "msvc": - # Using Ninja-build since it a) is available as a wheel and b) - # multithreads automatically. MSVC would require all variables be - # exported for Ninja to pick it up, which is a little tricky to do. - # Users can override the generator with CMAKE_GENERATOR in CMake - # 3.15+. - if not cmake_generator: - try: - # pylint: disable=unused-import,import-outside-toplevel - import ninja # noqa: F401 - - cmake_args += ["-GNinja"] - except ImportError: - pass - - else: - # Single config generators are handled "normally" - single_config = any(x in cmake_generator for x in ("NMake", "Ninja")) - - # CMake allows an arch-in-generator style for backward compatibility - contains_arch = any(x in cmake_generator for x in ("ARM", "Win64")) - - # Specify the arch if using MSVC generator, but only if it doesn't - # contain a backward-compatibility arch spec already in the - # generator name. - if not single_config and not contains_arch: - cmake_args += ["-A", PLAT_TO_CMAKE[self.plat_name]] - - # Multi-config generators have a different way to specify configs - if not single_config: - cmake_args += [ - f"-DCMAKE_LIBRARY_OUTPUT_DIRECTORY_{cfg.upper()}={extdir}" - ] - build_args += ["--config", cfg] - - if sys.platform.startswith("darwin"): - # Cross-compile support for macOS - respect ARCHFLAGS if set - archs = re.findall(r"-arch (\S+)", os.environ.get("ARCHFLAGS", "")) - if archs: - # pylint: disable=consider-using-f-string - cmake_args += ["-DCMAKE_OSX_ARCHITECTURES={}".format(";".join(archs))] - - # Set CMAKE_BUILD_PARALLEL_LEVEL to control the parallel build level - # across all generators. - if "CMAKE_BUILD_PARALLEL_LEVEL" not in os.environ: - # self.parallel is a Python 3 only way to set parallel jobs by hand - # using -j in the build_ext call, not supported by pip or PyPA-build. - if hasattr(self, "parallel") and self.parallel: - # CMake 3.12+ only. - build_args += [f"-j{self.parallel}"] - - build_temp = os.path.join(self.build_temp, ext.name) - if not os.path.exists(build_temp): - os.makedirs(build_temp) - - subprocess.check_call(["cmake", ext.sourcedir] + cmake_args, cwd=build_temp) - subprocess.check_call(["cmake", "--build", "."] + build_args, cwd=build_temp) - - -# The information here can also be placed in setup.cfg - better separation of -# logic and declaration, and simpler if you include description/version in a file. -setup( - name="PyPartMC", - use_scm_version={ - "local_scheme": "no-local-version", - "version_scheme": "post-release", - }, - author="PyPartMC team (see https://github.com/open-atmos/PyPartMC/graphs/contributors)", - author_email="nriemer@illinois.edu", - description="Python interface to PartMC", - long_description=(Path(__file__).parent / "README.md").read_text(), - long_description_content_type="text/markdown", - packages=find_packages(include=["PyPartMC", "PyPartMC.*"]), - ext_modules=[CMakeExtension("_PyPartMC")], - cmdclass={"build_ext": CMakeBuild}, - zip_safe=False, - python_requires=">=3.7", - setup_requires=["setuptools_scm"], - install_requires=["numpy"], - license="GPL-3.0", - project_urls={ - "Tracker": "https://github.com/open-atmos/PyPartMC/issues", - "Documentation": "https://open-atmos.github.io/PyPartMC", - "Source": "https://github.com/open-atmos/PyPartMC/", - }, - extras_require={ - "tests": [ - "pytest", - "pytest-order", - "fastcore!=1.5.8", # https://github.com/fastai/fastcore/issues/439 - "ghapi", - "scipy", - ] - }, -)