-
-
Notifications
You must be signed in to change notification settings - Fork 14
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
Add static builds per cxx_version #35
Conversation
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 ( |
25080da
to
9d89beb
Compare
@wolfv The problem is that I want to select one of these as a wrapper package, but while the initial solve works out until
it then immediately fails to find one of those packages.
Any insight into where mamba is failing here? |
c0b0141
to
eedb315
Compare
@conda-forge/core, I'd like to have some more eyes on this to have people agree to this exception to CFEP-18: More details in #29, but in short:
This PR proposes to :
I'm also using the chance of such an overhaul to align this feedstock with the discussion from conda-forge/conda-forge.github.io#1073. Happy to take that out if people are opposed to that. |
To underscore the need for this: current gRPC versions need C++14 and fail in CI when hacked to use C++11. OTOH arrow still needs C++11 on windows. This provides a way out for feedstocks to progress at their respective pace. To demonstrate my point, I've pushed the current state of this PR into the |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Vote of confidence, not that I know anything about Windows, but I'd like to see this go through!
700c906
to
d5a1242
Compare
TL;DR: Planning to merge this next Monday EOD AOE@conda-forge/core I've got the reinstated migrator ready to go as well (at least I think so; happy for review). Please comment if you have any remaining questions or objections. PS. One thought I kept thinking about was that despite fully shared builds not being supported upstream, it would still be good to keep building a shared(-as-much-as-possible) build on windows. |
13c523b
to
c09fa67
Compare
…nda-forge-pinning 2022.08.04.07.32.40
Differently from almost any other library, abseil's ABI depends on the C++ standard version used to compile it, and abseil specifically only supports compiling all dependencies with a given standard version.
This is obviously infeasible for an ecosystem like conda-forge, where different packages have different needs (some cannot yet be compiled with e.g. C++17, some already require that).
This makes the general case - a dynamic library - infeasible, because that dynamic library cannot coexist in the same environment with separate ABIs. Since abseil 20211102, we are on C++17 for the dynamic builds, and some libraries (like tensorflow) had issues with this. An experiment with switching windows builds to a higher C++ standard also failed, as e.g. arrow still needs C++11.
In order to cater to different needs (while keeping dynamic libs as a default on unix), this PR add static libraries for all available C++ standards. This way, a project can specify the C++ ABI it needs from abseil. This can even be done without opting out of the migrator, e.g. by:
This is compatible with the CFEP 18 caveat for exceptions
Abseil is such an exception (even though we will continue to prefer the dynamic libs for those who can live with C++17).
Closes #29
FAQ
Edit: if you've come here to check out what happened or how to use it, please note the following:
meta.yaml
, after the migrator for abseil 20220623.0 comes past.libabseil
depends on the version of the C++ standard used to compile it, and crucially, this needs to match the C++ standard versions used to compile consuming packages (e.g. a consuming feedstock).libabseil
builds), you can fall back to a static builds for the right C++ version, e.g.libabseil-static =*=cxx14*
for C++14. Don't forget to add a second unpinned line oflibabseil-static
so future migrators will update the pin nevertheless.target_link_libraries(<target> PUBLIC absl::something)
might need to be patched out for packages that only use abseil internally, as the static library has no run-export and will therefore not be present in the final environment.