improved lots of stuff

This commit is contained in:
2025-08-06 00:12:36 +03:00
parent 817ed344b4
commit 5635cd1d69
27 changed files with 348 additions and 38 deletions

View File

@@ -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)