Files
funnygame/fpc/library/ld.cpp
2025-05-31 00:42:18 +03:00

43 lines
1.0 KiB
C++

#include "ld.h"
#include "libgen.h"
CUtlString CLDProject::Link( void )
{
CUtlString szFileName;
unsigned int hash = GenerateProjectHash();
switch(linkType)
{
case ELINK_EXECUTABLE:
szFileName = CUtlString("%s", m_szName.GetString());
break;
case ELINK_STATIC_LIBRARY:
szFileName = CUtlString("lib%s.a", m_szName.GetString());
break;
case ELINK_DYNAMIC_LIBRARY:
szFileName = CUtlString("lib%s.so", m_szName.GetString());
break;
}
CUtlString szOutputFile = CUtlString("%s/ld/%u/%s",FPC_TEMPORAL_DIRNAME, hash, szFileName.GetString());
CUtlString szOutputDir = szOutputFile;
szOutputDir = dirname(szOutputDir);
IFileSystem2::MakeDirectory(szOutputDir);
if (linkType == ELINK_STATIC_LIBRARY)
{
CUtlVector<CUtlString> args = {
"rcs",
};
IRunner::Run("ar", args);
} else {
CUtlVector<CUtlString> args = {
"-o",
szOutputFile,
};
if (linkType == ELINK_DYNAMIC_LIBRARY)
args.AppendTail("-shared");
for (auto object: objects)
args.AppendTail(object.m_szObjectFile);
IRunner::Run("clang++", args);
}
return szOutputFile;
};