cmake_minimum_required(VERSION 3.25) project(Poe2VisualTool LANGUAGES C CXX) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) if (MSVC) add_compile_options( /W4 /permissive- /Zc:__cplusplus /utf-8 /GS /guard:cf ) add_link_options( /guard:cf /DYNAMICBASE /NXCOMPAT /HIGHENTROPYVA ) endif() # Core Static Library set(POE2_VISUAL_LIB_SOURCES src/core/memory/visual_mods.cpp src/core/memory/memory_reader.cpp src/core/memory/aob_scanner.cpp src/core/memory/pe_fingerprint.cpp src/core/memory/simulated_reader.cpp src/core/common/window_utils.cpp src/core/visual/world_to_screen.cpp src/core/visual/poi_radar.cpp src/core/visual/mod_colorizer.cpp src/core/visual/particle_reducer.cpp src/inspector/waystone_rules.cpp src/inspector/item_parser.cpp src/inspector/hover_watcher.cpp src/security/hwid_generator.cpp src/security/license_validator.cpp src/platform/cloud_sync.cpp src/platform/sound_effects.cpp src/platform/i18n.cpp src/native_ui/tooltip_view.cpp src/native_ui/radar_hud.cpp src/native_ui/settings_panel.cpp src/native_ui/overlay_window.cpp src/native_ui/system_tray.cpp ) add_library(Poe2Visual_Lib STATIC ${POE2_VISUAL_LIB_SOURCES}) target_include_directories(Poe2Visual_Lib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR}/src/core ) target_link_libraries(Poe2Visual_Lib PUBLIC ws2_32 user32 kernel32 gdi32 winmm psapi comdlg32 shell32 bcrypt winhttp ) # ---------------------------------------------------------- # Main Executable: Poe2VisualTool # ---------------------------------------------------------- add_executable(Poe2VisualTool src/visual_tool/main.cpp) target_link_libraries(Poe2VisualTool PRIVATE Poe2Visual_Lib) target_include_directories(Poe2VisualTool PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR}/src/core ) set_target_properties(Poe2VisualTool PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/bin/Release ) if (MSVC) target_link_options(Poe2VisualTool PRIVATE "/SUBSYSTEM:WINDOWS" "/ENTRY:mainCRTStartup" "/MANIFEST:EMBED" "/MANIFESTUAC:level='requireAdministrator' uiAccess='false'" ) endif() add_custom_command(TARGET Poe2VisualTool POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different $ ${CMAKE_CURRENT_SOURCE_DIR}/bin/Poe2VisualTool.exe COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/config.toml ${CMAKE_CURRENT_SOURCE_DIR}/bin/config.toml COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/config.toml ${CMAKE_CURRENT_SOURCE_DIR}/bin/Release/config.toml COMMENT "Synchronizing Poe2VisualTool.exe and config.toml to bin/..." ) # ---------------------------------------------------------- # Unit Tests Executable: Poe2VisualTool_Tests # ---------------------------------------------------------- if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/tests/test_core.cpp") enable_testing() add_executable(Poe2VisualTool_Tests tests/test_core.cpp) target_link_libraries(Poe2VisualTool_Tests PRIVATE Poe2Visual_Lib) target_include_directories(Poe2VisualTool_Tests PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR}/src/core ) if (MSVC) target_link_options(Poe2VisualTool_Tests PRIVATE "/MANIFEST:EMBED" "/MANIFESTUAC:level='asInvoker' uiAccess='false'") endif() set_target_properties(Poe2VisualTool_Tests PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin/Release RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/bin/Release ) add_custom_command(TARGET Poe2VisualTool_Tests POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different $ ${CMAKE_CURRENT_SOURCE_DIR}/bin/Poe2VisualTool_Tests.exe COMMENT "Synchronizing Poe2VisualTool_Tests.exe to bin/..." ) add_test(NAME CoreUnitTests COMMAND Poe2VisualTool_Tests) endif() # ---------------------------------------------------------- # Rule 15 Pre-Build Hooks: Terminate running binaries # ---------------------------------------------------------- if (WIN32) add_custom_command(TARGET Poe2VisualTool PRE_BUILD COMMAND cmd /c "taskkill /F /IM Poe2VisualTool.exe >nul 2>&1 || exit 0" COMMENT "Pre-build: Terminating existing Poe2VisualTool.exe instances to prevent file lock LNK1104..." ) if (TARGET Poe2VisualTool_Tests) add_custom_command(TARGET Poe2VisualTool_Tests PRE_BUILD COMMAND cmd /c "taskkill /F /IM Poe2VisualTool_Tests.exe >nul 2>&1 || exit 0" COMMENT "Pre-build: Terminating existing Poe2VisualTool_Tests.exe instances to prevent file lock LNK1104..." ) endif() endif()