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 257 258 259 260 261 262 263 264 265 266
|
#!/usr/bin/make -f
export DH_VERBOSE=1
DPKG_EXPORT_BUILDFLAGS = 1
include /usr/share/dpkg/buildflags.mk
DESTDIR:=`pwd`/debian/tmp/
DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
LIBDIR:=/usr/lib/$(DEB_HOST_MULTIARCH)
AUTOGENERATED:= libopenmpi3.links libopenmpi-dev.links libopenmpi-dev.postinst \
libopenmpi-dev.prerm openmpi-bin.preinst libopenmpi-dev.preinst
### Arch-specific stuff
# No ibverbs support available on kFreeBSD, Hurd
NO_VERBS_ARCH:= hurd-i386 kfreebsd-amd64 kfreebsd-i386 s390x
FABRIC_ARCH:= amd64 i386
PSM_ARCH:= amd64 i386
PSM2_ARCH:= amd64
BUILTIN_ATOMICS_ARCH:= s390x riscv64
NO_CMA_ARCH:= s390x mipsel hppa alpha armhf armel m68k sparc64
NO_JAVA_ARCH:= hppa hurd-i386 ia64 riscv64
NO_TEST_ARCH:= hppa hurd-i386
GCC7_ARCH:= ia64
FORTRAN:=$(shell basename $(shell readlink /etc/alternatives/f95))
FC ?= $(FORTRAN)
# Drop '-g' flag with flang. Known failure with 2018122 version
ifneq ($(filter flang,$(FC)),)
FCFLAGS=$(shell dpkg-buildflags --get FCLAGS | sed -e 's/-g //')
endif
ifeq (sparc,$(DEB_HOST_GNU_CPU))
CFLAGS += -mcpu=v9
endif
# Use -O3 recommended by upstream
CFLAGS += -O3
CXXFLAGS += -O3
FCFLAGS += -O3
ifeq ($(filter $(NO_VERBS_ARCH),$(DEB_HOST_ARCH)),)
VERBS := --with-verbs
endif
# Use gcc-7 on ia64; ICE on gcc 8.*
ifneq ($(filter $(GCC7_ARCH),$(DEB_HOST_ARCH)),)
export CC=gcc-7
endif
ifneq ($(filter $(BUILTIN_ATOMICS_ARCH),$(DEB_HOST_ARCH)),)
ENABLE_BUILTIN_ATOMICS:= --enable-builtin-atomics
endif
ifneq ($(filter $(FABRIC_ARCH),$(DEB_HOST_ARCH)),)
FABRIC := --with-libfabric
endif
ifneq ($(filter $(PSM_ARCH),$(DEB_HOST_ARCH)),)
PSM:= --with-psm
endif
ifneq ($(filter $(PSM2_ARCH),$(DEB_HOST_ARCH)),)
PSM:= --with-psm2
endif
ifeq ($(filter $(NO_JAVA_ARCH),$(DEB_HOST_ARCH)),)
ifeq ($(filter stage1,$(DEB_BUILD_PROFILES)),)
JAVA := --with-jdk-dir=/usr/lib/jvm/default-java --enable-mpi-java
endif
endif
ifneq (,$(findstring $(DEB_HOST_ARCH),$(NO_TEST_ARCH)))
DO_TEST := false
BTL_TESTS :=
else
DO_TEST := true
BTL_TESTS:= --enable-opal-btl-usnic-unit-tests
endif
ifneq ($(filter $(NO_CMA_ARCH),$(DEB_HOST_ARCH)),)
CMA:= --without-cma
endif
# Flags for the static build: see bug #502232
#STATIC_CONFIG_PARAMS = --enable-static
STATIC_CONFIG_PARAMS =
%:
dh $@ --no-parallel --with=fortran_mod
override_dh_auto_clean:
dh_clean
find . -name .libs -exec rm -rf {} \; || true
find . -name .dirstamp -delete
find . -type l -delete
find . -name '*.o' -delete
rm -f $(patsubst %, debian/%, ${AUTOGENERATED})
override_dh_update_autotools_config:
(cd config && autom4te --language=m4sh opal_get_version.m4sh -o opal_get_version.sh)
./autogen.pl --force
override_dh_auto_configure:
for f in ${AUTOGENERATED} ; do \
sed -e 's%@TRIPLET@%${DEB_HOST_MULTIARCH}%g' < debian/$$f.in > debian/$$f ; \
done
dh_auto_configure -- \
--disable-silent-rules \
--disable-wrapper-runpath \
--with-package-string="Debian OpenMPI" \
$(VERBS) $(FABRIC) $(PSM) $(PSM2) $(CMA) \
$(ENABLE_BUILTIN_ATOMICS) \
$(JAVA) \
$(STATIC_CONFIG_PARAMS) \
$(BTL_TESTS) \
--with-libevent=external \
--with-pmix=${LIBDIR}/pmix \
--disable-silent-rules \
--enable-mpi-cxx \
--with-hwloc=/usr \
--with-libltdl \
--with-devel-headers \
--with-slurm \
--with-sge \
--without-tm \
--sysconfdir=/etc/openmpi \
--libdir=\$${prefix}/lib/${DEB_HOST_MULTIARCH}/openmpi/lib \
--includedir=\$${prefix}/lib/${DEB_HOST_MULTIARCH}/openmpi/include
# Extra debugging for non-deterministic FTBFS on some archs
override_dh_auto_build:
dh_auto_build || ( \
cat config.log ; \
cat libtool ; \
find . -name '*.la' -exec cat {} \; \
)
override_dh_install:
# Strip rpath info from all executables and libraries.
find debian/tmp/ -type f -perm -+x -a ! -name '*.la' -a ! -name '*.mod' -exec chrpath -d '{}' \;
# Rename the compiler and startup wrappers.
for f in mpic++ mpicc mpiCC mpicxx mpiexec mpif77 mpif90 mpirun mpifort ; do \
if test -f debian/tmp/usr/bin/$${f}; then \
mv debian/tmp/usr/bin/$${f} debian/tmp/usr/bin/$${f}.openmpi ; \
fi; \
done
# Strip rpath from pc,wrapper files
for f in ompi-c.pc ompi-cxx.pc ompi-f77.pc ompi-f90.pc ompi-fort.pc ompi.pc opal.pc orte.pc ; do \
sed -e 's/-Wl,-rpath -Wl,$${libdir}//' < $(DESTDIR)/$(LIBDIR)/openmpi/lib/pkgconfig/$${f} > debian/tmp.x ; \
mv debian/tmp.x $(DESTDIR)/$(LIBDIR)/openmpi/lib/pkgconfig/$${f} ; \
done
find . -name '*wrapper-data.txt' | while read f; do \
sed -e 's/-Wl,-rpath -Wl,@{libdir}//' < $$f > debian/tmp.x ; \
mv debian/tmp.x $$f ; done
# Rename the compiler wrapper man pages.
for f in mpic++ mpicc mpicxx mpiexec mpif77 mpif90 mpirun mpifort ; do \
if test -f debian/tmp/usr/share/man/man1/$${f}.1; then \
mv debian/tmp/usr/share/man/man1/$${f}.1 debian/tmp/usr/share/man/man1/$${f}.openmpi.1 ; \
fi; \
if test -f debian/tmp/usr/share/man/man1/$${f}.3; then \
mv debian/tmp/usr/share/man/man3/$${f}.3 debian/tmp/usr/share/man/man1/$${f}.openmpi.3 ; \
fi; \
done
cd debian/tmp/usr/share/man/man3; \
for f in *.3; do \
mv $$f $$(echo $$f|sed -e "s|\.3|.openmpi.3|g"); \
done; \
# Rename orte-bootproxy.sh to orte-bootproxy
if test -f debian/tmp/usr/bin/orte-bootproxy.sh; then \
mv debian/tmp/usr/bin/orte-bootproxy.sh debian/tmp/usr/bin/orte-bootproxy; \
fi
# Remove dangling symlink(s)
rm -f debian/tmp/usr/share/man/man1/mpiCC.1
rm -f debian/tmp/usr/share/man/man1/orteCC.1
# Remove COPYRIGHT file of ptmalloc2. It's reproduced in debian/copyright.
rm -f -r debian/tmp/usr/share/openmpi/doc/
# Remove pmi2, pmix now in separate package
rm -rf debian/tmp/usr/lib/*/openmpi/include/pmi*
# Remove buggy ${pkgincludedir} refs from pkg-config files. #837062
find . -name '*.pc' | while read f ; do \
cat $${f} | sed -e 's%-I$${pkgincludedir}[a-zA-Z0-9/]* %%g' > x ; \
mv x $${f}; done
# sanitize build paths for bit-reproducibility
if test ./debian/tmp/${LIBDIR}/openmpi/include/openmpi/opal_config.h ; then \
sed -e 's%${CURDIR}%/build/openmpi%g' < ./debian/tmp/${LIBDIR}/openmpi/include/openmpi/opal_config.h \
> debian/tmp/x ; \
mv debian/tmp/x ./debian/tmp/${LIBDIR}/openmpi/include/openmpi/opal_config.h ; \
fi
# Continue as usual
dh_install
# oshmem, shmem only built on Linux so do by hand or it may fail ...
mkdir -p debian/libopenmpi3/${LIBDIR}/openmpi/lib
if test -f debian/tmp/usr/bin/oshmem_info ; then \
mkdir -p debian/openmpi-bin/usr/share/man/man1 ; \
cp -a debian/tmp/usr/bin/oshrun debian/openmpi-bin//usr/bin/ ; \
cp -a debian/tmp/usr/bin/oshmem_info debian/openmpi-bin//usr/bin/ ; \
cp -a debian/tmp/usr/bin/oshcc debian/libopenmpi-dev/usr/bin ; \
cp -a debian/tmp/usr/bin/oshfort debian/libopenmpi-dev/usr/bin ; \
cp -a debian/tmp/${LIBDIR}/openmpi/lib/liboshmem.so.40.10.1 debian/libopenmpi3/${LIBDIR}/openmpi/lib ; \
cp -a debian/tmp/usr/share/man/man1/oshcc.1 debian/libopenmpi-dev/usr/share/man/man1 ; \
cp -a debian/tmp/usr/share/man/man1/oshfort.1 debian/libopenmpi-dev/usr/share/man/man1 ; \
cp -a debian/tmp/usr/share/man/man1/oshrun.1 debian/openmpi-bin/usr/share/man/man1 ; \
cp -a debian/tmp/usr/share/man/man1/oshmem_info.1 debian/openmpi-bin/usr/share/man/man1 ; \
dh_link -p libopenmpi-dev ${LIBDIR}/liboshmem.so.40 ${LIBDIR}/liboshmem.so ; \
dh_link -p libopenmpi3 ${LIBDIR}/openmpi/lib/liboshmem.so.40.10.1 ${LIBDIR}/liboshmem.so.40 ; \
fi
if test -f debian/tmp/${LIBDIR}/openmpi/lib/libmpi_java.so.40.10.0 ; then \
cp -a debian/tmp/${LIBDIR}/openmpi/lib/libmpi_java.so.40.10.0 \
debian/libopenmpi3/${LIBDIR}/openmpi/lib/libmpi_java.so.40.10.0 ; \
dh_link -p libopenmpi3 ${LIBDIR}/libmpi_java.so.40.10.0 ${LIBDIR}/libmpi_java.so.40 ; \
dh_link -p libopenmpi3 ${LIBDIR}/openmpi/lib/libmpi_java.so.40.10.0 ${LIBDIR}/libmpi_java.so.40.10.0 ; \
dh_link -p libopenmpi-dev ${LIBDIR}/libmpi_java.so.40 ${LIBDIR}/libmpi_java.so ; \
fi
if test -f debian/tmp/${LIBDIR}/openmpi/lib/libmca_common_monitoring.so.50.0.0 ; then \
cp -a debian/tmp/${LIBDIR}/openmpi/lib/libmca_common_monitoring.so.50.0.0 \
debian/libopenmpi3/${LIBDIR}/openmpi/lib/libmca_common_monitoring.so.50.0.0 ; \
dh_link -p libopenmpi3 ${LIBDIR}/libmca_common_monitoring.so.50.0.0 ${LIBDIR}/libmca_common_monitoring.so.50 ; \
dh_link -p libopenmpi3 ${LIBDIR}/openmpi/lib/libmca_common_monitoring.so.50.0.0 ${LIBDIR}/libmca_common_monitoring.so.50.0.0 ; \
dh_link -p libopenmpi-dev ${LIBDIR}/libmca_common_monitoring.so.50 ${LIBDIR}/libmca_common_monitoring.so ; \
fi
if test -f debian/tmp/${LIBDIR}/openmpi/lib/libmca_common_ofi.so.40.10.0 ; then \
cp -a debian/tmp/${LIBDIR}/openmpi/lib/libmca_common_ofi.so.40.10.0 \
debian/libopenmpi3/${LIBDIR}/openmpi/lib/libmca_common_ofi.so.40.10.0 ; \
dh_link -p libopenmpi3 ${LIBDIR}/libmca_common_ofi.so.40.10.0 ${LIBDIR}/libmca_common_ofi.so.40 ; \
dh_link -p libopenmpi3 ${LIBDIR}/openmpi/lib/libmca_common_ofi.so.40.10.0 ${LIBDIR}/libmca_common_ofi.so.40.10.0 ; \
dh_link -p libopenmpi-dev ${LIBDIR}/libmca_common_ofi.so.40 ${LIBDIR}/libmca_common_ofi.so ; \
fi
if test -f debian/tmp/${LIBDIR}/openmpi/lib/libmca_common_ompio.so.41.9.0 ; then \
cp -a debian/tmp/${LIBDIR}/openmpi/lib/libmca_common_ompio.so.41.9.0 \
debian/libopenmpi3/${LIBDIR}/openmpi/lib/libmca_common_ompio.so.41.9.0 ; \
dh_link -p libopenmpi3 ${LIBDIR}/libmca_common_ompio.so.41.9.0 ${LIBDIR}/libmca_common_ompio.so.41 ; \
dh_link -p libopenmpi3 ${LIBDIR}/openmpi/lib/libmca_common_ompio.so.41.9.0 ${LIBDIR}/libmca_common_ompio.so.41.9.0 ; \
dh_link -p libopenmpi-dev ${LIBDIR}/libmca_common_ompio.so.41 ${LIBDIR}/libmca_common_ompio.so ; \
fi
if test -f debian/tmp/${LIBDIR}/openmpi/lib/libmca_common_verbs.so.40.10.0 ; then \
cp -a debian/tmp/${LIBDIR}/openmpi/lib/libmca_common_verbs.so.40.10.0 \
debian/libopenmpi3/${LIBDIR}/openmpi/lib/libmca_common_verbs.so.40.10.0 ; \
dh_link -p libopenmpi3 ${LIBDIR}/libmca_common_verbs.so.40.10.0 ${LIBDIR}/libmca_common_verbs.so.40 ; \
dh_link -p libopenmpi3 ${LIBDIR}/openmpi/lib/libmca_common_verbs.so.40.10.0 ${LIBDIR}/libmca_common_verbs.so.40.10.0 ; \
dh_link -p libopenmpi-dev ${LIBDIR}/libmca_common_verbs.so.40 ${LIBDIR}/libmca_common_verbs.so ; \
fi
if test -f debian/tmp/${LIBDIR}/openmpi/lib/libmca_common_libfabric.so.40.10.0 ; then \
cp -a debian/tmp/${LIBDIR}/openmpi/lib/libmca_common_libfabric.so.40.10.0 \
debian/libopenmpi3/${LIBDIR}/openmpi/lib/libmca_common_libfabric.so.40.i10.0 ; \
dh_link -p libopenmpi3 ${LIBDIR}/libmca_common_libfabric.so.40.10.0 ${LIBDIR}/libmca_common_libfabric.so.40 ; \
dh_link -p libopenmpi3 ${LIBDIR}/openmpi/lib/libmca_common_libfabric.so.40.10.0 ${LIBDIR}/libmca_common_libfabric.so.40.10.0 ; \
dh_link -p libopenmpi-dev ${LIBDIR}/libmca_common_libfabric.so.40.10.0 ${LIBDIR}/libmca_common_libfabric.so ; \
fi
if test -f debian/tmp/usr/bin/shmemrun ; then \
cp -a debian/tmp/usr/bin/shmemrun debian/openmpi-bin/usr/bin/shmemrun ;\
cp -a debian/tmp/usr/share/man/man1/shmemrun.1 debian/openmpi-bin/usr/share/man/man1 ; \
cp -a debian/tmp/usr/bin/shmemcc debian/openmpi-bin/usr/bin/shmemcc ; \
cp -a debian/tmp/usr/bin/shmemfort debian/openmpi-bin/usr/bin/shmemfort ; \
cp -a debian/tmp/usr/share/man/man1/shmemcc.1 debian/openmpi-bin/usr/share/man/man1 ; \
cp -a debian/tmp/usr/share/man/man1/shmemfort.1 debian/openmpi-bin/usr/share/man/man1 ; \
fi
override_dh_fixperms-arch:
chmod 0644 debian/libopenmpi*/${LIBDIR}/openmpi/lib/*.mod
rm -f debian/libopenmpi-dev/usr/lib/*/openmpi/lib/ompi_monitoring_prof.so
# TODO: whats causing this?
rm -f debian/libopenmpi-dev/usr/bin
dh_fixperms
override_dh_auto_test:
$(DO_TEST) && dh_auto_test || echo "Tests disabled on ${NO_TEST_ARCH} systems for the moment"
override_dh_installdocs:
dh_installdocs --all NEWS README
override_dh_shlibdeps:
dh_shlibdeps -l$(CURDIR)/debian/tmp/${LIBDIR}/openmpi/lib -- --ignore-missing-info
|