@@ -11,13 +11,31 @@ WORKDIR=${WORKDIR:-$PACKAGE/workdir}
1111DESTDIR=${DESTDIR:- $PACKAGE / install}
1212PREFIX=${PREFIX:- " /opt/$mpiname " }
1313
14+ case $( uname) in
15+ Linux) njobs=$( nproc) ;;
16+ Darwin) njobs=$( sysctl -n hw.physicalcpu) ;;
17+ esac
18+
19+ if test " $( uname) " = Darwin; then
20+ export MACOSX_DEPLOYMENT_TARGET=" 11.0"
21+ if test " $( uname -m) " = x86_64; then
22+ export MACOSX_DEPLOYMENT_TARGET=" 10.9"
23+ export ac_cv_func_aligned_alloc=" no" # macOS>=10.15
24+ fi
25+ fi
26+
1427if test " $mpiname " = " mpich" ; then
1528 version=$( sed -n ' s/MPICH_VERSION=\(.*\)/\1/p' " $SOURCE " /maint/Version)
29+ case $( uname) -$( uname -m) in
30+ Linux-x86_64) netmod=ofi,ucx ;;
31+ Linux-aarch64) netmod=ofi,ucx ;;
32+ * ) netmod=ofi ;;
33+ esac
1634 options=(
1735 CC=cc
1836 CXX=c++
1937 --prefix=" $PREFIX "
20- --with-device=ch4:" ${variant :- ofi} "
38+ --with-device=" ch4:$netmod "
2139 --with-pm=hydra:gforker
2240 --with-libfabric=embedded
2341 --with-ucx=embedded
@@ -40,11 +58,16 @@ if test "$mpiname" = "mpich"; then
4058 export MPICH_MPICXX_LDFLAGS=" -Wl,-rpath,$PREFIX /lib"
4159 export MPICH_MPIFORT_LDFLAGS=" -Wl,-rpath,$PREFIX /lib"
4260 fi
43- disable_doc=' s/^\(install-data-local:\s\+\)\$/\1#\$/'
44- sed -i.orig " $disable_doc " " $SOURCE " /Makefile.in
61+ generated_files+=(src/include/mpichinfo.h)
62+ generated_files+=(src/pm/hydra/hydra_config.h)
63+ file_prefix_map+=(" -ffile-prefix-map=$SOURCE =$mpiname -$version " )
64+ file_prefix_map+=(" -ffile-prefix-map=$WORKDIR =$mpiname -$version " )
65+ export MPICHLIB_CFLAGS=" ${file_prefix_map[*]} "
4566fi
4667
4768if test " $mpiname " = " openmpi" ; then
69+ # shellcheck disable=SC1091,SC2154
70+ version=$( source " $SOURCE " /VERSION && echo " $major .$minor .$release " )
4871 options=(
4972 CC=cc
5073 CXX=c++
@@ -67,27 +90,50 @@ if test "$mpiname" = "openmpi"; then
6790 --enable-mpi-fortran=mpifh
6891 --disable-dependency-tracking
6992 )
93+ generated_files+=(ompi/tools/ompi_info/Makefile)
94+ generated_files+=(oshmem/tools/oshmem_info/Makefile)
95+ generated_files+=(3rd-party/openpmix/src/tools/* /Makefile)
96+ generated_files+=(3rd-party/prrte/src/tools/* /Makefile)
97+ generated_files+=(opal/include/opal_config.h)
98+ generated_files+=(3rd-party/openpmix/src/include/pmix_config.h)
99+ generated_files+=(3rd-party/prrte/src/include/prte_config.h)
100+ file_prefix_map+=(" -ffile-prefix-map=$SOURCE =$mpiname -$version " )
101+ file_prefix_map+=(" -ffile-prefix-map=$WORKDIR =$mpiname -$version " )
102+ export CFLAGS=" ${file_prefix_map[*]} "
70103fi
71104
72- if test " $( uname) " = Darwin; then
73- export MACOSX_DEPLOYMENT_TARGET=" 11.0"
74- if test " $( uname -m) " = x86_64; then
75- export MACOSX_DEPLOYMENT_TARGET=" 10.9"
76- export ac_cv_func_aligned_alloc=" no" # macOS>=10.15
77- fi
78- fi
79-
80- case $( uname) in
81- Linux) njobs=$( nproc) ;;
82- Darwin) njobs=$( sysctl -n hw.physicalcpu) ;;
83- esac
84-
85- mkdir -p " $WORKDIR "
86- cd " $WORKDIR "
105+ mkdir -p " $WORKDIR " && cd " $WORKDIR "
87106
88107echo running configure
89108" $SOURCE " /configure " ${options[@]} " || cat config.log
90109
110+ # shellcheck disable=SC2206
111+ generated_files=(${generated_files[@]:- } )
112+ for filename in " ${generated_files[@]} " ; do
113+ test -n " $filename " || continue
114+ test -f " $filename " || continue
115+ cflags=" s|\s*${file_prefix_map[*]} \s*| |g"
116+ source=" s|$SOURCE |$mpiname -$version |g"
117+ workdir=" s|$WORKDIR |$mpiname -$version |g"
118+ if test " $( basename " $filename " ) " = " Makefile" ; then
119+ echo removing CFLAGS from " $filename "
120+ sed -i.orig " /-D.*_BUILD_CFLAGS=/$cflags " " $filename "
121+ echo replacing SOURCE in " $filename "
122+ sed -i.orig " /-D.*_BUILD_CPPFLAGS=/$source " " $filename "
123+ sed -i.orig " /-D.*_BUILD_LIBS=/$source " " $filename "
124+ echo replacing WORKDIR in " $filename "
125+ sed -i.orig " /-D.*_BUILD_CPPFLAGS=/$workdir " " $filename "
126+ sed -i.orig " /-D.*_BUILD_LIBS=/$workdir " " $filename "
127+ else
128+ echo removing CFLAGS from " $filename "
129+ sed -i.orig " $cflags " " $filename "
130+ echo replacing SOURCE in " $filename "
131+ sed -i.orig " $source " " $filename "
132+ echo replacing WORKDIR in " $filename "
133+ sed -i.orig " $workdir " " $filename "
134+ fi
135+ done
136+
91137echo running make with " ${njobs:- 1} " jobs
92138make -j " ${njobs:- 1} " install DESTDIR=" $DESTDIR "
93139
@@ -97,7 +143,6 @@ cd "${DESTDIR}${PREFIX}"
97143rm -f include/* cxx.h
98144rm -f include/* .mod
99145rm -f include/* f.h
100- rm -fr include/rdma
101146rm -f bin/mpif77
102147rm -f bin/mpif90
103148rm -f bin/mpifort
@@ -112,6 +157,12 @@ rm -f lib/lib*mpifort.*
112157rm -fr lib/pkgconfig
113158rm -fr share
114159
160+ cd " ${DESTDIR}${PREFIX} "
161+ rm -fr include/rdma
162+ rm -f bin/fi_*
163+ rm -f lib/libfabric.a
164+ rm -f lib/libfabric.la
165+
115166cd " ${DESTDIR}${PREFIX} "
116167rm -f bin/io_demo
117168rm -f bin/ucx_read_profile
@@ -134,6 +185,7 @@ for script in "${scripts[@]}"; do
134185 test ! -L " $script " || continue
135186 # shellcheck disable=SC2016
136187 topdir=' $(CDPATH= cd -- "$(dirname -- "${BASH_SOURCE:-$0}")/.." \&\& pwd)'
188+ sed -i.orig s:" \s$WORKDIR /.*/lib\(.*\)\.la" :" -l\1" :g " $script "
137189 sed -i.orig s@^prefix=.* @prefix=" $topdir " @ " $script "
138190 sed -i.orig s:" $PREFIX " :\"\$\{ prefix\}\" :g " $script "
139191 sed -i.orig s:-Wl,-commons,use_dylibs::g " $script "
@@ -153,6 +205,19 @@ if test "$(uname)" = Linux; then
153205 mv " $( readlink " $libmpi " ) " " $libmpi "
154206 ln -sf " $libmpi " " ${libmpi% .* } "
155207 fi
208+ if test -f libfabric.so; then
209+ patchelf --set-rpath " \$ ORIGIN" " $libmpi "
210+ for lib in libfabric.so.? ; do
211+ if test -f " $lib " .* .* ; then
212+ mv " $( readlink " $lib " ) " " $lib "
213+ ln -sf " $lib " " ${lib% .* } "
214+ fi
215+ patchelf --set-rpath " \$ ORIGIN" " $lib "
216+ for exe in " ${executables[@]} " ; do
217+ patchelf --remove-needed " $lib " " ../bin/$exe "
218+ done
219+ done
220+ fi
156221 if test -f libucp.so; then
157222 patchelf --set-rpath " \$ ORIGIN" " $libmpi "
158223 for lib in libuc[mpst]* .so.? ; do
@@ -182,16 +247,31 @@ if test "$(uname)" = Darwin; then
182247 libpmpi=" libpmpi.12.dylib"
183248 cd " ${DESTDIR}${PREFIX} /bin"
184249 for exe in " ${executables[@]} " ; do
185- install_name_tool -change " $libdir /$libmpi " " @rpath/$libmpi " " $exe "
186- install_name_tool -change " $libdir /$libpmpi " " @rpath/$libpmpi " " $exe "
187250 install_name_tool -add_rpath " @executable_path/../lib/" " $exe "
251+ for lib in " $libmpi " " $libpmpi " ; do
252+ install_name_tool -change " $libdir /$lib " " @rpath/$lib " " $exe "
253+ done
188254 done
189255 cd " ${DESTDIR}${PREFIX} /lib"
190256 for lib in " $libmpi " " $libpmpi " ; do
191257 install_name_tool -id " @rpath/$lib " " $lib "
192258 install_name_tool -add_rpath " @loader_path/" " $lib "
193259 done
194260 install_name_tool -change " $libdir /$libpmpi " " @rpath/$libpmpi " " $libmpi "
261+ libfabric=" libfabric.1.dylib"
262+ if test -f " $libfabric " ; then
263+ install_name_tool -id " @rpath/$libfabric " " $libfabric "
264+ install_name_tool -add_rpath " @loader_path/" " $libfabric "
265+ oldname=" $libdir /$libfabric " ; newname=" @rpath/$libfabric " ;
266+ cd " ${DESTDIR}${PREFIX} /bin"
267+ for exe in " ${executables[@]} " ; do
268+ install_name_tool -change " $oldname " " $newname " " $exe "
269+ done
270+ cd " ${DESTDIR}${PREFIX} /lib"
271+ for lib in " $libmpi " " $libpmpi " ; do
272+ install_name_tool -change " $oldname " " $newname " " $lib "
273+ done
274+ fi
195275fi
196276
197277} # fixup-mpich()
@@ -365,3 +445,10 @@ done
365445
366446echo fixing install tree
367447fixup-" $mpiname "
448+
449+ echo checking install tree
450+ cd " ${DESTDIR}${PREFIX} "
451+ echo cheking files with SOURCE
452+ ! grep -lr " $SOURCE "
453+ echo cheking files with WORKDIR
454+ ! grep -lr " $WORKDIR "
0 commit comments