File: rules

package info (click to toggle)
lapack 3.8.0-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 73,036 kB
  • sloc: fortran: 587,347; ansic: 179,104; makefile: 4,651; python: 269; sh: 197
file content (212 lines) | stat: -rwxr-xr-x 8,253 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
#!/usr/bin/make -f

include /usr/share/dpkg/default.mk

SO:=3

# xerblas_ and LAPACK_xerblas must be overrideable by applications
# --dynamic-list does not work with gold, so drop the flag completely
BUILDFLAGS_ENV:=DEB_LDFLAGS_MAINT_STRIP="-Wl,-Bsymbolic-functions"
LDFLAGS:=$(shell $(BUILDFLAGS_ENV) dpkg-buildflags --get LDFLAGS)

# if F77 isn't explicitly set (default or undefined), set it to the compiler for
# our host architecture. This may be a cross compiler
ifneq ($(filter default undefined,$(origin F77)),)
F77 := $(DEB_HOST_GNU_TYPE)-gfortran
endif

FFLAGS:=$(shell dpkg-buildflags --get FFLAGS)
FFLAGS_NOOPT:=$(shell DEB_BUILD_OPTIONS=noopt dpkg-buildflags --get FFLAGS)

# if CC isn't explicitly set (default or undefined), set it to the compiler for
# our host architecture. This may be a cross compiler
ifneq ($(filter default undefined,$(origin CC)),)
CC := $(DEB_HOST_GNU_TYPE)-gcc
endif

CFLAGS:=$(shell dpkg-buildflags --get CFLAGS)
CPPFLAGS:=$(shell dpkg-buildflags --get CPPFLAGS)

ifeq ($(DEB_HOST_ARCH),alpha)
  FFLAGS += -mieee
  FFLAGS_NOOPT += -mieee
endif

# On arches with extended precision, this flag is used
# for BLAS when compiling i{c,z}amax.f and the BLAS testsuite,
# in order to avoid test failures.
# See also debian/patches/icamax-izamax-extended-precision.patch
ifneq (,$(filter $(DEB_HOST_ARCH_CPU),i386 m68k))
  FFLAGS_FLOAT_STORE := -ffloat-store
  export FFLAGS_FLOAT_STORE
endif

FFLAGS_BLAS_TESTSUITE := $(FFLAGS) $(FFLAGS_FLOAT_STORE)

# Using the -frecursive flag is the solution recommended by upstream for #693269
# However, we don't want to use -frecursive for the LAPACK testsuite, it leads to
#  segfaults on mips{,el} (xeigtstz allocates too much space on the stack)
FFLAGS_LAPACK_TESTSUITE := $(FFLAGS)
FFLAGS += -frecursive
FFLAGS_NOOPT += -frecursive

# Support parallel build
ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
	NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
	MAKEFLAGS += -j$(NUMJOBS)
endif

%:
	dh $@

make.inc: INSTALL/make.inc.gfortran
	sed -e "s%\(^CC  *=\).*%\1 $(CC)%1" \
	    -e "s%\(^FORTRAN  *=\).*%\1 $(F77)%1" \
	    -e "s%\(^NOOPT  *=\).*%\1 \$$(PICOPTS) $(FFLAGS_NOOPT)%1" \
	    -e "s%\(^OPTS  *=\).*%\1 \$$(PICOPTS) $(FFLAGS)%1" \
	    -e "s%\(^LOADER  *=\).*%\1 $(F77)%1" \
	    -e "s%\(^LOADOPTS  *=\).*%\1 $(LDFLAGS)%1" \
	    -e "s%\(^ARCH  *=\).*%\1 $(DEB_HOST_GNU_TYPE)-ar%1" \
	    -e "s%\(^RANLIB  *=\).*%\1 $(DEB_HOST_GNU_TYPE)-ranlib%1" \
	    -e "s%\(^CFLAGS  *=\).*%\1 $(CPPFLAGS) \$$(PICOPTS) $(CFLAGS)%1" \
	    -e "s%^#\(LAPACKE_WITH_TMG  *=\)%\1%1" \
	    < $< > $@
	# Build deprecated routines (see #810143)
	echo "BUILD_DEPRECATED=1" >> $@

