Files
funnygame/rapier/build.cpp
2026-03-06 16:42:16 +02:00

82 lines
2.4 KiB
C++

#include "helper.h"
#include "c.h"
#include "ld.h"
#include "tier1/utlstring.h"
#define ROOT "../"
#define EXTERNAL ROOT"external/"
#define FUNNYSTDLIB EXTERNAL"funnystdlib/"
ADD_DEPENDENCY_BUILD_FILE(tier0, FUNNYSTDLIB"tier0/build.cpp");
ADD_DEPENDENCY_BUILD_FILE(tier1, FUNNYSTDLIB"tier1/build.cpp");
DECLARE_BUILD_STAGE(rapier)
{
Target_t target = Target_t::DefaultTarget();
target.abi = TARGET_ABI_GNU;
CUtlString rapier_lib;
CUtlString szTarget = target.GetTriplet();
if (CommandLine()->CheckParam("-norust"))
return 0;
rapier_lib = CUtlString("target/%s/release/librapier_rtt.a",szTarget.GetString());
V_printf("%s\n",rapier_lib.GetString());
CUtlVector<CUtlString> cargo_args = {
"build",
"--release",
"--target",
szTarget
};
runner->Run("cargo", "rapier", cargo_args);
runner->Wait();
CUtlVector<CUtlString> cbindgen_args = {
"--config",
"cbindgen.toml",
"--crate",
"rapier_rtt",
"--output",
"physics.h",
};
runner->Run("cbindgen", "rapier", cbindgen_args);
runner->Wait();
CProject_t cProject = {};
cProject.m_szName = "RapierPhysics";
cProject.files = {
"physics.cpp",
};
cProject.includeDirectories = {
ROOT"public",
FUNNYSTDLIB"public",
};
cProject.bFPIC = true;
LinkProject_t linkProject = ccompiler->Compile(&cProject);
linkProject.linkType = ELINK_DYNAMIC_LIBRARY;
linkProject.objects.AppendTail({rapier_lib});
linkProject.objects.AppendTail({GET_PROJECT_OBJECT(tier1, "tier1")});
linkProject.libraryObjects.AppendTail(GET_PROJECT_OBJECT(tier0, "tier0"));
if (linkProject.m_target.kernel & TARGET_KERNEL_WINDOWS_DEVICES)
{
linkProject.libraryDirectories.AppendTail(EXTERNAL"windows");
linkProject.libraries.AppendTail("winpthread-1");
linkProject.libraries.AppendTail("ws2_32");
linkProject.libraries.AppendTail("ntdll");
linkProject.libraries.AppendTail("userenv");
linkProject.libraries.AppendTail("winmm");
linkProject.libraries.AppendTail("ole32");
linkProject.libraries.AppendTail("gdi32");
linkProject.libraries.AppendTail("oleaut32");
linkProject.libraries.AppendTail("setupapi");
linkProject.libraries.AppendTail("imm32");
linkProject.libraries.AppendTail("version");
linkProject.libraries.AppendTail("shell32");
linkProject.libraries.AppendTail("uuid");
};
CUtlString sz_libRapierPhysics = linker->Link(&linkProject);
ADD_OUTPUT_OBJECT("physics", sz_libRapierPhysics);
return 0;
};