Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
119 changes: 119 additions & 0 deletions .github/workflows/ArborX.spec
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
# Stolen from eigen spec
# The (empty) main package is arch, to have the package built and tests run
# on all arches, but the actual result package is the noarch -devel subpackge.
# Debuginfo packages are disabled to prevent rpmbuild from generating an empty
# debuginfo package for the empty main package.
%global debug_package %{nil}

Name: ArborX
Version: 9999
%global sover 0
Release: 1%{?dist}
Summary: Performance-portable geometric search library
# no support for 32-bit archs https://github.com/kokkos/kokkos/issues/2312
# mpi is broken on s390x see: bug#2322073
ExcludeArch: i686 armv7hl s390x

License: BSD-3-Clause
URL: https://github.com/arborx/%{name}
Source0: %{url}/archive/v%{version}/%{name}-%{version}.tar.gz

BuildRequires: gcc-c++
BuildRequires: cmake >= 3.16
BuildRequires: kokkos-devel
BuildRequires: openmpi-devel
BuildRequires: mpich-devel
BuildRequires: boost-devel
BuildRequires: google-benchmark-devel

%global arborx_desc \
ArborX is an open-source library designed to provide performance portable \
algorithms for geometric search, similarly to nanoflann and Boost Geometry.

%description
%{arborx_desc}

%package devel
Summary: Development package for %{name} packages
BuildArch: noarch
%description devel
%{arborx_desc}

This package contains the development files of %{name}.

%package openmpi-devel
Summary: openmpi development headers and libraries for %{name}
BuildArch: noarch
Requires: openmpi-devel

%description openmpi-devel
%{arborx_desc}

This package contains openmpi development files of %{name}.

%package mpich-devel
Summary: mpich development headers and libraries for %{name}
BuildArch: noarch
Requires: mpich-devel

%description mpich-devel
%{arborx_desc}

This package contains mpich development files of %{name}.

%prep
%autosetup -p1 -n %{name}

%build
# save memory
%global _smp_mflags -j1
%global _vpath_builddir %{_target_platform}-${mpi:-serial}

. /etc/profile.d/modules.sh
for mpi in '' mpich openmpi; do
test -n "${mpi}" && module load mpi/${mpi}-%{_arch}
%cmake \
-DARBORX_ENABLE_TESTS=ON \
-DARBORX_ENABLE_EXAMPLES=OFF \
-DARBORX_ENABLE_BENCHMARKS=OFF \
$(test -z "${mpi}" && echo -DARBORX_ENABLE_MPI=OFF || echo -DARBORX_ENABLE_MPI=ON) \
-DCMAKE_INSTALL_DATADIR=${MPI_LIB:-%{_datadir}} \
-DCMAKE_INSTALL_INCLUDEDIR=${MPI_INCLUDE:-%{_includedir}} \
%{nil}
%cmake_build
test -n "${mpi}" && module unload mpi/${mpi}-%{_arch}
done

%install
. /etc/profile.d/modules.sh
for mpi in '' mpich openmpi; do
test -n "${mpi}" && module load mpi/${mpi}-%{_arch}
%cmake_install
test -n "${mpi}" && module unload mpi/${mpi}-%{_arch}
done

%check
. /etc/profile.d/modules.sh
for mpi in '' mpich openmpi; do
test -n "${mpi}" && module load mpi/${mpi}-%{_arch}
%ctest
test -n "${mpi}" && module unload mpi/${mpi}-%{_arch}
done

%files devel
%doc README.md
%license LICENSE
%{_includedir}/%{name}
%{_datadir}/cmake/%{name}

%files openmpi-devel
%doc README.md
%license LICENSE
%{_includedir}/openmpi*/%{name}
%{_libdir}/openmpi*/lib/cmake/%{name}

%files mpich-devel
%doc README.md
%license LICENSE
%{_includedir}/mpich*/%{name}
%{_libdir}/mpich*/lib/cmake/%{name}
43 changes: 43 additions & 0 deletions .github/workflows/rpmbuild.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: rpmbuild
on:
push:
branches:
- master
- rpmbuild
pull_request:

concurrency:
group: ${ {github.event_name }}-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
rpmbuild:
continue-on-error: ${{ matrix.config.continue-on-error == 'true' }}
strategy:
matrix:
config:
- {arch: 'arm64'}
- {arch: 'amd64'}
runs-on: ${{ matrix.config.arch == 'arm64' && 'ubuntu-24.04-arm' || 'ubuntu-latest' }}
container: fedora:latest
steps:
- name: Install fedpkg
run: dnf -y install fedpkg
- name: Checkout code
uses: actions/checkout@v4
with:
path: ArborX
- name: Prepare rpmbuild
run: |
mkdir ArborX.rpm
tar -cvzf ArborX-9999.tar.gz ArborX/
cp ArborX-9999.tar.gz ArborX/.github/workflows/ArborX.spec ArborX.rpm
- name: Install build deps
working-directory: ArborX.rpm
run: |
dnf -y builddep ArborX.spec
- name: Build rpm
working-directory: ArborX.rpm
run: |
fedpkg --verbose --debug local

