summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Boeckel <ben.boeckel@kitware.com>2023-11-18 03:59:28 (GMT)
committerBrad King <brad.king@kitware.com>2023-11-23 19:26:31 (GMT)
commit7cd0adab1b0149fe227c4eda3bd085e2d1f4dd52 (patch)
tree3ce271d10ddb07a85f23874cd1d95f0dca2ffd03
parent1175f1c874a7cd34d643902bc428df92bce3471a (diff)
downloadCMake-7cd0adab1b0149fe227c4eda3bd085e2d1f4dd52.zip
CMake-7cd0adab1b0149fe227c4eda3bd085e2d1f4dd52.tar.gz
CMake-7cd0adab1b0149fe227c4eda3bd085e2d1f4dd52.tar.bz2
cmCommonTargetGenerator: use modules from linked object-referenced targets
Fortran modules provided by objects added as linked items via `$<TARGET_OBJECTS>` should also be considered as "linked targets" for collation purposes. As C++ modules have their own visibility rules through their `FILE_SET` feature, do not expose these for C++ module collation.
-rw-r--r--Source/cmCommonTargetGenerator.cxx13
-rw-r--r--Source/cmMakefile.cxx3
2 files changed, 15 insertions, 1 deletions
diff --git a/Source/cmCommonTargetGenerator.cxx b/Source/cmCommonTargetGenerator.cxx
index 0896216..90f0d55 100644
--- a/Source/cmCommonTargetGenerator.cxx
+++ b/Source/cmCommonTargetGenerator.cxx
@@ -211,7 +211,18 @@ cmCommonTargetGenerator::GetLinkedTargetDirectories(
}
};
for (auto const& item : cli->GetItems()) {
- addLinkedTarget(item.Target, Forwarding::No);
+ if (item.Target) {
+ addLinkedTarget(item.Target, Forwarding::No);
+ } else if (item.ObjectSource && lang == "Fortran"_s
+ /* Object source files do not have a language associated with
+ them. */
+ /* && item.ObjectSource->GetLanguage() == "Fortran"_s*/) {
+ // Fortran modules provided by `$<TARGET_OBJECTS>` as linked items
+ // should be collated for use in this target.
+ addLinkedTarget(this->LocalCommonGenerator->FindGeneratorTargetToUse(
+ item.ObjectSource->GetObjectLibrary()),
+ Forwarding::Yes);
+ }
}
for (cmGeneratorTarget const* target : cli->GetExternalObjectTargets()) {
addLinkedTarget(target, Forwarding::No);
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index 4a190db..93fb8b4 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -3630,6 +3630,9 @@ void cmMakefile::AddTargetObject(std::string const& tgtName,
this->GetOrCreateSource(objFile, true, cmSourceFileLocationKind::Known);
sf->SetObjectLibrary(tgtName);
sf->SetProperty("EXTERNAL_OBJECT", "1");
+ // TODO: Compute a language for this object based on the associated source
+ // file that compiles to it. Needs a policy as it likely affects link
+ // language selection if done unconditionally.
#if !defined(CMAKE_BOOTSTRAP)
this->SourceGroups[this->ObjectLibrariesSourceGroupIndex].AddGroupFile(
sf->ResolveFullPath());