91 lines
2.1 KiB
C++
91 lines
2.1 KiB
C++
#include "public/c.h"
|
|
#include "public/helper.h"
|
|
#include "public/ld.h"
|
|
#include "tier0/platform.h"
|
|
#include "tier1/commandline.h"
|
|
#include "c.h"
|
|
#include "tier1/utlvector.h"
|
|
#include "signal.h"
|
|
#include "libgen.h"
|
|
|
|
CUtlString owndir;
|
|
int build()
|
|
{
|
|
|
|
extern char *szBuildDir;
|
|
|
|
CCProject compileScriptProject = {};
|
|
compileScriptProject.m_szName = "build";
|
|
compileScriptProject.files = {"build.cpp"};
|
|
compileScriptProject.includeDirectories = {CUtlString("%s/public",IFileSystem2::OwnDirectory()),CUtlString("%s/public", IFileSystem2::BuildDirectory()), CUtlString("%s/../public",IFileSystem2::OwnDirectory()),CUtlString("%s/../public", IFileSystem2::BuildDirectory())};
|
|
compileScriptProject.bFPIC = true;
|
|
CLDProject linkScriptProject = compileScriptProject.Compile();
|
|
linkScriptProject.linkType = ELINK_DYNAMIC_LIBRARY;
|
|
CUtlString script = linkScriptProject.Link();
|
|
void *scriptDLL = Plat_LoadLibrary(script);
|
|
for (auto &build: BuildStages())
|
|
{
|
|
build->m_pMainFn();
|
|
};
|
|
Plat_UnloadLibrary(scriptDLL);
|
|
CCProject::GenerateCompileCommands();
|
|
|
|
return 0;
|
|
};
|
|
void IEngine_Signal(int sig)
|
|
{
|
|
switch (sig)
|
|
{
|
|
case SIGSEGV:
|
|
case SIGILL:
|
|
case SIGABRT:
|
|
Plat_Backtrace();
|
|
Plat_FatalErrorFunc("Fault");
|
|
break;
|
|
default:
|
|
break;
|
|
};
|
|
_exit(0);
|
|
};
|
|
|
|
int main(int c, char **v)
|
|
{
|
|
CUtlString buildcppDir = IFileSystem2::OwnDirectory();
|
|
owndir = buildcppDir;
|
|
char *szBuildcppDir = buildcppDir.GetString();
|
|
findbuild:
|
|
FILE* file = V_fopen("build.cpp", "rb");
|
|
if (!file)
|
|
{
|
|
dirname(szBuildcppDir);
|
|
if (buildcppDir=="/")
|
|
{
|
|
V_printf("build.cpp not found\n");
|
|
return 0;
|
|
}
|
|
chdir(szBuildcppDir);
|
|
goto findbuild;
|
|
} else {
|
|
V_fclose(file);
|
|
}
|
|
extern char *szBuildDir;
|
|
szBuildDir = szBuildcppDir;
|
|
|
|
#ifdef __linux
|
|
signal(SIGHUP, IEngine_Signal);
|
|
signal(SIGINT, IEngine_Signal);
|
|
signal(SIGQUIT, IEngine_Signal);
|
|
signal(SIGILL, IEngine_Signal);
|
|
signal(SIGTRAP, IEngine_Signal);
|
|
signal(SIGIOT, IEngine_Signal);
|
|
signal(SIGBUS, IEngine_Signal);
|
|
signal(SIGFPE, IEngine_Signal);
|
|
signal(SIGSEGV, IEngine_Signal);
|
|
signal(SIGTERM, IEngine_Signal);
|
|
#endif
|
|
ICommandLine::CreateCommandLine(c, v);
|
|
if (ICommandLine::CheckParam("build"))
|
|
return build();
|
|
return 0;
|
|
};
|