-
Notifications
You must be signed in to change notification settings - Fork 116
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
157 lines (138 loc) · 3.67 KB
/
CMakeLists.txt
File metadata and controls
157 lines (138 loc) · 3.67 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
cmake_minimum_required(VERSION 3.30)
project(MemoryModulePP LANGUAGES CXX)
# Define static library target
set(static_libname "MemoryModulePP-static")
add_library(${static_libname} STATIC)
# Define shared library target
set(shared_libname "MemoryModulePP-shared")
add_library(${shared_libname} SHARED)
# turn on "reflection"
target_compile_definitions(${shared_libname} PRIVATE _USRDLL)
# link libraries for DLL
target_link_libraries(${shared_libname} PRIVATE lib_detours)
# Common sources and headers for both libraries
set(common_sources
BaseAddressIndex.cpp
ImportTable.cpp
Initialize.cpp
InvertedFunctionTable.cpp
LdrEntry.cpp
LoadDllMemoryApi.cpp
Loader.cpp
MemoryModule.cpp
MmpDotNet.cpp
MmpLdrpTls.cpp
MmpTls.cpp
MmpTlsFiber.cpp
Utils.cpp
# exports
MemoryModulePP.def
)
set(common_public_headers
BaseAddressIndex.h
ImportTable.h
Initialize.h
InvertedFunctionTable.h
LdrEntry.h
LoadDllMemoryApi.h
Loader.h
MemoryModule.h
MmpGlobalData.h
MmpDotNet.h
MmpTls.h
Utils.h
)
set(common_private_headers
LoaderPrivate.h
MmpTlsFiber.h
MmpTlsp.h
ReflectiveDLLInjection.h
ReflectiveLoader.h
)
# Specify sources and headers for static library
target_sources(${static_libname}
PRIVATE
${common_sources}
PUBLIC
FILE_SET HEADERS
BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}
FILES
${common_public_headers}
PRIVATE
FILE_SET private_headers
TYPE HEADERS
BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}
FILES
${common_private_headers}
)
# Specify sources and headers for shared library
target_sources(${shared_libname}
PRIVATE
${common_sources}
PUBLIC
FILE_SET HEADERS
BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}
FILES
${common_public_headers}
PRIVATE
FILE_SET private_headers
TYPE HEADERS
BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}
FILES
${common_private_headers}
)
# Set include directories for libraries
foreach(libname ${static_libname} ${shared_libname})
target_include_directories(${libname}
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
$<INSTALL_INTERFACE:include>
)
# Ensure C++ standard
target_compile_features(${libname} PRIVATE cxx_std_23)
# key definitions
target_compile_definitions(${libname} PRIVATE
_MEMORY_MODULE
_HAS_AUTO_INITIALIZE
MMPP_USE_TLS=1
)
endforeach()
# Install libraries and public headers
install(TARGETS ${static_libname} ${shared_libname}
EXPORT ${PROJECT_NAME}Targets
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
RUNTIME DESTINATION bin
FILE_SET HEADERS DESTINATION include
)
# Install export file
install(EXPORT ${PROJECT_NAME}Targets
FILE ${PROJECT_NAME}Targets.cmake
NAMESPACE ${PROJECT_NAME}::
DESTINATION lib/cmake/${PROJECT_NAME}
)
# Generate and install CMake config file
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
VERSION 1.0.0
COMPATIBILITY SameMajorVersion
)
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/../${PROJECT_NAME}Config.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
@ONLY
)
install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
DESTINATION lib/cmake/${PROJECT_NAME}
)
# CPack configuration for packaging
set(CPACK_PACKAGE_NAME "${PROJECT_NAME}")
set(CPACK_PACKAGE_VERSION "1.0.0")
set(CPACK_PACKAGE_DESCRIPTION "A custom MemoryModulePP implementation")
set(CPACK_PACKAGE_VENDOR "xAI")
set(CPACK_GENERATOR "ZIP;TGZ")
include(CPack)