cmake_minimum_required(VERSION 3.20)
project(strikers_zt C CXX)
set(R "@STRIKERS_SOURCE_ROOT@/deps/libzt")
set(Z "${R}/ext/ZeroTierOne")
file(GLOB CORE ${Z}/node/*.cpp)
list(FILTER CORE EXCLUDE REGEX "/Network.cpp$")
list(APPEND CORE "${CMAKE_CURRENT_SOURCE_DIR}/Network.cpp")
file(GLOB SDK ${R}/src/*.cpp)
list(FILTER SDK EXCLUDE REGEX "(NodeService|VirtualTap).cpp$")
list(APPEND SDK "${CMAKE_CURRENT_SOURCE_DIR}/NodeService.cpp" "${CMAKE_CURRENT_SOURCE_DIR}/VirtualTap.cpp")
file(GLOB LWIP ${R}/ext/lwip/src/netif/*.c ${R}/ext/lwip/src/api/*.c
 ${R}/ext/lwip/src/core/*.c ${R}/ext/lwip/src/core/ipv4/*.c ${R}/ext/lwip/src/core/ipv6/*.c)
list(FILTER LWIP EXCLUDE REGEX "slipif.c$")
set(UPNP connecthostport igd_desc_parse minisoap minissdpc miniupnpc miniwget minixml
 portlistingparse receivedata upnpcommands upnpdev upnperrors upnpreplyparse)
foreach(N IN LISTS UPNP)
 list(APPEND NAT "${Z}/ext/miniupnpc/${N}.c")
endforeach()
add_library(strikers_zt SHARED ${CORE} ${SDK} ${LWIP} ${NAT}
 ${Z}/osdep/OSUtils.cpp ${Z}/osdep/PortMapper.cpp
 ${Z}/ext/libnatpmp/natpmp.c ${Z}/ext/libnatpmp/wingettimeofday.c ${Z}/ext/libnatpmp/getgateway.c
 ${R}/ext/lwip-contrib/ports/win32/sys_arch.c)
target_include_directories(strikers_zt PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${R}/include ${R}/src ${Z} ${Z}/include
 ${Z}/node ${Z}/osdep ${Z}/ext/libnatpmp ${R}/ext/concurrentqueue
 ${R}/ext/lwip/src/include ${R}/ext/lwip-contrib/ports/win32/include)
target_compile_definitions(strikers_zt PRIVATE ZT_SDK=1 ZT_USE_MINIUPNPC=1
 _USING_LWIP_DEFINITIONS_=0 ZTS_DISABLE_CENTRAL_API=1 ADD_EXPORTS=1 OMIT_JSON_SUPPORT=1
 NOMINMAX _CRT_SECURE_NO_WARNINGS MINIUPNP_STATICLIB NATPMP_EXPORTS
 MINIUPNPC_SET_SOCKET_TIMEOUT MINIUPNPC_GET_SRC_ADDR
 MINIUPNPC_VERSION_STRING="2.0" UPNP_VERSION_STRING="UPnP/1.1" OS_STRING="Windows")
get_filename_component(STRIKERS_SOURCE_ROOT "${R}/../.." ABSOLUTE)
target_compile_options(strikers_zt PRIVATE /W0 /EHsc /experimental:deterministic "/pathmap:${STRIKERS_SOURCE_ROOT}=Strikers")
target_link_libraries(strikers_zt PRIVATE ws2_32 shlwapi iphlpapi winmm)
set_target_properties(strikers_zt PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON)
