Files
funnygame/rapier/build.cpp
2026-03-04 00:18:56 +02:00

63 lines
1.6 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")});
CUtlString sz_libRapierPhysics = linker->Link(&linkProject);
ADD_OUTPUT_OBJECT("physics", sz_libRapierPhysics);
return 0;
};