Skip to content

Commit

Permalink
Add Fedora packaging via packit
Browse files Browse the repository at this point in the history
Signed-off-by: Cristian Le <[email protected]>
  • Loading branch information
LecrisUT committed May 17, 2024
1 parent 5df60ee commit 1602599
Show file tree
Hide file tree
Showing 8 changed files with 281 additions and 0 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -232,3 +232,4 @@ spack-*
.DS_Store

BUILD/
!tools/fedora/dbcsr.spec
58 changes: 58 additions & 0 deletions .packit.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
specfile_path: tools/fedora/dbcsr.spec
files_to_sync:
- src: tools/fedora/
dest: ./
delete: true
filters:
- "protect .git*"
- "protect sources"
- "protect changelog"
- "- plans/rpminspect"
- "- plans/rpmlint"
# No packaged tmt jobs described yet, removing the .fmf as well
- "- .fmf/"
- .packit.yaml
upstream_package_name: dbcsr
downstream_package_name: dbcsr
update_release: false
upstream_tag_template: v{version}

jobs:
- &copr_build
job: copr_build
trigger: release
owner: lecris
project: release
targets: &targets
- fedora-all-x86_64
- fedora-all-aarch64
- <<: *copr_build
trigger: commit
branch: master
project: nightly
additional_repos:
- copr://@scikit-build/release
- &tests
job: tests
trigger: commit
targets: *targets
fmf_path: tools/fedora
- <<: *copr_build
trigger: pull_request
project: dbcsr
update_release: true
release_suffix: "{PACKIT_RPMSPEC_RELEASE}"
- <<: *tests
trigger: pull_request
- job: propose_downstream
trigger: release
dist_git_branches:
- fedora-rawhide
- job: koji_build
trigger: commit
dist_git_branches:
- fedora-all
- job: bodhi_update
trigger: commit
dist_git_branches:
- fedora-branched
1 change: 1 addition & 0 deletions tools/fedora/.fmf/version
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1
Empty file added tools/fedora/dbcsr.rpmlintrc
Empty file.
199 changes: 199 additions & 0 deletions tools/fedora/dbcsr.spec
Original file line number Diff line number Diff line change
@@ -0,0 +1,199 @@
# Currently does not build with opencl/libxsmm
%bcond_with opencl

# No openmpi on i668 with openmpi 5 in Fedora 40+
%if 0%{?fedora} >= 40
%ifarch %{ix86}
%bcond_with openmpi
%else
%bcond_without openmpi
%endif
%else
%bcond_without openmpi
%endif

Name: dbcsr
Version: 0.0.0
Release: %autorelease
Summary: Distributed Block Compressed Sparse Row matrix library
License: GPL-2.0-or-later
URL: https://cp2k.github.io/dbcsr/develop/
Source0: https://github.com/cp2k/dbcsr/releases/download/v%{version}/dbcsr-%{version}.tar.gz

BuildRequires: cmake
BuildRequires: gcc-c++
BuildRequires: gcc-gfortran
BuildRequires: make
BuildRequires: flexiblas-devel
%if %{with opencl}
BuildRequires: libxsmm-devel
%endif
BuildRequires: python3-fypp

%global _description %{expand:
DBCSR stands for Distributed Blocked Compressed Sparse Row.

DBCSR is a library designed to efficiently perform sparse matrix-matrix
multiplication, among other operations. It is MPI and OpenMP parallel and
can exploit Nvidia and AMD GPUs via CUDA and HIP.}


%description
%{_description}

This package contains the non-MPI single process and multi-threaded versions.

%package devel
Summary: Development files for %{name}
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: gcc-gfortran%{_isa}

%description devel
The %{name}-devel package contains libraries and header files for
developing applications that use %{name}.

%global mpi_list mpich

%if %{with openmpi}
%global mpi_list %{mpi_list} openmpi
%package openmpi
Summary: DBCSR - openmpi version
BuildRequires: openmpi-devel

%description openmpi
%{_description}

This package contains the parallel single- and multi-threaded versions
using OpenMPI.

%package openmpi-devel
Summary: Development files for %{name}-openmpi
Requires: %{name}-openmpi%{?_isa} = %{version}-%{release}

%description openmpi-devel
The %{name}-openmpi-devel package contains libraries and header files for
developing applications that use %{name}-openmpi.
%endif

%package mpich
Summary: DBCSR - mpich version
BuildRequires: mpich-devel

%description mpich
%{_description}

This package contains the parallel single- and multi-threaded versions
using mpich.

%package mpich-devel
Summary: Development files for %{name}-mpich
Requires: %{name}-mpich%{?_isa} = %{version}-%{release}

