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()