- removed comment
Link error when building a configuration containing only MPI thorn
If I create a thornlist containing just
ExternalLibraries/MPI
the configuration will compile but it won't link. The linker errors indicate that the "Cactus" virtual thorn is using MPI symbols which are not available. The mpi library is not on the linker command line, nor in LIBS. LIBS is set from MPI_LIBS in make.link, but MPI_LIBS is empty. MPI_LIBS is picked up from the MPI configure.sh script, and it is inserted into bindings/Configuration/Capabilities/make.MPI.defn. This is picked up by bindings/Configuration/Thorns/make.Cactus.defn, but I don't think that this file is used by anything. If I create a new empty thorn which uses the MPI capability, the executable is linked successfully. I think that nothing is loading the make.Cactus.defn definitions for the Cactus virtual thorn.
This subtle bug might have other effects so it should probably be fixed.
Keyword:
Comments (9)
-
-
reporter - removed comment
Yes, these lines are there. And I have checked that this code is triggered when THORN is Cactus. Is it possible that this is happening in a subshell or sub-make process and these values are not available at link time? Can you reproduce the problem? Just create a configuration with a thornlist containing only the MPI thorn and try to build it.
-
- removed comment
Yes, this makefile builds the thorn library, it does not build.
I think the problem is that the auto-generated file "make.link" does not take the flesh into account. This would be the routine CreateConfigurationBindings, which accepts as input a hashmap "thorns" that does not include the flesh Cactus pseudo-thorn. The big foreach loop in file CreateConfigurationBindings.pl probably needs to be extended to include "Cactus" as well.
-
reporter - changed status to open
- assigned issue to
- removed comment
-
- removed comment
I agree that this should be fixed in Cactus. One possibility for a workaround would be to REQUIRE mpi in thorn MPI.
-
- removed comment
Did you try adding 'Cactus' to the foreach loops
foreach my $thorn (sort keys %thorns)
in CreateConfigurationBindings.pl?
-
- removed comment
Yes, that didn't work, but I didn't investigate further. I don't recommend the REQUIRES as solution - just a possible workaround.
-
- changed status to resolved
- removed comment
The culprit was a
next if ("\U$thorn\E" eq "CACTUS");
in CST.
Works now.
-
- edited description
- changed status to closed
- Log in to comment
Internally, the flesh is treated as a thorn that is called "Cactus", and there is also a pseudo-thorn "CactusBindings" containing most of the auto-generated code from the CST stage. These two thorns are treated specially in several places. It seems that "make.Cactus.defn" is ignored, although it should not be.
My file "make.thornlib" contains the lines
ifneq ($(THORN), CactusBindings) -include $(BINDINGS_DIR)/Configuration/Thorns/make.$(THORN).defn endif which should include "make.Cactus.defn". Can you confirm that you have these lines as well?