rules 9.68 KB
Newer Older
1 2 3 4 5 6
#!/usr/bin/make -f
#
# build script for GROMACS

# export DH_VERBOSE=1

7 8
PACKAGE := gromacs

9 10 11 12
# OpenMPI is only supported on a subset of architectures at this time.
# This list should remain synced with the Build-Depends and the Architecture
# line of gromacs-openmpi in debian/control.

13
OPENMPI_ARCH    = alpha amd64 armel armhf i386 ia64 powerpc powerpcspe sparc sparc64 kfreebsd-i386 kfreebsd-amd64 hurd-i386
14
DEB_HOST_ARCH  ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)
15

16 17 18
# add hardening flags, using hardening-wrapper
export DEB_BUILD_HARDENING=1

19
CFLAGS =
20
ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
21
	CFLAGS += -g -Wall
22
endif
23 24 25
ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
	CFLAGS += -O0
endif
26

27 28
LDFLAGS += -Wl,--as-needed

29
COMMON_CONFIG_PARAMS = \
Nicholas Breen's avatar
Nicholas Breen committed
30
	$(CURDIR) \
31
	-DCMAKE_VERBOSE_MAKEFILE=ON \
Nicholas Breen's avatar
Nicholas Breen committed
32
	-DCMAKE_INSTALL_PREFIX="/usr" \
33
	-DCMAKE_EXE_LINKER_FLAGS="$(LDFLAGS)" \
34 35
	-DCMAKE_SKIP_RPATH=TRUE \
	-DGMX_X11=ON
Nicholas Breen's avatar
Nicholas Breen committed
36 37 38

ifneq ($(CFLAGS),)
	COMMON_CONFIG_PARAMS += -DCMAKE_C_FLAGS="$(CFLAGS)"
39 40
endif

41 42 43 44 45
# Include "gpu" in DEB_BUILD_OPTIONS to build GPU-accelerated binaries as well.
# See INSTALL-GPU.  This build option is not tested, please send comments.
# You must have OpenMM development headers (not packaged) and "nvidia-cuda-dev"
# installed!
ifneq (,$(findstring gpu,$(DEB_BUILD_OPTIONS)))
Nicholas Breen's avatar
Nicholas Breen committed
46
	COMMON_CONFIG_PARAMS += -DGMX_OPENMM=ON
47
endif
Nicholas Breen's avatar
Nicholas Breen committed
48

49
MPICH_CONFIG_PARAMS = \
Nicholas Breen's avatar
Nicholas Breen committed
50
	-DGMX_MPI=ON \
51 52
	-DGMX_X11=OFF \
	-DGMX_DEFAULT_SUFFIX=FALSE
53 54

OPENMPI_CONFIG_PARAMS = \
Nicholas Breen's avatar
Nicholas Breen committed
55
	-DGMX_MPI=ON \
56
	-DGMX_DEFAULT_SUFFIX=FALSE \
Nicholas Breen's avatar
Nicholas Breen committed
57 58
	-DGMX_X11=OFF \
	-DCMAKE_EXE_LINKER_FLAGS="-L/usr/lib/openmpi/lib $(LDFLAGS)"
59

60
# optional parallel build
61 62 63
ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
	NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
	MAKE += -j$(NUMJOBS)
64 65
endif

66 67
configure: configure-stamp
configure-stamp:
68
	dh_testdir
69 70
	(mkdir -p build/basic; cd build/basic; cmake $(COMMON_CONFIG_PARAMS) -DGMX_MPI=OFF)
	(mkdir -p build/basic-dp; cd build/basic-dp; cmake $(COMMON_CONFIG_PARAMS) -DGMX_MPI=OFF -DGMX_DOUBLE=ON)
71 72 73 74
	(mkdir -p build/mpich; cd build/mpich; CC=/usr/bin/mpicc.mpich2 cmake \
	$(COMMON_CONFIG_PARAMS) $(MPICH_CONFIG_PARAMS) -DGMX_BINARY_SUFFIX="_mpi.mpich" -DGMX_LIBS_SUFFIX="_mpi.mpich")
	(mkdir -p build/mpich-dp; cd build/mpich-dp; CC=/usr/bin/mpicc.mpich2 cmake \
	$(COMMON_CONFIG_PARAMS) $(MPICH_CONFIG_PARAMS) -DGMX_DOUBLE=ON -DGMX_BINARY_SUFFIX="_mpi_d.mpich" -DGMX_LIBS_SUFFIX="_mpi_d.mpich")
75
ifneq (,$(findstring $(DEB_HOST_ARCH),$(OPENMPI_ARCH)))
76 77 78 79
	(mkdir -p build/openmpi; cd build/openmpi; CC=/usr/bin/mpicc.openmpi cmake \
	$(COMMON_CONFIG_PARAMS) $(OPENMPI_CONFIG_PARAMS) -DGMX_BINARY_SUFFIX="_mpi.openmpi" -DGMX_LIBS_SUFFIX="_mpi.openmpi")
	(mkdir -p build/openmpi-dp; cd build/openmpi-dp; CC=/usr/bin/mpicc.openmpi cmake \
	$(COMMON_CONFIG_PARAMS) $(OPENMPI_CONFIG_PARAMS) -DGMX_DOUBLE=ON -DGMX_BINARY_SUFFIX="_mpi_d.openmpi" -DGMX_LIBS_SUFFIX="_mpi_d.openmpi")
80 81 82 83
endif
	touch $@


84
build: configure-stamp build-basic build-mpich build-openmpi
85

86 87 88
build-arch: build
build-indep: build

89 90 91 92 93 94 95 96 97 98
build-basic: configure-stamp
	dh_testdir
	$(MAKE) -C build/basic
	$(MAKE) -C build/basic-dp
	touch $@

build-mpich: configure-stamp
	dh_testdir
	$(MAKE) -C build/mpich mdrun 
	$(MAKE) -C build/mpich-dp mdrun
99
	sed -e 's/#MPIABBR#/mpich/g' -e 's/#MPIPROG#/MPICH2/g' \
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
	    < debian/gromacs-parallel.README.Debian.in \
	    > debian/gromacs-mpich.README.Debian
	touch $@
	
build-openmpi: configure-stamp
	dh_testdir
ifneq (,$(findstring $(DEB_HOST_ARCH),$(OPENMPI_ARCH)))
	$(MAKE) -C build/openmpi mdrun
	$(MAKE) -C build/openmpi-dp mdrun
	sed -e 's/#MPIABBR#/openmpi/g' -e 's/#MPIPROG#/OpenMPI/g' \
	    < debian/gromacs-parallel.README.Debian.in \
	    > debian/gromacs-openmpi.README.Debian
endif
	touch $@	


116
clean: 
117
	dh_testdir
118 119
	dh_testroot
	rm -rf build
120
	dh_clean build-basic build-mpich build-openmpi configure-stamp \
121
	         debian/gromacs-mpich.README.Debian debian/gromacs-openmpi.README.Debian
122 123


124
install: build install-basic install-mpich install-openmpi
125 126
	dh_testdir
	dh_testroot
127
	dh_prep -pgromacs-data -pgromacs-dev
128
	
129 130 131 132 133
	dh_installdirs -pgromacs-data
	mv $(CURDIR)/debian/gromacs/usr/share/gromacs/top \
	   $(CURDIR)/debian/gromacs-data/usr/share/gromacs
	mv $(CURDIR)/debian/gromacs/usr/share/gromacs/html \
	   $(CURDIR)/debian/gromacs-data/usr/share/doc/gromacs
134
	mv $(CURDIR)/debian/gromacs/usr/share/man \
135
	   $(CURDIR)/debian/gromacs-data/usr/share/man
136 137 138 139
	# some of the default installation directories for documentation and
	# example shell scripts are not FHS-friendly; move them appropriately
	mv $(CURDIR)/debian/gromacs/usr/bin/GMXRC* \
	   $(CURDIR)/debian/gromacs/usr/bin/completion* \
