#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 cargo_args = { "build", "--release", "--target", szTarget }; runner->Run("cargo", "rapier", cargo_args); runner->Wait(); CUtlVector 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; };