From 9a2ccd9cf0df2215a456b1e71f129f06f99f8316 Mon Sep 17 00:00:00 2001 From: kotofyt Date: Sun, 28 Dec 2025 01:39:26 +0200 Subject: [PATCH] almost done --- fpc/Makefile | 48 +++++++++++++---- fpc/build.cpp | 7 +-- fpc/buildfile/interfaces.cpp | 26 +++++++++ fpc/buildfile/interfaces.o | Bin 0 -> 38040 bytes fpc/library/builder.cpp | 96 +++++++++++++++++++++++++++++++++ fpc/library/clang/ld.cpp | 2 +- fpc/library/helper.cpp | 17 ------ fpc/library/ld.cpp | 5 ++ fpc/library/windows/ld.cpp | 2 +- fpc/main.cpp | 21 ++++---- fpc/public/builder.h | 11 +++- fpc/public/dependencymanager.h | 0 fpc/public/helper.h | 14 ++--- fpc/public/interfaces.cpp | 11 ---- fpc/public/ld.h | 2 +- fpc/public/lsp.h | 11 ++++ 16 files changed, 211 insertions(+), 62 deletions(-) create mode 100644 fpc/buildfile/interfaces.cpp create mode 100644 fpc/buildfile/interfaces.o create mode 100644 fpc/public/dependencymanager.h delete mode 100644 fpc/public/interfaces.cpp create mode 100644 fpc/public/lsp.h diff --git a/fpc/Makefile b/fpc/Makefile index 97f7ad1..d16cb76 100644 --- a/fpc/Makefile +++ b/fpc/Makefile @@ -1,10 +1,13 @@ # We want to build just enough to use other stuff -TIER_FILES := ../tier0/lib.cpp ../tier0/mem.cpp ../tier0/platform.cpp ../tier1/utlbuffer.cpp ../tier1/interface.cpp ../tier1/utlstring.cpp ../tier1/utlvector.cpp ../tier1/utlmap.cpp ../tier1/commandline.cpp ../tier2/filesystem.cpp ../tier2/filesystem_libc.cpp ../tier2/fileformats/ini.cpp - -FPC_FILES := main.cpp library/runner.cpp library/helper.cpp library/c.cpp library/ld.cpp library/clang/c.cpp library/clang/ld.cpp library/target.cpp +TIER0_FILES := ../tier0/lib.cpp ../tier0/mem.cpp ../tier0/platform.cpp +TIER1_FILES := ../tier1/utlbuffer.cpp ../tier1/interface.cpp ../tier1/utlstring.cpp ../tier1/utlvector.cpp ../tier1/utlmap.cpp ../tier1/commandline.cpp +TIER2_FILES := ../tier2/filesystem.cpp ../tier2/fileformats/ini.cpp +FILESYSTEM_FILES := ../stdfilesystems/filesystem_libc.cpp +TIER1_OBJS := $(TIER1_FILES:.cpp=.o) +TIER2_OBJS := $(TIER2_FILES:.cpp=.o) +FPC_FILES := library/runner.cpp library/helper.cpp library/c.cpp library/ld.cpp library/clang/c.cpp library/clang/ld.cpp library/target.cpp library/builder.cpp CC = clang -OUTPUT_DIR = fpc -CCFLAGS = -I../public -Ipublic -lc -lstdc++ +CCFLAGS = -g -I../public -Ipublic UNAME_S := $(shell uname -s) ifeq ($(UNAME_S),Darwin) @@ -14,20 +17,43 @@ ifeq ($(UNAME_S),Linux) endif recompile: ../build/tools - ./fpc build + build/fpc build mv fpc_temp fpc -install: $(FPC_FILES) ../build/tools - $(CC) -g $(TIER_FILES) $(FPC_FILES) $(CCFLAGS) -o $(OUTPUT_DIR) - ./fpc build +install: ../build/tools libfpcbuild.a libfpc.so libtier0.so libtier1.a libtier2.a libfilesystem_std.so builddir + $(CC) main.cpp -lc -lstdc++ $(CCFLAGS) -o build/fpc build/libtier0.so build/libtier1.a build/libtier2.a build/libfpc.so build/libfilesystem_std.so + gdb --args build/fpc build mv fpc_temp fpc +libtier0.so: $(TIER0_FILES) builddir + $(CC) $(CCFLAGS) -fPIC -shared -o build/libtier0.so $(TIER0_FILES) + +%.o: %.cpp + $(CC) $(CCFLAGS) -fPIC -c $< -o $@ + +libtier1.a: $(TIER1_OBJS) builddir + ar rcs build/libtier1.a $(TIER1_OBJS) + +libtier2.a: $(TIER2_OBJS) builddir + ar rcs build/libtier2.a $(TIER2_OBJS) + +libfilesystem_std.so: $(FILESYSTEM_FILES) libtier1.a builddir + $(CC) $(CCFLAGS) -fPIC -shared -o build/libfilesystem_std.so $(FILESYSTEM_FILES) build/libtier1.a + +libfpcbuild.a: buildfile/interfaces.o builddir + ar rcs build/libfpcbuild.a buildfile/interfaces.o + +libfpc.so: $(FPC_FILES) builddir libfpcbuild.a + $(CC) $(CCFLAGS) -fPIC -shared -o build/libfpc.so build/libfpcbuild.a $(FPC_FILES) + +builddir: + mkdir -p build ../build/tools: - mkdir -p ../build/tools + mkdir -p ../build/tools/fpc install_fpc: - cp fpc ../build/tools + cp -r build/* ../build/tools/fpc cp -r public ../build/tools cp -r ../public/tier0 ../build/tools/public cp -r ../public/tier1 ../build/tools/public diff --git a/fpc/build.cpp b/fpc/build.cpp index 800a090..8f2ce90 100644 --- a/fpc/build.cpp +++ b/fpc/build.cpp @@ -5,9 +5,9 @@ #include "tier1/interface.h" #include "signal.h" -ADD_DEPENDENCY_BUILD_FILE("../tier0/__build.cpp") -ADD_DEPENDENCY_BUILD_FILE("../tier1/__build.cpp") -ADD_DEPENDENCY_BUILD_FILE("../tier2/__build.cpp") +ADD_DEPENDENCY_BUILD_FILE(tier0, "../tier0/"); +ADD_DEPENDENCY_BUILD_FILE(tier1, "../tier1/"); +ADD_DEPENDENCY_BUILD_FILE(tier2, "../tier2/"); CUtlVector g_CompiledFiles = { @@ -16,6 +16,7 @@ CUtlVector g_CompiledFiles = { "library/runner.cpp", "library/helper.cpp", "library/target.cpp", + "library/builder.cpp", "library/winerunner.cpp", diff --git a/fpc/buildfile/interfaces.cpp b/fpc/buildfile/interfaces.cpp new file mode 100644 index 0000000..0993e7c --- /dev/null +++ b/fpc/buildfile/interfaces.cpp @@ -0,0 +1,26 @@ +#include "tier1/interface.h" +#include "helper.h" + +static BuildFileInfo_t buildfileinfo = {}; +BuildFileInfo_t *GetBuildFileInfo() +{ + return &buildfileinfo; +} + + +CBuildStage::CBuildStage( const char *psz, int(*pMainFn)() ) +{ + m_psz = psz; + m_pMainFn = pMainFn; + if (psz == 0 || pMainFn == 0) + Plat_FatalErrorFunc("Name and function pointer must be set\n"); + + GetBuildFileInfo()->m_stages.AppendTail(this); +}; + +CBuildDependentFile::CBuildDependentFile( const char *psz ) +{ + GetBuildFileInfo()->m_dependantFiles.AppendTail(psz); +} + +EXPOSE_INTERFACE_GLOBALVAR(BuildFileInfo_t, BuildFileInfo_t, BUILD_FILE_INFO_INTERFACE_NAME, buildfileinfo); diff --git a/fpc/buildfile/interfaces.o b/fpc/buildfile/interfaces.o new file mode 100644 index 0000000000000000000000000000000000000000..62eb143f5ae1821216c55c0d27101dd56b2f7eee GIT binary patch literal 38040 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ℑ`oR{o`G-^1`y-J(8fP8ofOUM=t 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,CUtlString("%s/public", filesystem2->BuildDirectory()), CUtlString("%s/../public",filesystem2->OwnDirectory()),CUtlString("%s/../public", filesystem2->BuildDirectory())}; + stCompileProject.bFPIC = true; + stCompileProject.m_target = Target_t::HostTarget(); + + stLinkProject = ccompiler->Compile(&stCompileProject); + stLinkProject.linkType = ELINK_DYNAMIC_LIBRARY; + stLinkProject.m_target = Target_t::HostTarget(); + stLinkProject.objects.AppendHead({CUtlString("%s/libfpcbuild.a",filesystem2->OwnDirectory())}); + stLinkProject.objects.AppendHead({CUtlString("%s/libtier2.a",filesystem2->OwnDirectory())}); + stLinkProject.objects.AppendHead({CUtlString("%s/libtier1.a",filesystem2->OwnDirectory())}); + szBuildLibrary = linker->Link(&stLinkProject); + + pLibrary = Plat_LoadLibrary(szBuildLibrary); + if ( !pLibrary ) + return NULL; + + pBuildFactory = Sys_GetFactory(pLibrary); + if (!pBuildFactory) + { + V_printf("Failed to find CreateInterface\n"); + Plat_UnloadLibrary(szBuildLibrary); + return NULL; + } + + pBuildFileInfo = (BuildFileInfo_t*)pBuildFactory(BUILD_FILE_INFO_INTERFACE_NAME, NULL); + if (!pBuildFileInfo) + { + V_printf("Failed to find build file info interface\n"); + Plat_UnloadLibrary(szBuildLibrary); + return NULL; + } + stBuildFileInfo = *pBuildFileInfo; + for (auto a: stBuildFileInfo.m_dependantFiles) + { + BuildProject("something", CUtlString("%s/build.cpp",a)); + } + + Plat_SetWorkingDir(szWd); + + + for (auto &build: stBuildFileInfo.m_stages) + { + build->m_pMainFn(); + }; + + pBuildFile = new BuildFile_t; + pBuildFile->m_szOutputFile = szBuildLibrary; + pBuildFile->m_pLibrary = pLibrary; + pBuildFile->m_pNext = m_pBuildFiles; + m_pBuildFiles = pBuildFile; + + + return pBuildFile; +} diff --git a/fpc/library/clang/ld.cpp b/fpc/library/clang/ld.cpp index d43e59d..a6e16e5 100644 --- a/fpc/library/clang/ld.cpp +++ b/fpc/library/clang/ld.cpp @@ -156,7 +156,7 @@ CUtlString CClangLinker::Link( LinkProject_t *pProject ) } if (pProject->m_target.kernel == TARGET_KERNEL_LINUX || pProject->m_target.kernel == TARGET_KERNEL_ANDROID) { - args.AppendTail("-rdynamic"); + //args.AppendTail("-rdynamic"); args.AppendTail("-Wl,-rpath,$ORIGIN"); } diff --git a/fpc/library/helper.cpp b/fpc/library/helper.cpp index 600b66a..042f148 100644 --- a/fpc/library/helper.cpp +++ b/fpc/library/helper.cpp @@ -133,21 +133,4 @@ bool CPOSIXFileSystem2::ShouldRecompile(const char *szSource, const char *szOutp return outbuf.st_mtime < srcbuf.st_mtime; }; -CUtlVector g_buildStages; - -CBuildStage::CBuildStage( const char *psz, int(*pMainFn)() ) -{ - m_psz = psz; - m_pMainFn = pMainFn; - if (psz == 0 || pMainFn == 0) - Plat_FatalErrorFunc("Name and function pointer must be set\n"); - - g_buildStages.AppendTail(this); -}; - -CUtlVector& BuildStages() -{ - return g_buildStages; -} - IINIFile *g_pConfig; diff --git a/fpc/library/ld.cpp b/fpc/library/ld.cpp index f7a2a97..a8e7290 100644 --- a/fpc/library/ld.cpp +++ b/fpc/library/ld.cpp @@ -1,3 +1,8 @@ #include "ld.h" ILinker *linker; + +void LinkProject_t::AddObject( Object_t object ) +{ + objects.AppendTail(object); +}; diff --git a/fpc/library/windows/ld.cpp b/fpc/library/windows/ld.cpp index 3e26e2c..7f1e859 100644 --- a/fpc/library/windows/ld.cpp +++ b/fpc/library/windows/ld.cpp @@ -115,7 +115,7 @@ CUtlString CMSVCLinker::Link( LinkProject_t *pProject ) "/nologo" }; - const char *szWindowsPath = GetWindowsPath(szOutputFile); + const char *szWindowsPath = filesystem2->GetWindowsPath(szOutputFile); args.AppendTail(CUtlString("/out:%s", szWindowsPath)); V_free((void*)szWindowsPath); diff --git a/fpc/main.cpp b/fpc/main.cpp index aa8b638..21dd2bf 100644 --- a/fpc/main.cpp +++ b/fpc/main.cpp @@ -13,6 +13,7 @@ #include "c.h" #include "signal.h" #include "libgen.h" +#include "builder.h" CUtlString owndir; extern char *g_szBuildDir; @@ -24,14 +25,9 @@ void build_tier0() int build() { - CreateInterfaceFn pBuildFactory; - BuildFileInfo_t *pBuildFileInfo; - CProject_t compileScriptProject = {}; - compileScriptProject.m_szName = "build"; - compileScriptProject.files = {"build.cpp"}; - compileScriptProject.includeDirectories = {CUtlString("%s/public",filesystem2->OwnDirectory()),CUtlString("%s/public", filesystem2->BuildDirectory()), CUtlString("%s/../public",filesystem2->OwnDirectory()),CUtlString("%s/../public", filesystem2->BuildDirectory())}; - compileScriptProject.bFPIC = true; - compileScriptProject.m_target = Target_t::HostTarget(); + BuildFile_t *pBuildFile = ProjectBuilder()->BuildProject("main",CUtlString("%s/build.cpp",g_szBuildDir)); + + /* LinkProject_t linkScriptProject = ccompiler->Compile(&compileScriptProject); linkScriptProject.linkType = ELINK_DYNAMIC_LIBRARY; @@ -57,7 +53,7 @@ int build() { build->m_pMainFn(); }; - Plat_UnloadLibrary(scriptDLL); + */ ccompiler->GenerateLinterData(); @@ -86,11 +82,13 @@ void IEngine_Signal(int sig) int main(int c, char **v) { + char path[1024]; CUtlString buildcppDir = getcwd(path, 1024); owndir = buildcppDir; char *szBuildcppDir = buildcppDir.GetString(); + findbuild: FILE* file = V_fopen("build.cpp", "rb"); if (!file) @@ -126,6 +124,11 @@ findbuild: filesystem2 = (IFileSystem2*)CreateInterface(FILE_SYSTEM_2_INTERFACE_NAME, NULL); ccompiler = (ICCompiler*)CreateInterface(CLANG_C_COMPILER_INTERFACE_NAME, NULL); linker = (ILinker*)CreateInterface(CLANG_LINKER_INTERFACE_NAME, NULL); + + void *pFilesystem = Plat_LoadLibrary(CUtlString("%s/libfilesystem_std.so",filesystem2->OwnDirectory())); + CreateInterfaceFn pFilesystemFactory = Sys_GetFactory(pFilesystem); + + filesystem = (IFileSystem*)CreateInterface(FILESYSTEM_INTERFACE_VERSION, NULL); filesystem->Init(); g_pConfig = INIManager()->ReadFile(".fpccfg"); diff --git a/fpc/public/builder.h b/fpc/public/builder.h index c9add11..c9f75d7 100644 --- a/fpc/public/builder.h +++ b/fpc/public/builder.h @@ -3,10 +3,11 @@ #include "tier1/interface.h" #include "tier1/utlvector.h" +#include "tier1/utlstring.h" struct BuildOutput_t { - + const char *m_szName; }; struct BuildOutputs_t @@ -17,15 +18,21 @@ struct BuildOutputs_t struct BuildFile_t { + CUtlString m_szOutputFile; void *m_pLibrary; CUtlVector m_compiledProjects; + + struct BuildFile_t *m_pNext; }; abstract_class IProjectBuilder { - virtual BuildFile_t *BuildProject( const char *szPath ) = 0; +public: + virtual BuildFile_t *BuildProject( const char *szProjectName, const char *szPath ) = 0; }; IProjectBuilder *ProjectBuilder(); +#define PROJECT_BUILDER_INTERFACE_NAME "ProjectBuilder001" + #endif diff --git a/fpc/public/dependencymanager.h b/fpc/public/dependencymanager.h new file mode 100644 index 0000000..e69de29 diff --git a/fpc/public/helper.h b/fpc/public/helper.h index f4f9ed5..ef27a56 100644 --- a/fpc/public/helper.h +++ b/fpc/public/helper.h @@ -90,7 +90,8 @@ public: class CBuildDependentFile { - +public: + CBuildDependentFile( const char *psz ); }; //----------------------------------------------------------------------------- @@ -102,11 +103,12 @@ class CBuildDependentFile // } //----------------------------------------------------------------------------- #define DECLARE_BUILD_STAGE(sz) \ -int __build_stage_##sz(); \ -CBuildStage __##sz##_build_stage(#sz, __build_stage_##sz); \ -int __build_stage_##sz() +static int __build_stage_##sz(); \ +static CBuildStage __##sz##_build_stage(#sz, __build_stage_##sz); \ +static int __build_stage_##sz() -#define ADD_DEPENDENCY_BUILD_FILE(sz) \ +#define ADD_DEPENDENCY_BUILD_FILE(name, path) \ +static CBuildDependentFile __##name##DependencyFile(path); #define ADD_OUTPUT_LIBRARY(sz) \ @@ -116,7 +118,7 @@ int __build_stage_##sz() struct BuildFileInfo_t { - CUtlVector m_dependantFile; + CUtlVector m_dependantFiles; CUtlVector m_stages; }; diff --git a/fpc/public/interfaces.cpp b/fpc/public/interfaces.cpp deleted file mode 100644 index af5492a..0000000 --- a/fpc/public/interfaces.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include "tier1/interface.h" -#include "helper.h" - -static BuildFileInfo_t buildfileinfo = {}; -BuildFileInfo_t *GetBuildFileInfo() -{ - return &buildfileinfo; -} - - -EXPOSE_INTERFACE_GLOBALVAR(BuildFileInfo_t, BuildFileInfo_t, BUILD_FILE_INFO_INTERFACE_NAME, buildfileinfo); diff --git a/fpc/public/ld.h b/fpc/public/ld.h index 81b3aff..34bf80a 100644 --- a/fpc/public/ld.h +++ b/fpc/public/ld.h @@ -46,7 +46,7 @@ enum EWindowsSubsystem struct LinkProject_t: public CPUProject_t { public: - void AddObject( Object_t& object ); + void AddObject( Object_t object ); // output file ELinkType linkType; diff --git a/fpc/public/lsp.h b/fpc/public/lsp.h new file mode 100644 index 0000000..af98124 --- /dev/null +++ b/fpc/public/lsp.h @@ -0,0 +1,11 @@ +#ifndef LSP_H +#define LSP_H + +#include "tier0/platform.h" + +abstract_class IBasicLSP +{ + virtual void GenerateConfig() = 0; +}; + +#endif