You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.8 KiB
96 lines
2.8 KiB
cmake_minimum_required(VERSION 3.16) |
|
|
|
set(LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../lib) |
|
set(SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../src) |
|
set(TRANSPORT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../transport) |
|
|
|
# ============================================================================ |
|
# libuasync — low-level runtime library |
|
# ============================================================================ |
|
|
|
file(GLOB UASYNC_SOURCES "${LIB_DIR}/*.c") |
|
set(UASYNC_LMDB_SOURCES |
|
"${LIB_DIR}/liblmdb/mdb.c" |
|
"${LIB_DIR}/liblmdb/midl.c" |
|
) |
|
list(APPEND UASYNC_SOURCES ${UASYNC_LMDB_SOURCES}) |
|
|
|
add_library(uasync STATIC ${UASYNC_SOURCES}) |
|
|
|
target_include_directories(uasync PUBLIC |
|
${LIB_DIR} |
|
${SRC_DIR} |
|
${LIB_DIR}/liblmdb |
|
${LIB_DIR}/libopus/include |
|
) |
|
|
|
add_library(opus_internal STATIC IMPORTED) |
|
set_target_properties(opus_internal PROPERTIES IMPORTED_LOCATION "${LIB_DIR}/libopus/libopus_internal.a") |
|
|
|
target_link_libraries(uasync PUBLIC opus_internal) |
|
|
|
target_compile_definitions(uasync PRIVATE |
|
_ISOC99_SOURCE |
|
DEBUG_OUTPUT_STDERR |
|
) |
|
|
|
set_target_properties(uasync PROPERTIES |
|
C_STANDARD 99 |
|
C_STANDARD_REQUIRED ON |
|
) |
|
|
|
# ============================================================================ |
|
# libutun — VPN core library (all src/ except utun.c) |
|
# ============================================================================ |
|
|
|
# Common sources (all platforms) — all .c from src/ except main entry point and ref/ dirs |
|
file(GLOB_RECURSE UTUN_COMMON_SOURCES "${SRC_DIR}/*.c") |
|
list(FILTER UTUN_COMMON_SOURCES EXCLUDE REGEX "/lwip_orig/") |
|
list(FILTER UTUN_COMMON_SOURCES EXCLUDE REGEX "/uip/") |
|
list(FILTER UTUN_COMMON_SOURCES EXCLUDE REGEX "/transport_layer/BBR/") |
|
list(REMOVE_ITEM UTUN_COMMON_SOURCES "${SRC_DIR}/utun.c") |
|
|
|
# Platform-specific TUN implementation |
|
if(CMAKE_SYSTEM_NAME STREQUAL "Linux") |
|
set(UTUN_TUN_SOURCES ${SRC_DIR}/tun_linux.c) |
|
elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") |
|
set(UTUN_TUN_SOURCES ${SRC_DIR}/tun_freebsd.c) |
|
elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows") |
|
set(UTUN_TUN_SOURCES ${SRC_DIR}/tun_windows.c) |
|
else() |
|
set(UTUN_TUN_SOURCES ${SRC_DIR}/tun_linux.c) |
|
endif() |
|
|
|
add_library(utun STATIC ${UTUN_COMMON_SOURCES} ${UTUN_TUN_SOURCES}) |
|
|
|
target_include_directories(utun PUBLIC |
|
${SRC_DIR} |
|
${SRC_DIR}/transport_layer |
|
${SRC_DIR}/routing_layer |
|
${SRC_DIR}/media_delivery |
|
${SRC_DIR}/media_async |
|
${LIB_DIR} |
|
${SRC_DIR}/uip |
|
${CMAKE_SOURCE_DIR}/db |
|
) |
|
|
|
target_compile_definitions(utun PRIVATE |
|
USE_OPENSSL |
|
USE_SQLITE |
|
) |
|
|
|
set_target_properties(utun PROPERTIES |
|
C_STANDARD 99 |
|
C_STANDARD_REQUIRED ON |
|
) |
|
|
|
target_link_libraries(utun PUBLIC |
|
uasync |
|
OpenSSL::Crypto |
|
${CMAKE_THREAD_LIBS_INIT} |
|
) |
|
|
|
# Platform-specific link flags |
|
if(WIN32) |
|
target_link_libraries(utun PUBLIC ws2_32 iphlpapi advapi32 bcrypt dbghelp) |
|
endif()
|
|
|