Commit 22829a13 authored by Brad King's avatar Brad King
Browse files

cmMakefile: Create an explicit "Object Libraries" source group

The generators should not need special logic to place object library
object files in this group.
parent 0419ecbc
Pipeline #54531 passed with stage
......@@ -14,7 +14,6 @@
#include "cmMakefile.h"
#include "cmOutputConverter.h"
#include "cmPolicies.h"
#include "cmSourceFile.h"
#include "cmStateTypes.h"
#include "cmSystemTools.h"
#include "cmTarget.h"
......@@ -34,6 +33,8 @@
#include <string.h>
#include <utility>
class cmSourceFile;
std::string cmGeneratorExpressionNode::EvaluateDependentExpression(
std::string const& prop, cmLocalGenerator* lg,
cmGeneratorExpressionContext* context, cmGeneratorTarget const* headTarget,
......@@ -1265,6 +1266,8 @@ static const struct TargetObjectsNode : public cmGeneratorExpressionNode
gt->LocalGenerator->ComputeObjectFilenames(mapping, gt);
cmMakefile* mf = context->LG->GetMakefile();
std::string obj_dir = gt->ObjectDirectory;
std::string result;
const char* sep = "";
......@@ -1278,10 +1281,7 @@ static const struct TargetObjectsNode : public cmGeneratorExpressionNode
assert(!map_it->second.empty());
result += sep;
std::string objFile = obj_dir + map_it->second;
cmSourceFile* sf =
context->LG->GetMakefile()->GetOrCreateSource(objFile, true);
sf->SetObjectLibrary(tgtName);
sf->SetProperty("EXTERNAL_OBJECT", "1");
mf->AddTargetObject(tgtName, objFile);
result += objFile;
sep = ";";
}
......
......@@ -94,6 +94,10 @@ cmMakefile::cmMakefile(cmGlobalGenerator* globalGenerator,
this->AddSourceGroup("CMake Rules", "\\.rule$");
this->AddSourceGroup("Resources", "\\.plist$");
this->AddSourceGroup("Object Files", "\\.(lo|o|obj)$");
this->ObjectLibrariesSourceGroupIndex = this->SourceGroups.size();
this->SourceGroups.push_back(
cmSourceGroup("Object Libraries", "^MATCH_NO_SOURCES$"));
#endif
}
......@@ -3124,6 +3128,18 @@ cmSourceFile* cmMakefile::GetOrCreateSource(const std::string& sourceName,
return this->CreateSource(sourceName, generated);
}
void cmMakefile::AddTargetObject(std::string const& tgtName,
std::string const& objFile)
{
cmSourceFile* sf = this->GetOrCreateSource(objFile, true);
sf->SetObjectLibrary(tgtName);
sf->SetProperty("EXTERNAL_OBJECT", "1");
#if defined(CMAKE_BUILD_WITH_CMAKE)
this->SourceGroups[this->ObjectLibrariesSourceGroupIndex].AddGroupFile(
sf->GetFullPath());
#endif
}
void cmMakefile::EnableLanguage(std::vector<std::string> const& lang,
bool optional)
{
......
......@@ -9,6 +9,7 @@
#include <map>
#include <set>
#include <stack>
#include <stddef.h>
#include <string>
#include <vector>
......@@ -406,6 +407,8 @@ public:
cmSourceFile* GetOrCreateSource(const std::string& sourceName,
bool generated = false);
void AddTargetObject(std::string const& tgtName, std::string const& objFile);
/**
* Given a variable name, return its value (as a string).
* If the variable is not found in this makefile instance, the
......@@ -817,6 +820,7 @@ protected:
#if defined(CMAKE_BUILD_WITH_CMAKE)
std::vector<cmSourceGroup> SourceGroups;
size_t ObjectLibrariesSourceGroupIndex;
#endif
std::vector<cmCommand*> FinalPassCommands;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment