summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
blob: 8315a0ab4410b7a5225b001804ce6cf5f29ef709 (plain)
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
359
360
361
362
363
364
cmake_minimum_required(VERSION 2.8...3.10)

project(sapp)

set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
include(Version)

set(CMAKE_MACOSX_RPATH 0)
set(CMAKE_EXPORT_COMPILECOMMANDS ON)

set(CMAKE_C_STANDARD 99)
set(CMAKE_CXX_STANDARD 11)
# see here: https://github.com/PointCloudLibrary/pcl/issues/3680
# when this is fixed, we can remove the following 3 lines.
if(NOT DEFINED CMAKE_SUPPRESS_DEVELOPER_WARNINGS)
     set(CMAKE_SUPPRESS_DEVELOPER_WARNINGS 1 CACHE INTERNAL "No dev warnings")
endif()
find_package(SYSTEMD REQUIRED)

#add_compile_options(-march=znver2)

execute_process(COMMAND nproc OUTPUT_VARIABLE CPU_COUNT)
string(STRIP ${CPU_COUNT} CPU_COUNT) # remove trailing newline
message(STATUS "Detected ${CPU_COUNT} CPU cores")
if (CPU_COUNT GREATER 16)
    set(CPU_COUNT 16)
endif()
message(STATUS "Using ${CPU_COUNT} CPU cores")


find_program(CMAKE_CXX_CPPCHECK NAMES cppcheck)
if (CMAKE_CXX_CPPCHECK)
    list(
        APPEND CMAKE_CXX_CPPCHECK 
            "--enable=all"
            "--error-exitcode=1"
			"--std=c++11"
            "--suppress=unusedFunction"
            "--suppress=missingInclude"
            "--suppress=uselessAssignmentPtrArg"
            "--suppress=unmatchedSuppression"
            "--suppress=variableScope"
            "--suppress=unreadVariable"
            "--suppress=cstyleCast"
            "--suppress=memleakOnRealloc"
            "--suppress=constParameter"
            "--suppress=uselessAssignmentArg"
            "--suppress=uninitvar"
            "--suppress=unusedStructMember"
            "--suppress=preprocessorErrorDirective"
            "--suppress=syntaxError"
    )
    set(CMAKE_C_CPPCHECK ${CMAKE_CXX_CPPCHECK})
else()
  message(FATAL_ERROR "Could not find the program cppcheck.")
endif()

function(suppress_cppcheck_in_current_dir)
    if (CMAKE_CXX_CPPCHECK)
        list(APPEND CMAKE_CXX_CPPCHECK 
            "--suppress=*:${CMAKE_CURRENT_SOURCE_DIR}/*"
        )
        # 将修改后的变量传递回父作用域
        set(CMAKE_CXX_CPPCHECK "${CMAKE_CXX_CPPCHECK}" PARENT_SCOPE)
        set(CMAKE_C_CPPCHECK "${CMAKE_CXX_CPPCHECK}" PARENT_SCOPE)
    endif()
endfunction()

set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING
    " set CMAKE_BUILD_TYPE chosen by the user, using DEBUG as default")
set_property(CACHE CMAKE_BUILD_TYPE  PROPERTY STRINGS Debug Release
RelWithDebInfo MinSizeRel)

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -rdynamic")

set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -Werror -O3 -DNDEBUG -DHIGH_PERF=1")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Werror -O3 -DNDEBUG -DHIGH_PERF=1")

set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} -O3")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} -O3")

set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DDEBUG -DHIGH_PERF=0")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG -DHIGH_PERF=0")

set(CMAKE_INSTALL_PREFIX /home/mesasoft/sapp_run)

set(PLATFORM_MODE "INLINE" CACHE STRING
    " set platform mode chosen by the user, using INLINE as default")
set_property(CACHE PLATFORM_MODE PROPERTY STRINGS MIRROR INLINE)
message(STATUS "PLATFORM_MODE='${PLATFORM_MODE}'")



#static link option
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DLINK_MODE_DYNAMIC=0")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DLINK_MODE_DYNAMIC=0")

set(CMAKE_POSITION_INDEPENDENT_CODE ON)

# CPU profiler
set(CPU_PROFILE "OFF" CACHE STRING
    " set cpu profiler chosen by the user, using OFF as default")
set_property(CACHE CPU_PROFILE  PROPERTY STRINGS OFF GPERF GPROF)
message(STATUS "CPU_PROFILE='${CPU_PROFILE}'")
if(CPU_PROFILE STREQUAL "GPERF")
	set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lprofiler")
