Files
funnygame/fpc/library/ld.cpp
2025-06-04 00:18:32 +03:00

52 lines
1.3 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/%s",FPC_TEMPORAL_DIRNAME, hash, m_szName.GetString(), szFileName.GetString());
CUtlString szOutputDir = szOutputFile;
szOutputDir = dirname(szOutputDir);
IFileSystem2::MakeDirectory(szOutputDir);
if (linkType == ELINK_STATIC_LIBRARY)
{
CUtlVector<CUtlString> args = {
"rcs",
szOutputFile
};
for (auto object: objects)
args.AppendTail(object.m_szObjectFile);
IRunner::Run("ar", args);
} else {
CUtlVector<CUtlString> args = {
"-rdynamic",
"-o",
szOutputFile,
};
if (linkType == ELINK_DYNAMIC_LIBRARY)
args.AppendTail("-shared");
for (auto object: objects)
args.AppendTail(object.m_szObjectFile);
for (auto lib: libraries)
{
args.AppendTail("-l");
args.AppendTail(lib);
}
IRunner::Run("clang++", args);
}
return szOutputFile;
};