@@ -6,6 +6,7 @@ message("IPO - Supported: ${supported}; ${error}")
6
6
message ("Project: UE4SS" )
7
7
8
8
set (MAKE_DEPENDENCIES_SHARED 0)
9
+ set (STATIC_EXPORTS 1)
9
10
10
11
if (${MAKE_DEPENDENCIES_SHARED} EQUAL 0)
11
12
set (MAKE_DEPENDENCIES_STATIC 1)
@@ -59,12 +60,19 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${UE4SS_OUTPUT_RELEASE_DIR})
59
60
set (PRIVATE_COMPILE_DEFINITIONS
60
61
$<${MAKE_DEPENDENCIES_SHARED} :RC_EXPORT RC_FUNCTION_EXPORTS>
61
62
$<${MAKE_DEPENDENCIES_STATIC} :RC_FUNCTION_BUILD_STATIC>)
62
- set (PRIVATE_COMPILE_OPTIONS /MP $<$<CONFIG:RELEASE>:/Zi> /W3 /wd4005 /wd4251)
63
- set (PRIVATE_MASM_COMPILE_OPTIONS /MP $<$<CONFIG:RELEASE>:/Zi>)
64
- set (PRIVATE_LINK_OPTIONS /DEBUG:FULL)
63
+ if (${CMAKE_CXX_COMPILER_ID} STREQUAL MSVC )
64
+ set (PRIVATE_COMPILE_OPTIONS /MP $<$<CONFIG:RELEASE>:/Zi> /W3 /wd4005 /wd4251 /wd4068)
65
+ set (PRIVATE_MASM_COMPILE_OPTIONS /MP $<$<CONFIG:RELEASE>:/Zi> /wd4005 /wd4251 /wd4068)
66
+ set (PRIVATE_LINK_OPTIONS /DEBUG:FULL)
67
+ elseif (${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
68
+ set (PRIVATE_COMPILE_OPTIONS "$<IF:$<COMPILE_LANGUAGE:ASM_MASM>,,-g;-gcodeview;-fcolor-diagnostics;-Wall;-Wextra;-Wno-unknown-pragmas;-Wno-unused-parameter>" )
69
+ set (PRIVATE_LINK_OPTIONS "$<IF:$<COMPILE_LANGUAGE:ASM_MASM>,,-g>" )
70
+ endif ()
65
71
set (PUBLIC_COMPILE_FEATURES cxx_std_20)
72
+ set (CMAKE_EXPORT_COMPILE_COMMANDS ON )
66
73
67
74
set (UE4SS_COMPILE_DEFINITIONS
75
+ RC_UE4SS_EXPORTS
68
76
RC_ASM_HELPER_BUILD_STATIC
69
77
RC_FILE_BUILD_STATIC
70
78
RC_DYNAMIC_OUTPUT_BUILD_STATIC
@@ -101,16 +109,22 @@ else ()
101
109
set (ZYDIS_BUILD_SHARED_LIB OFF CACHE BOOL "Build zydis as shared libary" FORCE)
102
110
set (ZYCORE_BUILD_SHARED_LIB OFF CACHE BOOL "Build zycore as shared libary" FORCE)
103
111
endif ()
112
+ set (ZYDIS_BUILD_TOOLS OFF CACHE BOOL "" )
104
113
add_subdirectory ("Dependencies/zydis" )
105
114
include_directories (Dependencies/zydis/include )
106
115
include_directories (Dependencies/zydis/dependencies/zycore/include )
107
116
include_directories (${CMAKE_CURRENT_BINARY_DIR} /Dependencies/zydis)
108
117
include_directories (${CMAKE_CURRENT_BINARY_DIR} /Dependencies/zydis/zycore)
109
118
set (CMAKE_PREFIX_PATH
110
119
${LIBRARY_OUTPUT_PATH} /${CMAKE_BUILD_TYPE}
111
- ${CMAKE_HOME_DIRECTORY } /Dependencies/zydis/include
112
- ${CMAKE_HOME_DIRECTORY } /Dependencies/zydis/dependencies/zycore/include
120
+ ${CMAKE_CURRENT_SOURCE_DIR } /Dependencies/zydis/include
121
+ ${CMAKE_CURRENT_SOURCE_DIR } /Dependencies/zydis/dependencies/zycore/include
113
122
)
123
+ # needed for PolyHook
124
+ set (ZYDIS_LIBRARY Zydis)
125
+ set (ZYCORE_LIBRARY Zycore)
126
+ set (ZYDIS_INCLUDE_DIR Dependencies/zydis/include )
127
+ set (ZYCORE_INCLUDE_DIR Dependencies/zydis/dependencies/zycore/include )
114
128
115
129
add_subdirectory (Dependencies/ASMHelper)
116
130
@@ -123,20 +137,31 @@ else ()
123
137
set (MAKE_POLYHOOK_DEPENDENCIES_STATIC ON )
124
138
endif ()
125
139
set (POLYHOOK_BUILD_DLL ON CACHE BOOL "Build dll & lib instead of tests" FORCE)
126
- set (POLYHOOK_BUILD_SHARED_LIB ${MAKE_POLYHOOK_DEPENDENCIES_SHARED} CACHE BOOL "Build polyhook as shared libary" FORCE)
127
- set (POLYHOOK_BUILD_SHARED_ASMJIT ${MAKE_POLYHOOK_DEPENDENCIES_SHARED} CACHE BOOL "Build polyhook as shared libary" FORCE)
128
- set (POLYHOOK_BUILD_SHARED_CAPSTONE ${MAKE_POLYHOOK_DEPENDENCIES_SHARED} CACHE BOOL "Build polyhook as shared libary" FORCE)
129
- set (POLYHOOK_BUILD_SHARED_ZYDIS ${MAKE_POLYHOOK_DEPENDENCIES_SHARED} CACHE BOOL "Build polyhook as shared libary" FORCE)
140
+ set (POLYHOOK_BUILD_SHARED_LIB ${MAKE_POLYHOOK_DEPENDENCIES_SHARED} CACHE BOOL "Build polyhook2 as shared libary" FORCE)
130
141
set (POLYHOOK_USE_EXTERNAL_ZYDIS ON CACHE BOOL "Use external zydis libary" FORCE)
131
- set (ASMJIT_STATIC ${MAKE_POLYHOOK_DEPENDENCIES_STATIC} CACHE BOOL "Build asmjit as shared libary " FORCE)
142
+ set (ASMJIT_STATIC ${MAKE_POLYHOOK_DEPENDENCIES_STATIC} CACHE BOOL "Build ' asmjit' library as static " FORCE)
132
143
set (POLYHOOK_BUILD_STATIC_RUNTIME OFF CACHE BOOL "Use static runtime" FORCE)
133
- set (POLYHOOK_DISASM_CAPSTONE OFF CACHE BOOL "Enable capstone support" FORCE)
134
- set (POLYHOOK_DISASM_CAPSTONE_FULL OFF CACHE BOOL "Build all features of capstone." FORCE)
135
- set (POLYHOOK_DISASM_ZYDIS ON CACHE BOOL "Enable Zydis support." FORCE)
144
+
145
+ # disable 'install' by replacing with no-op before calling add_subdirectory
146
+ macro (install )
147
+ endmacro ()
148
+ # disable 'set_target_properties' to prevent PolyHook from setting MSVC_RUNTIME_LIBRARY to "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL"
149
+ # seriously, this can't be good, but it keeps working
150
+ macro (set_target_properties)
151
+ endmacro ()
136
152
add_subdirectory (Dependencies/PolyHook_2_0)
137
- # For some reason, PolyHook isn't adding the capstone or zydis include directories
138
- include_directories (Dependencies/PolyHook_2_0)
139
- include_directories (Dependencies/PolyHook_2_0/capstone/include )
153
+ # clean up macros
154
+ macro (set_target_properties)
155
+ _set_target_properties(${ARGV} )
156
+ endmacro ()
157
+ macro (install )
158
+ _install(${ARGV} )
159
+ endmacro ()
160
+
161
+ if (${CMAKE_CXX_COMPILER_ID} STREQUAL Clang)
162
+ target_compile_options (asmjit PRIVATE -Wno-bitwise-instead-of-logical -Wno-sign-conversion -Wno-unused-command -line-argument -Wno-unused-but-set-variable )
163
+ target_compile_options (PolyHook_2 PRIVATE -Wno-unused-value -Wno-missing-field-initializers -Wno-missing-braces -Wno-unused-variable -Wno-bitwise-instead-of-logical -Wno-reorder-ctor -Wno-unused-private -field)
164
+ endif ()
140
165
141
166
add_subdirectory ("Dependencies/Unreal" )
142
167
add_subdirectory ("Dependencies/MProgram" )
@@ -156,7 +181,6 @@ add_subdirectory("Dependencies/ParserBase")
156
181
add_subdirectory ("Dependencies/IniParser" )
157
182
add_subdirectory ("Dependencies/JSON" )
158
183
add_subdirectory ("Dependencies/ArgsParser" )
159
- add_subdirectory ("Dependencies/LuaBindingsGenerator" )
160
184
161
185
# UE4SS
162
186
# Settings override -> START
@@ -189,6 +213,22 @@ file(WRITE ${UE4SS_GENERATED_SOURCE_DIR}/version.cache "${UE4SS_LIB_VERSION}")
189
213
message ("UE4SS" )
190
214
message ("Major: ${UE4SS_LIB_VERSION_MAJOR} , Minor: ${UE4SS_LIB_VERSION_MINOR} , Hotfix: ${UE4SS_LIB_VERSION_HOTFIX} , PreRelease: ${UE4SS_LIB_VERSION_PRERELEASE} , Beta: ${UE4SS_LIB_VERSION_BETA} " )
191
215
216
+ find_package (Git REQUIRED)
217
+
218
+ # Build number is now git sha/hash
219
+ execute_process (
220
+ COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
221
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
222
+ RESULT_VARIABLE res
223
+ OUTPUT_VARIABLE UE4SS_LIB_BUILD_GITSHA
224
+ OUTPUT_STRIP_TRAILING_WHITESPACE)
225
+ if (NOT res EQUAL 0)
226
+ set (UE4SS_LIB_BUILD_GITSHA "0" )
227
+ endif ()
228
+
229
+ set (RC_BUILD_NUMBER_HEADER_FILE "${UE4SS_GENERATED_INCLUDE_DIR} /build_number.hpp" )
230
+ file (WRITE ${RC_BUILD_NUMBER_HEADER_FILE} "#define UE4SS_LIB_BUILD_GITSHA \" ${UE4SS_LIB_BUILD_GITSHA} \" " )
231
+
192
232
# Make the hard-coded build numbers available to source files
193
233
add_compile_definitions (
194
234
UE4SS_LIB_VERSION_MAJOR=${UE4SS_LIB_VERSION_MAJOR}
@@ -211,10 +251,13 @@ set(${TARGET}_Sources
211
251
"${CMAKE_CURRENT_SOURCE_DIR} /src/SettingsManager.cpp"
212
252
"${CMAKE_CURRENT_SOURCE_DIR} /src/ObjectDumper/ObjectToString.cpp"
213
253
"${CMAKE_CURRENT_SOURCE_DIR} /src/Signatures.cpp"
214
- "${CMAKE_CURRENT_SOURCE_DIR} /src/Mod.cpp"
254
+ "${CMAKE_CURRENT_SOURCE_DIR} /src/Mod/Mod.cpp"
255
+ "${CMAKE_CURRENT_SOURCE_DIR} /src/Mod/LuaMod.cpp"
256
+ "${CMAKE_CURRENT_SOURCE_DIR} /src/Mod/CppMod.cpp"
257
+ "${CMAKE_CURRENT_SOURCE_DIR} /src/Mod/CppUserModBase.cpp"
215
258
"${CMAKE_CURRENT_SOURCE_DIR} /src/UnrealCustom/CustomProperty.cpp"
216
259
"${CMAKE_CURRENT_SOURCE_DIR} /src/LuaLibrary.cpp"
217
- "${CMAKE_CURRENT_SOURCE_DIR} /src/LuaType/LuaMod .cpp"
260
+ "${CMAKE_CURRENT_SOURCE_DIR} /src/LuaType/LuaModRef .cpp"
218
261
"${CMAKE_CURRENT_SOURCE_DIR} /src/LuaType/LuaUObject.cpp"
219
262
"${CMAKE_CURRENT_SOURCE_DIR} /src/LuaType/LuaUStruct.cpp"
220
263
"${CMAKE_CURRENT_SOURCE_DIR} /src/LuaType/LuaUClass.cpp"
@@ -272,25 +315,25 @@ set(${TARGET}_Sources
272
315
#"${CMAKE_CURRENT_SOURCE_DIR}/Dependencies/imgui/imgui_demo.cpp"
273
316
)
274
317
add_library (${TARGET} SHARED ${${TARGET} _Sources})
275
- target_include_directories (${TARGET} PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /include > $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /generated_include> $<BUILD_INTERFACE: ${CMAKE_SOURCE_DIR} /LuaBindings/ include > )
318
+ target_include_directories (${TARGET} PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /include > $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /generated_include>)
276
319
target_compile_options (${TARGET} PRIVATE ${PRIVATE_COMPILE_OPTIONS} )
277
320
target_link_options (${TARGET} PRIVATE ${PRIVATE_LINK_OPTIONS} )
278
321
target_compile_features (${TARGET} PUBLIC ${PUBLIC_COMPILE_FEATURES} )
279
322
target_compile_definitions (${TARGET} PUBLIC $<${MAKE_DEPENDENCIES_SHARED} :LUA_BUILD_AS_DLL>)
280
323
set (UE4SS_LINK_WITH_LIBRARIES File DynamicOutput Unreal SinglePassSigScanner LuaMadeSimple FunctionTimer Function IniParser JSON Input PolyHook_2 d3d11 GLFW opengl32)
281
324
set (UE4SS_LINK_WITH_INTERFACE_LIBRARIES fmt::fmt-header-only Function Constructs Helpers MProgram ScopedTimer)
282
- target_link_libraries (${TARGET} PRIVATE ${UE4SS_LINK_WITH_LIBRARIES} ${UE4SS_LINK_WITH_INTERFACE_LIBRARIES} )
325
+ target_link_libraries (${TARGET} PUBLIC ${UE4SS_LINK_WITH_LIBRARIES} ${UE4SS_LINK_WITH_INTERFACE_LIBRARIES} )
283
326
284
327
set (XINPUT_TARGET xinput1_3)
285
328
enable_language (ASM_MASM)
286
329
file (GLOB XINPUT_SOURCES "xinput/*" )
287
330
add_library (${XINPUT_TARGET} SHARED ${${TARGET} _Sources} ${XINPUT_SOURCES} )
288
- target_include_directories (${XINPUT_TARGET} PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /include > $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /generated_include> $<BUILD_INTERFACE: ${CMAKE_SOURCE_DIR} /LuaBindings/ include > )
331
+ target_include_directories (${XINPUT_TARGET} PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /include > $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR} /generated_include>)
289
332
target_compile_features (${XINPUT_TARGET} PUBLIC cxx_std_20)
290
333
target_compile_definitions (${XINPUT_TARGET} PUBLIC $<${MAKE_DEPENDENCIES_SHARED} :LUA_BUILD_AS_DLL> UE4SS_LIB_BUILD_AS_XINPUT=1)
291
334
target_compile_options (${XINPUT_TARGET} PRIVATE ${PRIVATE_MASM_COMPILE_OPTIONS} )
292
335
target_link_options (${XINPUT_TARGET} PRIVATE ${PRIVATE_LINK_OPTIONS} )
293
- target_link_libraries (${XINPUT_TARGET} PRIVATE ${UE4SS_LINK_WITH_LIBRARIES} ${UE4SS_LINK_WITH_INTERFACE_LIBRARIES} )
336
+ target_link_libraries (${XINPUT_TARGET} PUBLIC ${UE4SS_LINK_WITH_LIBRARIES} ${UE4SS_LINK_WITH_INTERFACE_LIBRARIES} )
294
337
295
338
if (${MAKE_DEPENDENCIES_STATIC} EQUAL 1)
296
339
target_compile_definitions (${TARGET} PRIVATE ${UE4SS_COMPILE_DEFINITIONS} )
@@ -300,6 +343,10 @@ endif()
300
343
set_property (TARGET ${TARGET} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE )
301
344
set_property (TARGET ${XINPUT_TARGET} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE )
302
345
346
+ # Making sure that the linked C runtime is a dll so that C++ mods will work correctly
347
+ set_property (TARGET ${TARGET} PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL" )
348
+ set_property (TARGET ${XINPUT_TARGET} PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL" )
349
+
303
350
# imgui -> START
304
351
set (IMGUI_INCLUDES Dependencies/imgui Dependencies/ImGuiColorTextEdit)
305
352
target_include_directories (${TARGET} PUBLIC ${IMGUI_INCLUDES} )
@@ -313,17 +360,4 @@ target_include_directories(${TARGET} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/Depend
313
360
target_include_directories (${XINPUT_TARGET} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR} /Dependencies/GLFW/include" )
314
361
# GLFW -> END
315
362
316
- # Auto incrementing build number -> START
317
- # Fetch the auto incrementing build number
318
- # file(READ ${UE4SS_GENERATED_SOURCE_DIR}/build_number.cache UE4SS_LIB_BUILD_NUMBER)
319
- # message("Build #${UE4SS_LIB_BUILD_NUMBER} (Target: ${TARGET})")
320
- # add_custom_target(IncrementBuildNumber
321
- # COMMAND ${CMAKE_COMMAND}
322
- # -DRC_SOURCE_DIR:PATH="${PROJECT_SOURCE_DIR}"
323
- # -DUE4SS_GENERATED_SOURCE_DIR:PATH="${UE4SS_GENERATED_SOURCE_DIR}"
324
- # -DUE4SS_GENERATED_INCLUDE_DIR:PATH="${UE4SS_GENERATED_INCLUDE_DIR}"
325
- # -P "${UE4SS_GENERATED_SOURCE_DIR}/build_number.cmake"
326
- # )
327
- # add_dependencies(${TARGET} IncrementBuildNumber)
328
- # add_dependencies(${XINPUT_TARGET} IncrementBuildNumber)
329
- # Auto incrementing build number -> END
363
+ add_subdirectory ("cppsdk" )
0 commit comments