elseif(CPU_PROFILE STREQUAL "GPROF")
	set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lpg")
endif()

#ASAN option
set(ASAN_OPTION "OFF" CACHE STRING
    " set asan type chosen by the user, using OFF as default")
set_property(CACHE ASAN_OPTION  PROPERTY STRINGS OFF ADDRESS THREAD)
message(STATUS "ASAN_OPTION='${ASAN_OPTION}'")

if(ASAN_OPTION STREQUAL "ADDRESS")
    set(CMAKE_C_FLAGS "${CMAKADDRESS} -g -DCMAKE_BUILD_TYPE=Debug -fsanitize=address -fno-omit-frame-pointer")
	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -DCMAKE_BUILD_TYPE=Debug -fsanitize=address -fno-omit-frame-pointer")
	set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lasan")
	set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lasan")
	add_definitions(-DASAN_ENABLED=1)
elseif(ASAN_OPTION STREQUAL "THREAD")
	set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -DCMAKE_BUILD_TYPE=Debug -fsanitize=thread -fno-omit-frame-pointer")
	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -DCMAKE_BUILD_TYPE=Debug -fsanitize=thread -fno-omit-frame-pointer")
	set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lasan")
	set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -lasan")
	add_definitions(-DASAN_ENABLED=1)
endif()




# MESA SDK Root
set(MESA_SDK_PREFIX "/opt/MESA/" CACHE STRING "MESA Framework Prefix")
# Capture Mode
set(CAPTURE_MODE "MARSIO" CACHE STRING
    "CAPTURE_MODE set Capture network traffic chosen by the user, using MARSIO as default")

set_property(CACHE CAPTURE_MODE PROPERTY STRINGS PCAP MARSIO PAG TUN)

message(STATUS "CAPTURE_MODE='${CAPTURE_MODE}'")

set(CAPTURE_DEFINITIONS -DIOMODE_PCAP)
add_definitions(-DIOMODE_PCAP=1)

#if(CAPTURE_MODE STREQUAL "PCAP")
#    set(CAPTURE_DEFINITIONS -DONLY_PCAP -DIOMODE_PCAP)
#endif()

set(DIST_MODE "JHASH" CACHE STRING
    "DIST_MODE set Tuple4 hash algorithm chosen by the user, using JHASH in linux kernel as default")
set_property(CACHE DIST_MODE PROPERTY STRINGS JHASH CRCHASH)
message(STATUS "DIST_MODE='${DIST_MODE}'")
if(DIST_MODE STREQUAL "JHASH")
	add_definitions(-DUSE_LINUX_KERNEL_HASH_ALGO=1)
else()
	add_definitions(-DUSE_LINUX_KERNEL_HASH_ALGO=0)
endif()

if(CAPTURE_MODE STREQUAL "PAG")
	set(CAPTURE_DEFINITIONS -DCAPTURE_MODE_PAG)
endif()

if(CAPTURE_MODE STREQUAL "MARSIO")
	set(CAPTURE_DEFINITIONS -DCAPTURE_MODE_MARSIO -DIOMODE_MARSIO)
	add_definitions(-DIOMODE_MARSIO=1)
endif()

if(CAPTURE_MODE STREQUAL "TUN")
	set(CAPTURE_DEFINITIONS -DCAPTURE_MODE_TUN)
	add_definitions(-DIOMODE_TUN=1)
endif()

# Memory Allocator
set(MEM_POOL "JEMALLOC_STATIC" CACHE STRING
    " set mem alloc chosen by the user, using JEMALLOC as default")
set_property(CACHE MEM_POOL PROPERTY STRINGS OFF 
    TCMALLOC TCMALLOC_MINI JEMALLOC JEMALLOC_STATIC MIMALLOC)
message(STATUS "MEM_POOL='${MEM_POOL}'")

if(MEM_POOL STREQUAL "TCMALLOC_MINI")
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -ltcmalloc_minimal -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free")
	add_definitions(-DUSE_TCMALLOC=1)	
elseif(MEM_POOL STREQUAL "TCMALLOC")
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -ltcmalloc -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free")
	add_definitions(-DUSE_TCMALLOC=1)	
elseif(MEM_POOL STREQUAL "JEMALLOC")
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -ljemalloc -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free")
	add_definitions(-DUSE_JEMALLOC=1)	
elseif(MEM_POOL STREQUAL "JEMALLOC_STATIC")
	add_definitions(-DUSE_JEMALLOC=1)	
