cmake_minimum_required(VERSION 3.25) project(sots-engine LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) # Build id stamped into the shim log banner (tools/build-shim.sh passes git describe + UTC time). set(SHIM_BUILD_ID "dev" CACHE STRING "Build identifier logged by the shim") # Provenance of the binary facts: the generated header's own "Source:" line, forwarded verbatim # so every shim.log records which RE snapshot the RVAs came from. file(STRINGS include/generated/sots_addresses.h _addr_provenance REGEX "^// Source:") list(GET _addr_provenance 0 _addr_provenance) string(REGEX REPLACE "^// " "" SOTS_ADDR_PROVENANCE "${_addr_provenance}") add_library(sots_addresses INTERFACE) target_include_directories(sots_addresses INTERFACE ${CMAKE_SOURCE_DIR}/include) if(WIN32) # ---- shim: proxy binkw32.dll that the original game loads (Phase 2 frontend) ---- add_library(minhook STATIC third_party/minhook/src/buffer.c third_party/minhook/src/hook.c third_party/minhook/src/trampoline.c third_party/minhook/src/hde/hde32.c) target_include_directories(minhook PUBLIC third_party/minhook/include) add_library(binkw32 SHARED src/shim/main.cpp src/shim/binkw32.def) target_link_libraries(binkw32 PRIVATE minhook sots_addresses) target_compile_definitions(binkw32 PRIVATE SHIM_BUILD_ID="${SHIM_BUILD_ID}" SOTS_ADDR_PROVENANCE="${SOTS_ADDR_PROVENANCE}") # Must be exactly binkw32.dll (no "lib" prefix); export names come solely from the .def. set_target_properties(binkw32 PROPERTIES PREFIX "" OUTPUT_NAME "binkw32") else() # ---- host: nothing to build yet; keep the preset alive with a header smoke test ---- enable_testing() add_executable(addr_smoke tests/addr_smoke.cpp) target_link_libraries(addr_smoke PRIVATE sots_addresses) add_test(NAME addr_smoke COMMAND addr_smoke) endif()