-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
358 lines (313 loc) · 11.4 KB
/
CMakeLists.txt
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
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
cmake_minimum_required (VERSION 3.20)
project ("nt5")
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
set(ENABLE_TEST 0)
# check for libraries
find_library(SSL_LIB ssl)
if(NOT SSL_LIB)
message(FATAL_ERROR "ssl library is not found")
endif()
find_library(AV_LIB1 avformat)
find_library(AV_LIB2 avcodec)
find_library(AV_LIB3 swscale)
find_library(AV_LIB4 avutil)
if(NOT AV_LIB1)
message(FATAL_ERROR "avformat library is not found")
endif()
if(NOT AV_LIB2)
message(FATAL_ERROR "avcodec library is not found")
endif()
if(NOT AV_LIB3)
message(FATAL_ERROR "swscale library is not found")
endif()
if(NOT AV_LIB4)
message(FATAL_ERROR "avutil library is not found")
endif()
# find_library(CJSON_LIB cjson)
# if(NOT CJSON_LIB)
# message(FATAL_ERROR "cjson library not found")
# endif()
find_library(LUA_LIB lua5.3)
# debug: address sanitizer
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fsanitize=address,leak")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fsanitize=address,leak")
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -fsanitize=address,leak")
# external:cJSON
add_subdirectory(src/external/cJSON)
# external:libarchive
add_subdirectory(src/external/libarchive)
# external:cterm
# add_subdirectory(src/external/cterm)
# external:cterm2
add_subdirectory(src/external/cterm2)
# cterm include path shortcut
set(CTERM_INCLUDE_PATH src/external/cterm2/src/loader/include)
# external:libfuzzy
file(GLOB LIBFUZZY_SRC CONFIGURE_DEPENDS "src/external/libpe/libfuzzy/*.c")
add_library (fuzzy SHARED ${LIBFUZZY_SRC})
target_include_directories(fuzzy PRIVATE
"src/external/libpe/libfuzzy"
)
# external:libudis86
file(GLOB LIBUDIS86_SRC CONFIGURE_DEPENDS "src/external/libpe/libudis86/*.c")
add_library (udis86 SHARED ${LIBFUZZY_SRC})
target_include_directories(udis86 PRIVATE
"src/external/libpe/libudis86"
)
# external:libpe
file(GLOB LIBPE_SRC CONFIGURE_DEPENDS "src/external/libpe/*.c")
add_library(pe SHARED ${LIBPE_SRC})
target_include_directories(pe PRIVATE
"src/external/libpe/include"
"src/external/libfuzzy"
"src/external/libpe/libudis86"
)
target_link_libraries(pe fuzzy udis86 ssl)
# external:raylib
add_subdirectory(src/renderer/raylib)
# external:inih
file(GLOB LIBINIH_SRC CONFIGURE_DEPENDS "src/external/inih/*.c")
add_library(inih SHARED ${LIBINIH_SRC})
target_include_directories(inih PRIVATE
"src/external/inih"
)
# external:rvideo
set(RVIDEO_SRC "src/external/raylib-video/rvideo.c")
add_library(rvideo SHARED ${RVIDEO_SRC})
target_include_directories(rvideo PRIVATE
"src/external/raylib-video"
"src/renderer/raylib/src"
)
target_link_libraries(rvideo avformat avcodec swscale avutil)
set(NT_BASE_INCLUDES
"src/arrays/include"
"src/nt_tools/include"
"src/language/include"
"src/global/include"
"src/renderer/include"
"src/renderer/raylib/src"
"src/external"
)
# nt5language
file (GLOB NTLANGUAGE_SRC CONFIGURE_DEPENDS "src/language/src/*.c")
add_library(nt5language SHARED ${NTLANGUAGE_SRC})
target_include_directories(nt5language PRIVATE
${NT_BASE_INCLUDES}
)
# nt5arrays
file (GLOB NTARRAYS_SRC CONFIGURE_DEPENDS "src/arrays/src/*.c" "src/arrays/include/*/*.c")
add_library(nt5arrays SHARED ${NTARRAYS_SRC})
target_include_directories(nt5arrays PRIVATE
${NT_BASE_INCLUDES}
"src/renderer/raylib/src"
)
# nt5tools
file(GLOB NTTOOLS_SRC CONFIGURE_DEPENDS "src/nt_tools/src/*.c" "src/nt_tools/include/*/*.h")
add_library (nt5tools SHARED ${NTTOOLS_SRC})
target_include_directories(nt5tools PRIVATE
${NT_BASE_INCLUDES}
"src/external/cJSON"
)
target_link_libraries(nt5tools cjson)
# nt5renderer
file(GLOB NTRENDERER_SRC CONFIGURE_DEPENDS
"src/renderer/src/*/*.c" "src/renderer/include/*/*.h"
"src/renderer/src/dwm/*/*.c" "src/renderer/src/dwm/builder/*/*.c"
)
add_library(nt5renderer SHARED ${NTRENDERER_SRC})
target_include_directories(nt5renderer PRIVATE
"src/renderer/include"
"src/renderer/raylib/src"
"src/external/reasings/src"
"src/external/inih"
"src/external/raylib-video"
"src/external/cJSON"
${NT_BASE_INCLUDES}
)
target_link_libraries(nt5renderer raylib rvideo nt5arrays inih nt5tools nt5language cjson)
if(NOT LUA_LIB)
message("-- Could NOT find lua. Lua support is disabled")
else()
target_compile_definitions(nt5renderer PUBLIC HAS_LUA)
target_link_libraries(nt5renderer lua5.3)
message("-- Compiling with Lua support")
endif()
# nt5tui
file(GLOB NTTUI_SRC CONFIGURE_DEPENDS "src/ntldr_tui/src/*.c" "src/ntldr_tui/include/*/*.h")
add_library(nt5tui SHARED ${NTTUI_SRC})
target_include_directories(nt5tui PRIVATE
"src/ntldr_tui/include"
${NT_BASE_INCLUDES}
)
target_link_libraries(nt5tui nt5renderer nt5tools)
# panic
file(GLOB NTPANIC_SRC CONFIGURE_DEPENDS "src/panic/src/*.c" "src/panic/include/*/*.h")
add_library (nt5panic SHARED ${NTPANIC_SRC})
target_include_directories(nt5panic PRIVATE
"src/panic/include"
"src/nt_install/include"
"src/ntldr_tui/include"
"src/external/cJSON"
${NT_BASE_INCLUDES}
)
target_link_libraries(nt5panic nt5renderer nt5tools nt5tui)
# pe-viewer
file(GLOB PEVIEWER_SRC CONFIGURE_DEPENDS "src/pe_viewer/src/*.c" "src/pe_viewer/include/*/*.h")
add_executable(pe-viewer ${PEVIEWER_SRC})
target_include_directories(pe-viewer PRIVATE
"src/pe_viewer/include"
"src/ntldr_tui/include"
"src/external/libpe/include"
${NT_BASE_INCLUDES}
)
target_link_libraries(pe-viewer nt5tui nt5renderer pe nt5arrays)
# easings_test
file(GLOB EASINGSTEST_SRC CONFIGURE_DEPENDS "src/easings_test/src/*.c" "src/easings_test/include/*/*.h")
add_executable(easings_test ${EASINGSTEST_SRC})
target_include_directories(easings_test PRIVATE
"src/easings_test/include"
${NT_BASE_INCLUDES}
)
target_link_libraries(easings_test nt5renderer)
# nt5install
file(GLOB NTINSTALL_SRC CONFIGURE_DEPENDS "src/nt_install/src/*.c" "src/nt_install/include/*/*.h")
add_library(nt5install SHARED ${NTINSTALL_SRC})
target_include_directories(nt5install PRIVATE
"src/nt_install/include"
"src/external/cJSON"
"src/external/libarchive/libarchive"
"src/ntldr_tui/include"
${NT_BASE_INCLUDES}
)
target_link_libraries(nt5install nt5renderer nt5tui cjson archive nt5tools nt5arrays)
# nt5boot
file(GLOB NTBOOT_SRC CONFIGURE_DEPENDS "src/boot/src/*.c" "src/boot/include/*/*.h")
add_library (nt5boot SHARED ${NTBOOT_SRC})
target_include_directories(nt5boot PRIVATE
"src/boot/include"
"src/nt_install/include"
"src/ntldr_tui/include"
"src/external/cJSON"
"src/external/libpe/include"
${CTERM_INCLUDE_PATH}
${NT_BASE_INCLUDES}
)
target_link_libraries(nt5boot nt5renderer cjson nt5install pe cterml nt5tools)
# nt5
file(GLOB NT_SRC CONFIGURE_DEPENDS "src/launcher/*.c")
add_executable(nt5 ${NT_SRC})
target_include_directories(nt5 PRIVATE
"src/boot/include"
${NT_BASE_INCLUDES}
)
target_link_libraries(nt5 nt5boot nt5panic)
# cterm modules
# logo
file (GLOB NTMOD_LOGO_SRC CONFIGURE_DEPENDS "src/modules/logo/src/*.c")
add_library(cterm_ext_ntmod_logo ${NTMOD_LOGO_SRC})
target_include_directories(cterm_ext_ntmod_logo PRIVATE
"src/modules/logo/include"
${NT_BASE_INCLUDES}
${CTERM_INCLUDE_PATH}
)
target_link_libraries(cterm_ext_ntmod_logo nt5renderer raylib)
# oobe
file (GLOB NTMOD_OOBE_SRC CONFIGURE_DEPENDS "src/modules/oobe/src/*.c")
add_library(cterm_ext_ntmod_oobe ${NTMOD_OOBE_SRC})
target_include_directories(cterm_ext_ntmod_oobe PRIVATE
"src/modules/oobe/include"
"src/external/raylib-video"
${NT_BASE_INCLUDES}
${CTERM_INCLUDE_PATH}
)
target_link_libraries(cterm_ext_ntmod_oobe nt5renderer raylib)
# notify
file (GLOB NTMOD_NOTIFY_SRC CONFIGURE_DEPENDS "src/modules/notify/src/*.c")
add_library(cterm_ext_ntmod_notify ${NTMOD_NOTIFY_SRC})
target_include_directories(cterm_ext_ntmod_notify PRIVATE
"src/modules/notify/include"
"src/external/raylib-video"
${CTERM_INCLUDE_PATH}
${NT_BASE_INCLUDES}
)
target_link_libraries(cterm_ext_ntmod_notify nt5renderer raylib)
# logonui
file (GLOB NTMOD_LOGONUI_SRC CONFIGURE_DEPENDS "src/modules/logonui/src/*.c")
add_library(cterm_ext_ntmod_logonui ${NTMOD_LOGONUI_SRC})
target_include_directories(cterm_ext_ntmod_logonui PRIVATE
"src/modules/logonui/include"
${NT_BASE_INCLUDES}
${CTERM_INCLUDE_PATH}
)
target_link_libraries(cterm_ext_ntmod_logonui nt5renderer raylib)
# explorer
file (GLOB NTMOD_EXPLORER_SRC CONFIGURE_DEPENDS "src/modules/explorer/src/**/*.c" "src/modules/explorer/src/*.c")
add_library(cterm_ext_ntmod_explorer ${NTMOD_EXPLORER_SRC})
target_include_directories(cterm_ext_ntmod_explorer PRIVATE
"src/modules/explorer/include"
"src/ntldr_tui/include"
"src/panic/include"
${NT_BASE_INCLUDES}
${CTERM_INCLUDE_PATH}
)
target_link_libraries(cterm_ext_ntmod_explorer nt5renderer raylib nt5tui nt5panic)
# notepad
file (GLOB NTMOD_NOTEPAD_SRC CONFIGURE_DEPENDS "src/modules/notepad/src/*.c")
add_library(cterm_ext_ntmod_notepad ${NTMOD_NOTEPAD_SRC})
target_include_directories(cterm_ext_ntmod_notepad PRIVATE
"src/modules/notepad/include"
${NT_BASE_INCLUDES}
${CTERM_INCLUDE_PATH}
)
target_link_libraries(cterm_ext_ntmod_notepad nt5renderer raylib)
# animation editor
file (GLOB ANIM_EDITOR_SRC CONFIGURE_DEPENDS "src/animation_editor/src/*.c")
add_executable(animation_editor ${ANIM_EDITOR_SRC})
target_include_directories(animation_editor PRIVATE
"src/ntldr_tui/include"
"src/external/cJSON"
${NT_BASE_INCLUDES}
${CTERM_INCLUDE_PATH}
)
target_link_libraries(animation_editor nt5tui cjson cterml)
add_custom_command(
OUTPUT touch.txt
COMMAND touch touch.txt
DEPENDS touch touch.txt
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)
add_custom_command(
OUTPUT file1
COMMAND touch file1
DEPENDS file2
)
add_custom_target(copy_resources ALL DEPENDS file1 file2)
# this command re-touches file2 after dep target is "built"
# and thus forces its rebuild
ADD_CUSTOM_COMMAND(TARGET copy_resources
POST_BUILD
COMMAND sh ${CMAKE_CURRENT_SOURCE_DIR}/install_ntresources.sh ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}
)
# # copy cterm binaries
# add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
# COMMAND ${CMAKE_COMMAND} -E copy_directory $<TARGET_FILE_DIR:${PROJECT_NAME}>/src/external/cterm/cterm_ext* $<TARGET_FILE_DIR:${PROJECT_NAME}>
# )
# copy nt modules to cterm folder
# add_custom_command(TARGET ntmod_logo POST_BUILD
# COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE_DIR:${PROJECT_NAME}>/libntmod_logo.so $<TARGET_FILE_DIR:${PROJECT_NAME}>/applications/libntmod_logo.so
# )
# add_custom_command(TARGET ntmod_oobe POST_BUILD
# COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE_DIR:${PROJECT_NAME}>/libntmod_oobe.so $<TARGET_FILE_DIR:${PROJECT_NAME}>/applications/libntmod_oobe.so
# )
# add_custom_command(TARGET ntmod_notify POST_BUILD
# COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE_DIR:${PROJECT_NAME}>/libntmod_notify.so $<TARGET_FILE_DIR:${PROJECT_NAME}>/applications/libntmod_notify.so
# )
# add_custom_command(TARGET ntmod_logonui POST_BUILD
# COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE_DIR:${PROJECT_NAME}>/libntmod_logonui.so $<TARGET_FILE_DIR:${PROJECT_NAME}>/applications/libntmod_logonui.so
# )
# add_custom_command(TARGET ntmod_explorer POST_BUILD
# COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE_DIR:${PROJECT_NAME}>/libntmod_explorer.so $<TARGET_FILE_DIR:${PROJECT_NAME}>/applications/libntmod_explorer.so
# )
# add_custom_command(TARGET ntmod_notepad POST_BUILD
# COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE_DIR:${PROJECT_NAME}>/libntmod_notepad.so $<TARGET_FILE_DIR:${PROJECT_NAME}>/applications/libntmod_notepad.so
# )