elseif(MEM_POOL STREQUAL "MIMALLOC")
	add_definitions(-DUSE_MIMALLOC=1)		
endif()

# 定义宏 LIBEVENT_ENABLED
option(LIBEVENT_ENABLED "Enable libevent" OFF)
if(LIBEVENT_ENABLED STREQUAL "ON")
	add_definitions(-DLIBEVENT_ENABLED=1)	
endif()

option(HASP_ENABLED "Enable hasp envelope" OFF)
if(HASP_ENABLED STREQUAL "ON")
	add_definitions(-DHASP_ENABLED=1)	
	project(sapp-pr)
endif()

add_definitions(${CAPTURE_DEFINITIONS} ${MEM_POOL_DEFINITIONS} -D__FAVOR_BSD=1
    -D__USE_BSD=1 -D_GNU_SOURCE=1  -DMESA_SAPP_PLATFORM=1)

set(SAPP_DEPEND_DYN_LIB MESA_handle_logger MESA_prof_load MESA_htable  MESA_field_stat2 fieldstat3 fieldstat4 cjson breakpad_mini ${SYSTEMD_LIBRARIES} pthread dl pcap)
set(SAPP_DEPEND_DYN_LIB ${SAPP_DEPEND_DYN_LIB} packet_io_pcap)
if(CAPTURE_MODE STREQUAL "MARSIO")
	set(SAPP_DEPEND_DYN_LIB ${SAPP_DEPEND_DYN_LIB} packet_io_marsio)
endif()
	
if(CAPTURE_MODE STREQUAL "TUN")
	set(SAPP_DEPEND_DYN_LIB ${SAPP_DEPEND_DYN_LIB} packet_io_tun)
endif()	

set(SAPP_MODULES timestamp_record md5 
	symbol_check MESA_sleep MESA_socket_wrap 
	packet_io dealpkt project plugctrl common MESA_jump_layer 
	config timer tomlc99_wrap dpdk_ip_hash  
	gdev_assistant inline_keepalive ap_bloom libdabloom
	sapp_dev sapp_assistant sapp_metrics 
	platform_support cpu_limit timeout token_bucket)

if(LIBEVENT_ENABLED STREQUAL "ON")
	set(SAPP_MODULES ${SAPP_MODULES} libevent-static)
endif()

if(MEM_POOL STREQUAL "JEMALLOC_STATIC")
	set(SAPP_MODULES ${SAPP_MODULES} libjemalloc-static)
endif()

if(MEM_POOL STREQUAL "MIMALLOC")
	set(SAPP_MODULES ${SAPP_MODULES} libmimalloc-static)
endif()

file(MD5 ${PROJECT_SOURCE_DIR}/include/public/stream_inc/stream_base.h MD5_STREAM_BASE)
file(MD5 ${PROJECT_SOURCE_DIR}/include/public/stream_inc/stream_control.h MD5_STREAM_CONTROL)
file(MD5 ${PROJECT_SOURCE_DIR}/include/public/stream_inc/stream_entry.h MD5_STREAM_ENTRY)
file(MD5 ${PROJECT_SOURCE_DIR}/include/public/stream_inc/stream_inject.h MD5_STREAM_INJECT)
file(MD5 ${PROJECT_SOURCE_DIR}/include/public/stream_inc/stream_project.h MD5_STREAM_PROJECT)
file(MD5 ${PROJECT_SOURCE_DIR}/include/public/stream_inc/stream_proxy.h MD5_STREAM_PROXY)
file(MD5 ${PROJECT_SOURCE_DIR}/include/public/stream_inc/stream_rawpkt.h MD5_STREAM_RAWPKT)
file(MD5 ${PROJECT_SOURCE_DIR}/include/public/stream_inc/stream_tunnel.h MD5_STREAM_TUNNEL)

