diff --git a/_multibuild b/_multibuild new file mode 100644 index 0000000..86af7cf --- /dev/null +++ b/_multibuild @@ -0,0 +1,4 @@ + + serial + gnu-hpc + diff --git a/metis-makefile-c-directives.patch b/metis-makefile-c-directives.patch new file mode 100644 index 0000000..d69ed44 --- /dev/null +++ b/metis-makefile-c-directives.patch @@ -0,0 +1,15 @@ +Index: metis-5.1.0/Makefile +=================================================================== +--- metis-5.1.0.orig/Makefile ++++ metis-5.1.0/Makefile +@@ -51,6 +51,10 @@ endif + ifneq ($(cc), not-set) + CONFIG_FLAGS += -DCMAKE_C_COMPILER=$(cc) + endif ++ifneq ($(cflags), not-set) ++ CONFIG_FLAGS += -DCMAKE_C_FLAGS="$(cflags)" -DCMAKE_CXX_FLAGS="$(cflags)" ++endif ++ + + VERNUM=5.1.0 + PKGNAME=metis-$(VERNUM) diff --git a/metis.changes b/metis.changes index 4d049e0..63e2ff7 100644 --- a/metis.changes +++ b/metis.changes @@ -1,3 +1,16 @@ +------------------------------------------------------------------- +Fri Oct 26 09:27:45 UTC 2018 - eich@suse.com + +- General spec file clean up. +- Touch-up to the HPC build. + +------------------------------------------------------------------- +Thu Nov 30 13:22:30 UTC 2017 - jjolly@suse.com + +- Implemented suse-hpc packaging +- Added metis-makefile-c-directives.patch + - Provides cflags option to help provide metis native build process + ------------------------------------------------------------------- Fri Jun 20 08:38:47 UTC 2014 - dmitry_r@opensuse.org diff --git a/metis.spec b/metis.spec index c1b7bb9..9fbd58c 100644 --- a/metis.spec +++ b/metis.spec @@ -1,7 +1,7 @@ # # spec file for package metis # -# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -16,22 +16,89 @@ # -Name: metis -Version: 5.1.0 +%global flavor @BUILD_FLAVOR@%{nil} + +%define vers 5.1.0 +%define _vers 5_1_0 +%define short_ver 5.1 +%define src_ver %{version} +%define pname metis %define somajor 5 + +%if "%{flavor}" == "" +ExclusiveArch: do_not_build +%define package_name %pname +%bcond_with hpc +%endif + +%if "%{flavor}" == "serial" +%bcond_with hpc +%endif + +%if "%{flavor}" == "gnu-hpc" +%bcond_without hpc +%global compiler_family gnu +%undefine c_f_ver +%endif + +%if "%{flavor}" == "gnu6-hpc" +%bcond_without hpc +%define compiler_family gnu +%define c_f_ver 6 +%undefine mpi_flavor +%endif + +%if %{without hpc} +%if 0%{!?package_name:1} +%define package_name %{pname} +%endif +%define p_prefix %_prefix +%define p_includedir %_includedir +%define p_libdir %_libdir +%define p_bindir %_bindir +%define p_mandir %_mandir +%define p_datadir %_datadir +%define p_infodir %_infodir +%define libname lib%{pname}%{somajor} + +%else + +%define package_name %{hpc_package_name %_vers} +%define p_prefix %hpc_prefix +%define p_includedir %hpc_includedir +%define p_libdir %hpc_libdir +%define p_bindir %hpc_bindir +%define p_mandir %hpc_mandir +%define p_datadir %hpc_datadir +%define p_infodir %hpc_infodir +%define libname lib%{pname}%{hpc_package_name_tail %{_vers}} + +%{hpc_init -c %{compiler_family} %{?c_f_ver:-v %{c_f_ver}} %{?ext:-e %{ext}}} +%endif + +Name: %{package_name} +Version: %{vers} Release: 0 Summary: Serial Graph Partitioning and Fill-reducing Matrix Ordering License: Apache-2.0 Group: Productivity/Scientific/Math Url: http://glaros.dtc.umn.edu/gkhome/metis/metis/overview -Source0: http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/%{name}-%{version}.tar.gz +Source0: http://glaros.dtc.umn.edu/gkhome/fetch/sw/metis/%{pname}-%{version}.tar.gz # PATCH-FIX-OPENSUSE metis-cmake.patch Patch1: metis-cmake.patch # PATCH-FIX-OPENSUSE metis-programs-no-compilation-time.patch -- Fix W: file-contains-date-and-time Patch2: metis-programs-no-compilation-time.patch +Patch3: metis-makefile-c-directives.patch BuildRequires: cmake >= 2.8 BuildRequires: gcc BuildRequires: gcc-c++ +%if %{with hpc} +%hpc_requires +BuildRequires: %{compiler_family}%{?c_f_ver}-compilers-hpc-macros-devel +BuildRequires: lua-lmod +BuildRequires: suse-hpc +%endif + Recommends: %{name}-doc = %{version} BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -41,20 +108,29 @@ and computing fill-reducing orderings of sparse matrices. The underlying algorit used by METIS are based on the state-of-the-art multilevel paradigm that has been shown to produce high quality results and scale to very large problems. -%package -n libmetis%{somajor} -Summary: Serial Graph Partitioning and Fill-reducing Matrix Ordering library -Group: System/Libraries +%{?with_hpc:%{hpc_master_package}} -%description -n libmetis%{somajor} +%package -n %{libname} +Summary: Serial Graph Partitioning and Fill-reducing Matrix Ordering library +License: Apache-2.0 +Group: System/Libraries +Obsoletes: %libname < %{version} +%{?with_hpc:Requires: %{name}-module = %version} + +%description -n %{libname} METIS library provides to partitioning unstructured graphs and hypergraph and computing fill-reducing orderings of sparse matrices. The underlying algorithms used by METIS are based on the state-of-the-art multilevel paradigm that has been shown to produce high quality results and scale to very large problems. +%{?with_hpc:%{hpc_master_package -l -L}} + %package devel Summary: Metis development files +License: Apache-2.0 Group: Development/Libraries/C and C++ -Requires: libmetis%{somajor} = %{version} +Requires: %libname = %{version} +%{?with_hpc:%hpc_requires_devel} %description devel METIS library provides to partitioning unstructured graphs and hypergraph @@ -64,8 +140,11 @@ shown to produce high quality results and scale to very large problems. This package provides development files. +%{?with_hpc:%{hpc_master_package devel}} + %package doc Summary: Metis documentation +License: Apache-2.0 Group: Documentation/Other BuildArch: noarch @@ -75,54 +154,109 @@ and computing fill-reducing orderings of sparse matrices. The underlying algorit used by METIS are based on the state-of-the-art multilevel paradigm that has been shown to produce high quality results and scale to very large problems. +%{?with_hpc:%{hpc_master_package doc}} + + %prep -%setup -q +%{?with_hpc: %hpc_debug} +%setup -q -n %{pname}-%{version} %patch1 -p1 %patch2 -p1 +%patch3 -p1 # set width (32 or 64 bits) of the elementary data type, see Install.txt sed -i 's|#define IDXTYPEWIDTH 32|#define IDXTYPEWIDTH %{__isa_bits}|' include/metis.h %build -%cmake \ - -DCMAKE_C_FLAGS="%{optflags} -fopenmp -pthread" \ - -DCMAKE_CXX_FLAGS="%{optflags} -fopenmp -pthread" \ - .. + +%if %{with hpc} +%hpc_debug +%hpc_setup_compiler +%endif + +make config shared=1 prefix=%{p_prefix} cflags="%{optflags} -fopenmp -pthread -fpie -pie" ldflags="-pie" make %{?_smp_mflags} %install -%cmake_install +%{?with_hpc:%hpc_setup} +%{?with_hpc:%hpc_debug} +make install DESTDIR=%{buildroot} + +%if %{with hpc} +%{hpc_write_pkgconfig -n %{pname} -l lib%{pname}} + +%hpc_write_modules_files +#%%Module1.0##################################################################### + +proc ModulesHelp { } { + +puts stderr " " +puts stderr "This module loads the %{pname} library built with the %{compiler_family} compiler toolchain." +puts stderr "\nVersion %{version}\n" + +} +module-whatis "Name: %{pname} built with %{compiler_family} toolchain" +module-whatis "Version: %{version}" +module-whatis "Category: runtime library" +module-whatis "Description: %{summary}" +module-whatis "%{url}" + +set version %{version} + +prepend-path PATH %{hpc_bindir} +prepend-path LD_LIBRARY_PATH %{hpc_libdir} + +setenv %{hpc_upcase %pname}_DIR %{hpc_prefix} +setenv %{hpc_upcase %pname}_BIN %{hpc_bindir} +setenv %{hpc_upcase %pname}_LIB %{hpc_libdir} + +if {[file isdirectory %{hpc_includedir}]} { +prepend-path LIBRARY_PATH %{hpc_libdir} +prepend-path CPATH %{hpc_includedir} +prepend-path C_INCLUDE_PATH %{hpc_includedir} +prepend-path CPLUS_INCLUDE_PATH %{hpc_includedir} +prepend-path INCLUDE %{hpc_includedir} + +setenv %{hpc_upcase %pname}_INC %{hpc_includedir} +} + +family "%pname" + +EOF +%endif %check -cp -p %{buildroot}%{_bindir}/* graphs +cp -p %{buildroot}%{p_bindir}/* graphs pushd graphs -LD_LIBRARY_PATH=%{buildroot}%{_libdir}:$LD_LIBRARY_PATH ./ndmetis mdual.graph -LD_LIBRARY_PATH=%{buildroot}%{_libdir}:$LD_LIBRARY_PATH ./mpmetis metis.mesh 2 -LD_LIBRARY_PATH=%{buildroot}%{_libdir}:$LD_LIBRARY_PATH ./gpmetis test.mgraph 4 -LD_LIBRARY_PATH=%{buildroot}%{_libdir}:$LD_LIBRARY_PATH ./gpmetis copter2.graph 4 -LD_LIBRARY_PATH=%{buildroot}%{_libdir}:$LD_LIBRARY_PATH ./graphchk 4elt.graph +LD_LIBRARY_PATH=%{buildroot}%{p_libdir}:$LD_LIBRARY_PATH ./ndmetis mdual.graph +LD_LIBRARY_PATH=%{buildroot}%{p_libdir}:$LD_LIBRARY_PATH ./mpmetis metis.mesh 2 +LD_LIBRARY_PATH=%{buildroot}%{p_libdir}:$LD_LIBRARY_PATH ./gpmetis test.mgraph 4 +LD_LIBRARY_PATH=%{buildroot}%{p_libdir}:$LD_LIBRARY_PATH ./gpmetis copter2.graph 4 +LD_LIBRARY_PATH=%{buildroot}%{p_libdir}:$LD_LIBRARY_PATH ./graphchk 4elt.graph popd -%post -n libmetis%{somajor} -p /sbin/ldconfig +%post -n %libname -p /sbin/ldconfig -%postun -n libmetis%{somajor} -p /sbin/ldconfig +%postun -n %libname -p /sbin/ldconfig %files -%defattr(-,root,root) -%doc Changelog LICENSE.txt -%{_bindir}/* +%{?with_hpc:%dir %p_bindir} +%doc Changelog +%license LICENSE.txt +%{p_bindir}/* -%files -n libmetis%{somajor} -%defattr(-,root,root) -%{_libdir}/libmetis.so.%{somajor}* +%files -n %{libname} +%{?with_hpc:%hpc_dirs} +%{?hpc_modules_files} +%{p_libdir}/lib%{pname}.so.%{somajor}* %files devel -%defattr(-,root,root) -%{_includedir}/%{name}.h -%{_libdir}/libmetis.so +%{?with_hpc:%dir %{p_includedir}} +%{p_includedir}/%{pname}.h +%{p_libdir}/lib%{pname}.so +%{?with_hpc:%{hpc_pkgconfig_file -n %{pname}}} %files doc -%defattr(-,root,root) %doc manual/manual.pdf %changelog