diff options
author | Ben Boeckel <ben.boeckel@kitware.com> | 2023-11-18 03:59:28 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2023-11-23 19:26:31 (GMT) |
commit | 7cd0adab1b0149fe227c4eda3bd085e2d1f4dd52 (patch) | |
tree | 3ce271d10ddb07a85f23874cd1d95f0dca2ffd03 | |
parent | 1175f1c874a7cd34d643902bc428df92bce3471a (diff) | |
download | CMake-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.cxx | 13 | ||||
-rw-r--r-- | Source/cmMakefile.cxx | 3 |
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()); |