-
Notifications
You must be signed in to change notification settings - Fork 2
/
Makefile.am
191 lines (159 loc) · 6.72 KB
/
Makefile.am
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
# Meagre-Crowd: A sparse distributed matrix solver testbench for performance benchmarking.
# Copyright (C) 2010 Alistair Boyle <alistair.js.boyle@gmail.com>
#
# This file is part of Meagre-Crowd.
#
# Meagre-Crowd program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# build to GNU standards
AUTOMAKE_OPTIONS = gnu
# the actual program to be installed at the end
bin_PROGRAMS = meagre-crowd
meagre_crowd_SOURCES = src/meagre-crowd.c \
src/perftimer.c src/matrix.c src/matrix_share.c src/args.c src/file.c src/solvers.c
# the tests
BUILT_TESTS = tests/file tests/helloworld-mpi tests/unit-perftimer tests/unit-matrix
if HAVE_MUMPS
meagre_crowd_SOURCES += src/solver_mumps.c
BUILT_TESTS += tests/helloworld-mumps
BUILT_TESTS += tests/mumps-file
endif
if HAVE_UMFPACK
meagre_crowd_SOURCES += src/solver_umfpack.c
BUILT_TESTS += tests/hello-umfpack
endif
if HAVE_CHOLMOD
meagre_crowd_SOURCES += src/solver_cholmod.c
endif
if HAVE_TAUCS
meagre_crowd_SOURCES += src/solver_taucs.c
endif
if HAVE_PARDISO
meagre_crowd_SOURCES += src/solver_pardiso.c
BUILT_TESTS += tests/hello-pardiso
endif
if HAVE_WSMP
meagre_crowd_SOURCES += src/solver_wsmp.c
BUILT_TESTS += tests/helloworld-wsmp
endif
if HAVE_SUPERLU_DIST
meagre_crowd_SOURCES += src/solver_superlu_dist.c
endif
# TODO make openMP optional... OPENMP_CFLAGS, PTHREADS and FLIBS are all required only for Paradiso!
LIBS += $(PTHREAD_LIBS) $(FLIBS) $(MPILIBS)
AM_CFLAGS = $(CFLAGS) $(OPENMP_CFLAGS) $(PTHREAD_CFLAGS) -Werror #-Wextra
# this is required for Sun systems, but will break when we want to do the same for MPI... (mpicc)
#meagre_crowd_CC = $(PTHREAD_CC)
# header files that need to be distributed but not installed
noinst_HEADERS = src/perftimer.h src/matrix.h src/matrix_share.h src/args.h src/file.h \
src/solvers.h src/solver_lookup.h \
src/solver_mumps.h src/solver_umfpack.h src/solver_cholmod.h \
src/solver_pardiso.h src/solver_taucs.h src/solver_wsmp.h \
src/solver_superlu_dist.h
# want these scripts installed in the end
bin_SCRIPTS = launch_jobs collect_results
# some random files we want to distribute with the package tar
EXTRA_DIST = get_dependencies $(bin_SCRIPTS) \
tests/unsym.mm tests/sym.mm tests/sym_posdef.mm \
tests/rhs1.mm \
tests/unsym-default-ans.mm tests/sym-default-ans.mm tests/sym_posdef-default-ans.mm \
tests/unsym-rhs1-ans.mm tests/sym-rhs1-ans.mm tests/sym_posdef-rhs1-ans.mm \
tests/test.hb tests/test.rb tests/unsym7sp.mat \
ChangeLog README NEWS INSTALL LICENSE COPYING COPYING.LESSER
#TESTS = $(BUILT_TESTS)
check_PROGRAMS = $(BUILT_TESTS)
tests_unit_perftimer_SOURCES = tests/unit-perftimer.c src/perftimer.c
tests_unit_perftimer_CPPFLAGS = -I$(srcdir)/src
tests_unit_matrix_SOURCES = tests/unit-matrix.c src/matrix.c
tests_unit_matrix_CPPFLAGS = -I$(srcdir)/src
clean-local: clean-local-check
-rm -f src/*.lo
maintainer-clean-local:
-rm -f COPYING COPYING.LESSER aclocal.m4 configure ChangeLog Makefile.in src/config.h.in*
-rm -rf build-aux .deps
# regenerate the ChangeLog from git's history via ./autogen (updates configure, etc too)
# don't fail if autogen doesn't exist though: its not in the .tar-ed releases
dist-hook: $(top_srcdir)/autogen
[[ -x $(top_srcdir)/autogen ]] && $(top_srcdir)/autogen $(distdir) $(top_srcdir) || true
# apply astyle to source files
style:
astyle --suffix=none --options=./astylerc {src,tests}/*.{c,h}
######
## vodoo incantations to get the test suite automation to build (autotest)
# The `:;' works around a Bash 3.2 bug when the output is not writeable.
$(srcdir)/package.m4: $(top_srcdir)/configure.ac
:;{ \
echo '# Signature of the current package.' && \
echo 'm4_define([AT_PACKAGE_NAME],' && \
echo ' [$(PACKAGE_NAME)])' && \
echo 'm4_define([AT_PACKAGE_TARNAME],' && \
echo ' [$(PACKAGE_TARNAME)])' && \
echo 'm4_define([AT_PACKAGE_VERSION],' && \
echo ' [$(PACKAGE_VERSION)])' && \
echo 'm4_define([AT_PACKAGE_STRING],' && \
echo ' [$(PACKAGE_STRING)])' && \
echo 'm4_define([AT_PACKAGE_BUGREPORT],' && \
echo ' [$(PACKAGE_BUGREPORT)])'; \
echo 'm4_define([AT_PACKAGE_URL],' && \
echo ' [$(PACKAGE_URL)])'; \
} >'$(srcdir)/package.m4'
EXTRA_DIST += testsuite.at $(srcdir)/package.m4 $(TESTSUITE) atlocal.in
TESTSUITE = $(srcdir)/testsuite
check-local: atconfig atlocal $(TESTSUITE)
$(SHELL) '$(TESTSUITE)' $(TESTSUITEFLAGS)
installcheck-local: atconfig atlocal $(TESTSUITE)
$(SHELL) '$(TESTSUITE)' AUTOTEST_PATH='$(bindir)' \
$(TESTSUITEFLAGS) -k '!hello,!unit'
# don't run dependancy and unit tests
clean-local-check:
test ! -f '$(TESTSUITE)' || \
$(SHELL) '$(TESTSUITE)' --clean
-rm -f $(TESTSUITE)
-rm -f $(srcdir)/package.m4
-rm -f atconfig
atconfig: $(srcdir)/config.status
$(srcdir)/config.status
AUTOM4TE = $(SHELL) $(abs_srcdir)/build-aux/missing --run autom4te
AUTOTEST = $(AUTOM4TE) --language=autotest
$(TESTSUITE): $(srcdir)/testsuite.at $(srcdir)/package.m4
$(AUTOTEST) -I '$(abs_srcdir)' -o $@.tmp $@.at
mv $@.tmp $@
# valgrind configuration
MPI_PREFIX=/usr
MPIWRAP_DEBUG_ARGS=debug
MPI_PLATFORM=amd64-linux
VALGRIND_BIN=valgrind
VALGRIND_ENV=MPIWRAP_DEBUG=${MPIWRAP_DEBUG_ARGS} LD_PRELOAD=${MPI_PREFIX}/lib/valgrind/libmpiwrap-${MPI_PLATFORM}.so
VALGRIND_ARGS=--trace-children=yes --track-origins=yes --leak-check=full
#--db-attach=yes
MPI_BIN=mpirun
MPI_ARGS=-n 4
VALGRIND=${VALGRIND_ENV} ${VALGRIND_BIN} ${VALGRIND_ARGS} ${MPI_BIN} ${MPI_ARGS}
valgrind: tests/mumps-file
cd tests && ${VALGRIND} mumps-file
.PHONY: help
help:
@echo "Useful make targets: make [target]"
@echo " <none> == all"
@echo " all - build software"
@echo " check - run testsuite"
@echo " install"
@echo " uninstall"
@echo " clean - remove built files"
@echo "For developers:"
@echo " distclean - clean to distributed state"
@echo " maintainer-clean - delete all generated files, requires ./autogen to rebuild"
@echo " dist - create a .tar.gz for distribution"
@echo " distcheck - .tar, then untar in new dir and test"
@echo " tags - generate ctags for editing source files"
@echo " style - run astyle on source files to tidy formatting"