work on implementing xtool
This commit is contained in:
135
fpc/library/apple/swift.cpp
Normal file
135
fpc/library/apple/swift.cpp
Normal file
@@ -0,0 +1,135 @@
|
||||
#include "swift.h"
|
||||
|
||||
class CSwiftCompiler: public ISwiftCompiler
|
||||
{
|
||||
public:
|
||||
|
||||
// Compiles all files into objects, returns linker project,
|
||||
// which can be linked into executable or library.
|
||||
//virtual LinkProject_t Compile( SwiftProject_t *pProject );
|
||||
|
||||
//virtual void GenerateLinterData() ;
|
||||
|
||||
protected:
|
||||
// Compiler internals
|
||||
|
||||
virtual CUtlVector<CUtlString> BuildCommandLine( SwiftProject_t *pProject, const char *szFileName, const char *szOutputFileName ) override;
|
||||
|
||||
// Returns executable which should the OS run
|
||||
virtual const char *GetCompilerExecutable( SwiftProject_t *pProject ) override;
|
||||
|
||||
// returns object file format, eg .obj or .o
|
||||
virtual const char *GetOutputObjectFormat() override;
|
||||
|
||||
virtual void IncludeDirectory( CUtlVector<CUtlString> &cmd, const char *szName ) override;
|
||||
virtual void IncludeFile( CUtlVector<CUtlString> &cmd, const char *szName ) override;
|
||||
virtual void Macro( CUtlVector<CUtlString> &cmd, const char *szName ) override;
|
||||
virtual void Macro( CUtlVector<CUtlString> &cmd, const char *szName, const char *szValue ) override;
|
||||
|
||||
virtual void SetTarget( CUtlVector<CUtlString> &cmd, SwiftProject_t *pProject ) override;
|
||||
virtual void SetSysroot( CUtlVector<CUtlString> &cmd, SwiftProject_t *pProject , const char *szSysroot ) override;
|
||||
virtual void SetOutputFile( CUtlVector<CUtlString> &cmd, const char *szName ) override;
|
||||
|
||||
virtual void CompileFile( CUtlVector<CUtlString> &cmd, const char *szName ) override;
|
||||
|
||||
virtual void EnableDebugSymbols( CUtlVector<CUtlString> &cmd ) override;
|
||||
virtual void EnablePIE( CUtlVector<CUtlString> &cmd ) override;
|
||||
virtual void EnablePIC( CUtlVector<CUtlString> &cmd ) override;
|
||||
};
|
||||
|
||||
const char *CSwiftCompiler::GetOutputObjectFormat()
|
||||
{
|
||||
return ".o";
|
||||
}
|
||||
|
||||
CUtlVector<CUtlString> CSwiftCompiler::BuildCommandLine( SwiftProject_t *pProject, const char *szFileName, const char *szOutputFileName )
|
||||
{
|
||||
CUtlVector<CUtlString> cmd;
|
||||
cmd = ISwiftCompiler::BuildCommandLine(pProject, szFileName, szOutputFileName);
|
||||
cmd.AppendHead("-c");
|
||||
return cmd;
|
||||
}
|
||||
|
||||
|
||||
const char *CSwiftCompiler::GetCompilerExecutable( SwiftProject_t *pProject )
|
||||
{
|
||||
return "swiftc";
|
||||
}
|
||||
|
||||
|
||||
void CSwiftCompiler::IncludeDirectory( CUtlVector<CUtlString> &cmd, const char *szName )
|
||||
{
|
||||
cmd.AppendTail("-I");
|
||||
cmd.AppendTail(szName);
|
||||
}
|
||||
|
||||
void CSwiftCompiler::IncludeFile( CUtlVector<CUtlString> &cmd, const char *szName )
|
||||
{
|
||||
}
|
||||
|
||||
void CSwiftCompiler::Macro( CUtlVector<CUtlString> &cmd, const char *szName )
|
||||
{
|
||||
}
|
||||
|
||||
void CSwiftCompiler::Macro( CUtlVector<CUtlString> &cmd, const char *szName, const char *szValue )
|
||||
{
|
||||
cmd.AppendTail("-D");
|
||||
cmd.AppendTail(CUtlString("%s=%s", (char*)szName, (char*)szValue));
|
||||
}
|
||||
|
||||
void CSwiftCompiler::EnableDebugSymbols( CUtlVector<CUtlString> &cmd )
|
||||
{
|
||||
cmd.AppendTail("-g");
|
||||
}
|
||||
|
||||
void CSwiftCompiler::SetTarget( CUtlVector<CUtlString> &cmd, SwiftProject_t *pProject )
|
||||
{
|
||||
cmd.AppendTail("-target");
|
||||
cmd.AppendTail(pProject->m_target.GetTriplet());
|
||||
}
|
||||
|
||||
void CSwiftCompiler::CompileFile( CUtlVector<CUtlString> &cmd, const char *szName )
|
||||
{
|
||||
cmd.AppendTail(szName);
|
||||
}
|
||||
void CSwiftCompiler::SetOutputFile( CUtlVector<CUtlString> &cmd, const char *szName )
|
||||
{
|
||||
cmd.AppendTail("-o");
|
||||
cmd.AppendTail(szName);
|
||||
}
|
||||
void CSwiftCompiler::EnablePIE( CUtlVector<CUtlString> &cmd )
|
||||
{
|
||||
cmd.AppendTail("-fPIE");
|
||||
}
|
||||
|
||||
void CSwiftCompiler::EnablePIC( CUtlVector<CUtlString> &cmd )
|
||||
{
|
||||
cmd.AppendTail("-fPIC");
|
||||
}
|
||||
void CSwiftCompiler::SetSysroot( CUtlVector<CUtlString> &cmd, SwiftProject_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);
|
||||
}
|
||||
}
|
||||
|
||||
EXPOSE_INTERFACE(CSwiftCompiler, ISwiftCompiler, SWIFT_COMPILER_INTERFACE_VERSION)
|
||||
|
||||
@@ -17,7 +17,6 @@ void *LibFpcInit()
|
||||
CreateInterfaceFn pFilesystemFactory = Sys_GetFactory(pFilesystem);
|
||||
filesystem = (IFileSystem*)pFilesystemFactory(FILESYSTEM_INTERFACE_VERSION, NULL);
|
||||
filesystem->Init();
|
||||
V_printf("----- %p\n",filesystem);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
81
fpc/library/swift.cpp
Normal file
81
fpc/library/swift.cpp
Normal file
@@ -0,0 +1,81 @@
|
||||
#include "swift.h"
|
||||
|
||||
CUtlString ISwiftCompiler::GetOutputObjectName( SwiftProject_t *pProject, unsigned int hash, CUtlString szFileName )
|
||||
{
|
||||
CUtlString szTarget = pProject->m_target.GetTriplet();
|
||||
|
||||
return CUtlString(
|
||||
"%s/%s/swift/%u_%s/%s/%s%s",
|
||||
FPC_TEMPORAL_DIRNAME,
|
||||
szTarget.GetString(),
|
||||
hash,
|
||||
pProject->m_szName.GetString(),
|
||||
filesystem2->BuildDirectory(),
|
||||
szFileName.GetString(),
|
||||
GetOutputObjectFormat());
|
||||
};
|
||||
|
||||
CUtlVector<CUtlString> ISwiftCompiler::BuildCommandLine( SwiftProject_t *pProject, const char *szFileName, const char *szOutputFileName )
|
||||
{
|
||||
|
||||
CUtlVector<CUtlString> cmd;
|
||||
|
||||
EnableDebugSymbols(cmd);
|
||||
if (pProject->bFPIC)
|
||||
EnablePIC(cmd);
|
||||
if (pProject->bFPIE)
|
||||
EnablePIE(cmd);
|
||||
SetTarget(cmd, pProject);
|
||||
SetOutputFile(cmd, szOutputFileName);
|
||||
SetSysroot(cmd, pProject, NULL);
|
||||
CompileFile(cmd, szFileName);
|
||||
for (auto ¯o: pProject->macros)
|
||||
Macro(cmd, macro.szName, macro.szValue.GetString());
|
||||
for (auto &dir: pProject->includeDirectories)
|
||||
IncludeDirectory(cmd, dir);
|
||||
|
||||
return cmd;
|
||||
}
|
||||
|
||||
LinkProject_t ISwiftCompiler::Compile( SwiftProject_t *pProject )
|
||||
{
|
||||
if (pProject->m_szName == 0)
|
||||
{
|
||||
Plat_FatalErrorFunc("m_szName must be present\n");
|
||||
}
|
||||
|
||||
LinkProject_t proj = {};
|
||||
proj.m_szName = pProject->m_szName;
|
||||
proj.m_target = pProject->m_target;
|
||||
proj.m_androidmanifest = pProject->m_androidmanifest;
|
||||
unsigned int hash = pProject->GenerateProjectHash();
|
||||
|
||||
|
||||
// Get output directories
|
||||
for (auto &file: pProject->files)
|
||||
{
|
||||
CUtlString szOutputFile = GetOutputObjectName(pProject, hash, file);
|
||||
CUtlString szOutputDir = szOutputFile.GetDirectory();
|
||||
filesystem2->MakeDirectory(szOutputDir);
|
||||
}
|
||||
|
||||
// Run CC
|
||||
for (auto &file: pProject->files)
|
||||
{
|
||||
CUtlString szOutputFile = GetOutputObjectName(pProject, hash, file);
|
||||
CUtlVector<CUtlString> args;
|
||||
|
||||
args = BuildCommandLine(pProject, file, szOutputFile);
|
||||
if (!filesystem2->ShouldRecompile(file, szOutputFile))
|
||||
goto skipcompile;
|
||||
else
|
||||
V_printf(" SWIFT %s\n", file.GetString());
|
||||
runner->Run(GetCompilerExecutable(pProject), args);
|
||||
skipcompile:
|
||||
proj.objects.AppendTail((Object_t){szOutputFile});
|
||||
}
|
||||
runner->Wait();
|
||||
return proj;
|
||||
}
|
||||
|
||||
ISwiftCompiler *swiftcompiler = NULL;
|
||||
Reference in New Issue
Block a user