-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
203 lines (172 loc) · 7.53 KB
/
CMakeLists.txt
File metadata and controls
203 lines (172 loc) · 7.53 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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
cmake_minimum_required(VERSION 3.15)
cmake_policy(SET CMP0091 NEW)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(GAME_NAME "Don't Starve Together")
if (WIN32)
set(GAME_DIR "C:\\Program Files (x86)\\Steam\\steamapps\\common\\Don't Starve Together")
elseif (UNIX AND NOT APPLE)
set(GAME_DIR "/root/server_dst")
elseif (APPLE)
set(GAME_DIR "/Users/fesil/Library/Application Support/Steam/steamapps/common/Don't Starve Together/dontstarve_steam.app/Contents")
endif ()
include(cmake/GameDir.cmake OPTIONAL)
enable_testing()
set(FRIDA_GUM_VERSION "17.5.1")
set(VCPKG_INSTALL_OPTION "${VCPKG_INSTALL_OPTION} --x-abi-tools-use-exact-versions")
file(REAL_PATH ${GAME_DIR} GAME_DIR)
set(PYTHON_EXECUTABLE_NAME "python3")
set(VCPKG_TARGET_TRIPLET "x64-linux-release")
if (WIN32)
set(PLATFORM_NAME "windows")
set(PYTHON_EXECUTABLE_NAME "python")
set(VCPKG_OVERLAY_TRIPLETS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/custom-triplets")
set(VCPKG_TARGET_TRIPLET "x64-windows-custom")
elseif (UNIX AND NOT APPLE)
set(PLATFORM_NAME "linux")
elseif (UNIX AND APPLE)
set(PLATFORM_NAME "osx")
set(VCPKG_TARGET_TRIPLET "x64-osx-release")
else ()
message(FATAL_ERROR "Not supported platform")
endif ()
project(DontStarveLuaJIT VERSION 2.7.2)
option(DISABLE_TRACY_FUTURE "disable tray future" ON)
set(CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/Mod)
set(TARGET_MOD_DIR ${CMAKE_INSTALL_PREFIX})
if (UNIX AND APPLE)
set(GAME_INSTALL_PREFIX ${GAME_DIR}/MacOs)
set(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}/bin64)
else ()
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
set(GAME_INSTALL_PREFIX ${GAME_DIR}/bin64)
set(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}/bin64)
else ()
set(GAME_INSTALL_PREFIX ${GAME_DIR}/bin)
set(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}/bin)
endif ()
endif ()
set(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}/${PLATFORM_NAME})
if (UNIX AND NOT APPLE)
set(CMAKE_INSTALL_LIBDIR "lib64")
elseif (UNIX AND APPLE)
set(CMAKE_INSTALL_LIBDIR "../Library")
endif ()
if ($ENV{GITHUB_ACTIONS})
set(GAME_DIR OFF)
endif ()
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-z,defs")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,defs")
elseif (APPLE)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-undefined,error")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-undefined,error")
endif()
add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/src/missfunc.h
COMMAND ${PYTHON_EXECUTABLE_NAME} "${CMAKE_CURRENT_SOURCE_DIR}/tools/missfunc.py"
DEPENDS src/missfunc.txt
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
add_custom_target(create_missfuncs DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/missfunc.h)
add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/src/modinfo.hpp
COMMAND $<TARGET_FILE:luajit> "${CMAKE_CURRENT_SOURCE_DIR}/tools/modinfo2cpp.lua"
DEPENDS luajit ${CMAKE_CURRENT_SOURCE_DIR}/Mod/modinfo.lua ${CMAKE_CURRENT_SOURCE_DIR}/tools/modinfo2cpp.lua
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
add_custom_target(create_modinfo_hpp DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/modinfo.hpp)
set(lua51_root ${CMAKE_CURRENT_SOURCE_DIR}/src/lua51)
set(Lua51_output_dir ${lua51_root}/$<IF:$<CONFIG:Debug>,debug,release>/)
add_custom_command(OUTPUT ${Lua51_output_dir}/lua51.dll ${Lua51_output_dir}/lua51.lib
COMMAND ${lua51_root}/build_lua51.bat Build $<$<CONFIG:Debug>:debug>
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
add_custom_target(build_lua51 DEPENDS ${Lua51_output_dir}/lua51${CMAKE_SHARED_LIBRARY_SUFFIX})
set(LUAJIT_DISABLE_GEN_GC OFF)
set(LUAJIT_BUILD_BOTH_GEN_GC ON)
add_subdirectory("luajit")
set(LUAJIT_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/luajit/src)
set(LUAJIT_LIBRARIES luajit-5.1)
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
set(LUA_LIBRARIES_PREFIX_PATH ${CMAKE_CURRENT_SOURCE_DIR}/src/x64)
else ()
set(LUA_LIBRARIES_PREFIX_PATH ${CMAKE_CURRENT_SOURCE_DIR}/src)
endif ()
function(download_frida_gum version)
message(STATUS "Downloading Frida-Gum version ${version}...")
execute_process(
COMMAND python3 "${CMAKE_CURRENT_SOURCE_DIR}/tools/download_frida_gum.py" "-v=${version}"
RESULT_VARIABLE download_result
OUTPUT_VARIABLE download_stdout
ERROR_VARIABLE download_stderr
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
if(download_stdout)
message("${download_stdout}")
endif()
if(download_stderr)
message(STATUS "${download_stderr}")
endif()
if (NOT download_result EQUAL 0)
message(FATAL_ERROR "Failed to download Frida-Gum. Please check your internet connection or the version specified.")
else()
message(STATUS "Frida-Gum downloaded successfully.")
endif ()
endfunction()
download_frida_gum(${FRIDA_GUM_VERSION})
set(LUA_INCLUDE_DIR ${lua51_root}/src)
if (MSVC)
set(LUA_LIBRARIES_PATH ${CMAKE_INSTALL_PREFIX}/${CMAKE_SHARED_LIBRARY_PREFIX}lua51${CMAKE_SHARED_LIBRARY_SUFFIX})
set(LUA_EXECUTABLE_PATH ${CMAKE_INSTALL_PREFIX}/lua51)
elseif (APPLE)
set(LUA_EXECUTABLE_PATH ${CMAKE_INSTALL_PREFIX}/lua51)
set(LUA_LIBRARIES_PATH ${CMAKE_INSTALL_PREFIX}/${CMAKE_SHARED_LIBRARY_PREFIX}lua51${CMAKE_SHARED_LIBRARY_SUFFIX})
else ()
set(LUA_LIBRARIES_PATH ${CMAKE_INSTALL_PREFIX}/lib64/${CMAKE_SHARED_LIBRARY_PREFIX}lua51${CMAKE_SHARED_LIBRARY_SUFFIX})
set(LUA_EXECUTABLE_PATH ${CMAKE_INSTALL_PREFIX}/lib64/lua51)
endif ()
set(LUA_CONFIG_LIBRARIES_PATH ${LUA_LIBRARIES_PREFIX_PATH}/$<IF:$<CONFIG:Debug>,debug,release>/lua51.dll)
set(LUA_LIBRARIES lua51)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
find_package(Steam REQUIRED)
find_package(Frida-gum REQUIRED)
find_package(keystone REQUIRED)
set(DONTSTARVEINJECTOR_ROOT ${PROJECT_SOURCE_DIR}/src/DontStarveInjector)
set(DONTSTARVEINJECTOR_UTIL_DIR ${DONTSTARVEINJECTOR_ROOT}/util)
add_subdirectory("src/lua51original")
add_subdirectory("src/FunctionRelocation")
set(FUNCTION_RELOCATION_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/FunctionRelocation)
add_subdirectory("src/DontStarveInjector")
if (MSVC)
add_subdirectory("tools/Checker")
endif ()
add_subdirectory("tools/Creater")
add_subdirectory("tools/PersistentString")
add_subdirectory("tests")
if (WIN32)
add_custom_target(generate_angle_iat_apis
COMMAND $<TARGET_FILE:angle_iat_api_generator>
DEPENDS angle_iat_api_generator
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Generate ANGLE IAT API dependency list from game executables"
)
endif ()
#install(FILES ${LUA_CONFIG_LIBRARIES_PATH} DESTINATION ${CMAKE_INSTALL_PREFIX}
#install(FILES ${LUA_LIBRARIES_PATH} DESTINATION ${CMAKE_INSTALL_PREFIX})
if (GAME_DIR)
install(DIRECTORY ${CMAKE_INSTALL_PREFIX}/ DESTINATION ${GAME_INSTALL_PREFIX})
endif ()
set(BUILD_CMD ${PYTHON_EXECUTABLE_NAME} "${CMAKE_CURRENT_SOURCE_DIR}/tools/update_version.py")
execute_process(COMMAND ${CMAKE_COMMAND} -E env MOD_VERSION=${CMAKE_PROJECT_VERSION} ${BUILD_CMD}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
add_custom_target(make_karta_luamodule
COMMAND ${PYTHON_EXECUTABLE_NAME} "${CMAKE_CURRENT_SOURCE_DIR}/tools/make_karta.py"
DEPENDS ${LUA_LIBRARIES_PATH}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
add_custom_target(unzip_script_data
COMMAND ${PYTHON_EXECUTABLE_NAME} "${CMAKE_CURRENT_SOURCE_DIR}/tools/unzip_script_data.py"
DEPENDS ${LUA_LIBRARIES_PATH}
WORKING_DIRECTORY ${GAME_DIR}
)