cmake: WireGuard module for Artemis — boringtun + platform dispatch
This commit is contained in:
parent
3a17933beb
commit
343f2c8791
1 changed files with 77 additions and 0 deletions
77
cmake/wg.cmake
Normal file
77
cmake/wg.cmake
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
# cmake/wg.cmake — WireGuard client integration for Artemis (Sunshine fork).
|
||||
#
|
||||
# Include from the top-level CMakeLists.txt:
|
||||
#
|
||||
# include(cmake/wg.cmake)
|
||||
# artemis_wg_configure(sunshine) # pass the name of your app target
|
||||
#
|
||||
# Prerequisites:
|
||||
# Run scripts/build-boringtun.sh (Linux/macOS) or
|
||||
# scripts/build-boringtun-win.ps1 (Windows)
|
||||
# to produce deps/boringtun/libboringtun.a (or .lib on Windows).
|
||||
|
||||
# ─── boringtun static library ─────────────────────────────────────────────────
|
||||
|
||||
if(WIN32)
|
||||
set(ARTEMIS_BORINGTUN_LIB "${CMAKE_SOURCE_DIR}/deps/boringtun/boringtun.lib")
|
||||
else()
|
||||
set(ARTEMIS_BORINGTUN_LIB "${CMAKE_SOURCE_DIR}/deps/boringtun/libboringtun.a")
|
||||
endif()
|
||||
|
||||
if(NOT EXISTS "${ARTEMIS_BORINGTUN_LIB}")
|
||||
message(FATAL_ERROR
|
||||
"boringtun library not found at ${ARTEMIS_BORINGTUN_LIB}\n"
|
||||
"Run the appropriate build script in scripts/ and re-run CMake.")
|
||||
endif()
|
||||
|
||||
add_library(artemis_boringtun STATIC IMPORTED GLOBAL)
|
||||
set_target_properties(artemis_boringtun PROPERTIES
|
||||
IMPORTED_LOCATION "${ARTEMIS_BORINGTUN_LIB}"
|
||||
)
|
||||
|
||||
# ─── WireGuard source files ───────────────────────────────────────────────────
|
||||
|
||||
set(ARTEMIS_WG_SOURCES
|
||||
src/wg/wgconfig.cpp
|
||||
src/wg/relayreg.cpp
|
||||
)
|
||||
|
||||
if(WIN32)
|
||||
list(APPEND ARTEMIS_WG_SOURCES src/wg/wgclient_win.cpp)
|
||||
elseif(UNIX AND NOT APPLE)
|
||||
list(APPEND ARTEMIS_WG_SOURCES src/wg/wgclient_linux.cpp)
|
||||
elseif(APPLE)
|
||||
# macOS: future — use utun approach from DragonMoonlight if needed
|
||||
message(WARNING "Artemis WireGuard client not yet implemented for macOS")
|
||||
endif()
|
||||
|
||||
# ─── Configuration function ───────────────────────────────────────────────────
|
||||
|
||||
function(artemis_wg_configure TARGET)
|
||||
target_sources(${TARGET} PRIVATE ${ARTEMIS_WG_SOURCES})
|
||||
|
||||
target_include_directories(${TARGET} PRIVATE
|
||||
"${CMAKE_SOURCE_DIR}/src/wg"
|
||||
"${CMAKE_SOURCE_DIR}/deps/boringtun" # boringtun_ffi.h
|
||||
)
|
||||
|
||||
target_link_libraries(${TARGET} PRIVATE artemis_boringtun)
|
||||
|
||||
# libcurl (already a Sunshine dependency)
|
||||
find_package(CURL REQUIRED)
|
||||
target_link_libraries(${TARGET} PRIVATE CURL::libcurl)
|
||||
|
||||
if(WIN32)
|
||||
target_link_libraries(${TARGET} PRIVATE
|
||||
iphlpapi ws2_32 ntdll ole32
|
||||
)
|
||||
elseif(UNIX AND NOT APPLE)
|
||||
# pthread for std::thread on Linux
|
||||
target_link_libraries(${TARGET} PRIVATE pthread)
|
||||
endif()
|
||||
|
||||
# Enable the WireGuard relay feature in Artemis source
|
||||
target_compile_definitions(${TARGET} PRIVATE ARTEMIS_RELAY_ENABLED=1)
|
||||
|
||||
message(STATUS "Artemis: WireGuard relay client enabled for target '${TARGET}'")
|
||||
endfunction()
|
||||
Loading…
Reference in a new issue