From 953cca2aa4b449a4e2b5d7bc217d9ac5ace39424 Mon Sep 17 00:00:00 2001 From: kotofyt Date: Sat, 31 May 2025 00:42:18 +0300 Subject: [PATCH] Started work on build system --- fpc/.fpc/cc/1762019572/build.cpp.o | Bin 0 -> 6056 bytes fpc/.fpc/ld/855499559/libbuild.so | Bin 0 -> 16064 bytes fpc/Makefile | 9 +++++ fpc/build.cpp | 8 ++++ fpc/build.sh | 0 fpc/library/c.cpp | 61 +++++++++++++++++++++++++++++ fpc/library/helper.cpp | 46 ++++++++++++++++++++++ fpc/library/ld.cpp | 42 ++++++++++++++++++++ fpc/library/runner.cpp | 37 +++++++++++++++++ fpc/main.cpp | 35 +++++++++++++++++ fpc/public/c.h | 29 ++++++++++++++ fpc/public/helper.h | 38 ++++++++++++++++++ fpc/public/ld.h | 33 ++++++++++++++++ fpc/public/obj.h | 13 ++++++ fpc/public/runner.h | 15 +++++++ fpc/public/target.h | 23 +++++++++++ 16 files changed, 389 insertions(+) create mode 100644 fpc/.fpc/cc/1762019572/build.cpp.o create mode 100644 fpc/.fpc/ld/855499559/libbuild.so create mode 100644 fpc/Makefile create mode 100644 fpc/build.cpp delete mode 100644 fpc/build.sh create mode 100644 fpc/library/c.cpp create mode 100644 fpc/library/helper.cpp create mode 100644 fpc/library/ld.cpp create mode 100644 fpc/library/runner.cpp create mode 100644 fpc/public/c.h create mode 100644 fpc/public/helper.h create mode 100644 fpc/public/ld.h create mode 100644 fpc/public/obj.h create mode 100644 fpc/public/runner.h create mode 100644 fpc/public/target.h diff --git a/fpc/.fpc/cc/1762019572/build.cpp.o b/fpc/.fpc/cc/1762019572/build.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..e6f37d326078c5a22d065dae53d6104954c7a5bd GIT binary patch literal 6056 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 literal 0 HcmV?d00001 diff --git a/fpc/Makefile b/fpc/Makefile new file mode 100644 index 0000000..c3a87a6 --- /dev/null +++ b/fpc/Makefile @@ -0,0 +1,9 @@ +TIER0_FILES := $(wildcard ../tier0/*.cpp) +TIER1_FILES := $(wildcard ../tier1/*.cpp) +FPC_FILES := main.cpp library/runner.cpp library/helper.cpp library/c.cpp library/ld.cpp +CC = clang +OUTPUT_DIR = ../build/tools/fpc + +full: $(TIER0_FILES) $(TIER1_FILES) $(FPC_FILES) + mkdir -p ../build/tools + $(CC) -g -rdynamic $(TIER0_FILES) $(TIER1_FILES) $(FPC_FILES) -I../public -Ipublic -lc -lstdc++ -o $(OUTPUT_DIR) diff --git a/fpc/build.cpp b/fpc/build.cpp new file mode 100644 index 0000000..5e8c243 --- /dev/null +++ b/fpc/build.cpp @@ -0,0 +1,8 @@ +#include "helper.h" + +int build_fpc() +{ + V_printf("cool\n"); + return 0; +}; +DECLARE_BUILD_STAGE(fpc, build_fpc); diff --git a/fpc/build.sh b/fpc/build.sh deleted file mode 100644 index e69de29..0000000 diff --git a/fpc/library/c.cpp b/fpc/library/c.cpp new file mode 100644 index 0000000..87183c2 --- /dev/null +++ b/fpc/library/c.cpp @@ -0,0 +1,61 @@ +#include "c.h" +#include "filesystem.h" +#include "helper.h" +#include "tier1/utlvector.h" +#include "libgen.h" + +struct ClangFile_t +{ + CUtlString m_szName; + CUtlVector m_szArguments; +}; + +CUtlVector g_clangFiles; + +CLDProject CCProject::Compile() +{ + CLDProject proj = {}; + proj.m_szName = m_szName; + unsigned int hash = GenerateProjectHash(); + for (auto &file: files) + { + CUtlString szOutputFile = CUtlString("%s/cc/%u/%s.o",FPC_TEMPORAL_DIRNAME, hash, file.GetString()); + CUtlString szOutputDir = szOutputFile; + szOutputDir = dirname(szOutputDir); + IFileSystem2::MakeDirectory(szOutputDir); + + CUtlVector args = { + "-c", + "-o", + szOutputFile, + file, + }; + if (bFPIC) + args.AppendTail("-fPIC"); + if (bFPIE) + args.AppendTail("-fPIE"); + for (auto ¯o: macros) + { + args.AppendTail("-D"); + args.AppendTail(CUtlString("%s=%s", (char*)macro.szName, (char*)macro.szValue)); + } + for (auto &include: includeDirectories) + { + args.AppendTail("-I"); + args.AppendTail(include); + } + for (auto &include: includeFiles) + { + args.AppendTail("-include"); + args.AppendTail(include); + } + IRunner::Run("clang", args); + proj.objects.AppendTail((CObject){szOutputFile}); + + ClangFile_t file = {}; + file.m_szName = m_szName; + file.m_szArguments = args; + g_clangFiles.AppendTail(file); + } + return proj; +} diff --git a/fpc/library/helper.cpp b/fpc/library/helper.cpp new file mode 100644 index 0000000..f06c2b8 --- /dev/null +++ b/fpc/library/helper.cpp @@ -0,0 +1,46 @@ +#include "helper.h" +#include "runner.h" +#include "tier0/platform.h" +#include "tier1/utlvector.h" +#include "tier1/utlstring.h" + +unsigned int g_hashState = 102851263; +unsigned int CProject::GenerateProjectHash( void ) +{ + unsigned int hash = 5381+g_hashState; + int c; + char *szName = m_szName; + + while( (c = *szName++) ) + hash = (hash * 33) + c; + + g_hashState = g_hashState * 1664525 + 1013904223; + + return hash; +}; + +void IFileSystem2::MakeDirectory( const char *psz ) +{ + CUtlVector args = { + "-p", + psz, + }; + IRunner::Run("mkdir", args); +}; + +CUtlVector g_buildStages; + +CBuildStage::CBuildStage( CUtlString sz, int(*pMainFn)() ) +{ + m_sz = sz; + m_pMainFn = pMainFn; + if (sz == 0 || pMainFn == 0) + Plat_FatalErrorFunc("Name and function pointer must be set\n"); + + g_buildStages.AppendTail(this); +}; + +CUtlVector& BuildStages() +{ + return g_buildStages; +} diff --git a/fpc/library/ld.cpp b/fpc/library/ld.cpp new file mode 100644 index 0000000..cad8e50 --- /dev/null +++ b/fpc/library/ld.cpp @@ -0,0 +1,42 @@ +#include "ld.h" +#include "libgen.h" + +CUtlString CLDProject::Link( void ) +{ + CUtlString szFileName; + unsigned int hash = GenerateProjectHash(); + switch(linkType) + { + case ELINK_EXECUTABLE: + szFileName = CUtlString("%s", m_szName.GetString()); + break; + case ELINK_STATIC_LIBRARY: + szFileName = CUtlString("lib%s.a", m_szName.GetString()); + break; + case ELINK_DYNAMIC_LIBRARY: + szFileName = CUtlString("lib%s.so", m_szName.GetString()); + break; + } + CUtlString szOutputFile = CUtlString("%s/ld/%u/%s",FPC_TEMPORAL_DIRNAME, hash, szFileName.GetString()); + CUtlString szOutputDir = szOutputFile; + szOutputDir = dirname(szOutputDir); + IFileSystem2::MakeDirectory(szOutputDir); + if (linkType == ELINK_STATIC_LIBRARY) + { + CUtlVector args = { + "rcs", + }; + IRunner::Run("ar", args); + } else { + CUtlVector args = { + "-o", + szOutputFile, + }; + if (linkType == ELINK_DYNAMIC_LIBRARY) + args.AppendTail("-shared"); + for (auto object: objects) + args.AppendTail(object.m_szObjectFile); + IRunner::Run("clang++", args); + } + return szOutputFile; +}; diff --git a/fpc/library/runner.cpp b/fpc/library/runner.cpp new file mode 100644 index 0000000..a3b0241 --- /dev/null +++ b/fpc/library/runner.cpp @@ -0,0 +1,37 @@ +#include "runner.h" +#include "tier0/platform.h" +#include "tier1/utlstring.h" +#include "tier1/utlvector.h" +#include "unistd.h" +#include "sys/wait.h" +int IRunner::Run(CUtlString szName, CUtlVector& args) +{ + pid_t pid = fork(); + if (pid < 0) + Plat_FatalErrorFunc("Failed to fork"); + /* child */ + if (pid == 0) + { + CUtlVector execargs; + execargs.AppendTail(szName); + for (auto &arg: args) + { + execargs.AppendTail(arg); + } + execargs.AppendTail(0); + execvp(szName, (char *const*)execargs.GetData()); + } + /* parent */ + wait(NULL); + return 0; +} + +int IRunner::Run(CUtlString szName, CUtlString szDirectory, CUtlVector& args) +{ +} + +int IRunner::Run(CUtlString szName, CUtlString szDirectory, CUtlVector& args, CUtlVector& environment) +{ + +} + diff --git a/fpc/main.cpp b/fpc/main.cpp index e69de29..1a0775f 100644 --- a/fpc/main.cpp +++ b/fpc/main.cpp @@ -0,0 +1,35 @@ +#include "public/helper.h" +#include "public/ld.h" +#include "tier0/platform.h" +#include "tier1/commandline.h" +#include "c.h" +#include "tier1/utlvector.h" + +int build() +{ + CCProject compileScriptProject = {}; + compileScriptProject.m_szName = "build"; + compileScriptProject.files = {"build.cpp"}; + compileScriptProject.includeDirectories = {"public","../public"}; + 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); + + return 0; +}; + + +int main(int c, char **v) +{ + ICommandLine::CreateCommandLine(c, v); + if (ICommandLine::CheckParam("build")) + return build(); + return 0; +}; diff --git a/fpc/public/c.h b/fpc/public/c.h new file mode 100644 index 0000000..d4c4b1a --- /dev/null +++ b/fpc/public/c.h @@ -0,0 +1,29 @@ +#ifndef C_H +#define C_H + +#include "tier1/utlstring.h" +#include "tier1/utlvector.h" +#include "runner.h" +#include "ld.h" +#include "target.h" +#include "helper.h" + +struct C_Macro_t +{ + CUtlString szName; + CUtlString szValue; +}; + +class CCProject : public CProject +{ +public: + CUtlVector files; + CUtlVector macros; + CUtlVector includeDirectories; + CUtlVector includeFiles; + bool bFPIE; + bool bFPIC; + CLDProject Compile(); +}; + +#endif diff --git a/fpc/public/helper.h b/fpc/public/helper.h new file mode 100644 index 0000000..e3d21be --- /dev/null +++ b/fpc/public/helper.h @@ -0,0 +1,38 @@ +#ifndef HELPER_H +#define HELPER_H + +#include "tier1/utlstring.h" + +#define FPC_TEMPORAL_DIRNAME ".fpc" + +class CProject +{ +public: + CUtlString m_szName; + unsigned int GenerateProjectHash( void ); +}; + +interface IFileSystem2 +{ +public: + static void MakeDirectory( const char *psz ); + static void CopyFile( const char *szDestination, const char *szOrigin ); + static void CopyDirectory( const char *szDestination, const char *szOrigin ); +}; + + + +class CBuildStage +{ +public: + CBuildStage( CUtlString sz, int(*pMainFn)() ); + CUtlString m_sz; + int(*m_pMainFn)(); +}; + +#define DECLARE_BUILD_STAGE(sz, fn) \ +CBuildStage __##sz##_build_stage(#sz, fn); + +CUtlVector& BuildStages(); + +#endif diff --git a/fpc/public/ld.h b/fpc/public/ld.h new file mode 100644 index 0000000..03bd731 --- /dev/null +++ b/fpc/public/ld.h @@ -0,0 +1,33 @@ +#ifndef LD_H +#define LD_H + + +#include "runner.h" +#include "helper.h" +#include "obj.h" +#include "tier1/utlstring.h" + +enum ELinkType +{ + ELINK_EXECUTABLE, + ELINK_DYNAMIC_LIBRARY, + ELINK_STATIC_LIBRARY, +}; + +class CLDProject: public CProject +{ +public: + void AddObject( CObject& object ); + void AddLibrary( CUtlString psz ); + void AddLibraryByPath( CUtlString szPath ); + void AddLibraryDirectory( CUtlString szPath ); + CUtlString Link( void ); + + ELinkType linkType; + CUtlVector objects; + CUtlVector libraries; + CUtlVector libraryDirectories; + CUtlVector libraryObjects; +}; + +#endif diff --git a/fpc/public/obj.h b/fpc/public/obj.h new file mode 100644 index 0000000..51cec75 --- /dev/null +++ b/fpc/public/obj.h @@ -0,0 +1,13 @@ +#ifndef OBJ_H +#define OBJ_H + +#include "tier1/utlstring.h" + +class CObject +{ +public: + CUtlString m_szObjectFile; + CUtlString m_szSourceFile; +}; + +#endif diff --git a/fpc/public/runner.h b/fpc/public/runner.h new file mode 100644 index 0000000..817a938 --- /dev/null +++ b/fpc/public/runner.h @@ -0,0 +1,15 @@ +#ifndef RUNNER_H +#define RUNNER_H + +#include "tier1/utlvector.h" +#include "tier1/utlstring.h" + +interface IRunner +{ +public: + static int Run( CUtlString szName, CUtlVector& args ); + static int Run( CUtlString szName, CUtlString szDirectory, CUtlVector& args ); + static int Run( CUtlString szName, CUtlString szDirectory, CUtlVector& args, CUtlVector& environment ); +}; + +#endif diff --git a/fpc/public/target.h b/fpc/public/target.h new file mode 100644 index 0000000..94fc26e --- /dev/null +++ b/fpc/public/target.h @@ -0,0 +1,23 @@ +#ifndef TARGET_T +#define TARGET_T + +enum ETargetKernel +{ + TARGET_KERNEL_LINUX, + TARGET_KERNEL_WINDOWS, +}; + +enum ETargetCPU +{ + TARGET_CPU_AMD64, + TARGET_CPU_I386, +}; + +struct Target_t +{ + ETargetKernel kernel; + ETargetCPU cpu; + static Target_t DefaultTarget(); +}; + +#endif