#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/debug/librapier_rtt.a",szTarget.GetString()); V_printf("%s\n",rapier_lib.GetString()); CUtlVector cargo_args = { "build", "--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")}); 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; };