diff --git a/9000-fix-build-error-for-binutils-2.40.patch b/9000-fix-build-error-for-binutils-2.40.patch new file mode 100644 index 0000000000000000000000000000000000000000..74b72ed355f22a730379ea0fcb9dffcc2300fba6 --- /dev/null +++ b/9000-fix-build-error-for-binutils-2.40.patch @@ -0,0 +1,53 @@ +From 8d13c31565087b99571202b4acc5e1e26cdebd9f Mon Sep 17 00:00:00 2001 +From: panchenbo +Date: Wed, 17 Jan 2024 14:23:41 +0800 +Subject: [PATCH] fix build error for binutils 2.40 + +--- + build-backend/configure | 2 +- + build-mpi/configure | 2 +- + build-shmem/configure | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/build-backend/configure b/build-backend/configure +index 525abed..645cab4 100755 +--- a/build-backend/configure ++++ b/build-backend/configure +@@ -37855,7 +37855,7 @@ fi + if test "${with_libbfd_include:+set}" != set; then : + as_fn_error $? "internal: with_libbfd_include not set" "$LINENO" 5 + fi +-SCOREP_LIBBFD_LIBS="-lbfd" ++SCOREP_LIBBFD_LIBS="-lbfd -lsframe" + + if test "x${_afs_lib_download}" = xyes; then : + #--- Delegated download for libbfd: begin +diff --git a/build-mpi/configure b/build-mpi/configure +index 8f68032..0e88ee3 100755 +--- a/build-mpi/configure ++++ b/build-mpi/configure +@@ -35815,7 +35815,7 @@ fi + if test "${with_libbfd_include:+set}" != set; then : + as_fn_error $? "internal: with_libbfd_include not set" "$LINENO" 5 + fi +-SCOREP_LIBBFD_LIBS="-lbfd" ++SCOREP_LIBBFD_LIBS="-lbfd -lsframe" + + if test "x${_afs_lib_download}" = xyes; then : + #--- Delegated download for libbfd: begin +diff --git a/build-shmem/configure b/build-shmem/configure +index e49cd8e..fb51a73 100755 +--- a/build-shmem/configure ++++ b/build-shmem/configure +@@ -35624,7 +35624,7 @@ fi + if test "${with_libbfd_include:+set}" != set; then : + as_fn_error $? "internal: with_libbfd_include not set" "$LINENO" 5 + fi +-SCOREP_LIBBFD_LIBS="-lbfd" ++SCOREP_LIBBFD_LIBS="-lbfd -lsframe" + + if test "x${_afs_lib_download}" = xyes; then : + #--- Delegated download for libbfd: begin +-- +2.27.0 + diff --git a/scorep-8.0.tar.gz b/scorep-8.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..15a80e7f14c49f0190aa9a03a04fc85345085eaf Binary files /dev/null and b/scorep-8.0.tar.gz differ diff --git a/scorep-rpath.patch b/scorep-rpath.patch new file mode 100644 index 0000000000000000000000000000000000000000..70fb91eea3a6be740f79c33429e6678fceef94da --- /dev/null +++ b/scorep-rpath.patch @@ -0,0 +1,12 @@ +--- scorep-4.1/src/tools/config/scorep_config_tool_backend.h.in~ 2018-10-10 08:53:13.542069515 +0100 ++++ scorep-4.1/src/tools/config/scorep_config_tool_backend.h.in 2018-10-27 13:03:31.351932477 +0100 +@@ -28,7 +28,7 @@ + #define OPARI "@OPARI2_BINDIR@/opari2" + #define OPARI_CONFIG "@OPARI2_BINDIR@/opari2-config" + #define PDT "@SCOREP_PDT_PATH@" +-#define USE_LIBDIR_FLAG @HARDCODE_INTO_LIBS@ ++#define USE_LIBDIR_FLAG 0 + #define LIBDIR_FLAG_CC "@HARDCODE_LIBDIR_FLAG_CC@" + #define LIBDIR_FLAG_CXX "@HARDCODE_LIBDIR_FLAG_CXX@" + #define LIBDIR_FLAG_FC "@HARDCODE_LIBDIR_FLAG_FC@" + diff --git a/scorep.spec b/scorep.spec new file mode 100644 index 0000000000000000000000000000000000000000..f51cc116e15b7ff502056342d39362417293807c --- /dev/null +++ b/scorep.spec @@ -0,0 +1,310 @@ +Name: scorep +Version: 8.0 +Release: 1 +Summary: Scalable Performance Measurement Infrastructure for Parallel Codes +License: BSD-3-Clause +URL: http://www.vi-hps.org/projects/score-p/ +Source0: http://perftools.pages.jsc.fz-juelich.de/cicd/scorep/tags/scorep-%{version}/scorep-%{version}.tar.gz + +Patch1: scorep-rpath.patch +Patch9000: 9000-fix-build-error-for-binutils-2.40.patch + +BuildRequires: make gcc-gfortran bison flex binutils-devel chrpath cube-libs-devel >= 4.8 ocl-icd-devel opari2 >= 2.0 otf2-devel >= 3.0 +BuildRequires: papi-devel gcc-plugin-devel environment-modules +# Required for cubelib to build scorep-score against cubew 4.5 +BuildRequires: gcc-c++ automake libtool +Requires: %{name}-libs%{?_isa} = %{version}-%{release} +Requires: binutils-devel%{?_isa} +Requires: cube-libs-devel%{?_isa} >= 4.8 +Requires: otf2-devel%{?_isa} >= 3.0 +Requires: papi-devel%{?_isa} +Requires: ocl-icd-devel%{?_isa} +Requires: opari2%{?_isa} >= 2.0 + +ExclusiveArch: x86_64 aarch64 + +%global with_mpich 1 +%global with_openmpi 1 + +%if %{with_mpich} +%global mpi_list mpich +%endif +%if %{with_openmpi} +%global mpi_list %{?mpi_list} openmpi +%endif + +# Avoid missing symbol link errors in test +%undefine _ld_as_needed +# Avoid in test +# /usr/bin/ld: pomp_tpd_: TLS reference in ./.libs/libscorep_adapter_opari2_op nmp_event.so mismatches non-TLS reference in jacobi_omp_f90-jacobi.mod.o +%undefine _hardened_build + +%global __requires_exclude_from ^%{_libdir}(/(openmpi|mpich)/lib)?/libscorep_.*|^%{_docdir}/.*$ + + +%global desc \ +The Score-P (Scalable Performance Measurement Infrastructure for\ +Parallel Codes) measurement infrastructure is a highly scalable and\ +easy-to-use tool suite for profiling and event trace recording of\ +HPC applications. + +%description +%desc + +%package_help + +%package libs +Summary: Score-P runtime libraries +# This is useful at runtime. +Requires: %{name}-config%{?_isa} = %{version}-%{release} + +%description libs +Score-P runtime libraries. + +# This is relevant for Scalasca analysis, at least, without the libraries. +%package config +Summary: Score-P configuration files + +%description config +Score-P configuration files. + +%if %{with_mpich} +%package mpich +Summary: Scalable Performance Measurement Infrastructure for Parallel Codes for mpich +BuildRequires: mpich-devel +Requires: %{name}-mpich-libs%{?_isa} = %{version}-%{release} +Requires: cube-devel%{?_isa} >= 4.5 +Requires: otf2-devel%{?_isa} >= 2.3 +Requires: papi-devel%{?_isa} + +%description mpich +%desc + +This package was compiled with mpich. + + +%package mpich-libs +Summary: Score-P mpich runtime libraries +Requires: %{name}-mpich-config%{?_isa} = %{version}-%{release} + +%description mpich-libs +Score-P mpich runtime libraries. + +%package mpich-config +Summary: Score-P mpich configuration files + +%description mpich-config +Score-P mpich configuration files. +%endif + + +%if %{with_openmpi} +%package openmpi +Summary: Scalable Performance Measurement Infrastructure for Parallel Codes for openmpi +BuildRequires: openmpi-devel +Requires: %{name}-openmpi-libs%{?_isa} = %{version}-%{release} +Requires: cube-devel%{?_isa} >= 4.5 +Requires: otf2-devel%{?_isa} >= 2.3 +Requires: papi-devel%{?_isa} + +%description openmpi +%desc + +This package was compiled with openmpi. + +%package openmpi-libs +Summary: Score-P openmpi runtime libraries +Requires: %{name}-openmpi-config%{?_isa} = %{version}-%{release} + +%description openmpi-libs +Score-P openmpi runtime libraries. + +%package openmpi-config +Summary: Score-P openmpi configuration files + +%description openmpi-config +Score-P openmpi configuration files. +%endif + +%prep +%setup -q +# Bundled libs in vendor/ +rm -rf vendor/{opari2,otf2,cubew,cubelib} +mkdir bin +# configure expects llvm-config +ln -s %_bindir/llvm-config-%__isa_bits bin/llvm-config +%patch 1 -p1 -b .rpath +%patch 9000 -p1 -b .binutils-2.40 + +%build +# This package uses -Wl,-wrap to wrap calls at link time. This is incompatible +# with LTO. +# Disable LTO +%define _lto_cflags %{nil} + +%global _configure ../configure +# It doesn't build on aarch64 due to missing ELF definitions +# Fixme: --disable-silent-rules or V=1 doesn't work in all parts of the build +%global configure_opts --enable-shared --disable-static --disable-silent-rules + +cp /usr/lib/rpm/%{_vendor}/config.{sub,guess} build-config/ + +# Build serial version +mkdir serial +cd serial +%configure %{configure_opts} --without-mpi --without-shmem +find -name Makefile -exec sed -r -i 's,-L%{_libdir}/?( |$),,g;s,-L/usr/lib/../%{_lib} ,,g' {} \; + +%make_build V=1 +cd - + +# Build MPI versions +for mpi in %{mpi_list} +do + mkdir $mpi + cd $mpi + module load mpi/$mpi-%{_arch} + %configure %{configure_opts} \ + --libdir=%{_libdir}/$mpi/lib \ + --bindir=%{_libdir}/$mpi/bin \ + --sbindir=%{_libdir}/$mpi/sbin \ + --datadir=%{_libdir}/$mpi/share \ + --includedir=%{_includedir}/$mpi-%{_arch} \ + --mandir=%{_libdir}/$mpi/share/man \ + --with-mpi=$mpi + find -name Makefile -exec sed -r -i 's,-L%{_libdir}/?( |$),,g;s,-L/usr/lib/../%{_lib} ,,g' {} \; + sed -i -e 's/HARDCODE_INTO_LIBS"]="1"/HARDCODE_INTO_LIBS"]="0"/' \ + -e "s/hardcode_into_libs='yes'/hardcode_into_libs='no'/" \ + build-backend/config.status + + %make_build V=1 + module purge + cd - +done + + +%install +%make_install -C serial + +for mpi in %{mpi_list} +do + module load mpi/$mpi-%{_arch} + %make_install -C $mpi + module purge +done +find %{buildroot} -name '*.la' -exec rm -f {} ';' +find %{buildroot} -name '*.a' -delete + +# Strip rpath +chrpath -d %{buildroot}%{_libdir}/*.so.* %{buildroot}%{_bindir}/scorep-score + +# Fixme: I haven't figured out how to get this re-built with the final +# build-gcc-plugin result; kludge it for now. +find %{buildroot} -name scorep.summary | xargs sed -i -e "s|\ +no, missing plug-in headers, please install|\ +yes, using the C++ compiler and -I$(%_bindir/gcc -print-file-name=plugin/include)|" + +%ldconfig_scriptlets libs + +%check +%if %{with_openmpi} +%_openmpi_load +OMPI_MCA_rmaps_base_oversubscribe=1 \ +make -C openmpi check V=1 +%else +make -C serial check V=1 +%endif + + +%files +%license COPYING +%doc AUTHORS ChangeLog README.md THANKS OPEN_ISSUES +%{_bindir}/scorep +%{_bindir}/scorep-backend-info +%{_bindir}/scorep-g++ +%{_bindir}/scorep-gcc +%{_bindir}/scorep-gfortran +%{_bindir}/scorep-info +%{_bindir}/scorep-score +%{_bindir}/scorep-wrapper +%{_bindir}/scorep-preload-init +%{_libdir}/scorep/ +%{_includedir}/scorep/ +# Are the libtools in here necessary (different from vanilla)? +%{_libexecdir}/scorep + +%files help +%{_defaultdocdir}/scorep/ + +%files libs +%license COPYING +%{_libdir}/libscorep_*.so* + +%files config +%license COPYING +%{_bindir}/scorep-config +%{_datadir}/scorep/ + +%if %{with_mpich} +%files mpich +%license COPYING +%doc AUTHORS ChangeLog README.md THANKS OPEN_ISSUES +%{_libdir}/mpich/bin/scorep +%{_libdir}/mpich/bin/scorep-backend-info +%{_libdir}/mpich/bin/scorep-g++ +%{_libdir}/mpich/bin/scorep-gcc +%{_libdir}/mpich/bin/scorep-gfortran +%{_libdir}/mpich/bin/scorep-info +%{_libdir}/mpich/bin/scorep-mpicc +%{_libdir}/mpich/bin/scorep-mpicxx +%{_libdir}/mpich/bin/scorep-mpif77 +%{_libdir}/mpich/bin/scorep-mpif90 +%{_libdir}/mpich/bin/scorep-score +%{_libdir}/mpich/bin/scorep-wrapper +%{_libdir}/mpich/bin/scorep-preload-init +%{_libdir}/mpich/lib/scorep/ +%{_includedir}/mpich-%{_arch}/scorep/ + +%files mpich-libs +%license COPYING +%{_libdir}/mpich/lib/*.so* + +%files mpich-config +%license COPYING +%{_libdir}/mpich/bin/scorep-config +%{_libdir}/mpich/share/scorep +%endif + +%if %{with_openmpi} +%files openmpi +%license COPYING +%doc AUTHORS ChangeLog README.md THANKS OPEN_ISSUES +%{_libdir}/openmpi/bin/scorep +%{_libdir}/openmpi/bin/scorep-backend-info +%{_libdir}/openmpi/bin/scorep-g++ +%{_libdir}/openmpi/bin/scorep-gcc +%{_libdir}/openmpi/bin/scorep-gfortran +%{_libdir}/openmpi/bin/scorep-info +%{_libdir}/openmpi/bin/scorep-mpicc +%{_libdir}/openmpi/bin/scorep-mpicxx +%{_libdir}/openmpi/bin/scorep-mpif77 +%{_libdir}/openmpi/bin/scorep-mpif90 +%{_libdir}/openmpi/bin/scorep-score +%{_libdir}/openmpi/bin/scorep-wrapper +%{_libdir}/openmpi/bin/scorep-preload-init +%{_libdir}/openmpi/lib/scorep/ +%{_includedir}/openmpi-%{_arch}/scorep/ + +%files openmpi-libs +%license COPYING +%{_libdir}/openmpi/lib/*.so* + +%files openmpi-config +%license COPYING +%{_libdir}/openmpi/bin/scorep-config +%{_libdir}/openmpi/share/scorep +%endif + +%changelog +* Tue Jan 16 2024 panchenbo - 8.0-1 +- project init