Skip to content

Commit 1e5d2b6

Browse files
committed
MPICH: Build with non-embedded internal libfabric
1 parent eaf7bc2 commit 1e5d2b6

File tree

4 files changed

+47
-6
lines changed

4 files changed

+47
-6
lines changed

.github/workflows/cd-wheel.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ jobs:
174174
CIBW_REPAIR_WHEEL_COMMAND_MACOS: >
175175
delocate-wheel
176176
--ignore-missing-dependencies
177-
--exclude libmpi --exclude libpmpi
177+
--exclude libmpi --exclude libpmpi --exclude libfabric
178178
--require-archs {delocate_archs}
179179
-w {dest_dir} -v {wheel}
180180

build-wheel.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ export CIBW_ARCHS=$ARCHLIST
1313
export CIBW_BEFORE_ALL='bash {project}/cibw-build-mpi.sh'
1414
export CIBW_TEST_COMMAND='bash {project}/cibw-check-mpi.sh'
1515
export CIBW_ENVIRONMENT_PASS='MPINAME RELEASE SOURCE WORKDIR DESTDIR'
16-
export CIBW_REPAIR_WHEEL_COMMAND_MACOS='delocate-wheel --ignore-missing-dependencies --exclude libmpi --exclude libpmpi --require-archs {delocate_archs -w {dest_dir} -v {wheel}'
16+
export CIBW_REPAIR_WHEEL_COMMAND_MACOS='delocate-wheel --ignore-missing-dependencies --exclude libmpi --exclude libpmpi --exclude libfabric --require-archs {delocate_archs -w {dest_dir} -v {wheel}'
1717

1818
if test "$(uname)" = Linux; then
1919
containerengine=$(basename "$(command -v podman || command -v docker)")

check-wheel.sh

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ if test "$(uname)" = Linux; then
2929
libsdir=.libs
3030
print-runpath() { patchelf --print-rpath "$1"; }
3131
print-needed() { patchelf --print-needed "$1"; }
32+
if test -f "$data"/lib/libfabric.so; then
33+
runlibs=$runlibs'|libfabric'$soregex
34+
fi
3235
if test -f "$data"/lib/libucp.so; then
3336
runlibs=$runlibs'|libuc(m|p|s|t)'$soregex
3437
fi
@@ -41,6 +44,9 @@ if test "$(uname)" = Darwin; then
4144
libsdir=.dylibs
4245
print-runpath() { otool -l "$1" | sed -n '/RPATH/{n;n;p;}'; }
4346
print-needed() { otool -L "$1" | sed 1,1d; }
47+
if test -f "$data"/lib/libfabric.dylib; then
48+
runlibs=$runlibs'|libfabric'$soregex
49+
fi
4450
if test -f "$data"/lib/libucp.dylib; then
4551
runlibs=$runlibs'|libuc(m|p|s|t)'$soregex
4652
fi
@@ -67,6 +73,11 @@ if test "$mpiname" = "mpich"; then
6773
libraries=(
6874
"$data"/lib/libmpi.*
6975
)
76+
if ls "$data"/lib/libfabric.* > /dev/null 2>&1; then
77+
libraries+=(
78+
"$data"/lib/libfabric.*
79+
)
80+
fi
7081
if test -d "$data"/lib/ucx; then
7182
libraries+=(
7283
"$data"/lib/libuc[mpst]*.*

cibw-build-mpi.sh

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,17 @@ case $(uname) in
8282
Darwin) njobs=$(sysctl -n hw.physicalcpu);;
8383
esac
8484

85-
mkdir -p "$WORKDIR"
86-
cd "$WORKDIR"
85+
if test "$mpiname" = "mpich"; then
86+
mkdir -p "$WORKDIR"/libfabric && cd "$WORKDIR"/libfabric
87+
echo running configure on libfabric
88+
"$SOURCE"/modules/libfabric/configure --prefix="$PREFIX"
89+
echo running make with "${njobs:-1}" jobs on libfabric
90+
make -j "${njobs:-1}" install DESTDIR="$DESTDIR"
91+
withofi=--with-libfabric="${DESTDIR}${PREFIX}"
92+
options=("${options[@]/--with-libfabric=embedded/$withofi}")
93+
fi
94+
95+
mkdir -p "$WORKDIR" && cd "$WORKDIR"
8796

8897
echo running configure
8998
"$SOURCE"/configure "${options[@]}" || cat config.log
@@ -97,7 +106,7 @@ cd "${DESTDIR}${PREFIX}"
97106
rm -f include/*cxx.h
98107
rm -f include/*.mod
99108
rm -f include/*f.h
100-
rm -fr include/rdma
109+
rm -f bin/fi_*
101110
rm -f bin/mpif77
102111
rm -f bin/mpif90
103112
rm -f bin/mpifort
@@ -112,6 +121,12 @@ rm -f lib/lib*mpifort.*
112121
rm -fr lib/pkgconfig
113122
rm -fr share
114123

124+
cd "${DESTDIR}${PREFIX}"
125+
rm -fr include/rdma
126+
rm -f bin/fi_*
127+
rm -f lib/libfabric.a
128+
rm -f lib/libfabric.la
129+
115130
cd "${DESTDIR}${PREFIX}"
116131
rm -f bin/io_demo
117132
rm -f bin/ucx_read_profile
@@ -153,6 +168,19 @@ if test "$(uname)" = Linux; then
153168
mv "$(readlink "$libmpi")" "$libmpi"
154169
ln -sf "$libmpi" "${libmpi%.*}"
155170
fi
171+
if test -f libfabric.so; then
172+
patchelf --set-rpath "\$ORIGIN" "$libmpi"
173+
for lib in libfabric.so.?; do
174+
if test -f "$lib".*.*; then
175+
mv "$(readlink "$lib")" "$lib"
176+
ln -sf "$lib" "${lib%.*}"
177+
fi
178+
patchelf --set-rpath "\$ORIGIN" "$lib"
179+
for exe in "${executables[@]}"; do
180+
patchelf --remove-needed "$lib" "../bin/$exe"
181+
done
182+
done
183+
fi
156184
if test -f libucp.so; then
157185
patchelf --set-rpath "\$ORIGIN" "$libmpi"
158186
for lib in libuc[mpst]*.so.?; do
@@ -180,18 +208,20 @@ if test "$(uname)" = Darwin; then
180208
libdir="$PREFIX/lib"
181209
libmpi="libmpi.12.dylib"
182210
libpmpi="libpmpi.12.dylib"
211+
libfabric="libfabric.1.dylib"
183212
cd "${DESTDIR}${PREFIX}/bin"
184213
for exe in "${executables[@]}"; do
185214
install_name_tool -change "$libdir/$libmpi" "@rpath/$libmpi" "$exe"
186215
install_name_tool -change "$libdir/$libpmpi" "@rpath/$libpmpi" "$exe"
187216
install_name_tool -add_rpath "@executable_path/../lib/" "$exe"
188217
done
189218
cd "${DESTDIR}${PREFIX}/lib"
190-
for lib in "$libmpi" "$libpmpi"; do
219+
for lib in "$libmpi" "$libpmpi" "$libfabric"; do
191220
install_name_tool -id "@rpath/$lib" "$lib"
192221
install_name_tool -add_rpath "@loader_path/" "$lib"
193222
done
194223
install_name_tool -change "$libdir/$libpmpi" "@rpath/$libpmpi" "$libmpi"
224+
install_name_tool -change "$libdir/$libfabric" "@rpath/$libfabric" "$libmpi"
195225
fi
196226

197227
} # fixup-mpich()

0 commit comments

Comments
 (0)