improved lots of stuff
This commit is contained in:
@@ -1,9 +1,11 @@
|
||||
#include "c.h"
|
||||
#include "c_libclang.h"
|
||||
#include "helper.h"
|
||||
#include "obj.h"
|
||||
#include "target.h"
|
||||
#include "tier0/lib.h"
|
||||
#include "tier0/platform.h"
|
||||
#include "tier1/commandline.h"
|
||||
#include "tier1/interface.h"
|
||||
#include "tier1/utlstring.h"
|
||||
#include "tier1/utlvector.h"
|
||||
@@ -26,14 +28,26 @@ public:
|
||||
EXPOSE_INTERFACE(CClangCompiler, ICCompiler, CLANG_C_COMPILER_INTERFACE_NAME);
|
||||
|
||||
CUtlVector<ClangFile_t> g_clangFiles;
|
||||
IClangBackend *clangbackend = NULL;
|
||||
|
||||
LinkProject_t CClangCompiler::Compile( CProject_t *pProject )
|
||||
{
|
||||
if (!clangbackend && CommandLine()->CheckParam("-experimental_header_include"))
|
||||
clangbackend = (IClangBackend*)CreateInterface(CLANG_BACKEND_INTERFACE_NAME, NULL);
|
||||
V_printf("CLANG: %p\n", clangbackend);
|
||||
|
||||
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 szTarget = pProject->m_target.GetTriplet();
|
||||
@@ -42,12 +56,16 @@ LinkProject_t CClangCompiler::Compile( CProject_t *pProject )
|
||||
szOutputDir = dirname(szOutputDir);
|
||||
filesystem2->MakeDirectory(szOutputDir);
|
||||
}
|
||||
|
||||
// Run CC
|
||||
for (auto &file: pProject->files)
|
||||
{
|
||||
CUtlVector<CUtlString> args;
|
||||
V_printf(" CC %s\n", file.GetString());
|
||||
|
||||
CUtlVector<CUtlString> args;
|
||||
CUtlString szTarget = pProject->m_target.GetTriplet();
|
||||
CUtlString szCompiledTarget = szTarget;
|
||||
bool bAreDependenciesUpdated = false;
|
||||
if (pProject->m_target.kernel == TARGET_KERNEL_ANDROID)
|
||||
{
|
||||
szCompiledTarget = CUtlString("%s%u", szTarget.GetString(), pProject->m_androidmanifest.m_nTargetVersion);
|
||||
@@ -57,11 +75,6 @@ LinkProject_t CClangCompiler::Compile( CProject_t *pProject )
|
||||
args = {
|
||||
"-target",
|
||||
szCompiledTarget,
|
||||
"-g",
|
||||
"-c",
|
||||
"-o",
|
||||
szOutputFile,
|
||||
file,
|
||||
};
|
||||
if (!strcmp(Plat_GetExtension(file),"cpp"))
|
||||
args.AppendTail("-std=c++17");
|
||||
@@ -106,9 +119,17 @@ LinkProject_t CClangCompiler::Compile( CProject_t *pProject )
|
||||
args.AppendTail("-include");
|
||||
args.AppendTail(include);
|
||||
}
|
||||
if (!filesystem2->ShouldRecompile(file, szOutputFile))
|
||||
|
||||
if (clangbackend)
|
||||
bAreDependenciesUpdated = clangbackend->AreFileDependenciesUpdated(file, szOutputFile, args);
|
||||
if (!filesystem2->ShouldRecompile(file, szOutputFile) && !bAreDependenciesUpdated)
|
||||
goto skipcompile;
|
||||
|
||||
args.AppendTail("-c");
|
||||
args.AppendTail("-o");
|
||||
args.AppendTail(szOutputFile);
|
||||
args.AppendTail(file);
|
||||
|
||||
if (pProject->m_target.kernel == TARGET_KERNEL_ANDROID)
|
||||
{
|
||||
if (!pProject->m_target.szSysroot)
|
||||
|
||||
Reference in New Issue
Block a user