-
-
Notifications
You must be signed in to change notification settings - Fork 19
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
De-vendor fmt #50
De-vendor fmt #50
Conversation
…nda-forge-pinning 2022.10.21.19.23.23
Hi! This is the friendly automated conda-forge-linting service. I just wanted to let you know that I linted all conda-recipes in your PR ( |
Hi @bluescarni, are you sure that this change did not broke the ABI of the spdlog package 1.10.*? Ideally if a new release is done anytime soon, we should do the change while we bump the spdlog version. |
@traversaro I am not sure, but it probably did. Is it possible to trigger a rebuild of the conda packages depending on spdlog? |
Hi, this latest change (4e0b46c->1762193) seems breaking building mamba:
To build the libmamba, I've followed the instructions in build steps |
New build of spdlog 1.10 broke the compilation See conda-forge/spdlog-feedstock#50
This did break the ABI: I have a package that was built with I think all conda-forge packages depending on |
fmt already has a run-export, so if it's used as a host-dep, it should be there at runtime. AFAICT from the comment above, the issue is that we'll have to patch |
I could be wrong, but with the package that I am failing to build following this change, which itself does not depend on |
The run-dependence on I don't know which package you're having problems with, but one useful thing to keep in mind in all this is "host dependencies are not transitive". In any case, spdlog has a run_export for itself (meaning if you host-depend on spdlog for a package, it'll gain a run-dep on spdlog), and spdlog itself has a host-dependence on fmt (as of the most recent build), from whence it inherits a run-dep on fmt as well. That means both spdlog & fmt should be in the final env for a package build against the newest spdlog. Without more precise errors, I don't know what else people are seeing, but the libmamba case from above points to a problem with spdlog hardcoding the paths to its bundled fmt. This we need to undo. BTW. If the breakage is widespread enough, I'm perfectly fine if we mark the builds of this PR as broken (https://github.com/conda-forge/admin-requests/), and then we can try again with less pressure. |
I don't think so, the problem there is that mamba is not using the CMake config-file packages installed by spdlog, and it is trying to figure out the correct definitions on its own instead. See discussion here: |
If we revert this, it's going to be impossible for packages using the current fmt blessed by conda (i.e., 9.x) to depend on spdlog, and a different set of breakages will follow. I think we should push ahead instead. I wish I had pushed back against #35 when I had the chance :( |
I didn't mean revert indefinitely, but stop the bleeding and then do a fix that doesn't break people. I fully agree that we need to get away from vendoring fmt.
Seeing a path like |
The problem is that even if we rebuilt all the packages that depend on spdlog in conda-forge, their old build will continue to be broken (without considering conda packages in other channels that were relying on the ABI stability of the spdlog conda-forge package) . I totally agree that we should mark the build with the broken ABI for now, and then due a proper migration to a spdlog with a de-vendored fmt. The only way that I know of is to wait for the next ABI incompatible release of spdlog (based on https://github.com/conda-forge/spdlog-feedstock/blob/main/recipe/meta.yaml#L16a minor release, i.e. 1.11) and de-vendor fmt while we upgrade to the new version, but perhaps there is some other alternative. |
Anyhow, as this discussion is mixing several discussions (the actual PR itself, discussion on the ABI break, discussion on mamba not supporting spdlog with de-vendored fmt) I think we can open a new issue just to track the ABI break: #53 . |
Sorry for not being clear, and for trying to rectify that now with even more words on a closed PR. The error I'm seeing is with gr-satellites, and it has to do entirely with the ABI break. The
Builds against The slight inconvenience is that with this current package, gr-satellites for example ends up with DSO warnings:
This is not, strictly speaking, a problem, because
But I can understand if that's seen as unnecessary. |
How certain are you that this is a misfire (i.e. is there truly no way that the package had depended implicitly on fmt through spdlog)? E.g. if any fmt(-derived) types are used in an interface. I ask because this goes against all experience for how the layering (and this warning) is supposed to work. I can be wrong of course. |
This reverts commit 7bf7a76. cc: @kkraus14 There's a handful of issues this caused downstream. We'll be sorting through these and fixing them but need to quickly revert this for now. Currrent problems: 1. rmm's meta.yaml doesn't correctly specify spdlog as a build dep. It's [incorrectly listed as a runtime dep](https://github.com/rapidsai/rmm/blob/7bf7a763a3b6a32a7a57f900de35e2e5f30f17c0/conda/recipes/librmm/meta.yaml#L56). This means that rmm [pulls spdlog via CPM with rapids-cmake](https://github.com/rapidsai/rmm/actions/runs/3595940512/jobs/6056061203#step:6:595) `-- CPM: adding package [email protected] (v1.8.5)` and then clobbers its own installed spdlog headers: ``` 2022-12-01T19:46:46.2167513Z ClobberWarning: This transaction has incompatible packages due to a shared path. 2022-12-01T19:46:46.2168766Z packages: conda-forge/linux-64::spdlog-1.10.0-h924138e_0, file:///tmp/conda-bld-output/linux-64::librmm-23.02.00a-cuda11_gc328a18d_11 2022-12-01T19:46:46.2169686Z path: 'include/spdlog/async.h' ``` 2. spdlog 1.10.0 doesn't work with nvcc. We need spdlog 1.11.0 to get fmt 9.1.0, which contains [a necessary fix](fmtlib/fmt#2971). However, there's some uncertainty about how to handle the spdlog conda-forge package which [no longer vendors fmt](conda-forge/spdlog-feedstock#50) while rapids-cmake is still using the upstream repo which continues to vendor fmt. Does this inconsistency matter, as long as we pin `fmt=9.1.0` in the conda package cases? @kkraus14 It looks like you weighed in on this matter [here](conda-forge/spdlog-feedstock#53) and [here](conda-forge/conda-forge-pinning-feedstock#3654). If you have insights that can help us with this quandary, please share! Authors: - Bradley Dice (https://github.com/bdice) Approvers: - Mark Harris (https://github.com/harrism) - Ray Douglass (https://github.com/raydouglass) URL: #1176
Checklist
0
(if the version changed)conda-smithy
(Use the phrase@conda-forge-admin, please rerender
in a comment in this PR for automated rerendering)