Skip to content

Latest commit

 

History

History
71 lines (43 loc) · 4.42 KB

goldsrc-abi.md

File metadata and controls

71 lines (43 loc) · 4.42 KB

GoldSrc ABI maintenance tools

Russian version | Engine integration

The ABI defines how compiled modules exchange data and call each other’s functions. NextClient ABI tools validate GoldSrc type descriptions and generate headers from them. They support 32-bit engine build 8684. Rules for changing source code are in the module instructions.

Getting started

Use Python 3 from the repository root:

python nextclient/goldsrc_abi/tools/library.py check

The command reports problems without overwriting headers. Resolve validation errors before generating output. Compatibility with another engine build requires its own verified input.

Inputs

The generator uses reviewed Windows and Linux facts plus the header map under nextclient/goldsrc_abi/tools/. Source revisions and binary identities accompany the facts.

Some headers contain manual additions. Generating files directly into the source directory can overwrite them. Generate into a separate directory first and compare the result with the project files.

Linux x86 sources

facts_linux.json stores type data for stock Linux x86 engine build 8684. It supplements the shared data used to generate NextClient headers. Before updating it, check which source revisions and libraries the data came from.

The input records pin the NextClient, NitroApi, and SDK source revisions used for extraction. Preserve those recorded identities when reviewing or reproducing the data.

Stock binary SHA-256
hw.so 1e775773292407106ac17c98bc19f0444e8f1525d46e592de5cc53afad2b89e1
cstrike/cl_dlls/client.so 40283f3e0c4b6bd21f9281304957ab93c04c60ce5f3d2794cdaf58b3c11ab798

The engine and client are independent evidence sources. Data from another binary or platform must be verified before it can replace an existing fact. A matching name alone does not establish compatibility.

Check the data and its notes before generation. Then follow the generation and comparison procedure. Resolve reported errors before replacing project headers.

Keep extraction commands, compiler logs, and check results in a report with source revisions and library hashes. A successful header check does not replace testing the client in the game.

Regeneration

python nextclient/goldsrc_abi/tools/library.py check
python -m unittest discover -s nextclient/goldsrc_abi/tools -t nextclient/goldsrc_abi/tools -p "test_*.py"
python nextclient/goldsrc_abi/tools/library.py headers --out build/abi-review/include
python nextclient/goldsrc_abi/tools/library.py tests --out build/abi-review/tests

Use python3 where appropriate. Keep the comparison directory inside the repository so formatting uses the project configuration. Record the formatter version when comparing output. The generator can remove files from its output directory when they are absent from the model; use a dedicated output directory.

Review file additions, removals, and content changes. Preserve maintained additions, then compile the compatibility checks in a configured x86 build:

cmake --build --preset vs2022-release --target goldsrc_abi_golden

This check runs during compilation. Also build NitroApi and the modules that use the changed headers on each affected platform. Verify behavior in the game separately.

Frozen extraction paths

The input data preserves file paths from the project revision used to extract the type descriptions. These paths can differ from current paths. Keep them so the original material can be found and checked. To repeat extraction, use the matching source revision and a separate output file.

Provenance verification

Use the build workflow for the complete setup. Request CMake File API codemodel-v2 before configuration and run the gate after building:

python nextclient/goldsrc_abi/tools/provenance.py --build-dir build/vs2022 --config Release --allowlist .github/provenance-allowlist.json --report build/provenance-report.json

Inspect the report for unexpected dependencies and save it with the build configuration. Reconfigure after source or build-graph changes. Do not expand the allowlist simply to make a new dependency pass; review the dependency change. The report checks source provenance and build dependencies, not the legal status of a binary.