%description mpich-devel
The %{name}-mpich-devel package contains libraries and header files for
developing applications that use %{name}-mpich.


%prep
%autosetup -p1
# Use cmake's version so it can find flexiblas
rm cmake/Find{BLAS,LAPACK}.cmake
# Use system fypp, other tools not needed
rm -r tools


# $mpi will be evaluated in the loops below
%global _vpath_builddir %{_vendor}-%{_target_os}-build-${mpi:-serial}

%build
export CFLAGS="%{optflags} -fPIC"
export CXXFLAGS="%{optflags} -fPIC"
export FFLAGS="%{optflags} -fPIC"
%cmake \
-DCMAKE_INSTALL_Fortran_MODULES=%{_fmoddir} \
-DUSE_MPI=OFF \
%{?with_opencl:-DUSE_ACCEL=opencl -DUSE_SMM=libxsmm}
%cmake_build
for mpi in %{mpi_list}
do
module load mpi/$mpi-%{_arch}
%cmake \
-DCMAKE_INSTALL_Fortran_MODULES=$MPI_FORTRAN_MOD_DIR \
%{?with_opencl:-DUSE_ACCEL=opencl -DUSE_SMM=libxsmm} \
-DCMAKE_INSTALL_PREFIX:PATH=$MPI_HOME \
-DCMAKE_INSTALL_LIBDIR:PATH=$MPI_LIB \
-DUSE_MPI_F08=ON \
-DTEST_MPI_RANKS=2
%cmake_build
module purge
done


%install
%cmake_install
for mpi in %{mpi_list}
do
module load mpi/$mpi-%{_arch}
%cmake_install
module purge
done


%check
%ctest
for mpi in %{mpi_list}
do
module load mpi/$mpi-%{_arch}
fail=
# mpich tests fail on s390x - reported https://github.com/cp2k/dbcsr/issues/703
[ $mpi = mpich -a %{_arch} = s390x ] && fail=no
%ctest || test $fail
module purge
done


%files
%license LICENSE
%doc README.md
%{_libdir}/libdbcsr.so.*

%files devel
%{_fmoddir}/dbcsr_api.mod
%{_fmoddir}/dbcsr_tensor_api.mod
%{_libdir}/cmake/dbcsr/
%{_libdir}/libdbcsr.so

%if %{with openmpi}
%files openmpi
%license LICENSE
%doc README.md
%{_libdir}/openmpi/lib/libdbcsr.so.*
%{_libdir}/openmpi/lib/libdbcsr_c.so.*

%files openmpi-devel
%{_libdir}/openmpi/include/dbcsr.h
%{_libdir}/openmpi/include/dbcsr_tensor.h
%{_fmoddir}/openmpi/dbcsr_api.mod
%{_fmoddir}/openmpi/dbcsr_tensor_api.mod
%{_libdir}/openmpi/lib/cmake/dbcsr/
%{_libdir}/openmpi/lib/libdbcsr.so
%{_libdir}/openmpi/lib/libdbcsr_c.so
%endif

%files mpich
%license LICENSE
%doc README.md
%{_libdir}/mpich/lib/libdbcsr.so.*
%{_libdir}/mpich/lib/libdbcsr_c.so.*

%files mpich-devel
%{_libdir}/mpich/include/dbcsr.h
%{_libdir}/mpich/include/dbcsr_tensor.h
%{_fmoddir}/mpich/dbcsr_api.mod
%{_fmoddir}/mpich/dbcsr_tensor_api.mod
%{_libdir}/mpich/lib/cmake/dbcsr/
%{_libdir}/mpich/lib/libdbcsr.so
%{_libdir}/mpich/lib/libdbcsr_c.so

%changelog
%autochangelog
7 changes: 7 additions & 0 deletions tools/fedora/plans/main.fmf
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
adjust:
# TODO: use initiator == fedora-ci instead
when: initiator is not defined or initiator != packit
discover:
how: fmf
dist-git-source: true
dist-git-extract: dbcsr-*/
5 changes: 5 additions & 0 deletions tools/fedora/plans/rpminspect.fmf
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
plan:
import:
url: https://github.com/packit/tmt-plans
ref: main
name: /plans/rpminspect
10 changes: 10 additions & 0 deletions tools/fedora/plans/rpmlint.fmf
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
prepare:
- how: shell
script: cp ./*.rpmlintrc $TMT_PLAN_DATA/
discover:
how: fmf
filter: "tag: rpmlint"
url: https://github.com/packit/tmt-plans
ref: main
execute:
how: tmt

0 comments on commit 1602599

Please sign in to comment.