-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
147 lines (126 loc) · 4.76 KB
/
CMakeLists.txt
File metadata and controls
147 lines (126 loc) · 4.76 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
cmake_minimum_required(VERSION 3.15)
project(vpnclient_engine VERSION 1.0.0 LANGUAGES CXX C)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
# Опции сборки
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
option(ENABLE_HEV_SOCKS5 "Enable HevSocks5 driver" ON)
option(ENABLE_TUN2SOCKS "Enable Tun2Socks driver" ON)
option(ENABLE_SINGBOX "Enable SingBox core" ON)
option(ENABLE_LIBXRAY "Enable LibXray core" ON)
option(ENABLE_V2RAY "Enable V2Ray core" ON)
# Исходные файлы
set(CORE_SOURCES
src/core/vpnclient_engine.cpp
src/core/vpnclient_engine_c_api.cpp
)
set(DRIVER_SOURCES
src/drivers/driver_base.cpp
)
set(CORE_IMPL_SOURCES
src/cores/core_base.cpp
)
# Драйверы
if(ENABLE_HEV_SOCKS5)
list(APPEND DRIVER_SOURCES src/drivers/hev_socks5_driver.cpp)
add_compile_definitions(ENABLE_HEV_SOCKS5)
endif()
if(ENABLE_TUN2SOCKS)
list(APPEND DRIVER_SOURCES src/drivers/tun2socks_driver.cpp)
add_compile_definitions(ENABLE_TUN2SOCKS)
endif()
# Ядра
if(ENABLE_SINGBOX)
list(APPEND CORE_IMPL_SOURCES src/cores/singbox_core.cpp)
add_compile_definitions(ENABLE_SINGBOX)
endif()
if(ENABLE_LIBXRAY)
list(APPEND CORE_IMPL_SOURCES src/cores/libxray_core.cpp)
add_compile_definitions(ENABLE_LIBXRAY)
endif()
if(ENABLE_V2RAY)
list(APPEND CORE_IMPL_SOURCES src/cores/v2ray_core.cpp)
add_compile_definitions(ENABLE_V2RAY)
endif()
# Создание библиотеки
add_library(${PROJECT_NAME}
${CORE_SOURCES}
${DRIVER_SOURCES}
${CORE_IMPL_SOURCES}
)
# Заголовочные файлы
target_include_directories(${PROJECT_NAME}
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src
)
# Внешние зависимости
set(HEV_SOCKS5_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../flutter_vpn_hev5socks)
set(TUN2SOCKS_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../flutter_vpn_tun2socks)
set(SINGBOX_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../flutter_vpn_singbox)
set(LIBXRAY_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../fork_vpn_libxray)
set(V2RAY_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../flutter_v2ray)
if(ENABLE_HEV_SOCKS5)
# Подключение flutter_vpn_hev5socks
target_include_directories(${PROJECT_NAME} PRIVATE ${HEV_SOCKS5_DIR}/include)
if(EXISTS ${HEV_SOCKS5_DIR}/build/libhev_socks5.a)
target_link_libraries(${PROJECT_NAME} PRIVATE ${HEV_SOCKS5_DIR}/build/libhev_socks5.a)
elseif(EXISTS ${HEV_SOCKS5_DIR}/build/libhev_socks5.so)
target_link_libraries(${PROJECT_NAME} PRIVATE ${HEV_SOCKS5_DIR}/build/libhev_socks5.so)
endif()
endif()
if(ENABLE_TUN2SOCKS)
# Подключение flutter_vpn_tun2socks
target_include_directories(${PROJECT_NAME} PRIVATE ${TUN2SOCKS_DIR}/include)
if(EXISTS ${TUN2SOCKS_DIR}/build/libtun2socks.a)
target_link_libraries(${PROJECT_NAME} PRIVATE ${TUN2SOCKS_DIR}/build/libtun2socks.a)
elseif(EXISTS ${TUN2SOCKS_DIR}/build/libtun2socks.so)
target_link_libraries(${PROJECT_NAME} PRIVATE ${TUN2SOCKS_DIR}/build/libtun2socks.so)
endif()
endif()
if(ENABLE_SINGBOX)
# Подключение flutter_vpn_singbox
target_include_directories(${PROJECT_NAME} PRIVATE ${SINGBOX_DIR}/include)
if(EXISTS ${SINGBOX_DIR}/build/libsingbox.a)
target_link_libraries(${PROJECT_NAME} PRIVATE ${SINGBOX_DIR}/build/libsingbox.a)
elseif(EXISTS ${SINGBOX_DIR}/build/libsingbox.so)
target_link_libraries(${PROJECT_NAME} PRIVATE ${SINGBOX_DIR}/build/libsingbox.so)
endif()
endif()
if(ENABLE_LIBXRAY)
# Подключение fork_vpn_libxray
target_include_directories(${PROJECT_NAME} PRIVATE ${LIBXRAY_DIR}/include)
if(EXISTS ${LIBXRAY_DIR}/build/libxray.a)
target_link_libraries(${PROJECT_NAME} PRIVATE ${LIBXRAY_DIR}/build/libxray.a)
elseif(EXISTS ${LIBXRAY_DIR}/build/libxray.so)
target_link_libraries(${PROJECT_NAME} PRIVATE ${LIBXRAY_DIR}/build/libxray.so)
endif()
endif()
if(ENABLE_V2RAY)
# Подключение flutter_v2ray
target_include_directories(${PROJECT_NAME} PRIVATE ${V2RAY_DIR}/include)
if(EXISTS ${V2RAY_DIR}/build/libv2ray.a)
target_link_libraries(${PROJECT_NAME} PRIVATE ${V2RAY_DIR}/build/libv2ray.a)
elseif(EXISTS ${V2RAY_DIR}/build/libv2ray.so)
target_link_libraries(${PROJECT_NAME} PRIVATE ${V2RAY_DIR}/build/libv2ray.so)
endif()
endif()
# Установка
install(TARGETS ${PROJECT_NAME}
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin
)
install(DIRECTORY include/
DESTINATION include
FILES_MATCHING PATTERN "*.h"
)
# Тесты (опционально)
option(BUILD_TESTS "Build tests" OFF)
if(BUILD_TESTS)
enable_testing()
add_subdirectory(tests)
endif()