2026-05-06 19:21:11 -04:00
|
|
|
# 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
|
2026-05-06 20:28:09 -04:00
|
|
|
src/wg/relayconf.cpp
|
2026-05-06 19:21:11 -04:00
|
|
|
src/wg/wgconfig.cpp
|
|
|
|
|
src/wg/relayreg.cpp
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
if(WIN32)
|
2026-05-06 19:49:53 -04:00
|
|
|
list(APPEND ARTEMIS_WG_SOURCES src/wg/wgclient_win.cpp src/wg/displayinfo_win.cpp)
|
2026-05-06 19:21:11 -04:00
|
|
|
elseif(UNIX AND NOT APPLE)
|
2026-05-06 19:49:53 -04:00
|
|
|
list(APPEND ARTEMIS_WG_SOURCES src/wg/wgclient_linux.cpp src/wg/displayinfo_linux.cpp)
|
2026-05-06 19:21:11 -04:00
|
|
|
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()
|