File: rules

package info (click to toggle)
scalapack 2.2.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 37,012 kB
  • sloc: fortran: 339,113; ansic: 74,517; makefile: 1,494; sh: 34
file content (256 lines) | stat: -rwxr-xr-x 10,061 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
#! /usr/bin/make -f

include /usr/share/dpkg/architecture.mk

# eventually add -O3 -march=native -mtune=native
export DEB_BUILD_MAINT_OPTIONS = qa=-bug-implicit-func
export DEB_CFLAGS_MAINT_APPEND  = -Wall -pedantic
export DEB_CXXFLAGS_MAINT_APPEND  = -Wall -pedantic
export DEB_FFLAGS_MAINT_APPEND  = -std=legacy
export DEB_LDFLAGS_MAINT_STRIP = -Wl,-Bsymbolic-functions

# DEB_BUILD_MAINT_OPTIONS qa is ignored on powerpc, Bug#1082275
ifeq ($(DEB_HOST_ARCH),powerpc)
  DEB_CFLAGS_MAINT_APPEND += -Wno-error=implicit-function-declaration
endif

ifneq (,$(wildcard /usr/share/mpi-default-dev/debian_defaults))
include /usr/share/mpi-default-dev/debian_defaults
endif
DEFAULT_MPI=$(ARCH_DEFAULT_MPI_IMPL)

empty :=
space := $(empty)$(empty)

export MPI_SUPPORTED=
ifneq (,$(findstring $(space)$(DEB_HOST_ARCH)$(space), $(space)$(OPENMPI_AVAILABLE_ARCHITECTURES)$(space)))
  MPI_SUPPORTED += openmpi
endif
ifneq (,$(findstring $(space)$(DEB_HOST_ARCH)$(space), $(space)$(MPICH_AVAILABLE_ARCHITECTURES)$(space)))
  MPI_SUPPORTED += mpich
endif

include /usr/share/dpkg/pkg-info.mk
SCALAPACK_UPSTREAM_VERSION=$(DEB_VERSION_UPSTREAM)
SCALAPACK_X_Y_VERSION=$(shell echo $(SCALAPACK_UPSTREAM_VERSION) | sed "s/^\(.*\)\.\([^.]*\)$$/\1/")
export SCALAPACK_SOVERSION=$(SCALAPACK_X_Y_VERSION)

# 64-bit build is not supported on all arches
ifeq (64,$(DEB_HOST_ARCH_BITS))
  BIT_BUILDS = 32 64
else
  BIT_BUILDS = 32
  export DH_OPTIONS += \
	-Nlibscalapack64-mpi-dev \
	-Nlibscalapack64-openmpi-dev -Nlibscalapack64-openmpi${SCALAPACK_SOVERSION} \
	-Nlibscalapack64-mpich-dev -Nlibscalapack64-mpich${SCALAPACK_SOVERSION}
endif

%:
	dh $@ --buildsystem=cmake

export PRTE_MCA_plm_ssh_agent=/bin/false                #workaround to start MPI-applications in chroot

export NUMJOBS=1
ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
export NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
endif

extra_flags += \
 -DBUILD_SHARED_LIBS=ON \
 -DSCALAPACK_BUILD_TESTS=ON \
 -DBLA_VENDOR=Generic

# BLA_SIZEOF_INTEGER is a cmake FindLAPACK variable to find 32- or 64-bit interfaces
extra_64bit_flags += \
	-DLIBNAME_SUFFIX=64 \
	-DBLA_SIZEOF_INTEGER=8

common_Fortran_FLAGS=-cpp
Fortran_FLAGS_64=-fdefault-integer-8 -DTEST_INT64=1
C_FLAGS_64=-DInt=long

execute_after_dh_clean:
	cd BLACS/INSTALL; rm -rf xintface Makefile CMakeCache.txt cmake_install.cmake CMakeFiles
	cd PBLAS; rm -f TESTING/PB_Cabort.c TESTING/PB_Cwarn.c TIMING/PB_Cabort.c TIMING/PB_Cwarn.c
	rm -rf build*-openmpi build*-mpich

override_dh_auto_configure-indep:
override_dh_auto_build-indep:
override_dh_auto_install-indep:
override_dh_auto_test-indep:


