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.
This commit is contained in:
parent
1175f1c874
commit
7cd0adab1b
@ -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);
|
||||
|
@ -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());
|
||||
|
Loading…
Reference in New Issue
Block a user