forked from Zvendson/MemLibCPP
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
130 lines (109 loc) · 3.15 KB
/
CMakeLists.txt
File metadata and controls
130 lines (109 loc) · 3.15 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
cmake_minimum_required(VERSION 3.16)
project(MemLib VERSION 0.1.0 LANGUAGES CXX)
include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
add_subdirectory(deps)
add_library(MemLib STATIC)
add_library(MemLib::MemLib ALIAS MemLib)
target_compile_features(MemLib PUBLIC cxx_std_23)
target_include_directories(MemLib
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/code/public>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
set(MEMLIB_PUBLIC_HEADERS
code/public/memlib.hpp
code/public/memlib/macros.hpp
code/public/memlib/os.hpp
code/public/memlib/types.hpp
code/public/memlib/address.hpp
code/public/memlib/module.hpp
code/public/memlib/memory.hpp
code/public/memlib/hook.hpp
code/public/memlib/thread.hpp
)
set(MEMLIB_PRIVATE_SOURCES
code/private/internal.hpp
code/private/address.cpp
code/private/hook.cpp
code/private/memlib.cpp
code/private/memory.cpp
code/private/module.cpp
code/private/thread.cpp
)
if (WIN32)
list(APPEND MEMLIB_PRIVATE_SOURCES
code/private/os/windows.cpp
)
elseif(UNIX)
list(APPEND MEMLIB_PRIVATE_SOURCES
code/private/os/linux.cpp
)
endif()
source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}/code/public" PREFIX "Public" FILES ${MEMLIB_PUBLIC_HEADERS})
source_group(TREE "${CMAKE_CURRENT_SOURCE_DIR}/code/private" PREFIX "Private" FILES ${MEMLIB_PRIVATE_SOURCES})
# Sources: list explicitly (example placeholders)
target_sources(MemLib
PRIVATE
${MEMLIB_PUBLIC_HEADERS}
${MEMLIB_PRIVATE_SOURCES}
)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
if (WIN32)
target_compile_definitions(MemLib PRIVATE NOMINMAX WIN32_LEAN_AND_MEAN)
target_link_libraries(MemLib
PRIVATE
Dbghelp
Zycore
Zydis
PUBLIC
safetyhook::safetyhook
)
else()
target_link_libraries(MemLib
PRIVATE
Zycore
Zydis
PUBLIC
safetyhook::safetyhook
)
endif()
if (MSVC)
target_compile_options(MemLib PRIVATE /W4 /permissive-)
else()
target_compile_options(MemLib PRIVATE -Wall -Wextra -Wpedantic -fPIC)
endif()
# -----------------------
# Install + export package
# -----------------------
install(TARGETS MemLib
EXPORT MemLibTargets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/code/public/
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp" PATTERN "*.inl"
)
install(EXPORT MemLibTargets
FILE MemLibTargets.cmake
NAMESPACE MemLib::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/MemLib
)
configure_package_config_file(
${CMAKE_CURRENT_SOURCE_DIR}/cmake/MemLibConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/MemLibConfig.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/MemLib
)
write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/MemLibConfigVersion.cmake
VERSION ${PROJECT_VERSION}
COMPATIBILITY SameMajorVersion
)
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/MemLibConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/MemLibConfigVersion.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/MemLib
)