Repository navigation
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
156 lines (141 loc) · 5.28 KB
/
Copy pathCMakeLists.txt
File metadata and controls
156 lines (141 loc) · 5.28 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
cmake_minimum_required(VERSION 3.23)
project(RegKit LANGUAGES C CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
option(REGKIT_REPORT_COMPILE_TIME "Print MSVC front-end and back-end timing" OFF)
message(STATUS "RegKit platform: '${CMAKE_GENERATOR_PLATFORM}' pointer size: ${CMAKE_SIZEOF_VOID_P}")
add_library(regkit_compile_settings INTERFACE)
target_compile_features(regkit_compile_settings INTERFACE cxx_std_20)
target_compile_definitions(regkit_compile_settings INTERFACE
UNICODE
_UNICODE
NOMINMAX
WIN32_LEAN_AND_MEAN
_WIN32_IE=0x0600
)
if (MSVC)
target_compile_options(regkit_compile_settings INTERFACE
/EHsc
/FS
/W4
/permissive-
/sdl
/guard:cf
)
target_link_options(regkit_compile_settings INTERFACE
/GUARD:CF
/DYNAMICBASE
/NXCOMPAT
$<$<CONFIG:Release>:/CETCOMPAT>
)
if (REGKIT_REPORT_COMPILE_TIME)
target_compile_options(regkit_compile_settings INTERFACE /Bt+)
endif()
endif()
include(cmake/RegKitTarget.cmake)
include(cmake/VerifyTargetGraph.cmake)
add_subdirectory(redist/pcre2)
add_subdirectory(src)
add_executable(RegKit WIN32
src/launch/program.cpp
resources/app.rc
)
regkit_configure_executable(RegKit)
target_include_directories(RegKit PRIVATE
"${PROJECT_SOURCE_DIR}/resources"
)
target_link_libraries(RegKit PRIVATE
regkit_frame
regkit_cli
regkit_dialogs
regkit_ui
regkit_win32
advapi32
comctl32
shell32
)
set_target_properties(RegKit PROPERTIES OUTPUT_NAME "regkit")
include(CheckIPOSupported)
check_ipo_supported(RESULT REGKIT_IPO_SUPPORTED OUTPUT REGKIT_IPO_ERROR)
if (REGKIT_IPO_SUPPORTED)
set_property(TARGET RegKit PROPERTY INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE)
endif()
if (CMAKE_SYSTEM_PROCESSOR MATCHES "^([Aa][Rr][Mm]64|aarch64)$")
set(REGKIT_OFFREG_ARCH arm64)
elseif (CMAKE_SIZEOF_VOID_P EQUAL 4)
set(REGKIT_OFFREG_ARCH x86)
else()
set(REGKIT_OFFREG_ARCH x64)
endif()
set(REGKIT_OFFREG_DLL "${CMAKE_SOURCE_DIR}/redist/offreg/${REGKIT_OFFREG_ARCH}/offreg.dll")
if (NOT EXISTS "${REGKIT_OFFREG_DLL}")
message(FATAL_ERROR "Missing ${REGKIT_OFFREG_DLL}. Offline Registry requires the Microsoft offreg.dll redistributable for this architecture.")
endif()
file(GLOB REGKIT_LANGUAGE_FILES CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/assets/lang/*.po")
add_custom_command(TARGET RegKit POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${REGKIT_OFFREG_DLL}"
"$<TARGET_FILE_DIR:RegKit>/offreg.dll"
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${CMAKE_SOURCE_DIR}/redist/pcre2/LICENCE.md"
"$<TARGET_FILE_DIR:RegKit>/licences/PCRE2-LICENCE.md"
COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:RegKit>/assets/records"
COMMAND ${CMAKE_COMMAND} -E rm -rf "$<TARGET_FILE_DIR:RegKit>/assets/icons"
COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:RegKit>/assets/icons"
COMMAND ${CMAKE_COMMAND} -E rm -rf "$<TARGET_FILE_DIR:RegKit>/assets/defaults"
COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:RegKit>/assets/defaults"
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${CMAKE_SOURCE_DIR}/assets/records/23H2.txt"
"$<TARGET_FILE_DIR:RegKit>/assets/records/23H2.txt"
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${CMAKE_SOURCE_DIR}/assets/records/24H2.txt"
"$<TARGET_FILE_DIR:RegKit>/assets/records/24H2.txt"
COMMAND ${CMAKE_COMMAND} -E copy_if_different
"${CMAKE_SOURCE_DIR}/assets/records/25H2.txt"
"$<TARGET_FILE_DIR:RegKit>/assets/records/25H2.txt"
COMMAND ${CMAKE_COMMAND} -E copy_directory
"${CMAKE_SOURCE_DIR}/assets/icons"
"$<TARGET_FILE_DIR:RegKit>/assets/icons"
COMMAND ${CMAKE_COMMAND} -E copy_directory
"${CMAKE_SOURCE_DIR}/assets/defaults"
"$<TARGET_FILE_DIR:RegKit>/assets/defaults"
COMMAND ${CMAKE_COMMAND} -E rm -rf "$<TARGET_FILE_DIR:RegKit>/assets/bitfields"
COMMAND ${CMAKE_COMMAND} -E copy_directory
"${CMAKE_SOURCE_DIR}/assets/bitfields"
"$<TARGET_FILE_DIR:RegKit>/assets/bitfields"
COMMAND ${CMAKE_COMMAND} -E rm -rf "$<TARGET_FILE_DIR:RegKit>/assets/lang"
COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:RegKit>/assets/lang"
COMMAND ${CMAKE_COMMAND} -E rm -rf "$<TARGET_FILE_DIR:RegKit>/assets/comments"
COMMAND ${CMAKE_COMMAND} -E copy_directory
"${CMAKE_SOURCE_DIR}/assets/comments"
"$<TARGET_FILE_DIR:RegKit>/assets/comments"
)
if (REGKIT_LANGUAGE_FILES)
add_custom_command(TARGET RegKit POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${REGKIT_LANGUAGE_FILES} "$<TARGET_FILE_DIR:RegKit>/assets/lang"
)
endif()
if (MSVC)
target_link_options(RegKit PRIVATE "/MANIFEST:NO")
endif()
regkit_verify_dependency_order(
regkit_win32
regkit_records
regkit_work
regkit_ui
regkit_registry
regkit_regfile
regkit_search
regkit_trace
regkit_defaults
regkit_changes
regkit_workspace
regkit_browse
regkit_dialogs
regkit_frame
regkit_cli
RegKit
)
regkit_verify_include_order(win32 records work ui registry regfile search trace defaults changes workspace browse dialogs frame cli launch)