mirror of
https://github.com/reactos/CMake.git
synced 2025-02-16 09:37:36 +00:00
ENH: this version can build cmake
This commit is contained in:
parent
f6e8b36dcb
commit
8659d1206b
@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
//TODO
|
//TODO
|
||||||
// per file flags
|
// per file flags
|
||||||
// depend info
|
// custom commands and clean up custom targets
|
||||||
// do I need an ALL_BUILD
|
// do I need an ALL_BUILD
|
||||||
// link libraries stuff
|
// link libraries stuff
|
||||||
// exe/lib output paths
|
// exe/lib output paths
|
||||||
@ -38,7 +38,8 @@ cmGlobalXCodeGenerator::cmGlobalXCodeGenerator()
|
|||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
void cmGlobalXCodeGenerator::EnableLanguage(std::vector<std::string>const& lang,
|
void cmGlobalXCodeGenerator::EnableLanguage(std::vector<std::string>const&
|
||||||
|
lang,
|
||||||
cmMakefile * mf)
|
cmMakefile * mf)
|
||||||
{
|
{
|
||||||
mf->AddDefinition("CMAKE_GENERATOR_CC", "gcc");
|
mf->AddDefinition("CMAKE_GENERATOR_CC", "gcc");
|
||||||
@ -307,12 +308,18 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmTarget& target,
|
|||||||
switch(target.GetType())
|
switch(target.GetType())
|
||||||
{
|
{
|
||||||
case cmTarget::STATIC_LIBRARY:
|
case cmTarget::STATIC_LIBRARY:
|
||||||
|
{
|
||||||
productName += ".a";
|
productName += ".a";
|
||||||
|
std::string t = "lib";
|
||||||
|
t += productName;
|
||||||
|
productName = t;
|
||||||
productType = "com.apple.product-type.library.static";
|
productType = "com.apple.product-type.library.static";
|
||||||
fileType = "compiled.mach-o.archive.ar";
|
fileType = "archive.ar";
|
||||||
buildSettings->AddAttribute("LIBRARY_STYLE",
|
buildSettings->AddAttribute("LIBRARY_STYLE",
|
||||||
this->CreateString("STATIC"));
|
this->CreateString("STATIC"));
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case cmTarget::MODULE_LIBRARY:
|
case cmTarget::MODULE_LIBRARY:
|
||||||
buildSettings->AddAttribute("LIBRARY_STYLE",
|
buildSettings->AddAttribute("LIBRARY_STYLE",
|
||||||
this->CreateString("DYNAMIC"));
|
this->CreateString("DYNAMIC"));
|
||||||
@ -347,6 +354,8 @@ void cmGlobalXCodeGenerator::CreateBuildSettings(cmTarget& target,
|
|||||||
case cmTarget::INSTALL_PROGRAMS:
|
case cmTarget::INSTALL_PROGRAMS:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
buildSettings->AddAttribute("GCC_OPTIMIZATION_LEVEL",
|
||||||
|
this->CreateString("0"));
|
||||||
buildSettings->AddAttribute("INSTALL_PATH",
|
buildSettings->AddAttribute("INSTALL_PATH",
|
||||||
this->CreateString("/usr/local/bin"));
|
this->CreateString("/usr/local/bin"));
|
||||||
buildSettings->AddAttribute("OPTIMIZATION_CFLAGS",
|
buildSettings->AddAttribute("OPTIMIZATION_CFLAGS",
|
||||||
@ -470,21 +479,28 @@ cmXCodeObject* cmGlobalXCodeGenerator::FindXCodeTarget(cmTarget* t)
|
|||||||
void cmGlobalXCodeGenerator::AddDependTarget(cmXCodeObject* target,
|
void cmGlobalXCodeGenerator::AddDependTarget(cmXCodeObject* target,
|
||||||
cmXCodeObject* dependTarget)
|
cmXCodeObject* dependTarget)
|
||||||
{
|
{
|
||||||
cmXCodeObject* container =
|
cmXCodeObject* targetdep = dependTarget->GetPBXTargetDependency();
|
||||||
this->CreateObject(cmXCodeObject::PBXContainerItemProxy);
|
if(!targetdep)
|
||||||
container->AddAttribute("containerPortal",
|
{
|
||||||
this->CreateObjectReference(m_RootObject));
|
cmXCodeObject* container =
|
||||||
container->AddAttribute("proxyType", this->CreateString("1"));
|
this->CreateObject(cmXCodeObject::PBXContainerItemProxy);
|
||||||
container->AddAttribute("remoteGlobalIDString",
|
container->AddAttribute("containerPortal",
|
||||||
this->CreateObjectReference(dependTarget));
|
this->CreateObjectReference(m_RootObject));
|
||||||
container->AddAttribute("remoteInfo",
|
container->AddAttribute("proxyType", this->CreateString("1"));
|
||||||
this->CreateString(
|
container->AddAttribute("remoteGlobalIDString",
|
||||||
dependTarget->GetcmTarget()->GetName()));
|
this->CreateObjectReference(dependTarget));
|
||||||
cmXCodeObject* targetdep =
|
container->AddAttribute("remoteInfo",
|
||||||
this->CreateObject(cmXCodeObject::PBXTargetDependency);
|
this->CreateString(
|
||||||
targetdep->AddAttribute("target", this->CreateObjectReference(dependTarget));
|
dependTarget->GetcmTarget()->GetName()));
|
||||||
targetdep->AddAttribute("targetProxy",
|
targetdep =
|
||||||
this->CreateObjectReference(container));
|
this->CreateObject(cmXCodeObject::PBXTargetDependency);
|
||||||
|
targetdep->AddAttribute("target",
|
||||||
|
this->CreateObjectReference(dependTarget));
|
||||||
|
targetdep->AddAttribute("targetProxy",
|
||||||
|
this->CreateObjectReference(container));
|
||||||
|
dependTarget->SetPBXTargetDependency(targetdep);
|
||||||
|
}
|
||||||
|
|
||||||
cmXCodeObject* depends = target->GetObject("dependencies");
|
cmXCodeObject* depends = target->GetObject("dependencies");
|
||||||
if(!depends)
|
if(!depends)
|
||||||
{
|
{
|
||||||
@ -496,9 +512,21 @@ void cmGlobalXCodeGenerator::AddDependTarget(cmXCodeObject* target,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmGlobalXCodeGenerator::AddLinkTarget(cmXCodeObject* ,
|
void cmGlobalXCodeGenerator::AddLinkTarget(cmXCodeObject* target ,
|
||||||
cmXCodeObject* )
|
cmXCodeObject* dependTarget )
|
||||||
{
|
{
|
||||||
|
cmXCodeObject* buildfile = this->CreateObject(cmXCodeObject::PBXBuildFile);
|
||||||
|
cmXCodeObject* ref = dependTarget->GetObject("productReference");
|
||||||
|
buildfile->AddAttribute("fileRef", ref);
|
||||||
|
cmXCodeObject* settings =
|
||||||
|
this->CreateObject(cmXCodeObject::ATTRIBUTE_GROUP);
|
||||||
|
buildfile->AddAttribute("settings", settings);
|
||||||
|
|
||||||
|
cmXCodeObject* buildPhases = target->GetObject("buildPhases");
|
||||||
|
cmXCodeObject* frameworkBuildPhase =
|
||||||
|
buildPhases->GetObject(cmXCodeObject::PBXFrameworksBuildPhase);
|
||||||
|
cmXCodeObject* files = frameworkBuildPhase->GetObject("files");
|
||||||
|
files->AddObject(buildfile);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmGlobalXCodeGenerator::AddLinkFlag(cmXCodeObject* ,
|
void cmGlobalXCodeGenerator::AddLinkFlag(cmXCodeObject* ,
|
||||||
@ -518,7 +546,6 @@ void cmGlobalXCodeGenerator::AddDependAndLinkInformation(cmXCodeObject* target)
|
|||||||
cmTarget::LinkLibraries::const_iterator j, jend;
|
cmTarget::LinkLibraries::const_iterator j, jend;
|
||||||
j = cmtarget->GetLinkLibraries().begin();
|
j = cmtarget->GetLinkLibraries().begin();
|
||||||
jend = cmtarget->GetLinkLibraries().end();
|
jend = cmtarget->GetLinkLibraries().end();
|
||||||
std::cerr << "link targets for " << cmtarget->GetName() << "\n";
|
|
||||||
for(;j!= jend; ++j)
|
for(;j!= jend; ++j)
|
||||||
{
|
{
|
||||||
cmTarget* t = this->FindTarget(j->first.c_str());
|
cmTarget* t = this->FindTarget(j->first.c_str());
|
||||||
@ -547,7 +574,7 @@ void cmGlobalXCodeGenerator::AddDependAndLinkInformation(cmXCodeObject* target)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
std::cerr << "External Util???: " << i->c_str() << "\n";
|
std::cerr << "Error External Util???: " << i->c_str() << "\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -587,17 +614,30 @@ void cmGlobalXCodeGenerator::CreateXCodeObjects(cmLocalGenerator* ,
|
|||||||
listObjs->AddObject(deployBuildStyle);
|
listObjs->AddObject(deployBuildStyle);
|
||||||
|
|
||||||
cmXCodeObject* mainGroup = this->CreateObject(cmXCodeObject::PBXGroup);
|
cmXCodeObject* mainGroup = this->CreateObject(cmXCodeObject::PBXGroup);
|
||||||
cmXCodeObject* mainGroupChildren = this->CreateObject(cmXCodeObject::OBJECT_LIST);
|
cmXCodeObject* mainGroupChildren =
|
||||||
|
this->CreateObject(cmXCodeObject::OBJECT_LIST);
|
||||||
mainGroup->AddAttribute("children", mainGroupChildren);
|
mainGroup->AddAttribute("children", mainGroupChildren);
|
||||||
mainGroup->AddAttribute("refType", this->CreateString("4"));
|
mainGroup->AddAttribute("refType", this->CreateString("4"));
|
||||||
mainGroup->AddAttribute("sourceTree", this->CreateString("<group>"));
|
mainGroup->AddAttribute("sourceTree", this->CreateString("<group>"));
|
||||||
|
|
||||||
|
cmXCodeObject* productGroup = this->CreateObject(cmXCodeObject::PBXGroup);
|
||||||
|
productGroup->AddAttribute("name", this->CreateString("Products"));
|
||||||
|
productGroup->AddAttribute("refType", this->CreateString("4"));
|
||||||
|
productGroup->AddAttribute("sourceTree", this->CreateString("<group>"));
|
||||||
|
cmXCodeObject* productGroupChildren =
|
||||||
|
this->CreateObject(cmXCodeObject::OBJECT_LIST);
|
||||||
|
productGroup->AddAttribute("children", productGroupChildren);
|
||||||
|
mainGroupChildren->AddObject(productGroup);
|
||||||
|
|
||||||
|
|
||||||
m_RootObject = this->CreateObject(cmXCodeObject::PBXProject);
|
m_RootObject = this->CreateObject(cmXCodeObject::PBXProject);
|
||||||
group = this->CreateObject(cmXCodeObject::ATTRIBUTE_GROUP);
|
group = this->CreateObject(cmXCodeObject::ATTRIBUTE_GROUP);
|
||||||
m_RootObject->AddAttribute("mainGroup", this->CreateObjectReference(mainGroup));
|
m_RootObject->AddAttribute("mainGroup",
|
||||||
|
this->CreateObjectReference(mainGroup));
|
||||||
m_RootObject->AddAttribute("buildSettings", group);
|
m_RootObject->AddAttribute("buildSettings", group);
|
||||||
m_RootObject->AddAttribute("buildSyles", listObjs);
|
m_RootObject->AddAttribute("buildSyles", listObjs);
|
||||||
m_RootObject->AddAttribute("hasScannedForEncodings", this->CreateString("0"));
|
m_RootObject->AddAttribute("hasScannedForEncodings",
|
||||||
|
this->CreateString("0"));
|
||||||
std::vector<cmXCodeObject*> targets;
|
std::vector<cmXCodeObject*> targets;
|
||||||
for(std::vector<cmLocalGenerator*>::iterator i = generators.begin();
|
for(std::vector<cmLocalGenerator*>::iterator i = generators.begin();
|
||||||
i != generators.end(); ++i)
|
i != generators.end(); ++i)
|
||||||
@ -611,6 +651,11 @@ void cmGlobalXCodeGenerator::CreateXCodeObjects(cmLocalGenerator* ,
|
|||||||
cmXCodeObject* t = *i;
|
cmXCodeObject* t = *i;
|
||||||
this->AddDependAndLinkInformation(t);
|
this->AddDependAndLinkInformation(t);
|
||||||
allTargets->AddObject(t);
|
allTargets->AddObject(t);
|
||||||
|
cmXCodeObject* productRef = t->GetObject("productReference");
|
||||||
|
if(productRef)
|
||||||
|
{
|
||||||
|
productGroupChildren->AddObject(productRef);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
m_RootObject->AddAttribute("targets", allTargets);
|
m_RootObject->AddAttribute("targets", allTargets);
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,10 @@ cmXCodeObject::~cmXCodeObject()
|
|||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
cmXCodeObject::cmXCodeObject(PBXType ptype, Type type)
|
cmXCodeObject::cmXCodeObject(PBXType ptype, Type type)
|
||||||
{
|
{
|
||||||
// m_cmTarget = 0;
|
m_PBXTargetDependency = 0;
|
||||||
|
m_cmTarget = 0;
|
||||||
|
m_Object =0;
|
||||||
|
|
||||||
m_IsA = ptype;
|
m_IsA = ptype;
|
||||||
cmOStringStream str;
|
cmOStringStream str;
|
||||||
str << (void*)this;
|
str << (void*)this;
|
||||||
|
@ -64,6 +64,29 @@ public:
|
|||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
// serach the attribute list for an object of the specified type
|
||||||
|
cmXCodeObject* GetObject(cmXCodeObject::PBXType t)
|
||||||
|
{
|
||||||
|
for(std::vector<cmXCodeObject*>::iterator i = m_List.begin();
|
||||||
|
i != m_List.end(); ++i)
|
||||||
|
{
|
||||||
|
cmXCodeObject* o = *i;
|
||||||
|
if(o->m_IsA == t)
|
||||||
|
{
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmXCodeObject* GetPBXTargetDependency()
|
||||||
|
{
|
||||||
|
return m_PBXTargetDependency;
|
||||||
|
}
|
||||||
|
void SetPBXTargetDependency(cmXCodeObject* d)
|
||||||
|
{
|
||||||
|
m_PBXTargetDependency = d;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
cmTarget* m_cmTarget;
|
cmTarget* m_cmTarget;
|
||||||
@ -72,6 +95,7 @@ private:
|
|||||||
PBXType m_IsA;
|
PBXType m_IsA;
|
||||||
cmStdString m_String;
|
cmStdString m_String;
|
||||||
cmXCodeObject* m_Object;
|
cmXCodeObject* m_Object;
|
||||||
|
cmXCodeObject* m_PBXTargetDependency;
|
||||||
std::vector<cmXCodeObject*> m_List;
|
std::vector<cmXCodeObject*> m_List;
|
||||||
std::map<cmStdString, cmXCodeObject*> m_ObjectAttributes;
|
std::map<cmStdString, cmXCodeObject*> m_ObjectAttributes;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user