Files
funnygame/fpc/build.cpp
2026-01-01 02:14:54 +02:00

149 lines
3.6 KiB
C++

#include "c.h"
#include "ld.h"
#include "helper.h"
#include "tier0/platform.h"
#include "tier1/interface.h"
#include "signal.h"
ADD_DEPENDENCY_BUILD_FILE(tier0, "../tier0/");
ADD_DEPENDENCY_BUILD_FILE(tier1, "../tier1/");
ADD_DEPENDENCY_BUILD_FILE(tier2, "../tier2/");
CUtlVector<CUtlString> g_fpcFiles = {
"main.cpp",
"library/helper.cpp",
"library/target.cpp",
"library/builder.cpp",
};
CUtlVector<CUtlString> g_libFpcFiles = {
"library/libfpc.cpp",
"library/helper.cpp",
"library/target.cpp",
"library/builder.cpp",
"library/runner.cpp",
"library/winerunner.cpp",
"library/c.cpp",
"library/ld.cpp",
"library/android/apktool.cpp",
"library/clang/c.cpp",
"library/clang/ld.cpp",
"library/windows/c.cpp",
"library/windows/ld.cpp",
};
CUtlVector<CUtlString> g_IncludeDirectories = {
"public",
"../public",
};
DECLARE_BUILD_STAGE(libfpcbuild)
{
CProject_t compileProject = {};
LinkProject_t ldProject = {};
compileProject.m_szName = "fpc";
compileProject.files = g_libFpcFiles;
compileProject.includeDirectories = g_IncludeDirectories;
compileProject.bFPIC = true;
ldProject = ccompiler->Compile(&compileProject);
ldProject.linkType = ELINK_STATIC_LIBRARY;
if (linker->IsLibraryExists("clang"))
ldProject.libraries.AppendTail("clang");
CUtlString outputProject = linker->Link(&ldProject);
ADD_OUTPUT_OBJECT("fpc", outputProject)
return 0;
}
DECLARE_BUILD_STAGE(libfpc)
{
if (linker->IsLibraryExists("clang"))
g_libFpcFiles.AppendTail("library/clang/c_libclang.cpp");
else
V_printf("Warning: to support included files libclang must be installed.");
CProject_t compileProject = {};
LinkProject_t ldProject = {};
compileProject.m_szName = "fpc";
compileProject.files = g_libFpcFiles;
compileProject.includeDirectories = g_IncludeDirectories;
compileProject.bFPIC = true;
ldProject = ccompiler->Compile(&compileProject);
ldProject.linkType = ELINK_DYNAMIC_LIBRARY;
ldProject.libraryObjects = {
"libtier0.so",
GET_PROJECT_LIBRARY(tier1, "tier1"),
GET_PROJECT_LIBRARY(tier2, "tier2"),
};
V_printf("WHAT %s\n",GET_PROJECT_LIBRARY(tier0, "tier0").GetString());
if (linker->IsLibraryExists("clang"))
ldProject.libraries.AppendTail("clang");
CUtlString outputProject = linker->Link(&ldProject);
ADD_OUTPUT_OBJECT("fpc", outputProject)
return 0;
};
DECLARE_BUILD_STAGE(fpc)
{
CProject_t compileProject = {};
LinkProject_t ldProject = {};
compileProject.m_szName = "fpc";
compileProject.files = g_fpcFiles;
compileProject.includeDirectories = g_IncludeDirectories;
ldProject = ccompiler->Compile(&compileProject);
ldProject.libraryObjects = {
"libtier0.so",
GET_PROJECT_LIBRARY(tier1, "tier1"),
GET_PROJECT_LIBRARY(tier2, "tier2"),
};
V_printf("WHAT %s\n",GET_PROJECT_LIBRARY(tier0, "tier0").GetString());
if (linker->IsLibraryExists("clang"))
ldProject.libraries.AppendTail("clang");
CUtlString outputProject = linker->Link(&ldProject);
ADD_OUTPUT_OBJECT("fpc", outputProject)
return 0;
};
DECLARE_BUILD_STAGE(install)
{
CUtlString szExe = GET_PROJECT_LIBRARY(fpc, "fpc");
CUtlString szLibFpc = GET_PROJECT_LIBRARY(libfpc, "fpc");
CUtlString szTier0 = GET_PROJECT_LIBRARY(tier0, "tier0");
CUtlString szTier1 = GET_PROJECT_LIBRARY(tier1, "tier1");
CUtlString szTier2 = GET_PROJECT_LIBRARY(tier2, "tier2");
filesystem2->CopyFile("build/fpc_temp", szExe);
filesystem2->CopyFile("build/libfpc_temp.so", szLibFpc);
/*
filesystem2->CopyFile("build/libtier1.a", szTier1);
filesystem2->CopyFile("build/libtier2.a", szTier2);
filesystem2->CopyFile("build/libtier0_temp.so", szTier0);
*/
return 0;
};