-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
159 lines (138 loc) · 5.56 KB
/
CMakeLists.txt
File metadata and controls
159 lines (138 loc) · 5.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
cmake_minimum_required(VERSION 3.25)
project(CE-Handwire LANGUAGES C CXX)
# ============================================================
# Build Configuration
# ============================================================
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# Static CRT linkage — no vcruntime DLL dependency
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
# x64 only
if(NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
message(FATAL_ERROR "Only x64 builds are supported")
endif()
# ============================================================
# External Dependencies (local paths)
# ============================================================
# Zydis — instruction decoder
# Default: sibling repo D:/Github/Zydis; fall back to docs/zydis submodule
if(NOT DEFINED ZYDIS_SOURCE_DIR)
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../Zydis/CMakeLists.txt")
set(ZYDIS_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../Zydis" CACHE PATH "Zydis source directory")
else()
set(ZYDIS_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/docs/zydis" CACHE PATH "Zydis source directory")
endif()
endif()
set(ZYAN_ZYCORE_PATH "${ZYDIS_SOURCE_DIR}/dependencies/zycore" CACHE PATH "")
set(ZYDIS_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
set(ZYDIS_BUILD_TOOLS OFF CACHE BOOL "" FORCE)
set(ZYDIS_BUILD_TESTS OFF CACHE BOOL "" FORCE)
add_subdirectory("${ZYDIS_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/zydis" EXCLUDE_FROM_ALL)
# Lua 5.3 — provided by Cheat Engine (plugins folder)
set(CE_DIR "C:/Program Files/Cheat Engine" CACHE PATH "Cheat Engine installation directory")
set(CE_LUA_INCLUDE "${CE_DIR}/plugins" CACHE PATH "Lua headers from CE")
set(CE_LUA_LIB "${CE_DIR}/plugins/lua53-64.lib" CACHE FILEPATH "Lua import library from CE")
if(NOT EXISTS "${CE_LUA_LIB}")
message(WARNING "CE Lua library not found at ${CE_LUA_LIB} — Lua features will not link")
endif()
# ============================================================
# Git version header (regenerated on every commit / index change)
# ============================================================
set(_VER_HEADER_DIR "${CMAKE_BINARY_DIR}/generated")
set(_VER_HEADER_OUT "${_VER_HEADER_DIR}/version_info.h")
set(_VER_RC_OUT "${_VER_HEADER_DIR}/version.rc")
file(MAKE_DIRECTORY "${_VER_HEADER_DIR}")
add_custom_command(
OUTPUT "${_VER_HEADER_OUT}" "${_VER_RC_OUT}"
COMMAND ${CMAKE_COMMAND}
-DSOURCE_DIR=${CMAKE_SOURCE_DIR}
-DOUTPUT_FILE=${_VER_HEADER_OUT}
-DOUTPUT_RC=${_VER_RC_OUT}
-DBUILD_CONFIG=$<CONFIG>
-P ${CMAKE_SOURCE_DIR}/cmake/gen_version.cmake
DEPENDS
"${CMAKE_SOURCE_DIR}/.git/HEAD"
"${CMAKE_SOURCE_DIR}/.git/index"
"${CMAKE_SOURCE_DIR}/cmake/gen_version.cmake"
"${CMAKE_SOURCE_DIR}/cmake/version_info.h.in"
"${CMAKE_SOURCE_DIR}/cmake/version.rc.in"
COMMENT "Generating version files"
VERBATIM
)
add_custom_target(gen_version_header DEPENDS "${_VER_HEADER_OUT}" "${_VER_RC_OUT}")
# ============================================================
# CE-Handwire Plugin DLL
# ============================================================
add_library(CE-Handwire SHARED
src/main.cpp
src/core/module_registry.cpp
src/core/paths.cpp
src/logging/log.cpp
src/features/batch_rename/batch_rename.cpp
src/features/memory_bookmarks/memory_bookmarks.cpp
src/features/pointer_inspector/pointer_inspector.cpp
src/features/register_goto/register_goto.cpp
src/features/operand_tracker/operand_tracker.cpp
# .def file for explicit DLL exports
CE-Handwire.def
# Windows VERSIONINFO resource (auto-generated, shown in Explorer Properties)
"${_VER_RC_OUT}"
)
target_include_directories(CE-Handwire PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
${CMAKE_CURRENT_SOURCE_DIR}/sdk
${CE_LUA_INCLUDE}
)
target_compile_definitions(CE-Handwire PRIVATE
_AMD64_
WIN32_LEAN_AND_MEAN
NOMINMAX
_CRT_SECURE_NO_WARNINGS
)
target_compile_options(CE-Handwire PRIVATE
/utf-8 # Source files contain non-ASCII (Chinese comments)
/W4 # High warning level
/permissive- # Strict conformance mode
)
target_link_libraries(CE-Handwire PRIVATE
Zydis
"${CE_LUA_LIB}"
)
# Expose generated headers + inject build config string
target_include_directories(CE-Handwire PRIVATE "${_VER_HEADER_DIR}")
target_compile_definitions(CE-Handwire PRIVATE
PLUGIN_BUILD_CONFIG="$<CONFIG>"
)
add_dependencies(CE-Handwire gen_version_header)
# ============================================================
# CE-Handwire Test Target EXE
# ============================================================
add_executable(CE-Handwire-TestTarget
tools/test_target/main.cpp
)
target_compile_definitions(CE-Handwire-TestTarget PRIVATE
_AMD64_
WIN32_LEAN_AND_MEAN
NOMINMAX
_CRT_SECURE_NO_WARNINGS
)
target_compile_options(CE-Handwire-TestTarget PRIVATE
/utf-8
/W4
/permissive-
)
# No external dependencies — standalone EXE (Win32 + CRT only)
# Static CRT inherited from project-level CMAKE_MSVC_RUNTIME_LIBRARY
# ============================================================
# Post-build: copy DLL to CE plugins folder (configurable)
# ============================================================
set(CE_PLUGINS_DIR "" CACHE PATH "Cheat Engine plugins directory for auto-deploy")
if(CE_PLUGINS_DIR)
add_custom_command(TARGET CE-Handwire POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
$<TARGET_FILE:CE-Handwire>
"${CE_PLUGINS_DIR}/CE-Handwire.dll"
COMMENT "Deploying CE-Handwire.dll to ${CE_PLUGINS_DIR}"
)
endif()