From 804711f2c4df9cbb674b43f6c33271c3e3eaad3a Mon Sep 17 00:00:00 2001 From: kotofyt Date: Tue, 3 Jun 2025 20:07:03 +0300 Subject: [PATCH] now use fpc --- build.cpp | 20 ++++++++++++++++ engine/__build.cpp | 48 ++++++++++++++++++++++++++++++++++++++ fpc/Makefile | 24 ++++++++++++------- fpc/library/ld.cpp | 3 +++ fpc/library/runner.cpp | 19 +++++++++++++++ game/client/__build.cpp | 26 +++++++++++++++++++++ game/server/__build.cpp | 27 +++++++++++++++++++++ launcher/__build.cpp | 26 +++++++++++++++++++++ public/tier1/utlinitlist.h | 2 -- rapier/__build.cpp | 28 ++++++++++++++++++++++ tier0/__build.cpp | 19 +++++++++++++++ tier1/__build.cpp | 30 ++++++++++++++++++++++++ 12 files changed, 261 insertions(+), 11 deletions(-) create mode 100644 engine/__build.cpp create mode 100644 game/client/__build.cpp create mode 100644 game/server/__build.cpp create mode 100644 launcher/__build.cpp create mode 100644 rapier/__build.cpp create mode 100644 tier1/__build.cpp diff --git a/build.cpp b/build.cpp index 84156d3..6a1c58b 100644 --- a/build.cpp +++ b/build.cpp @@ -1 +1,21 @@ +#include "tier1/utlstring.h" +#include "tier1/utlstring.h" + +CUtlVector all_IncludeDirectories = { + "public", + "external/cglm/include", + "external/Vulkan-Headers/include", + "external/VulkanMemoryAllocator/include", + "external/stb", +}; + #include "tier0/__build.cpp" +#include "tier1/__build.cpp" + +#include "rapier/__build.cpp" +#include "engine/__build.cpp" + +#include "launcher/__build.cpp" + +#include "game/server/__build.cpp" +#include "game/client/__build.cpp" diff --git a/engine/__build.cpp b/engine/__build.cpp new file mode 100644 index 0000000..21353ed --- /dev/null +++ b/engine/__build.cpp @@ -0,0 +1,48 @@ +#include "helper.h" +#include "c.h" +#include "ld.h" +#include "tier1/utlstring.h" + +CUtlVector engine_CompiledFiles = { + "engine/console.cpp", + "engine/filesystem.cpp", + "engine/server.cpp", + "engine/engine.cpp", + + /* rendering */ + "engine/vk_video.cpp", + "engine/vk_mesh.cpp", + + /* entities */ + "engine/baseentity.cpp", + "engine/level.cpp", + "engine/brush.cpp", + + /* server */ + "engine/sv_worldspawn.cpp", + "engine/sv_light.cpp", + + /* client */ + "engine/cl_worldspawn.cpp", + "engine/cl_light.cpp", + + "engine/vk_videosdl.cpp", +}; + +int engine_build() +{ + CCProject compileProject = {}; + CLDProject ldProject = {}; + + compileProject.m_szName = "engine"; + compileProject.files = engine_CompiledFiles; + compileProject.includeDirectories = all_IncludeDirectories; + compileProject.bFPIC = true; + ldProject = compileProject.Compile(); + ldProject.linkType = ELINK_DYNAMIC_LIBRARY; + + CUtlString outputProject = ldProject.Link(); + + return 0; +}; +DECLARE_BUILD_STAGE(engine, engine_build); diff --git a/fpc/Makefile b/fpc/Makefile index f1d5125..fbeaaec 100644 --- a/fpc/Makefile +++ b/fpc/Makefile @@ -1,19 +1,25 @@ -TIER0_FILES := $(wildcard ../tier0/*.cpp) -TIER1_FILES := $(wildcard ../tier1/*.cpp) +TIER_FILES := ../tier0/lib.cpp ../tier0/mem.cpp ../tier0/platform.cpp ../tier1/utlbuffer.cpp ../tier1/utlstring.cpp ../tier1/utlvector.cpp ../tier1/utlmap.cpp ../tier1/commandline.cpp FPC_FILES := main.cpp library/runner.cpp library/helper.cpp library/c.cpp library/ld.cpp CC = clang OUTPUT_DIR = fpc -recompile: +recompile: ../build/tools ./fpc build mv fpc_temp fpc - cp fpc ../build/tools/fpc + +install: $(FPC_FILES) ../build/tools + $(CC) -g -rdynamic $(TIER_FILES) $(FPC_FILES) -I../public -Ipublic -lc -lstdc++ -o $(OUTPUT_DIR) + ./fpc build + mv fpc_temp fpc + ../build/tools: mkdir -p ../build/tools -install: $(TIER0_FILES) $(TIER1_FILES) $(FPC_FILES) ../build/tools - $(CC) -g -rdynamic $(TIER0_FILES) $(TIER1_FILES) $(FPC_FILES) -I../public -Ipublic -lc -lstdc++ -o $(OUTPUT_DIR) - ./fpc build - mv fpc_temp fpc - cp fpc ../build/tools/fpc +install_fpc: + cp fpc ../build/tools + cp -r public ../build/tools + cp -r ../public/tier0 ../build/tools/public + cp -r ../public/tier1 ../build/tools/public + +auto: install install_fpc diff --git a/fpc/library/ld.cpp b/fpc/library/ld.cpp index e11b107..af1f76e 100644 --- a/fpc/library/ld.cpp +++ b/fpc/library/ld.cpp @@ -25,7 +25,10 @@ CUtlString CLDProject::Link( void ) { CUtlVector args = { "rcs", + szOutputFile }; + for (auto object: objects) + args.AppendTail(object.m_szObjectFile); IRunner::Run("ar", args); } else { CUtlVector args = { diff --git a/fpc/library/runner.cpp b/fpc/library/runner.cpp index a3b0241..f1a082b 100644 --- a/fpc/library/runner.cpp +++ b/fpc/library/runner.cpp @@ -28,6 +28,25 @@ int IRunner::Run(CUtlString szName, CUtlVector& args) int IRunner::Run(CUtlString szName, CUtlString szDirectory, 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); + chdir(szDirectory.GetString()); + execvp(szName, (char *const*)execargs.GetData()); + } + /* parent */ + wait(NULL); + return 0; } int IRunner::Run(CUtlString szName, CUtlString szDirectory, CUtlVector& args, CUtlVector& environment) diff --git a/game/client/__build.cpp b/game/client/__build.cpp new file mode 100644 index 0000000..32044a2 --- /dev/null +++ b/game/client/__build.cpp @@ -0,0 +1,26 @@ +#include "helper.h" +#include "c.h" +#include "ld.h" +#include "tier1/utlstring.h" + +CUtlVector client_CompiledFiles = { + "game/client/baseplayer.cpp", +}; + +int client_build() +{ + CCProject compileProject = {}; + CLDProject ldProject = {}; + + compileProject.m_szName = "client"; + compileProject.files = client_CompiledFiles; + compileProject.includeDirectories = all_IncludeDirectories; + compileProject.bFPIC = true; + ldProject = compileProject.Compile(); + ldProject.linkType = ELINK_DYNAMIC_LIBRARY; + + CUtlString outputProject = ldProject.Link(); + + return 0; +}; +DECLARE_BUILD_STAGE(client, client_build); diff --git a/game/server/__build.cpp b/game/server/__build.cpp new file mode 100644 index 0000000..d912f6d --- /dev/null +++ b/game/server/__build.cpp @@ -0,0 +1,27 @@ +#include "helper.h" +#include "c.h" +#include "ld.h" +#include "tier1/utlstring.h" + +CUtlVector server_CompiledFiles = { + "game/server/game.cpp", + "game/server/baseplayer.cpp", +}; + +int server_build() +{ + CCProject compileProject = {}; + CLDProject ldProject = {}; + + compileProject.m_szName = "server"; + compileProject.files = server_CompiledFiles; + compileProject.includeDirectories = all_IncludeDirectories; + compileProject.bFPIC = true; + ldProject = compileProject.Compile(); + ldProject.linkType = ELINK_DYNAMIC_LIBRARY; + + CUtlString outputProject = ldProject.Link(); + + return 0; +}; +DECLARE_BUILD_STAGE(server, server_build); diff --git a/launcher/__build.cpp b/launcher/__build.cpp new file mode 100644 index 0000000..e98c78f --- /dev/null +++ b/launcher/__build.cpp @@ -0,0 +1,26 @@ +#include "helper.h" +#include "c.h" +#include "ld.h" +#include "tier1/utlstring.h" + +CUtlVector launcher_CompiledFiles = { + "launcher/launcher.cpp", +}; + +int launcher_build() +{ + CCProject compileProject = {}; + CLDProject ldProject = {}; + + compileProject.m_szName = "launcher"; + compileProject.files = launcher_CompiledFiles; + compileProject.includeDirectories = all_IncludeDirectories; + compileProject.bFPIC = true; + ldProject = compileProject.Compile(); + ldProject.linkType = ELINK_EXECUTABLE; + + CUtlString outputProject = ldProject.Link(); + + return 0; +}; +DECLARE_BUILD_STAGE(launcher, launcher_build); diff --git a/public/tier1/utlinitlist.h b/public/tier1/utlinitlist.h index c72aebc..e71b12f 100644 --- a/public/tier1/utlinitlist.h +++ b/public/tier1/utlinitlist.h @@ -8,12 +8,10 @@ // fuck C++ twice // fuck C++ thrice //----------------------------------------------------------------------------- -#include "unban_std.h" #include "initializer_list" template using CUtlInitializerList = std::initializer_list; -#include "ban_std.h" #endif diff --git a/rapier/__build.cpp b/rapier/__build.cpp new file mode 100644 index 0000000..ded9d8b --- /dev/null +++ b/rapier/__build.cpp @@ -0,0 +1,28 @@ +#include "helper.h" +#include "c.h" +#include "ld.h" +#include "tier1/utlstring.h" + +int rapier_build() +{ + CUtlVector cargo_args = { + "build", + "--release", + "--target", + "x86_64-unknown-linux-gnu" + }; + IRunner::Run("cargo", "rapier", cargo_args); + + CUtlVector cbindgen_args = { + "--config", + "cbindgen.toml", + "--crate", + "rapier_rtt", + "--output", + "../public/physics_gen.h", + }; + IRunner::Run("cbindgen", "rapier", cbindgen_args); + + return 0; +}; +DECLARE_BUILD_STAGE(rapier, rapier_build); diff --git a/tier0/__build.cpp b/tier0/__build.cpp index ba6fb5d..1c9e8c9 100644 --- a/tier0/__build.cpp +++ b/tier0/__build.cpp @@ -1,9 +1,28 @@ #include "helper.h" #include "c.h" #include "ld.h" +#include "tier1/utlstring.h" + +CUtlVector tier0_CompiledFiles = { + "tier0/lib.cpp", + "tier0/mem.cpp", + "tier0/platform.cpp", +}; int tier0_build() { + CCProject compileProject = {}; + CLDProject ldProject = {}; + + compileProject.m_szName = "tier0"; + compileProject.files = tier0_CompiledFiles; + compileProject.includeDirectories = all_IncludeDirectories; + compileProject.bFPIC = true; + ldProject = compileProject.Compile(); + ldProject.linkType = ELINK_DYNAMIC_LIBRARY; + + CUtlString outputProject = ldProject.Link(); + return 0; }; DECLARE_BUILD_STAGE(tier0, tier0_build); diff --git a/tier1/__build.cpp b/tier1/__build.cpp new file mode 100644 index 0000000..15b4f17 --- /dev/null +++ b/tier1/__build.cpp @@ -0,0 +1,30 @@ +#include "helper.h" +#include "c.h" +#include "ld.h" +#include "tier1/utlstring.h" + +CUtlVector tier1_CompiledFiles = { + "tier1/commandline.cpp", + "tier1/utlbuffer.cpp", + "tier1/utlmap.cpp", + "tier1/utlstring.cpp", + "tier1/utlvector.cpp", +}; + +int tier1_build() +{ + CCProject compileProject = {}; + CLDProject ldProject = {}; + + compileProject.m_szName = "tier1"; + compileProject.files = tier1_CompiledFiles; + compileProject.includeDirectories = all_IncludeDirectories; + compileProject.bFPIC = true; + ldProject = compileProject.Compile(); + ldProject.linkType = ELINK_STATIC_LIBRARY; + + CUtlString outputProject = ldProject.Link(); + + return 0; +}; +DECLARE_BUILD_STAGE(tier1, tier1_build);