Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Fedora packaging #759

Open
wants to merge 3 commits into
base: develop
Choose a base branch
from
Open
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
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
53 changes: 53 additions & 0 deletions .packit.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
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
upstream_tag_template: v{version}

targets:
- fedora-all-x86_64
- fedora-all-aarch64

jobs:
- &copr_build
job: copr_build
trigger: release
owner: lecris
project: release
- <<: *copr_build
trigger: commit
branch: master
project: nightly
update_release: true
- &tests
job: tests
trigger: commit
fmf_path: tools/fedora
- job: copr_build
trigger: pull_request
- <<: *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.
200 changes: 200 additions & 0 deletions tools/fedora/dbcsr.spec
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
# 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
%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
# Backported from https://src.fedoraproject.org/rpms/openmpi/blob/rawhide/f/macros.openmpi
export PRTE_MCA_rmaps_default_mapping_policy=:oversubscribe
%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-*/
9 changes: 9 additions & 0 deletions tools/fedora/plans/rpminspect.fmf
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
plan:
import:
url: https://github.com/packit/tmt-plans
ref: main
name: /plans/rpminspect
adjust:
when: distro == fedora-rawhide
because: Recently rpminspect fails to get the distro-tag
enabled: false
11 changes: 11 additions & 0 deletions tools/fedora/plans/rpmlint.fmf
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
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
enabled: false
Loading