@@ -6,6 +6,7 @@ message("IPO - Supported: ${supported}; ${error}")
66message ("Project: UE4SS" )
77
88set (MAKE_DEPENDENCIES_SHARED 0)
9+ set (STATIC_EXPORTS 1)
910
1011if (${MAKE_DEPENDENCIES_SHARED} EQUAL 0)
1112 set (MAKE_DEPENDENCIES_STATIC 1)
@@ -59,12 +60,19 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${UE4SS_OUTPUT_RELEASE_DIR})
5960set (PRIVATE_COMPILE_DEFINITIONS
6061 $<${MAKE_DEPENDENCIES_SHARED} :RC_EXPORT RC_FUNCTION_EXPORTS>
6162 $<${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 ()
6571set (PUBLIC_COMPILE_FEATURES cxx_std_20)
72+ set (CMAKE_EXPORT_COMPILE_COMMANDS ON )
6673
6774set (UE4SS_COMPILE_DEFINITIONS
75+ RC_UE4SS_EXPORTS
6876 RC_ASM_HELPER_BUILD_STATIC
6977 RC_FILE_BUILD_STATIC
7078 RC_DYNAMIC_OUTPUT_BUILD_STATIC
@@ -101,16 +109,22 @@ else ()
101109 set (ZYDIS_BUILD_SHARED_LIB OFF CACHE BOOL "Build zydis as shared libary" FORCE)
102110 set (ZYCORE_BUILD_SHARED_LIB OFF CACHE BOOL "Build zycore as shared libary" FORCE)
103111endif ()
112+ set (ZYDIS_BUILD_TOOLS OFF CACHE BOOL "" )
104113add_subdirectory ("Dependencies/zydis" )
105114include_directories (Dependencies/zydis/include )
106115include_directories (Dependencies/zydis/dependencies/zycore/include )
107116include_directories (${CMAKE_CURRENT_BINARY_DIR} /Dependencies/zydis)
108117include_directories (${CMAKE_CURRENT_BINARY_DIR} /Dependencies/zydis/zycore)
109118set (CMAKE_PREFIX_PATH
110119 ${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
113122 )
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 )
114128
115129add_subdirectory (Dependencies/ASMHelper)
116130
@@ -123,20 +137,31 @@ else ()
123137 set (MAKE_POLYHOOK_DEPENDENCIES_STATIC ON )
124138endif ()
125139set (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)
130141set (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)
132143set (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 ()
136152add_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 ()
140165
141166add_subdirectory ("Dependencies/Unreal" )
142167add_subdirectory ("Dependencies/MProgram" )
@@ -156,7 +181,6 @@ add_subdirectory("Dependencies/ParserBase")
156181add_subdirectory ("Dependencies/IniParser" )
157182add_subdirectory ("Dependencies/JSON" )
158183add_subdirectory ("Dependencies/ArgsParser" )
159- add_subdirectory ("Dependencies/LuaBindingsGenerator" )
160184
161185# UE4SS
162186# Settings override -> START
@@ -189,6 +213,22 @@ file(WRITE ${UE4SS_GENERATED_SOURCE_DIR}/version.cache "${UE4SS_LIB_VERSION}")
189213message ("UE4SS" )
190214message ("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} " )
191215
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+
192232# Make the hard-coded build numbers available to source files
193233add_compile_definitions (
194234 UE4SS_LIB_VERSION_MAJOR=${UE4SS_LIB_VERSION_MAJOR}
@@ -211,10 +251,13 @@ set(${TARGET}_Sources
211251 "${CMAKE_CURRENT_SOURCE_DIR} /src/SettingsManager.cpp"
212252 "${CMAKE_CURRENT_SOURCE_DIR} /src/ObjectDumper/ObjectToString.cpp"
213253 "${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"
215258 "${CMAKE_CURRENT_SOURCE_DIR} /src/UnrealCustom/CustomProperty.cpp"
216259 "${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"
218261 "${CMAKE_CURRENT_SOURCE_DIR} /src/LuaType/LuaUObject.cpp"
219262 "${CMAKE_CURRENT_SOURCE_DIR} /src/LuaType/LuaUStruct.cpp"
220263 "${CMAKE_CURRENT_SOURCE_DIR} /src/LuaType/LuaUClass.cpp"
@@ -272,25 +315,25 @@ set(${TARGET}_Sources
272315 #"${CMAKE_CURRENT_SOURCE_DIR}/Dependencies/imgui/imgui_demo.cpp"
273316 )
274317add_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>)
276319target_compile_options (${TARGET} PRIVATE ${PRIVATE_COMPILE_OPTIONS} )
277320target_link_options (${TARGET} PRIVATE ${PRIVATE_LINK_OPTIONS} )
278321target_compile_features (${TARGET} PUBLIC ${PUBLIC_COMPILE_FEATURES} )
279322target_compile_definitions (${TARGET} PUBLIC $<${MAKE_DEPENDENCIES_SHARED} :LUA_BUILD_AS_DLL>)
280323set (UE4SS_LINK_WITH_LIBRARIES File DynamicOutput Unreal SinglePassSigScanner LuaMadeSimple FunctionTimer Function IniParser JSON Input PolyHook_2 d3d11 GLFW opengl32)
281324set (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} )
283326
284327set (XINPUT_TARGET xinput1_3)
285328enable_language (ASM_MASM)
286329file (GLOB XINPUT_SOURCES "xinput/*" )
287330add_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>)
289332target_compile_features (${XINPUT_TARGET} PUBLIC cxx_std_20)
290333target_compile_definitions (${XINPUT_TARGET} PUBLIC $<${MAKE_DEPENDENCIES_SHARED} :LUA_BUILD_AS_DLL> UE4SS_LIB_BUILD_AS_XINPUT=1)
291334target_compile_options (${XINPUT_TARGET} PRIVATE ${PRIVATE_MASM_COMPILE_OPTIONS} )
292335target_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} )
294337
295338if (${MAKE_DEPENDENCIES_STATIC} EQUAL 1)
296339 target_compile_definitions (${TARGET} PRIVATE ${UE4SS_COMPILE_DEFINITIONS} )
@@ -300,6 +343,10 @@ endif()
300343set_property (TARGET ${TARGET} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE )
301344set_property (TARGET ${XINPUT_TARGET} PROPERTY INTERPROCEDURAL_OPTIMIZATION TRUE )
302345
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+
303350# imgui -> START
304351set (IMGUI_INCLUDES Dependencies/imgui Dependencies/ImGuiColorTextEdit)
305352target_include_directories (${TARGET} PUBLIC ${IMGUI_INCLUDES} )
@@ -313,17 +360,4 @@ target_include_directories(${TARGET} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/Depend
313360target_include_directories (${XINPUT_TARGET} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR} /Dependencies/GLFW/include" )
314361# GLFW -> END
315362
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