54 changes: 30 additions & 24 deletions test/tstDBSCAN.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,8 @@ void dbscan_f(ArborX::DBSCAN::Implementation impl)
using ArborX::Details::verifyDBSCAN;
using Point = ArborX::Point<3, Coordinate>;

constexpr bool verbose = true;

ExecutionSpace space;

ArborX::DBSCAN::Parameters params;
Expand All @@ -182,23 +184,25 @@ void dbscan_f(ArborX::DBSCAN::Implementation impl)

Coordinate r = std::sqrt(3.1);

BOOST_TEST(
verifyDBSCAN(space, points, r - (Coordinate)0.1, 2,
dbscan(space, points, r - (Coordinate)0.1, 2, params)));
BOOST_TEST(
verifyDBSCAN(space, points, r, 2, dbscan(space, points, r, 2, params)));
BOOST_TEST(
verifyDBSCAN(space, points, r, 3, dbscan(space, points, r, 3, params)));
BOOST_TEST(verifyDBSCAN(
space, points, r - (Coordinate)0.1, 2,
dbscan(space, points, r - (Coordinate)0.1, 2, params), verbose));
BOOST_TEST(verifyDBSCAN(space, points, r, 2,
dbscan(space, points, r, 2, params), verbose));
BOOST_TEST(verifyDBSCAN(space, points, r, 3,
dbscan(space, points, r, 3, params), verbose));

// Test non-View primitives
HiddenView<decltype(points)> hidden_points{points};
BOOST_TEST(verifyDBSCAN(
space, hidden_points, r - (Coordinate)0.1, 2,
dbscan(space, hidden_points, r - (Coordinate)0.1, 2, params)));
dbscan(space, hidden_points, r - (Coordinate)0.1, 2, params), verbose));
BOOST_TEST(verifyDBSCAN(space, hidden_points, r, 2,
dbscan(space, hidden_points, r, 2, params)));
dbscan(space, hidden_points, r, 2, params),
verbose));
BOOST_TEST(verifyDBSCAN(space, hidden_points, r, 3,
dbscan(space, hidden_points, r, 3, params)));
dbscan(space, hidden_points, r, 3, params),
verbose));
}

{
Expand All @@ -207,26 +211,26 @@ void dbscan_f(ArborX::DBSCAN::Implementation impl)

Coordinate r = std::sqrt(3.1);

BOOST_TEST(
verifyDBSCAN(space, points, r, 2, dbscan(space, points, r, 2, params)));
BOOST_TEST(
verifyDBSCAN(space, points, r, 3, dbscan(space, points, r, 3, params)));
BOOST_TEST(verifyDBSCAN(space, points, r, 2,
dbscan(space, points, r, 2, params), verbose));
BOOST_TEST(verifyDBSCAN(space, points, r, 3,
dbscan(space, points, r, 3, params), verbose));

BOOST_TEST(verifyDBSCAN(space, points, 2 * r, 2,
dbscan(space, points, 2 * r, 2, params)));
dbscan(space, points, 2 * r, 2, params), verbose));
BOOST_TEST(verifyDBSCAN(space, points, 2 * r, 3,
dbscan(space, points, 2 * r, 3, params)));
dbscan(space, points, 2 * r, 3, params), verbose));
BOOST_TEST(verifyDBSCAN(space, points, 2 * r, 4,
dbscan(space, points, 2 * r, 4, params)));
dbscan(space, points, 2 * r, 4, params), verbose));

BOOST_TEST(verifyDBSCAN(space, points, 3 * r, 2,
dbscan(space, points, 3 * r, 2, params)));
dbscan(space, points, 3 * r, 2, params), verbose));
BOOST_TEST(verifyDBSCAN(space, points, 3 * r, 3,
dbscan(space, points, 3 * r, 3, params)));
dbscan(space, points, 3 * r, 3, params), verbose));
BOOST_TEST(verifyDBSCAN(space, points, 3 * r, 4,
dbscan(space, points, 3 * r, 4, params)));
dbscan(space, points, 3 * r, 4, params), verbose));
BOOST_TEST(verifyDBSCAN(space, points, 3 * r, 5,
dbscan(space, points, 3 * r, 5, params)));
dbscan(space, points, 3 * r, 5, params), verbose));
}

{
Expand All @@ -240,9 +244,11 @@ void dbscan_f(ArborX::DBSCAN::Implementation impl)
{{1, -0.5, 0}}});

BOOST_TEST(verifyDBSCAN(space, points, 1.0, 3,
dbscan(space, points, (Coordinate)1, 3, params)));
dbscan(space, points, (Coordinate)1, 3, params),
verbose));
BOOST_TEST(verifyDBSCAN(space, points, 1.0, 4,
dbscan(space, points, (Coordinate)1, 4, params)));
dbscan(space, points, (Coordinate)1, 4, params),
verbose));
}

{
Expand All @@ -269,7 +275,7 @@ void dbscan_f(ArborX::DBSCAN::Implementation impl)
// This does *not* guarantee to trigger the issue, as it depends on the
// specific implementation and runtime. But it may.
BOOST_TEST(verifyDBSCAN(space, points, (Coordinate)1, 4,
dbscan(space, points, (Coordinate)1, 4)));
dbscan(space, points, (Coordinate)1, 4), verbose));
}
}

Expand Down
Loading