add_definitions(${HEADER_CHECK_DEFINITIONS}
				-DSTREAM_BASE_MD5_CHECK="${MD5_STREAM_BASE}"
				-DSTREAM_CONTROL_MD5_CHECK="${MD5_STREAM_CONTROL}"
				-DSTREAM_ENTRY_MD5_CHECK="${MD5_STREAM_ENTRY}"
   			        -DSTREAM_INJECT_MD5_CHECK="${MD5_STREAM_INJECT}"
				-DSTREAM_PROJECT_MD5_CHECK="${MD5_STREAM_PROJECT}"
				-DSTREAM_PROXY_MD5_CHECK="${MD5_STREAM_PROXY}"
				-DSTREAM_RAWPKT_MD5_CHECK="${MD5_STREAM_RAWPKT}"
				-DSTREAM_TUNNEL_MD5_CHECK="${MD5_STREAM_TUNNEL}")

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${HEADER_CHECK_DEFINITIONS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${HEADER_CHECK_DEFINITIONS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")

include_directories(${CMAKE_SOURCE_DIR}/include)
include_directories(${CMAKE_SOURCE_DIR}/include/public)
include_directories(${CMAKE_SOURCE_DIR}/include/public/stream_inc)
include_directories(${CMAKE_SOURCE_DIR}/include/private)

add_subdirectory(./vendor)
add_subdirectory(./src/support)
add_subdirectory(./src/dealpkt)
add_subdirectory(./src/packet_io)
add_subdirectory(./src/plugin)
add_subdirectory(./src/project)
add_subdirectory(./src/common)
add_subdirectory(./src/config)
add_subdirectory(./src/extensions)
add_subdirectory(./src/timer)
add_subdirectory(./src/sapp_dev)
add_subdirectory(./src/entry)
add_subdirectory(./test)
add_subdirectory(./service)
add_subdirectory(./tools)

option(BUILD_TEST "Enable test build" ON)
if(BUILD_TEST STREQUAL "ON")
#for sapp_module_test
add_subdirectory(./benchmark)
add_subdirectory(./module_test)

enable_testing()
add_subdirectory(ctest)
endif()
#by default, not include sapp_module_test dir
#add_subdirectory(./test/sapp_module_test/src)


set(CMAKE_INSTALL_FULL_LIBEXECDIR ${CMAKE_INSTALL_PREFIX})
set(CMAKE_INSTALL_FULL_SHAREDSTATEDIR ${CMAKE_INSTALL_PREFIX}/etc)
#set(CMAKE_INSTALL_FULL_LIBDIR ${CMAKE_INSTALL_PREFIX}/plug)
set(CMAKE_INSTALL_FULL_DATAROOTDIR ${CMAKE_INSTALL_PREFIX}/plug)
set(CMAKE_INSTALL_FULL_SYSCONFDIR /usr/lib/systemd/system)

install(PROGRAMS ${CMAKE_BINARY_DIR}/src/entry/sapp DESTINATION . COMPONENT EXECUTABLE)

install(PROGRAMS bin/r2 DESTINATION . COMPONENT EXECUTABLE)
install(PROGRAMS bin/r3 DESTINATION . COMPONENT EXECUTABLE)

install(FILES bin/etc/sapp.toml DESTINATION etc COMPONENT PROFILE)
install(FILES bin/etc/send_raw_pkt.conf DESTINATION etc COMPONENT PROFILE)
install(FILES bin/etc/project_list.conf DESTINATION etc COMPONENT PROFILE)
install(FILES bin/etc/plugin.conf DESTINATION etc COMPONENT PROFILE)
install(FILES bin/etc/entrylist.conf DESTINATION etc COMPONENT PROFILE)
install(FILES bin/etc/gdev.conf DESTINATION etc COMPONENT PROFILE)
install(FILES bin/etc/gdev_block.conf DESTINATION etc COMPONENT PROFILE)
install(FILES bin/plug/conflist.inf DESTINATION plug COMPONENT PROFILE)
install(FILES bin/etc/send_gdev.conf DESTINATION etc COMPONENT PROFILE)
install(FILES bin/etc/send_route.conf DESTINATION etc COMPONENT PROFILE)
install(FILES bin/etc/sapp_log.conf DESTINATION etc COMPONENT PROFILE)
install(FILES bin/etc/asymmetric_addr_layer.conf DESTINATION etc COMPONENT PROFILE)
install(FILES bin/etc/vlan_flipping_map.conf DESTINATION etc COMPONENT PROFILE)
install(FILES bin/etc/stream_compare_layer.conf DESTINATION etc COMPONENT PROFILE)
install(FILES bin/etc/necessary_plug_list.conf DESTINATION etc COMPONENT PROFILE)
install(FILES bin/etc/well_known_port.conf DESTINATION etc COMPONENT PROFILE)
install(FILES bin/etc/vxlan_sport_service_map.conf DESTINATION etc COMPONENT PROFILE)


install(FILES bin/plug/protocol/isakmp_protocol_plug/isakmp_protocol_plug.inf DESTINATION plug/protocol/isakmp_protocol_plug COMPONENT PROFILE)
install(FILES ${CMAKE_BINARY_DIR}/src/extensions/isakmp_protocol_plug.so DESTINATION plug/protocol/isakmp_protocol_plug COMPONENT LIBRARY)

install(FILES bin/plug/protocol/l2tp_protocol_plug/l2tp_protocol_plug.inf DESTINATION plug/protocol/l2tp_protocol_plug COMPONENT PROFILE)
install(FILES ${CMAKE_BINARY_DIR}/src/extensions/l2tp_protocol_plug.so DESTINATION plug/protocol/l2tp_protocol_plug COMPONENT LIBRARY)

install(FILES bin/plug/protocol/pptp_protocol_plug/pptp_protocol_plug.inf DESTINATION plug/protocol/pptp_protocol_plug COMPONENT PROFILE)
install(FILES ${CMAKE_BINARY_DIR}/src/extensions/pptp_protocol_plug.so DESTINATION plug/protocol/pptp_protocol_plug COMPONENT LIBRARY)


install(FILES bin/plug/business/test_app/test_app.inf DESTINATION plug/business/test_app COMPONENT PROFILE)
install(FILES ${CMAKE_BINARY_DIR}/test/test_app_sapp.so DESTINATION plug/business/test_app COMPONENT LIBRARY)

install(PROGRAMS ${CMAKE_BINARY_DIR}/tools/stream_id_decode DESTINATION ./tools/ COMPONENT EXECUTABLE)
install(PROGRAMS ${CMAKE_BINARY_DIR}/module_test/plugin_test_main/plugin_test_main DESTINATION ./tools/ COMPONENT EXECUTABLE)
if(MEM_POOL STREQUAL "JEMALLOC_STATIC")
	install(PROGRAMS ${CMAKE_BINARY_DIR}/vendor/libjemalloc/bin/jeprof DESTINATION ./tools/ COMPONENT EXECUTABLE)	
endif()

install(FILES ${PROJECT_SOURCE_DIR}/include/public/stream.h DESTINATION /opt/MESA/include/MESA/ COMPONENT HEADER)
install(FILES ${PROJECT_SOURCE_DIR}/include/public/stream_inc/stream_base.h DESTINATION /opt/MESA/include/MESA/stream_inc COMPONENT HEADER)
install(FILES  ${PROJECT_SOURCE_DIR}/include/public/stream_inc/stream_control.h DESTINATION  /opt/MESA/include/MESA/stream_inc COMPONENT HEADER)
install(FILES ${PROJECT_SOURCE_DIR}/include/public/stream_inc/stream_entry.h DESTINATION  /opt/MESA/include/MESA/stream_inc COMPONENT HEADER)
install(FILES ${PROJECT_SOURCE_DIR}/include/public/stream_inc/stream_inject.h DESTINATION  /opt/MESA/include/MESA/stream_inc COMPONENT HEADER)
install(FILES ${PROJECT_SOURCE_DIR}/include/public/stream_inc/stream_project.h DESTINATION  /opt/MESA/include/MESA/stream_inc COMPONENT HEADER)
install(FILES ${PROJECT_SOURCE_DIR}/include/public/stream_inc/stream_proxy.h DESTINATION  /opt/MESA/include/MESA/stream_inc COMPONENT HEADER)
install(FILES ${PROJECT_SOURCE_DIR}/include/public/stream_inc/stream_rawpkt.h DESTINATION  /opt/MESA/include/MESA/stream_inc COMPONENT HEADER)
install(FILES ${PROJECT_SOURCE_DIR}/include/public/stream_inc/stream_tunnel.h DESTINATION  /opt/MESA/include/MESA/stream_inc COMPONENT HEADER)
install(FILES ${PROJECT_SOURCE_DIR}/include/public/stream_inc/sapp_inject.h DESTINATION  /opt/MESA/include/MESA/stream_inc COMPONENT HEADER)
install(FILES ${PROJECT_SOURCE_DIR}/include/public/stream_inc/stream_bridge.h DESTINATION  /opt/MESA/include/MESA/stream_inc COMPONENT HEADER)
install(FILES ${PROJECT_SOURCE_DIR}/include/public/stream_inc/gdev_keepalive.h DESTINATION  /opt/MESA/include/MESA/stream_inc COMPONENT HEADER)

install(FILES ${CMAKE_BINARY_DIR}/test/libsapp_devel.so DESTINATION ${CMAKE_INSTALL_PREFIX}/lib COMPONENT HEADER)
install(FILES ${CMAKE_BINARY_DIR}/service/sapp.service DESTINATION /usr/lib/systemd/system/ COMPONENT PROFILE)

include(Package)