cmake_minimum_required(VERSION 3.24) project(sacredK LANGUAGES C CXX) # sacred.exe is a 32-bit process; everything we inject into it must be 32-bit too. if(NOT CMAKE_SIZEOF_VOID_P EQUAL 4) message(FATAL_ERROR "sacredK must be built for 32-bit x86 (use the 'x86-*' presets / an x86 MSVC environment).") endif() if(NOT MSVC) message(FATAL_ERROR "sacredK requires MSVC (the game's C++ ABI is MSVC's).") endif() set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) # Static CRT: no VC++ redistributable needed next to the game. set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") add_compile_definitions(WIN32_LEAN_AND_MEAN NOMINMAX _CRT_SECURE_NO_WARNINGS) include(cmake/Detours.cmake) include(cmake/Json.cmake) set(SACREDK_CXX_FLAGS /W4 /permissive- /utf-8) # --- sacredK.dll: injected into sacred.exe, installs the hooks ------------- add_library(sacredK SHARED src/re/dllmain.cpp src/re/hook.cpp src/re/log.cpp src/re/config.cpp src/re/patch.cpp src/re/crash.cpp src/re/sacredK.def src/game/engine/log.cpp src/game/engine/cmdline.cpp src/game/engine/events.cpp src/game/engine/fx.cpp src/game/engine/orders.cpp src/game/engine/items.cpp src/game/engine/stream.cpp src/game/ui/texts.cpp src/game/engine/art.cpp src/mods/borderless.cpp src/mods/widescreen.cpp src/mods/hud.cpp src/mods/wasd.cpp src/mods/skillkeys.cpp src/mods/input.cpp src/mods/skillslots.cpp src/mods/inventory_save.cpp src/mods/potioncounts.cpp src/mods/itemstack.cpp src/mods/sharedchest.cpp src/mods/skillbar.cpp src/mods/arttarget.cpp src/mods/aura_restore.cpp src/mods/autoattack.cpp src/mods/aurarecast.cpp src/mods/artregen.cpp src/mods/combos.cpp src/mods/aurahits.cpp src/mods/chainlightning.cpp src/mods/arttooltip.cpp src/mods/escape.cpp src/mods/recordcache.cpp src/mods/megamap.cpp src/mods/respec.cpp src/mods/runetrade.cpp src/mods/teleportpotion.cpp src/mods/guards.cpp src/mods/options.cpp src/mods/lootfilter.cpp src/mods/userfolders.cpp src/mods/charfile.cpp src/mods/screen.cpp src/mods/characters.cpp src/mods/mainmenu.cpp src/mods/questfail.cpp src/mods/anticheat.cpp ) target_include_directories(sacredK PRIVATE src) target_compile_options(sacredK PRIVATE ${SACREDK_CXX_FLAGS}) target_link_libraries(sacredK PRIVATE detours nlohmann_json::nlohmann_json dbghelp) # --- sacredK.exe: launches sacred.exe with sacredK.dll injected ---------- add_executable(sacredK_launcher WIN32 src/launcher/main.cpp) set_target_properties(sacredK_launcher PROPERTIES OUTPUT_NAME sacredK) target_compile_options(sacredK_launcher PRIVATE ${SACREDK_CXX_FLAGS}) target_link_libraries(sacredK_launcher PRIVATE detours) add_dependencies(sacredK_launcher sacredK)