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 # ============================================================================ set(UASYNC_SOURCES ${LIB_DIR}/ll_queue.c ${LIB_DIR}/u_async.c ${LIB_DIR}/debug_config.c ${LIB_DIR}/timeout_heap.c ${LIB_DIR}/memory_pool.c ${LIB_DIR}/sha256.c ${LIB_DIR}/socket_compat.c ${LIB_DIR}/platform_compat.c ${LIB_DIR}/getmyip.c ${LIB_DIR}/swm_min.c ${LIB_DIR}/mem.c ${LIB_DIR}/radix.c ${LIB_DIR}/serialize.c ${LIB_DIR}/json_flat.c ${LIB_DIR}/tcp_io.c ${LIB_DIR}/sqlite3.c ${LIB_DIR}/liblmdb/mdb.c ${LIB_DIR}/liblmdb/midl.c ) add_library(uasync STATIC ${UASYNC_SOURCES}) target_include_directories(uasync PUBLIC ${LIB_DIR} ${SRC_DIR} ${LIB_DIR}/liblmdb ) 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) set(UTUN_COMMON_SOURCES ${SRC_DIR}/utun_instance.c ${SRC_DIR}/config_parser.c ${SRC_DIR}/config_updater.c ${SRC_DIR}/routing_layer/route_lib.c ${SRC_DIR}/routing_layer/route6_lib.c ${SRC_DIR}/routing_layer/topo_group.c ${SRC_DIR}/routing_layer/route_ping.c ${SRC_DIR}/routing_layer/nat_detection.c ${SRC_DIR}/routing_layer/topo_node.c ${SRC_DIR}/routing_layer/topo_node_sqlite.c ${SRC_DIR}/routing_layer/route_connectivity.c ${SRC_DIR}/db_sync.c ${SRC_DIR}/routing_layer/conn_mgr.c ${SRC_DIR}/routing_layer/topo_recovery.c ${TRANSPORT_DIR}/chat_sync.c ${TRANSPORT_DIR}/merkle_sync.c ${TRANSPORT_DIR}/member_sync.c ${SRC_DIR}/routing_layer/routing.c ${SRC_DIR}/tun_if.c ${SRC_DIR}/tun_route.c ${SRC_DIR}/transport_layer/etcp.c ${SRC_DIR}/transport_layer/etcp_connections.c ${SRC_DIR}/transport_layer/etcp_bbr.c ${SRC_DIR}/transport_layer/etcp_loadbalancer.c ${SRC_DIR}/transport_layer/etcp_debug.c ${SRC_DIR}/transport_layer/etcp_dump.c ${SRC_DIR}/transport_layer/secure_channel.c ${SRC_DIR}/transport_layer/crc32.c ${SRC_DIR}/transport_layer/stcp_link.c ${SRC_DIR}/transport_layer/stcp.c ${SRC_DIR}/transport_layer/stcp_server.c ${SRC_DIR}/transport_layer/stcp_client.c ${SRC_DIR}/transport_layer/pkt_normalizer.c ${SRC_DIR}/transport_layer/packet_dump.c ${SRC_DIR}/transport_layer/etcp_api.c ${SRC_DIR}/transport_layer/etcp_connect.c ${SRC_DIR}/control_server.c ${SRC_DIR}/firewall.c ${SRC_DIR}/eim_nat.c ${SRC_DIR}/nat_transport.c ${SRC_DIR}/transport_layer/dummynet.c ${SRC_DIR}/ntp_time.c ${SRC_DIR}/ntp_node_time.c ${SRC_DIR}/routing_layer/etcp_router.c ${SRC_DIR}/proxy/tcp_proxy_client.c ${SRC_DIR}/proxy/tcp_proxy_server.c ${SRC_DIR}/proxy/udp_proxy.c ${SRC_DIR}/proxy/socks_proxy.c ${SRC_DIR}/proxy/icmp_proxy.c ${SRC_DIR}/lwip_tcp/lwip_pbuf.c ${SRC_DIR}/lwip_tcp/lwip_tcp.c ${SRC_DIR}/lwip_tcp/lwip_tcp_in.c ${SRC_DIR}/lwip_tcp/lwip_tcp_out.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 ${LIB_DIR} ${TRANSPORT_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()