override_dh_auto_clean: make.inc
	$(MAKE) clean
	rm -rf debian/*_stamp debian/*_results lib*.so* pic/
	rm -rf debian/test/ debian/time/
	rm -f TESTING/tmp TESTING/testing_results.txt
	rm -f LAPACKE/include/lapacke_mangling.h
	rm -f CBLAS/include/cblas_mangling.h
	rm -rf DOCS/explore-html/ DOCS/man/
	rm -f output_err
	rm -f lapack-netlib.pc LAPACKE/lapacke.pc BLAS/blas-netlib.pc
	rm -f make.inc

override_dh_auto_configure: make.inc
	# Create lapack-netlib.pc
	sed -e "s%@LAPACK_VERSION@%$(DEB_VERSION_UPSTREAM)%" \
	    -e "s%@CMAKE_INSTALL_FULL_INCLUDEDIR@%/usr/include/$(DEB_HOST_MULTIARCH)%"  \
	    -e "s%@CMAKE_INSTALL_FULL_LIBDIR@%/usr/lib/$(DEB_HOST_MULTIARCH)%" < lapack.pc.in > lapack-netlib.pc

	# Create lapacke.pc
	sed -e "s%@LAPACK_VERSION@%$(DEB_VERSION_UPSTREAM)%" \
	    -e "s%@CMAKE_INSTALL_FULL_INCLUDEDIR@%/usr/include/$(DEB_HOST_MULTIARCH)%"  \
	    -e "s%@CMAKE_INSTALL_FULL_LIBDIR@%/usr/lib/$(DEB_HOST_MULTIARCH)%" < LAPACKE/lapacke.pc.in > LAPACKE/lapacke.pc

	# Create blas-netlib.pc
	sed -e "s%@LAPACK_VERSION@%$(DEB_VERSION_UPSTREAM)%" \
	    -e "s%@CMAKE_INSTALL_FULL_INCLUDEDIR@%/usr/include/$(DEB_HOST_MULTIARCH)%"  \
	    -e "s%@CMAKE_INSTALL_FULL_LIBDIR@%/usr/lib/$(DEB_HOST_MULTIARCH)%" < BLAS/blas.pc.in > BLAS/blas-netlib.pc

override_dh_auto_build-arch:
	# Build pic libraries
	$(MAKE) cleanlib
	$(MAKE) blaslib cblaslib lapacklib tmglib lapackelib PICOPTS=-fPIC
	mkdir -p pic
	mv librefblas.a pic/librefblas_pic.a
	mv libcblas.a pic/libcblas_pic.a
	mv liblapack.a pic/liblapack_pic.a
	mv libtmglib.a pic/libtmglib_pic.a
	mv liblapacke.a pic/liblapacke_pic.a

	# Build libblas.so.*
	ar d pic/librefblas_pic.a xerbla.o # We want to use the xerbla.o from libcblas_pic.a
	mkdir -p tmp
	cd tmp && ar x ../pic/librefblas_pic.a && ar x ../pic/libcblas_pic.a
	$(F77) -shared -Wl,-soname=libblas.so.$(SO) -o libblas.so.$(DEB_VERSION_UPSTREAM) tmp/*.o $(LDFLAGS)
	rm -rf tmp
	ln -s libblas.so.$(DEB_VERSION_UPSTREAM) libblas.so.$(SO)
	ln -s libblas.so.$(DEB_VERSION_UPSTREAM) libblas.so

	# Build liblapack.so.*
	mkdir -p tmp
	cd tmp && ar x ../pic/liblapack_pic.a
	$(F77) -shared -Wl,-soname=liblapack.so.$(SO) -o liblapack.so.$(DEB_VERSION_UPSTREAM) tmp/*.o  -L. -lblas $(LDFLAGS)
	rm -rf tmp
	ln -s liblapack.so.$(DEB_VERSION_UPSTREAM) liblapack.so.$(SO)
	ln -s liblapack.so.$(DEB_VERSION_UPSTREAM) liblapack.so

	# Build libtmglib.so.*
	mkdir -p tmp
	cd tmp && ar x ../pic/libtmglib_pic.a
	$(F77) -shared -Wl,-soname=libtmglib.so.$(SO) -o libtmglib.so.$(DEB_VERSION_UPSTREAM) tmp/*.o  -L. -lblas -llapack $(LDFLAGS)
	rm -rf tmp
	ln -s libtmglib.so.$(DEB_VERSION_UPSTREAM) libtmglib.so.$(SO)
	ln -s libtmglib.so.$(DEB_VERSION_UPSTREAM) libtmglib.so

	# Build liblapacke.so.*
	mkdir -p tmp
	cd tmp && ar x ../pic/liblapacke_pic.a
	$(CC) -shared -Wl,-soname=liblapacke.so.$(SO) -o liblapacke.so.$(DEB_VERSION_UPSTREAM) tmp/*.o  -L. -lblas -llapack -ltmglib $(LDFLAGS)
	rm -rf tmp
	ln -s liblapacke.so.$(DEB_VERSION_UPSTREAM) liblapacke.so.$(SO)
	ln -s liblapacke.so.$(DEB_VERSION_UPSTREAM) liblapacke.so

	# Build static versions
	$(MAKE) cleanlib
	$(MAKE) blaslib cblaslib lapacklib tmglib lapackelib

	# Build libblas.a
	ar d librefblas.a xerbla.o # We want to use the xerbla.o from libcblas.a
	mkdir -p tmp
	cd tmp && ar x ../librefblas.a && ar x ../libcblas.a
	ar r libblas.a $$(env LC_ALL=C ls tmp/*.o)
	rm -rf tmp

	# Build the test programs, in order to avoid FTBFS if DEB_BUILD_OPTIONS contains nocheck
	$(MAKE) OPTS="$(FFLAGS_BLAS_TESTSUITE)" BLASLIB="../../libblas.so" -C BLAS/TESTING
	$(MAKE) OPTS="$(FFLAGS_BLAS_TESTSUITE)" BLASLIB="../../libblas.so" CBLASLIB="" -C CBLAS/testing
	$(MAKE) OPTS="$(FFLAGS_LAPACK_TESTSUITE)" BLASLIB="../../libblas.so" LAPACKLIB="liblapack.so" TMGLIB="libtmglib.so" -C TESTING EIG/xeigtstc EIG/xeigtstd EIG/xeigtsts EIG/xeigtstz LIN/xlintstc LIN/xlintstd LIN/xlintsts LIN/xlintstz LIN/xlintstds LIN/xlintstrfc LIN/xlintstrfd LIN/xlintstrfs LIN/xlintstrfz LIN/xlintstzc

override_dh_auto_build-indep:
ifeq (,$(filter nodoc,$(DEB_BUILD_OPTIONS)))
	$(MAKE) html
	# Remove useless doxygen-generated files
	find DOCS/explore-html/ \( -name '*.map' -or -name '*.md5' \) -delete

	$(MAKE) man
	# Remove directory reference files, because they include local build pathnames
	# (but don't delete some __*__.3 files)
	rm DOCS/man/man3/_[a-zA-Z]*
endif

override_dh_auto_test-arch:
ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
	# Run BLAS tests, output the result, and stop if one test fails
	LD_LIBRARY_PATH=$$(pwd):$$LD_LIBRARY_PATH $(MAKE) blas_testing
	cat BLAS/TESTING/*.out
	! grep -q -i fail BLAS/TESTING/*.out

	# Run CBLAS tests, output the result, and stop if one test fails
	LD_LIBRARY_PATH=$$(pwd):$$LD_LIBRARY_PATH $(MAKE) cblas_testing
	cat CBLAS/testing/*.out
	! grep -q -i fail CBLAS/testing/*.out

	# Run LAPACK tests, but don't stop if one test fails
	# Only a summary is displayed; full test results in TESTING/testing_results.txt
	LD_LIBRARY_PATH=$$(pwd):$$LD_LIBRARY_PATH $(MAKE) lapack_testing
endif

override_dh_makeshlibs:
	dh_makeshlibs -pliblapack3 -V "liblapack3 | liblapack.so.3" -n
	dh_makeshlibs -plibblas3 -V "libblas3 | libblas.so.3" -n
	dh_makeshlibs -a -Nliblapack3 -Nlibblas3

override_dh_shlibdeps:
	dh_shlibdeps -a -l $$(pwd)

GENERATED_MAINTAINER_SCRIPTS := $(patsubst %.in,%,$(wildcard debian/*.postinst.in debian/*.prerm.in))

$(GENERATED_MAINTAINER_SCRIPTS): %: %.in
	sed "s%@DEB_HOST_MULTIARCH@%$(DEB_HOST_MULTIARCH)%g" < $< > $@

override_dh_install: $(GENERATED_MAINTAINER_SCRIPTS)
	dh_install

override_dh_clean:
	dh_clean
	rm -f $(GENERATED_MAINTAINER_SCRIPTS)