override_dh_auto_configure-arch:
	for flavor in $(MPI_SUPPORTED); do \
	for BITS in $(BIT_BUILDS); do \
	  if [ $$BITS = 64 ]; then \
	    LIBNAME_SUFFIX=64; \
	    bit_flags='$(extra_64bit_flags)'; \
	    extra_C_FLAGS="$(C_FLAGS_64)"; \
	    extra_Fortran_FLAGS="$(Fortran_FLAGS_64)"; \
	  else \
	    LIBNAME_SUFFIX=; \
	    bit_flags=; \
	    extra_C_FLAGS=; \
	    extra_Fortran_FLAGS=; \
	  fi; \
	  echo "Configure for libscalapack$${LIBNAME_SUFFIX}-$${flavor}" ; \
	  dh_auto_configure --builddirectory=build$${LIBNAME_SUFFIX=}-$${flavor} -- $(extra_flags) $${bit_flags} \
	    "-DCMAKE_C_FLAGS=$(CFLAGS) $${extra_C_FLAGS}"  \
	    "-DCMAKE_Fortran_FLAGS=$(FFLAGS) $(common_Fortran_FLAGS) $${extra_Fortran_FLAGS}" \
	    -DMPI_C_COMPILER=mpicc.$$flavor -DMPI_Fortran_COMPILER=mpif90.$$flavor \
	    -DMPIEXEC_EXECUTABLE=/usr/bin/mpiexec.$$flavor -DMPI_FLAVOR=$$flavor ; \
	done; done

override_dh_auto_build-arch:
	for flavor in $(MPI_SUPPORTED); do \
	for BITS in $(BIT_BUILDS); do \
	  if [ $$BITS = 64 ]; then \
	    LIBNAME_SUFFIX=64; \
	  else \
	    LIBNAME_SUFFIX=; \
	  fi; \
	  echo "Building libscalapack$${LIBNAME_SUFFIX}-$${flavor}" ; \
	  dh_auto_build -O--parallel --builddirectory=build$${LIBNAME_SUFFIX}-$${flavor} ; \
	done; done

override_dh_auto_install-arch:
	echo "scalapack-mpi-dev=libscalapack-$(DEFAULT_MPI)-dev" > debian/libscalapack-mpi-dev.substvars
	echo "scalapack64-mpi-dev=libscalapack64-$(DEFAULT_MPI)-dev" > debian/libscalapack64-mpi-dev.substvars
	for flavor in $(MPI_SUPPORTED); do \
	for BITS in $(BIT_BUILDS); do \
	  if [ $$BITS = 64 ]; then \
	    LIBNAME_SUFFIX=64; \
	  else \
	    LIBNAME_SUFFIX=; \
	  fi; \
	  echo "Installing scalapack$${LIBNAME_SUFFIX}-$${flavor}" ; \
	  dh_auto_install -O--parallel --builddirectory=build$${LIBNAME_SUFFIX}-$${flavor} ; \
	done; done

