reworked linking
This commit is contained in:
@@ -9,7 +9,7 @@
|
||||
class CClangLinker : public ILinker
|
||||
{
|
||||
public:
|
||||
virtual CUtlString Link( LinkProject_t *pProject ) override;
|
||||
//virtual CUtlString Link( LinkProject_t *pProject ) override;
|
||||
virtual bool IsLibraryExists( CUtlString szName ) override;
|
||||
protected:
|
||||
//virtual CUtlVector<CUtlString> BuildLinkCommandLine( LinkProject_t *pProject, const char *szFileName, const char *szOutputFileName );
|
||||
@@ -20,12 +20,12 @@ protected:
|
||||
|
||||
virtual void SetTarget( CUtlVector<CUtlString> &cmd, LinkProject_t *pProject ) override;
|
||||
virtual void SetSysroot( CUtlVector<CUtlString> &cmd, LinkProject_t *pProject , const char *szSysroot ) override;
|
||||
virtual void SetOutputFile( CUtlVector<CUtlString> &cmd) override;
|
||||
virtual void SetOutputFile( CUtlVector<CUtlString> &cmd, const char *szName ) override;
|
||||
|
||||
|
||||
// sets rpath
|
||||
// for windows should be ignored
|
||||
virtual void SetDefaultLibraryPaths( CUtlVector<CUtlString> &cmd ) override;
|
||||
virtual void SetDefaultLibraryPaths( CUtlVector<CUtlString> &cmd, LinkProject_t *pProject ) override;
|
||||
|
||||
virtual void UseStdLib( CUtlVector<CUtlString> &cmd, bool bUse ) override;
|
||||
|
||||
@@ -48,49 +48,86 @@ protected:
|
||||
|
||||
const char *CClangLinker::GetCompilerExecutable( LinkProject_t *pProject )
|
||||
{
|
||||
IINISection *pSection = NULL;
|
||||
const char *szLinker = "clang++";
|
||||
if (!g_pConfig)
|
||||
return szLinker;
|
||||
|
||||
|
||||
pSection = g_pConfig->GetSection(pProject->m_target.GetTriplet());
|
||||
if (!pSection)
|
||||
return szLinker;
|
||||
|
||||
|
||||
szLinker = pSection->GetStringValue("CLANG_LINKER_INTERFACE_NAME");
|
||||
if (szLinker == NULL)
|
||||
return "clang++";
|
||||
IINISection *pSection = NULL;
|
||||
const char *szLinker = "clang++";
|
||||
if (!g_pConfig)
|
||||
return szLinker;
|
||||
|
||||
|
||||
pSection = g_pConfig->GetSection(pProject->m_target.GetTriplet());
|
||||
if (!pSection)
|
||||
return szLinker;
|
||||
|
||||
|
||||
szLinker = pSection->GetStringValue("CLANG_LINKER_INTERFACE_NAME");
|
||||
if (szLinker == NULL)
|
||||
return "clang++";
|
||||
return szLinker;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void CClangLinker::SetTarget( CUtlVector<CUtlString> &cmd, LinkProject_t *pProject )
|
||||
{
|
||||
|
||||
{
|
||||
if (pProject->linkType == ELINK_DYNAMIC_LIBRARY)
|
||||
cmd.AppendTail("-shared");
|
||||
|
||||
cmd.AppendTail("-target");
|
||||
cmd.AppendTail(pProject->m_target.GetTriplet());
|
||||
}
|
||||
|
||||
void CClangLinker::SetSysroot( CUtlVector<CUtlString> &cmd, LinkProject_t *pProject , const char *szSysroot )
|
||||
void CClangLinker::SetSysroot( CUtlVector<CUtlString> &cmd, LinkProject_t *pProject , const char *szName )
|
||||
{
|
||||
if (szName != NULL)
|
||||
{
|
||||
cmd.AppendTail("--sysroot");
|
||||
cmd.AppendTail(szName);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!g_pConfig)
|
||||
return;
|
||||
|
||||
|
||||
IINISection *pSection = g_pConfig->GetSection(pProject->m_target.GetTriplet());
|
||||
if (!pSection)
|
||||
return;
|
||||
|
||||
const char *szSysroot = pSection->GetStringValue("sysroot");
|
||||
if (szSysroot)
|
||||
{
|
||||
cmd.AppendTail("--sysroot");
|
||||
cmd.AppendTail(szSysroot);
|
||||
}
|
||||
}
|
||||
|
||||
void CClangLinker::SetOutputFile( CUtlVector<CUtlString> &cmd)
|
||||
void CClangLinker::SetOutputFile( CUtlVector<CUtlString> &cmd, const char *szName )
|
||||
{
|
||||
|
||||
cmd.AppendTail("-o");
|
||||
cmd.AppendTail(szName);
|
||||
}
|
||||
|
||||
void CClangLinker::SetDefaultLibraryPaths( CUtlVector<CUtlString> &cmd )
|
||||
void CClangLinker::SetDefaultLibraryPaths( CUtlVector<CUtlString> &cmd, LinkProject_t *pProject )
|
||||
{
|
||||
|
||||
switch (pProject->m_target.kernel)
|
||||
{
|
||||
case TARGET_KERNEL_LINUX:
|
||||
case TARGET_KERNEL_ANDROID:
|
||||
cmd.AppendTail("-Wl,--disable-new-dtags");
|
||||
cmd.AppendTail("-Wl,-rpath,$ORIGIN");
|
||||
break;
|
||||
case TARGET_KERNEL_DARWIN:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void CClangLinker::UseStdLib( CUtlVector<CUtlString> &cmd, bool bUse )
|
||||
{
|
||||
|
||||
if (!bUse)
|
||||
cmd.AppendTail("-nostdlib");
|
||||
}
|
||||
|
||||
|
||||
@@ -102,38 +139,40 @@ void CClangLinker::UseDynamicLookup( CUtlVector<CUtlString> &cmd, bool bUse )
|
||||
|
||||
void CClangLinker::UseFullFile( CUtlVector<CUtlString> &cmd )
|
||||
{
|
||||
|
||||
cmd.AppendTail("-Wl,--whole-archive");
|
||||
}
|
||||
|
||||
|
||||
void CClangLinker::UsePartialFile( CUtlVector<CUtlString> &cmd )
|
||||
{
|
||||
|
||||
cmd.AppendTail("-Wl,--no-whole-archive");
|
||||
}
|
||||
|
||||
|
||||
void CClangLinker::LinkFile( CUtlVector<CUtlString> &cmd, const char *szName )
|
||||
{
|
||||
|
||||
cmd.AppendTail(szName);
|
||||
}
|
||||
|
||||
void CClangLinker::LinkLibraryObject( CUtlVector<CUtlString> &cmd, const char *szName )
|
||||
{
|
||||
|
||||
cmd.AppendTail(szName);
|
||||
}
|
||||
|
||||
void CClangLinker::LinkLibrary( CUtlVector<CUtlString> &cmd, const char *szName )
|
||||
{
|
||||
|
||||
cmd.AppendTail("-l");
|
||||
cmd.AppendTail(szName);
|
||||
}
|
||||
|
||||
void CClangLinker::LinkLibraryPath( CUtlVector<CUtlString> &cmd, const char *szName )
|
||||
{
|
||||
|
||||
cmd.AppendTail("-L");
|
||||
cmd.AppendTail(szName);
|
||||
}
|
||||
|
||||
EXPOSE_INTERFACE(CClangLinker, ILinker, CLANG_LINKER_INTERFACE_NAME);
|
||||
|
||||
/*
|
||||
CUtlString CClangLinker::Link( LinkProject_t *pProject )
|
||||
{
|
||||
if (pProject->m_szName == 0)
|
||||
@@ -353,7 +392,7 @@ use_default_linker:
|
||||
compiled:
|
||||
return szOutputFile;
|
||||
};
|
||||
|
||||
*/
|
||||
bool CClangLinker::IsLibraryExists( CUtlString szName )
|
||||
{
|
||||
szName = CUtlString("lib%s.so", szName.GetString());
|
||||
|
||||
Reference in New Issue
Block a user