Skip to content

Commit

Permalink
Stop building RDMA in "in place" mode
Browse files Browse the repository at this point in the history
When using `IN_PLACE=1`, the build assumes that the build directory will
_also_ be the run directory[1], which doesn't hold for our case.
Furthermore, it's actively problematic as it means we'll end up fairly
long paths, which can cause sadness[2][3].

Specifically, rdma-core has an assert[4] that triggers if the path to
one of the build dependencies is longer than what's allowed for UNIX
sockets[5]. The assert uses `IBACM_SERVER_PATH`, which is set[6] to
`@CMAKE_INSTALL_FULL_RUNDIR@/ibacm.sock`. That is in turn set[7] to

    ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_RUNDIR}

(when `CMAKE_INSTALL_RUNDIR` isn't set to an absolute path, which is the
case for the default of "var/run"). `CMAKE_INSTALL_PREFIX` is set to the
project directory of rdma-core when `IN_PLACE=1`, which may be quite
deep, and thus the whole thing is likely to exceed the 108 bytes allowed
for `sun_path`.

It's worth noting that since we only build in order to get the various
header files so we can then generate bindings from them, the setting of
the various `CMAKE_INSTALL_*` options that `IN_PLACE=1` set _shouldn't_
have anything to say for us.

[1]: https://github.com/linux-rdma/rdma-core/blob/fb965e2d0f670d1e3474f9333b332f6b4954201c/CMakeLists.txt#L92-L100
[2]: #21 (comment)
[3]: https://docs.rs/crate/ibverbs-sys/0.2.1+52.0/builds/1297723
[4]: https://github.com/linux-rdma/rdma-core/blob/fb965e2d0f670d1e3474f9333b332f6b4954201c/librdmacm/acm.c#L105-L106
[5]: https://man7.org/linux/man-pages/man7/unix.7.html
[6]: https://github.com/linux-rdma/rdma-core/blob/fb965e2d0f670d1e3474f9333b332f6b4954201c/buildlib/config.h.in#L35
[7]: https://github.com/linux-rdma/rdma-core/blob/fb965e2d0f670d1e3474f9333b332f6b4954201c/CMakeLists.txt#L138
  • Loading branch information
jonhoo committed Dec 27, 2024
1 parent aed0c60 commit e3467bd
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion ibverbs-sys/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ fn main() {
}

// build vendor/rdma-core
// note that we only build it to generate the bindings!
eprintln!("run cmake");
let built_in = cmake::Config::new("vendor/rdma-core")
.define("IN_PLACE", "1")
.define("NO_MAN_PAGES", "1")
.no_build_target(true)
.build();
Expand Down

0 comments on commit e3467bd

Please sign in to comment.