diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 1f3fd7922..d86122f5a 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -66,7 +66,30 @@ jobs: node_type: "gpu-v100-latest-1" run_script: "ci/build_docs.sh" sha: ${{ inputs.sha }} + wheel-build-libcuspatial: + secrets: inherit + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@branch-24.10 + with: + # build for every combination of arch and CUDA version, but only for the latest Python + matrix_filter: group_by([.ARCH, (.CUDA_VER|split(".")|map(tonumber)|.[0])]) | map(max_by(.PY_VER|split(".")|map(tonumber))) + build_type: ${{ inputs.build_type || 'branch' }} + branch: ${{ inputs.branch }} + sha: ${{ inputs.sha }} + date: ${{ inputs.date }} + script: ci/build_wheel_libcuspatial.sh + wheel-publish-libcuspatial: + needs: wheel-build-libcuspatial + secrets: inherit + uses: rapidsai/shared-workflows/.github/workflows/wheels-publish.yaml@branch-24.10 + with: + build_type: ${{ inputs.build_type || 'branch' }} + branch: ${{ inputs.branch }} + sha: ${{ inputs.sha }} + date: ${{ inputs.date }} + package-name: libcuspatial + package-type: cpp wheel-build-cuspatial: + needs: wheel-publish-libcuspatial secrets: inherit uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@branch-24.10 with: diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index ecf4206c7..94617d953 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -21,6 +21,7 @@ jobs: - conda-notebook-tests - docs-build - wheel-build-cuspatial + - wheel-build-libcuspatial - wheel-tests-cuspatial - wheel-build-cuproj - wheel-tests-cuproj @@ -83,10 +84,19 @@ jobs: arch: "amd64" container_image: "rapidsai/ci-conda:latest" run_script: "ci/build_docs.sh" - wheel-build-cuspatial: + wheel-build-libcuspatial: needs: checks secrets: inherit uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@branch-24.10 + with: + # build for every combination of arch and CUDA version, but only for the latest Python + matrix_filter: group_by([.ARCH, (.CUDA_VER|split(".")|map(tonumber)|.[0])]) | map(max_by(.PY_VER|split(".")|map(tonumber))) + build_type: pull-request + script: ci/build_wheel_libcuspatial.sh + wheel-build-cuspatial: + needs: [checks, wheel-build-libcuspatial] + secrets: inherit + uses: rapidsai/shared-workflows/.github/workflows/wheels-build.yaml@branch-24.10 with: build_type: pull-request script: ci/build_wheel_cuspatial.sh diff --git a/build.sh b/build.sh index ffe97da9a..77b8fa3eb 100755 --- a/build.sh +++ b/build.sh @@ -124,11 +124,6 @@ if hasArg benchmarks; then BUILD_BENCHMARKS=ON fi -# Append `-DFIND_CUSPATIAL_CPP=ON` to EXTRA_CMAKE_ARGS unless a user specified the option. -if [[ "${EXTRA_CMAKE_ARGS}" != *"DFIND_CUSPATIAL_CPP"* ]]; then - EXTRA_CMAKE_ARGS="${EXTRA_CMAKE_ARGS} -DFIND_CUSPATIAL_CPP=ON" -fi - # Append `-DFIND_CUPROJ_CPP=ON` to EXTRA_CMAKE_ARGS unless a user specified the option. if [[ "${EXTRA_CMAKE_ARGS}" != *"DFIND_CUPROJ_CPP"* ]]; then EXTRA_CMAKE_ARGS="${EXTRA_CMAKE_ARGS} -DFIND_CUPROJ_CPP=ON" diff --git a/ci/build_wheel.sh b/ci/build_wheel.sh index 14802741d..75328d272 100755 --- a/ci/build_wheel.sh +++ b/ci/build_wheel.sh @@ -7,6 +7,25 @@ package_name=$1 package_dir=$2 package_type=$3 +# The 'libcuspatial' wheel should package 'libcuspatial.so', and all others +# should exclude it (they dynamically load it if they need it). +# +# Capturing that here in argument-parsing to allow this build_wheel.sh +# script to be re-used by all wheel builds in the project. +case "${package_dir}" in + python/libcuspatial) + EXCLUDE_ARGS=( + --exclude "libcudf.so" + ) + ;; + *) + EXCLUDE_ARGS=( + --exclude "libcudf.so" + --exclude "libcuspatial.so" + ) + ;; +esac + source rapids-configure-sccache source rapids-date-string @@ -20,7 +39,7 @@ python -m pip wheel . -w dist -vvv --no-deps --disable-pip-version-check mkdir -p final_dist python -m auditwheel repair \ - --exclude libcudf.so \ + "${EXCLUDE_ARGS[@]}" \ -w final_dist \ dist/* diff --git a/ci/build_wheel_cuspatial.sh b/ci/build_wheel_cuspatial.sh index 171bfa6a4..e581a3e76 100755 --- a/ci/build_wheel_cuspatial.sh +++ b/ci/build_wheel_cuspatial.sh @@ -3,4 +3,15 @@ set -euo pipefail +RAPIDS_PY_CUDA_SUFFIX="$(rapids-wheel-ctk-name-gen ${RAPIDS_CUDA_VERSION})" + +# Downloads libcuspatial wheel from this current build, +# then ensures 'cuspatial' wheel builds always use the 'libcuspatial' just built in the same CI run. +# +# Using env variable PIP_CONSTRAINT is necessary to ensure the constraints +# are used when creating the isolated build environment. +RAPIDS_PY_WHEEL_NAME="libcuspatial_${RAPIDS_PY_CUDA_SUFFIX}" rapids-download-wheels-from-s3 cpp /tmp/libcuspatial_dist +echo "libcuspatial-${RAPIDS_PY_CUDA_SUFFIX} @ file://$(echo /tmp/libcuspatial_dist/libcuspatial_*.whl)" > /tmp/constraints.txt +export PIP_CONSTRAINT="/tmp/constraints.txt" + ci/build_wheel.sh cuspatial python/cuspatial python diff --git a/ci/build_wheel_libcuspatial.sh b/ci/build_wheel_libcuspatial.sh new file mode 100755 index 000000000..742a58caa --- /dev/null +++ b/ci/build_wheel_libcuspatial.sh @@ -0,0 +1,6 @@ +#!/bin/bash +# Copyright (c) 2024, NVIDIA CORPORATION. + +set -euo pipefail + +ci/build_wheel.sh libcuspatial python/libcuspatial cpp diff --git a/ci/test_wheel_cuproj.sh b/ci/test_wheel_cuproj.sh index 4144e8dab..4752fe417 100755 --- a/ci/test_wheel_cuproj.sh +++ b/ci/test_wheel_cuproj.sh @@ -13,12 +13,14 @@ DEBIAN_FRONTEND=noninteractive apt install -y --no-install-recommends libgdal-de # Download the cuproj and cuspatial built in the previous step RAPIDS_PY_WHEEL_NAME="cuproj_${RAPIDS_PY_CUDA_SUFFIX}" rapids-download-wheels-from-s3 python ./dist RAPIDS_PY_WHEEL_NAME="cuspatial_${RAPIDS_PY_CUDA_SUFFIX}" rapids-download-wheels-from-s3 python ./dist +RAPIDS_PY_WHEEL_NAME="libcuspatial_${RAPIDS_PY_CUDA_SUFFIX}" rapids-download-wheels-from-s3 cpp ./dist # echo to expand wildcard before adding `[extra]` requires for pip python -m pip install \ --no-binary 'fiona' \ "$(echo ./dist/cuspatial*.whl)" \ "$(echo ./dist/cuproj*.whl)[test]" \ + "$(echo ./dist/libcuspatial*.whl)" \ 'fiona>=1.8.19,<1.9' rapids-logger "pytest cuproj" diff --git a/ci/test_wheel_cuspatial.sh b/ci/test_wheel_cuspatial.sh index 8faa4e8d3..7e16b9626 100755 --- a/ci/test_wheel_cuspatial.sh +++ b/ci/test_wheel_cuspatial.sh @@ -10,13 +10,15 @@ RAPIDS_PY_CUDA_SUFFIX="$(rapids-wheel-ctk-name-gen ${RAPIDS_CUDA_VERSION})" apt update DEBIAN_FRONTEND=noninteractive apt install -y --no-install-recommends libgdal-dev -# Download the cuspatial built in the previous step +# Download the cuspatial and libcuspatial built in the previous step RAPIDS_PY_WHEEL_NAME="cuspatial_${RAPIDS_PY_CUDA_SUFFIX}" rapids-download-wheels-from-s3 python ./dist +RAPIDS_PY_WHEEL_NAME="libcuspatial_${RAPIDS_PY_CUDA_SUFFIX}" rapids-download-wheels-from-s3 cpp ./dist # echo to expand wildcard before adding `[extra]` requires for pip python -m pip install \ --no-binary 'fiona' \ "$(echo ./dist/cuspatial*.whl)[test]" \ + "$(echo ./dist/libcuspatial*.whl)" \ 'fiona>=1.8.19,<1.9' rapids-logger "pytest cuspatial" diff --git a/cpp/cmake/thirdparty/get_ranger.cmake b/cpp/cmake/thirdparty/get_ranger.cmake index 563e4120a..c57131f3a 100644 --- a/cpp/cmake/thirdparty/get_ranger.cmake +++ b/cpp/cmake/thirdparty/get_ranger.cmake @@ -1,5 +1,5 @@ #============================================================================= -# Copyright (c) 2023, NVIDIA CORPORATION. +# Copyright (c) 2023-2024, NVIDIA CORPORATION. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -26,8 +26,6 @@ function(find_and_configure_ranger) rapids_cpm_find( ranger 00.01.00 GLOBAL_TARGETS "${global_targets}" - BUILD_EXPORT_SET cuspatial-exports - INSTALL_EXPORT_SET cuspatial-exports CPM_ARGS GIT_REPOSITORY https://github.com/harrism/ranger.git GIT_TAG main diff --git a/dependencies.yaml b/dependencies.yaml index 859009683..463683232 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -18,6 +18,7 @@ files: - depends_on_cuml - depends_on_cupy - depends_on_libcudf + - depends_on_libcuspatial - depends_on_librmm - rapids_build_skbuild - run_python_cuspatial @@ -30,11 +31,13 @@ files: output: none includes: - cuda_version + - depends_on_libcuspatial - test_libcuspatial test_python: output: none includes: - cuda_version + - depends_on_libcuspatial - py_version - test_python_cuspatial - test_python_cuproj @@ -44,6 +47,7 @@ files: includes: - cuda_version - depends_on_cuml + - depends_on_libcuspatial - test_notebooks - notebooks - py_version @@ -57,9 +61,35 @@ files: output: none includes: - cuda_version + - depends_on_libcuspatial - docs - py_version - test_cuspatial + py_build_libcuspatial: + output: [pyproject] + pyproject_dir: python/libcuspatial + extras: + table: build-system + includes: + - rapids_build_skbuild + py_rapids_build_libcuspatial: + output: [pyproject] + pyproject_dir: python/libcuspatial + extras: + table: tool.rapids-build-backend + key: requires + includes: + - build_cpp + - build_wheels + - depends_on_libcudf + - depends_on_librmm + py_run_libcuspatial: + output: [pyproject] + pyproject_dir: python/libcuspatial + extras: + table: project + includes: + - depends_on_libcudf py_build_cuspatial: output: [pyproject] pyproject_dir: python/cuspatial @@ -80,6 +110,7 @@ files: - build_python - build_wheels - depends_on_libcudf + - depends_on_libcuspatial - depends_on_librmm py_run_cuspatial: output: [pyproject] @@ -89,6 +120,7 @@ files: includes: - depends_on_cudf - depends_on_libcudf + - depends_on_libcuspatial - depends_on_rmm - run_python_cuspatial py_test_cuspatial: @@ -540,16 +572,39 @@ dependencies: common: - output_types: conda packages: - - libcuspatial==24.10.*,>=0.0.0a0 - libcuspatial-tests==24.10.*,>=0.0.0a0 test_cuspatial: common: - output_types: conda packages: - - libcuspatial==24.10.*,>=0.0.0a0 - cuspatial==24.10.*,>=0.0.0a0 - cuproj==24.10.*,>=0.0.0a0 + depends_on_libcuspatial: + common: + - output_types: conda + packages: + - &libcuspatial_unsuffixed libcuspatial==24.10.*,>=0.0.0a0 + - output_types: requirements + packages: + # pip recognizes the index as a global option for the requirements.txt file + - --extra-index-url=https://pypi.nvidia.com + - --extra-index-url=https://pypi.anaconda.org/rapidsai-wheels-nightly/simple + specific: + - output_types: [requirements, pyproject] + matrices: + - matrix: + cuda: "12.*" + cuda_suffixed: "true" + packages: + - libcuspatial-cu12==24.10.*,>=0.0.0a0 + - matrix: + cuda: "11.*" + cuda_suffixed: "true" + packages: + - libcuspatial-cu11==24.10.*,>=0.0.0a0 + - {matrix: null, packages: [*libcuspatial_unsuffixed]} + depends_on_librmm: common: - output_types: conda diff --git a/python/cuspatial/CMakeLists.txt b/python/cuspatial/CMakeLists.txt index 28fcf467d..c3dc00c8a 100644 --- a/python/cuspatial/CMakeLists.txt +++ b/python/cuspatial/CMakeLists.txt @@ -23,34 +23,9 @@ project( VERSION "${RAPIDS_VERSION}" LANGUAGES CXX CUDA) -option(FIND_CUSPATIAL_CPP "Search for existing cuspatial C++ installations before defaulting to local files" - OFF) - -# If the user requested it we attempt to find cuspatial. -if(FIND_CUSPATIAL_CPP) - find_package(cuspatial "${RAPIDS_VERSION}") -else() - set(cuspatial_FOUND OFF) -endif() - -if(NOT cuspatial_FOUND) - set(BUILD_TESTS OFF) - set(BUILD_BENCHMARKS OFF) - set(CUDA_STATIC_RUNTIME ON) - set(CUSPATIAL_USE_CUDF_STATIC ON) - set(CUSPATIAL_EXCLUDE_CUDF_FROM_ALL ON) - - add_subdirectory(../../cpp cuspatial-cpp EXCLUDE_FROM_ALL) - - set(cython_lib_dir cuspatial) - install(TARGETS cuspatial DESTINATION ${cython_lib_dir}) -endif() +find_package(cuspatial "${RAPIDS_VERSION}" REQUIRED) include(rapids-cython-core) rapids_cython_init() add_subdirectory(cuspatial/_lib) - -if(DEFINED cython_lib_dir) - rapids_cython_add_rpath_entries(TARGET cuspatial PATHS "${cython_lib_dir}") -endif() diff --git a/python/cuspatial/cuspatial/__init__.py b/python/cuspatial/cuspatial/__init__.py index 14a5fcc4d..89c193819 100644 --- a/python/cuspatial/cuspatial/__init__.py +++ b/python/cuspatial/cuspatial/__init__.py @@ -1,8 +1,16 @@ # Copyright (c) 2023-2024, NVIDIA CORPORATION. -# load cudf before any other imports, to be sure libcudf's symbols are found -# in the libcudf.so from the libcudf wheel (if one is installed) -import cudf +# If libcuspatial was installed as a wheel, we must request it to load the library +# symbols. Otherwise, we assume that the library was installed in a system path that ld +# can find. +try: + import libcuspatial +except ModuleNotFoundError: + pass +else: + libcuspatial.load_library() + del libcuspatial + from ._version import __git_commit__, __version__ from .core.geodataframe import GeoDataFrame diff --git a/python/cuspatial/pyproject.toml b/python/cuspatial/pyproject.toml index 25ea28bfd..f8aba3c4b 100644 --- a/python/cuspatial/pyproject.toml +++ b/python/cuspatial/pyproject.toml @@ -33,6 +33,7 @@ dependencies = [ "cudf==24.10.*,>=0.0.0a0", "geopandas>=0.11.0", "libcudf==24.10.*,>=0.0.0a0", + "libcuspatial==24.10.*,>=0.0.0a0", "numpy>=1.23,<2.0a0", "rmm==24.10.*,>=0.0.0a0", ] # This list was generated by `rapids-dependency-file-generator`. To make changes, edit ../../dependencies.yaml and run `rapids-dependency-file-generator`. @@ -137,6 +138,7 @@ requires = [ "cudf==24.10.*,>=0.0.0a0", "cython>=3.0.0", "libcudf==24.10.*,>=0.0.0a0", + "libcuspatial==24.10.*,>=0.0.0a0", "librmm==24.10.*,>=0.0.0a0", "ninja", "rmm==24.10.*,>=0.0.0a0", diff --git a/python/libcuspatial/CMakeLists.txt b/python/libcuspatial/CMakeLists.txt new file mode 100644 index 000000000..86c3cd1ef --- /dev/null +++ b/python/libcuspatial/CMakeLists.txt @@ -0,0 +1,42 @@ +# ============================================================================= +# Copyright (c) 2024, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except +# in compliance with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software distributed under the License +# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express +# or implied. See the License for the specific language governing permissions and limitations under +# the License. +# ============================================================================= + +cmake_minimum_required(VERSION 3.26.4 FATAL_ERROR) + +include(../../rapids_config.cmake) + +project( + libcuspatial-python + VERSION "${RAPIDS_VERSION}" + LANGUAGES CXX +) + +# Check if cuspatial is already available. If so, it is the user's responsibility to ensure that the +# CMake package is also available at build time of the Python cuspatial package. +find_package(cuspatial "${RAPIDS_VERSION}") +if(cuspatial_FOUND) + return() +endif() + +unset(cuspatial_FOUND) + +# set options for building libcuspatial +set(BUILD_SHARED_LIBS ON) +set(BUILD_TESTS OFF) +set(BUILD_BENCHMARKS OFF) +set(CUDA_STATIC_RUNTIME ON) +set(CUSPATIAL_USE_CUDF_STATIC OFF) +set(CUSPATIAL_EXCLUDE_CUDF_FROM_ALL ON) + +add_subdirectory(../../cpp cuspatial-cpp) diff --git a/python/libcuspatial/LICENSE b/python/libcuspatial/LICENSE new file mode 120000 index 000000000..30cff7403 --- /dev/null +++ b/python/libcuspatial/LICENSE @@ -0,0 +1 @@ +../../LICENSE \ No newline at end of file diff --git a/python/libcuspatial/README.md b/python/libcuspatial/README.md new file mode 120000 index 000000000..fe8400541 --- /dev/null +++ b/python/libcuspatial/README.md @@ -0,0 +1 @@ +../../README.md \ No newline at end of file diff --git a/python/libcuspatial/libcuspatial/VERSION b/python/libcuspatial/libcuspatial/VERSION new file mode 120000 index 000000000..d62dc733e --- /dev/null +++ b/python/libcuspatial/libcuspatial/VERSION @@ -0,0 +1 @@ +../../../VERSION \ No newline at end of file diff --git a/python/libcuspatial/libcuspatial/__init__.py b/python/libcuspatial/libcuspatial/__init__.py new file mode 100644 index 000000000..49b02bb14 --- /dev/null +++ b/python/libcuspatial/libcuspatial/__init__.py @@ -0,0 +1,16 @@ +# Copyright (c) 2024, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from libcuspatial._version import __git_commit__, __version__ +from libcuspatial.load import load_library diff --git a/python/libcuspatial/libcuspatial/_version.py b/python/libcuspatial/libcuspatial/_version.py new file mode 100644 index 000000000..826e84a67 --- /dev/null +++ b/python/libcuspatial/libcuspatial/_version.py @@ -0,0 +1,32 @@ +# Copyright (c) 2023-2024, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +import importlib.resources + +__version__ = ( + importlib.resources.files(__package__) + .joinpath("VERSION") + .read_text() + .strip() +) +try: + __git_commit__ = ( + importlib.resources.files(__package__) + .joinpath("GIT_COMMIT") + .read_text() + .strip() + ) +except FileNotFoundError: + __git_commit__ = "" + +__all__ = ["__git_commit__", "__version__"] diff --git a/python/libcuspatial/libcuspatial/load.py b/python/libcuspatial/libcuspatial/load.py new file mode 100644 index 000000000..285628187 --- /dev/null +++ b/python/libcuspatial/libcuspatial/load.py @@ -0,0 +1,55 @@ +# Copyright (c) 2024, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +import ctypes +import os + +import libcudf + + +def load_library(): + # libcudf must be loaded before libcuspatial because libcuspatial + # references its symbols + libcudf.load_library() + + # Dynamically load libcuspatial.so. Prefer a system library if one is + # present to avoid clobbering symbols that other packages might expect, + # but if no other library is present use the one in the wheel. + libcuspatial_lib = None + try: + libcuspatial_lib = ctypes.CDLL("libcuspatial.so", ctypes.RTLD_GLOBAL) + except OSError: + # If neither of these directories contain the library, we assume we are + # in an environment where the C++ library is already installed + # somewhere else and the CMake build of the libcuspatial Python package + # was a no-op. + # + # Note that this approach won't work for real editable installs of the + # libcuspatial package. scikit-build-core has limited support for + # importlib.resources so there isn't a clean way to support that case + # yet. + for lib_dir in ("lib", "lib64"): + if os.path.isfile( + lib := os.path.join( + os.path.dirname(__file__), lib_dir, "libcuspatial.so" + ) + ): + libcuspatial_lib = ctypes.CDLL(lib, ctypes.RTLD_GLOBAL) + break + + # The caller almost never needs to do anything with this library, but no + # harm in offering the option since this object at least provides a handle + # to inspect where the library was loaded from. + return libcuspatial_lib diff --git a/python/libcuspatial/pyproject.toml b/python/libcuspatial/pyproject.toml new file mode 100644 index 000000000..ab64d4cb6 --- /dev/null +++ b/python/libcuspatial/pyproject.toml @@ -0,0 +1,77 @@ +# Copyright (c) 2024, NVIDIA CORPORATION. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +[build-system] +build-backend = "rapids_build_backend.build" +requires = [ + "rapids-build-backend>=0.3.0,<0.4.0.dev0", + "scikit-build-core[pyproject]>=0.10.0", +] # This list was generated by `rapids-dependency-file-generator`. To make changes, edit ../../dependencies.yaml and run `rapids-dependency-file-generator`. + +[project] +name = "libcuspatial" +dynamic = ["version"] +description = "cuSpatial: GPU-Accelerated Spatial and Trajectory Data Management and Analytics Library (C++)" +readme = { file = "README.md", content-type = "text/markdown" } +authors = [ + { name = "NVIDIA Corporation" }, +] +license = { text = "Apache 2.0" } +requires-python = ">=3.10" +classifiers = [ + "Intended Audience :: Developers", + "Topic :: Database", + "Topic :: Scientific/Engineering", + "License :: OSI Approved :: Apache Software License", + "Programming Language :: Python", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", +] +dependencies = [ + "libcudf==24.10.*,>=0.0.0a0", +] # This list was generated by `rapids-dependency-file-generator`. To make changes, edit ../../dependencies.yaml and run `rapids-dependency-file-generator`. + +[project.urls] +Homepage = "https://github.com/rapidsai/cuspatial" + +[project.entry-points."cmake.prefix"] +libcuspatial = "libcuspatial" + +[tool.scikit-build] +build-dir = "build/{wheel_tag}" +cmake.build-type = "Release" +cmake.version = "CMakeLists.txt" +minimum-version = "build-system.requires" +ninja.make-fallback = true +sdist.reproducible = true +wheel.packages = ["libcuspatial"] +wheel.install-dir = "libcuspatial" +wheel.py-api = "py3" + +[tool.scikit-build.metadata.version] +provider = "scikit_build_core.metadata.regex" +input = "libcuspatial/VERSION" +regex = "(?P.*)" + +[tool.rapids-build-backend] +build-backend = "scikit_build_core.build" +dependencies-file = "../../dependencies.yaml" +matrix-entry = "cuda_suffixed=true" +requires = [ + "cmake>=3.26.4,!=3.30.0", + "libcudf==24.10.*,>=0.0.0a0", + "librmm==24.10.*,>=0.0.0a0", + "ninja", + "wheel", +] # This list was generated by `rapids-dependency-file-generator`. To make changes, edit ../../dependencies.yaml and run `rapids-dependency-file-generator`.