140 141 142 143
	   $(CURDIR)/debian/gromacs-data/usr/share/gromacs/shell-specific
	chmod 644 $(CURDIR)/debian/gromacs-data/usr/share/gromacs/shell-specific/*
	dh_link -pgromacs-data usr/share/doc/gromacs/html usr/share/doc/gromacs-data/html
	dh_link -pgromacs-data usr/share/doc/gromacs/html usr/share/doc/gromacs-dev/html
Nicholas Breen's avatar
Nicholas Breen committed
144 145
	# this name is also give in documentation
	dh_link -pgromacs-data usr/share/doc/copyright usr/share/doc/COPYING
146 147
	# one lintian warning is overridden:
	# - script-not-executable: demo scripts outside of $PATH
148
	dh_lintian -pgromacs-data
149 150 151
	# rename a pair of Perl scripts to drop the .pl extension (Policy 10.4)
	mv $(CURDIR)/debian/gromacs/usr/bin/demux.pl     $(CURDIR)/debian/gromacs/usr/bin/demux
	mv $(CURDIR)/debian/gromacs/usr/bin/xplor2gmx.pl $(CURDIR)/debian/gromacs/usr/bin/xplor2gmx
152 153 154 155

	dh_installdirs -pgromacs-dev
	mv $(CURDIR)/debian/gromacs/usr/include $(CURDIR)/debian/gromacs-dev/usr/include
	# catch normal libraries plus all applicable MPI variants
156
	mv $(CURDIR)/debian/gromacs/usr/lib/*.so $(CURDIR)/debian/gromacs/usr/lib/pkgconfig $(CURDIR)/debian/gromacs-dev/usr/lib
157 158 159 160 161 162 163
	# arguably these should be in -openmpi-dev packages or the like; they'd be so tiny that
	# it's barely worth the effort, and keeping library symlinks in the -openmpi/-mpich
	# packages helps avoid a potential policy violation; disabling these moves
#	mv $(CURDIR)/debian/gromacs-mpich/usr/lib/*.so $(CURDIR)/debian/gromacs-dev/usr/lib
#ifneq (,$(findstring $(DEB_HOST_ARCH),$(OPENMPI_ARCH)))
#	mv $(CURDIR)/debian/gromacs-openmpi/usr/lib/*.so $(CURDIR)/debian/gromacs-dev/usr/lib
#endif
164
	mv $(CURDIR)/debian/gromacs/usr/share/gromacs/template $(CURDIR)/debian/gromacs-dev/usr/share/gromacs/template
165 166
	# remaining documentation catch-all
	mv $(CURDIR)/debian/gromacs/usr/share/gromacs/* $(CURDIR)/debian/gromacs-data/usr/share/doc/gromacs
167
	-rmdir $(CURDIR)/debian/gromacs/usr/share/gromacs
168 169 170 171 172


install-basic: build
	dh_testdir
	dh_testroot
173
	dh_prep -pgromacs
174 175 176 177
	dh_installdirs -pgromacs
	$(MAKE) -C build/basic install DESTDIR=$(CURDIR)/debian/gromacs
	$(MAKE) -C build/basic-dp install DESTDIR=$(CURDIR)/debian/gromacs
	rm -f $(CURDIR)/debian/gromacs/usr/share/man/man1/*_d.1
178
	dh_installman -pgromacs debian/man/g_*.1
179 180
	for manpage in $(CURDIR)/debian/gromacs/usr/share/man/man1/*.1; do \
		dh_link -pgromacs usr/share/man/man1/`basename $${manpage}` usr/share/man/man1/`basename $${manpage} .1`_d.1 ; \
181
	done
182 183 184
	# man pages for a pair of Perl scripts are installed *after* the _d duplication,
	# as they have no double-precision variants.
	dh_installman -pgromacs debian/man/demux.1 debian/man/xplor2gmx.1
185 186
	# this program is currently broken - keep it from shipping until fixed
	rm $(CURDIR)/debian/gromacs/usr/bin/g_pme_error $(CURDIR)/debian/gromacs/usr/bin/g_pme_error_d
187
	# two lintian warnings are overridden:
188 189 190
	# - package-name-doesnt-match-sonames: the libraries are private to
	#   GROMACS, and it's unlikely that any new package will start using
	#   them; therefore, separate lib packages would just be bloat.
191
	#   This is also overridden for the -mpich and -openmpi packages.
192 193
	# - shlib-with-executable-stack: it's a side effect of the ASM inner
	#   loops (i386/amd64 only)
194
	dh_lintian -pgromacs
195

196
install-mpich: build
197
	dh_testdir
198
	dh_testroot
199
	dh_prep -pgromacs-mpich
200
	dh_installdirs -pgromacs-mpich
201 202 203 204
	$(MAKE) -C build/mpich install-mdrun DESTDIR=$(CURDIR)/debian/gromacs-mpich
	$(MAKE) -C build/mpich-dp install-mdrun DESTDIR=$(CURDIR)/debian/gromacs-mpich
	dh_installman -pgromacs-mpich debian/man/mdrun_mpi.mpich.1
	dh_link -pgromacs-mpich usr/share/man/man1/mdrun_mpi.mpich.1.gz usr/share/man/man1/mdrun_mpi_d.mpich.1.gz
205
	dh_lintian -pgromacs-mpich
206

207
install-openmpi: build
208
	dh_testdir
209
	dh_testroot
210
	dh_prep -pgromacs-openmpi
211
ifneq (,$(findstring $(DEB_HOST_ARCH),$(OPENMPI_ARCH)))
212
	dh_installdirs -pgromacs-openmpi
213 214 215 216
	$(MAKE) -C build/openmpi install-mdrun DESTDIR=$(CURDIR)/debian/gromacs-openmpi
	$(MAKE) -C build/openmpi-dp install-mdrun DESTDIR=$(CURDIR)/debian/gromacs-openmpi
	dh_installman -pgromacs-openmpi debian/man/mdrun_mpi.openmpi.1
	dh_link -pgromacs-openmpi usr/share/man/man1/mdrun_mpi.openmpi.1.gz usr/share/man/man1/mdrun_mpi_d.openmpi.1.gz
217
	dh_lintian -pgromacs-openmpi
218
endif
219

220
binary-indep: build install
221 222
	dh_testdir
	dh_testroot
223
	dh_installchangelogs -i
224
	dh_installdocs -pgromacs-data
225
	dh_compress -i
226 227 228 229 230 231
	dh_fixperms -i
	dh_installdeb -i
	dh_gencontrol -i
	dh_md5sums -i
	dh_builddeb -i

232
binary-arch: build install
233 234 235
	dh_testdir -s
	dh_testroot -s
	dh_installchangelogs -s
236
	dh_installdocs -s
237 238
	dh_strip -A
	dh_link -s
239
	dh_compress -s
240 241
	dh_fixperms -s
	dh_makeshlibs -s
242 243
	dh_shlibdeps -pgromacs -L gromacs -l debian/gromacs/usr/lib
	dh_shlibdeps -pgromacs-mpich -L gromacs-mpich -l debian/gromacs-mpich/usr/lib
244
ifneq (,$(findstring $(DEB_HOST_ARCH),$(OPENMPI_ARCH)))
245
	dh_shlibdeps -pgromacs-openmpi -L gromacs-openmpi -l debian/gromacs-openmpi/usr/lib
246 247 248 249 250 251 252 253
endif
	dh_gencontrol -s
	dh_installdeb -s
	dh_md5sums -s
	dh_builddeb -s

binary: binary-indep binary-arch

254
.PHONY: binary binary-arch binary-indep build clean install install-basic install-mpich install-openmpi
255 256 257 258 259

# Because multiple versions of the same programs are created using the same source tree,
# the various build-* targets can't be compiled simultaneously.
# Passing down -j# to child make processes remains unaffected.
.NOTPARALLEL: