-
-
Notifications
You must be signed in to change notification settings - Fork 35
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
Newer libcxx versions obsoleting old clang versions #310
Comments
Best option is to split |
I have a PR that does this: conda-forge/libcxx-feedstock#183. Once merged, I can backport this a few versions (libcxx 16/17 should be enough AFAIU, then we can also adopt that in the compiler-activation; if necessary we can backport further, e.g. until libcxx 13). |
PR to switch If that's unoffensive I'll rebuild 17 & 16 + the compiler activation as well. |
How does libcxx.a work with cross-compiling? |
As before? For now (once we merge the open PR to update the compiler activation to use Or am I misunderstanding your point? I guess we could also mirror the GCC setup and go for |
Hm. Never mind, I had misremembered that. So I think we're running into the "host-exports" situation again, because we'd want to distinguish what we host-export ( |
Since |
I think that's the easiest solution TBH. |
It'll also be easy to do with the work that happened so far (currently the actual content split hasn't happened yet to get things off the ground, c.f. conda-forge/libcxx-feedstock#187). In that vein, could I ask you to please review #311 & conda-forge/clang-compiler-activation-feedstock#138? |
Tangent: cling is still alive after all 🥳 (just had a new release that's based on LLVM 16) |
@h-vetinari I think the name "libcxx-devel" is unfortunate. It makes it sound like this is some package only needed for development of libc++, and gives no hint that it contains the headers without which you can not use I just ran into this issue - I could not compile anything using just |
This is a standard pattern in several distributions. We haven't adopted it universally in conda-forge (which is perhaps why it's a bit confusing), but we're definitely adding more and more |
@h-vetinari I'm not sure how/where this could be better documented - for me the issue was there was no "migration guide" that would tell me that from 18.x I have to switch from |
This is a long-standing problem. Upstream libcxx generally only supports the last two released clang versions (during development), meaning libcxx 18 only officially supports clang 16 & 17 (and of course 18 once released).
As libcxx is generally highly forward-compatible, we only ever have one libcxx version in conda-forge, which tends to be the newest. Strictly speaking, the C++ compilers on osx only do a run-export on their own version, so
clangxx_ox-64 17.0.6
will produce packages that have alibcxx >=17
constraint. Once we update our compiler stack to a new LLVM version, this constraint spreads pretty quickly across the ecosystem, so that a requirement for an older libcxx is effectively equivalent to freezing the set of packages/versions that remain co-installable.We do test our libcxx against older clangs, and for example, libcxx 17 passes basic testing all the way down to clang 11 (and even 10 still worked). That's for the most basic include tests, i.e. it needs to be said that there are almost certainly bugs in other parts of libcxx in that combination (as libcxx 17 only supports down to clang 15 officially, and usually removes all workarounds that are necessary for older clangs). However, it seems this setup has worked +/- acceptably for affected packages so far.
For libcxx 18, we ended up dropping support for clang<15, after checking the status of some known packages that are still relying on older clang:
This is not yet an immediate concern because our default compilers aren't on clang 18 yet, but we'll run into the same situation once that happens, so this is to serve as an announcement & for discussion; c.f. also #309, where I commented:
Originally posted by @h-vetinari in #309 (review)
CC @conda-forge/root @conda-forge/cling @conda-forge/cppyy
The text was updated successfully, but these errors were encountered: