-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
148 lines (117 loc) · 4.56 KB
/
Copy pathCMakeLists.txt
File metadata and controls
148 lines (117 loc) · 4.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
cmake_minimum_required(VERSION 3.14)
project(Myra)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CPM_SOURCE_CACHE "${CMAKE_SOURCE_DIR}/.cpmcache")
set(CPM_USE_LOCAL_PACKAGES ON)
if (NOT (WIN32 AND CMAKE_SIZEOF_VOID_P EQUAL 8))
message(FATAL_ERROR "This project requires 64-bit Windows (x64)")
endif()
set(GENERATED_IMPORTS "${CMAKE_CURRENT_BINARY_DIR}/import.def")
set(FAKE_IMPORTS_LIB_PATH "${CMAKE_CURRENT_BINARY_DIR}/mcapi.lib")
set(MCAPI_DLL_NAME "mcapi.dll")
find_package(Python3 REQUIRED COMPONENTS Interpreter)
add_compile_definitions(${PROJECT_NAME} PRIVATE
WIN32_LEAN_AND_MEAN
NOMINMAX
NOKANJI
NOHELP
)
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDLL")
file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS src/*.cpp src/*.hpp)
add_library(${PROJECT_NAME} SHARED ${SOURCES})
add_custom_target(invoke_builder ALL
# OUTPUT ${GENERATED_IMPORTS} "${CMAKE_CURRENT_SOURCE_DIR}/src/core/Resource.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/src/core/Signature.cpp"
COMMAND "${Python3_EXECUTABLE}" "-m" "builder" "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}"
# DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}"
COMMENT "Invoking build scripts"
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
VERBATIM
)
add_dependencies(${PROJECT_NAME} invoke_builder)
target_include_directories(${PROJECT_NAME} PRIVATE src)
# set_source_files_properties("${CMAKE_CURRENT_BINARY_DIR}/embedder/Resource.cpp" PROPERTIES GENERATED TRUE)
set(IS_MSVC "$<CXX_COMPILER_ID:MSVC>")
set(IS_CLANG "$<CXX_COMPILER_ID:Clang>")
set(IS_RELEASE "$<OR:$<CONFIG:Release>,$<CONFIG:MinSizeRel>>")
target_compile_options(${PROJECT_NAME} PRIVATE
# Disable rtti
$<$<BOOL:${IS_MSVC}>:/GR->
$<$<BOOL:${IS_CLANG}>:/clang:-fno-rtti>
# MSVC
# Disable exceptions for release
$<$<AND:${IS_MSVC},${IS_RELEASE}>:/EHs-c->
$<$<AND:${IS_MSVC},$<NOT:${IS_RELEASE}>>:/EHsc>
# Clang / clang-cl / GCC
# Disable exceptions for release
$<$<AND:${IS_CLANG},${IS_RELEASE}>:/clang:-fno-exceptions>
# Enable #embed directive support in clang
$<$<BOOL:${IS_CLANG}>:/clang:-Wno-c23-extensions>
# Disable warnings for unused private fields in clang
$<$<BOOL:${IS_CLANG}>:/clang:-Wno-unused-private-field>
)
target_compile_definitions(${PROJECT_NAME} PRIVATE
MCAPI_DLL_NAME="${MCAPI_DLL_NAME}"
$<$<NOT:${IS_RELEASE}>:DEBUG_MODE>
$<$<CONFIG:Release>:_HAS_EXCEPTIONS=0>
$<$<NOT:$<BOOL:${IS_RELEASE}>>:SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_DEBUG>
$<$<BOOL:${IS_RELEASE}>:SPDLOG_ACTIVE_LEVEL=SPDLOG_LEVEL_INFO>
)
# Include vendored nlohmann/json
add_library(nlohmann_json INTERFACE)
target_include_directories(nlohmann_json INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/vendors/nlohmann)
add_subdirectory(vendors)
# Install CPM to be able to download dependencies
set(CPM_DOWNLOAD_LOCATION "${CMAKE_BINARY_DIR}/cmake/CPM.cmake")
if (NOT EXISTS ${CPM_DOWNLOAD_LOCATION})
file(
DOWNLOAD
https://github.com/cpm-cmake/CPM.cmake/releases/latest/download/CPM.cmake
${CPM_DOWNLOAD_LOCATION}
TLS_VERIFY ON
)
endif ()
include(${CPM_DOWNLOAD_LOCATION})
# Handle online package pulling
CPMAddPackage("gh:BasedInc/libhat@0.9.0")
CPMAddPackage("gh:zyantific/zydis@4.1.1")
CPMAddPackage("gh:gabime/spdlog@1.17.0")
CPMAddPackage("gh:skypjack/entt#fe8d7d78c4823e8a66a050bf86f5c6318cf76ce7")
CPMAddPackage("gh:superPuero/kawa_core#a04c1012a9e32bb1472d2fc92fcf2efb51b84793")
CPMAddPackage(
URI "gh:cursey/safetyhook@0.6.9"
OPTIONS
"SAFETYHOOK_FETCH_ZYDIS OFF"
)
CPMAddPackage(
URI "gh:BasedInc/kiero#269860311ac04b0ee89e68f68bca55abd02a3390"
OPTIONS
"KIERO_INCLUDE_D3D11 ON"
"KIERO_INCLUDE_D3D12 ON"
"KIERO_BUILD_EXAMPLES OFF"
)
target_link_libraries(${PROJECT_NAME} PRIVATE
libhat::libhat
safetyhook::safetyhook
kiero::kiero
EnTT
kawa_core
ImGui::ImGui
Dbghelp
nlohmann_json
spdlog::spdlog
GameInput::v2
)
add_custom_command(
OUTPUT ${FAKE_IMPORTS_LIB_PATH}
COMMAND lib /DEF:${GENERATED_IMPORTS} /OUT:${FAKE_IMPORTS_LIB_PATH} /MACHINE:x64
DEPENDS ${GENERATED_IMPORTS}
)
add_custom_target(RefLibGen DEPENDS ${FAKE_IMPORTS_LIB_PATH})
add_library(RefLib UNKNOWN IMPORTED)
set_property(TARGET RefLib PROPERTY IMPORTED_LOCATION ${FAKE_IMPORTS_LIB_PATH})
add_dependencies(RefLib RefLibGen)
target_link_libraries(${PROJECT_NAME} PRIVATE RefLib)
target_link_options(${PROJECT_NAME} PRIVATE "/DELAYLOAD:${MCAPI_DLL_NAME}")
# "Platform_GameCore": "48 89 05 ? ? ? ? 48 8B 3D ? ? ? ? 48 89 1D ? ? ? ? 48 85 FF 74 ? 41 8B C4",