execute_after_dh_install-arch:
	dh_missing --list-missing
	# test executables contain RUNPATH. Remove it.
	chrpath -d debian/scalapack-mpi-test/usr/lib/$(DEB_HOST_MULTIARCH)/scalapack/*-tests/x*
	chrpath -d debian/scalapack-mpi-test/usr/lib/$(DEB_HOST_MULTIARCH)/scalapack/*-tests/PBLAS/*tst
	chrpath -d debian/scalapack-mpi-test/usr/lib/$(DEB_HOST_MULTIARCH)/scalapack/*-tests/PBLAS/TIMING/*tim


# add --max-parallel=1 to force test in sequential mode
# MPICH testsuite disabled as some tests fail -- why???

# Note: openmpi tests routinely (but unreproducibly) fail on some buildds,
# so don't let test failure halt the build on these arches (but let the tests run)
ARCH_TEST_IGNORE_FAILURE=mips64el

# On some other arches, openmpi3 tests never exit (don't even timeout),
# so skip their tests altogether until a workaround or fix is known.
ARCH_NO_OPENMPI_TEST_LIST=armel armhf i386 mipsel powerpc

# The hppa build does complete, but takes a full day to timeout on half the openmpi3 tests.
# That's too long, so add it to the no-test list
ARCH_NO_OPENMPI_TEST_LIST += hppa

# complex evr tests often time out, and are significantly slower than other tests
# even if they do pass. Skip them both.
SKIP_TESTS_COMMON=x[cz]heevr

# no current general 32-bit skips (see *MPI skips below)
SKIP_TESTS_32 ?=

# xssep, xsgsep and xssyevr are known to fail in the 64-bit build (see README)
# xdsyevr passes but is slow, skip it
SKIP_TESTS_64=xssep xsgsep xssyevr xdsyevr xCbtest xFbtest

# xsllt times out with OpenMPI, but xdllt, xdlu time out with MPICH.
# but all pass in the 64-bit builds. Weird.
SKIP_TESTS_OPENMPI=xsllt
SKIP_TESTS_MPICH=xdllt xdlu

override_dh_auto_test-arch:
ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
	N_TEST_JOBS=`echo "x=$(NUMJOBS)/4; if (x>1) x else 1" | bc` ; \
	exclude_tests=""; \
	for t in $(SKIP_TESTS_COMMON); do \
	  if [ "x$${exclude_tests}" = "x" ]; then \
	    exclude_tests="$$t"; \
	  else \
	    exclude_tests="$${exclude_tests}|$$t"; \
	  fi; \
	done; \
	for BITS in $(BIT_BUILDS); do \
	  if [ $$BITS = 64 ]; then \
	    LIBNAME_SUFFIX=64; \
	    for t in $(SKIP_TESTS_64); do \
	        exclude_tests="$${exclude_tests}|$$t"; \
	    done; \
	  else \
	    LIBNAME_SUFFIX=; \
	    for t in $(SKIP_TESTS_32); do \
	        exclude_tests="$${exclude_tests}|$$t"; \
	    done; \
	  fi; \
	  for flavor in $(MPI_SUPPORTED); do \
	    echo "Running tests for libscalapack$${LIBNAME_SUFFIX}-$${flavor}" ; \
	    echo '************************************************'; \
	    echo "****** TESTING $$flavor BUILD ($${BITS}-bit integers)"; \
	    echo '************************************************'; \
	    for testDir in PBLAS/TESTING PBLAS/TIMING TESTING; do \
	      testfile=build$${LIBNAME_SUFFIX}-$${flavor}/$${testDir}/CTestTestfile.cmake; \
	      if ! grep -q separate_arguments.*ENV.*MPIEXEC_PREFLAGS $$testfile ; then \
	        sed '0,/add_test/ s/add_test/separate_arguments(MPIEXEC_PREFLAGS NATIVE_COMMAND $$ENV{MPIEXEC_PREFLAGS})\nadd_test/' -i $$testfile; \
	        sed 's/"$${MPIEXEC_PREFLAGS}"/$${MPIEXEC_PREFLAGS}/' -i $$testfile; \
	      fi; \
	    done; \
	    RUNTESTS=yes; \
	    if [ "$$flavor" = "openmpi" ]; then \
	      MPIEXEC_PREFLAGS="--allow-run-as-root --oversubscribe"; \
	      case " $(ARCH_NO_OPENMPI_TEST_LIST) " in \
	        *\ $(DEB_HOST_ARCH)\ *) RUNTESTS=no;; \
	      esac; \
	      for t in $(SKIP_TESTS_OPENMPI); do \
	          exclude_tests="$${exclude_tests}|$$t"; \
	      done; \
	    else \
	      unset MPIEXEC_PREFLAGS; \
	      for t in $(SKIP_TESTS_MPICH); do \
	          exclude_tests="$${exclude_tests}|$$t"; \
	      done; \
	    fi; \
	    if [ "$$RUNTESTS" = "yes" ]; then \
	      echo "skipping tests: $${exclude_tests}"; \
	      ( LD_LIBRARY_PATH=$(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH):$(LD_LIBRARY_PATH) \
	        MPIEXEC_PREFLAGS="$${MPIEXEC_PREFLAGS}" dh_auto_test --max-parallel=$${N_TEST_JOBS} --builddirectory=build$${LIBNAME_SUFFIX}-$${flavor} \
			-- ARGS\+="--exclude-regex \"$${exclude_tests}\"" \
			2>&1 | tee build$${LIBNAME_SUFFIX}-$${flavor}/dh_auto_test.log ) || /bin/true; \
	    else \
	      echo Tests have been disabled on $(DEB_HOST_ARCH) | tee build$${LIBNAME_SUFFIX}-$${flavor}/dh_auto_test.log; \
	    fi; \
	    echo '************************************************'; \
	    echo "****** TESTING OF $$flavor BUILD ($${BITS}-bit integers) IS COMPLETE"; \
	    echo '************************************************'; \
	  done; \
	done
	# mpich has been found to Fail some tests but openmpi should not, so only check the openmpi test logs.
	# openmpi may Timeout on slower arches, so only register actual Fails (or SegFaults), assigning them return value 2
	# Test only on linux, since openmpi on other OS (kfreebsd, hurd) does not support fakeroot
	#
	# Tests are hardwired to 4 processors, so ignore failure if less than 4 are used.
	#
	# Test failures in the 64-bit integer builds are reported but do not currently halt the build.
	#
	if [ "$$DEB_BUILD_ARCH_OS" = "linux" ] && $$( grep -qE "Failed|SegFault" build-openmpi/dh_auto_test.log ); then \
	  if [ $(NUMJOBS) -lt 4 ]; then \
	    echo Tests are hardwired to 4 processes. Only $(NUMJOBS) processes were used for the build, so test failures will be ignored.; \
	  fi; \
	  echo "OpenMPI tests failed:"; \
	  grep -E "\(Failed\)|\(SEGFAULT\)" build-openmpi/dh_auto_test.log; \
	  if [ $(NUMJOBS) -ge 4 ]; then \
	    case " $(ARCH_TEST_IGNORE_FAILURE) " in \
	      *\ $(DEB_HOST_ARCH)\ *) echo Test failures ignored on $(DEB_HOST_ARCH);; \
	      *) return 2;; \
	    esac; \
	  fi; \
	fi
endif