-
-
Notifications
You must be signed in to change notification settings - Fork 25
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
{{mpi}}-mpicc not for use in recipes ? #91
{{mpi}}-mpicc not for use in recipes ? #91
Comments
Maybe it rebuilding with updated pinning (from last week) will fix this problem. There was a change the compiler version in the pinnings. |
I doubt #92 is the right solution but it wouldn't hurt to consult @conda-forge/core: why would the compiler pinning update require other packages to rebuild? Shouldn't it be a smooth, non disruptive process? |
It looks like The problem that I'm experiencing is that a feedstock is using the I think the pinnings determine which compiler versions are used to build feedstocks, right? So if they recently updated Unfortunately, it seems like this feedstock is building only with
EDIT: These selectors are saying that non-cuda linux builds with |
IMO, the problem is that So it becomes impossible to have a non-cuda package with |
Thanks, @carterbox. It kinda makes sense to me. Do you know if an MPI compiler wrapper has to pin the host compiler version? Can we add c/c++/fortran compilers to |
Otherwise, we'd have to keep rebuilding for every compiler pinning upgrade, which would be annoying... also cc @conda-forge/core |
IMHO, the MPI compiler wrappers should require a host compiler version greater or equal to the one used to build MPI. Does it make sense? Is it doable? I'm not sure how to implement that in the recipe. |
Sorry for late reply. Have been unable to access my computer since last week.
I think it's doable with a little hack. The challenge is that the compiler instruction run:
- {{ compiler('c') }} cannot have a version constraint (ex: However, we can first add all compiler instructions (c, cxx, fortran) to run:
# I hard-coded the lower bounds here, which should be inferred from the compiler version at build time
- gcc_linux-64 >=9 # [linux64]
- gcc_linux-aarch64 >=9 # [aarch64]
- gcc_linux-ppc64le >=9 # [ppc64le]
- clang_osx-64 >=11 # [osx64 and not arm64]
- clang_osx-arm64 >=11 # [osx64 and arm64] and the generated wrapper will have the correct constraint, ex: for linux64 we will get The same applies to all other compiler wrappers (mpicxx, mpifortran). @carterbox would you like to give it a shot? |
run:
- {{ c_compiler }} >={{ c_compiler_version }} |
(The lower bounds should be fetch-able using |
Always use the jinja2 as above. |
That's neat! |
I realized that another solution may be to never do this: build:
- openmpi-mpifort
- {{ compiler('fortran') }} but do this instead: build:
- openmpi-mpifort I'm not sure if that was the original intention of these compiler meta-packages or not. |
No I think the former is preferred. A project could have several shared libraries that do not need to be complied by an MPI compiler wrapper, and it's sufficient to cover those cases with Now that I take a second look at it, we probably should have added build:
- {{ mpi }}-mpicc to mpi4py-feedstock...😂 @dalcinl |
IIRC, the original intention of the In short, the |
Then how do recipe authors ensure that a compatible compiler is installed with the openmpi? This recipe currently doesn't offer any run constraints for the compilers. |
@carterbox I just stated what was the original intention of these metapackages. Since then, things have changed a lot in conda-forge, so much to the point that I no longer feel qualified to provide advice about the current state of affairs. The root issue here is indeed related to dependency management. You are right, this recipe does not have any run constraint on compilers. In principle, those constraints should not be strict, as long as you use a compiler version newer than the one used to build the package, and the compiler truly commits to backward compatibility. But I do not know how (or whether it is possible) to specify any kind of constrains on compilers (or just their runtimes) within a recipe. So it looks like until things gets better, the only viable solution to workaround this mess is to rebuild packages for each compiler version as they pop up, which is exactly what you are |
However, what happens if folks simple do not use |
Recipe authors should be following these docs. If those somehow are missing things, we should update them. |
So maybe I should add something like:
|
What do you mean? The mpich and openmpi packages do install mpicc/mpicxx/mpifort. I find that first sentence confusing. |
|
Issue:
In conda-forge/staged-recipes#14726, the linux build cannot resolve dependencies in the build environment:
The resolution error is:
Conda forge pinnings current show that fortran compiler version should be 10.
So why is this package still depending on versions 7,9? Is there a reason or just the package needs to be rerendered?
Environment (
conda list
):Details about
conda
and system (conda info
):The text was updated successfully, but these errors were encountered: