Files
xone_macos/CMakeLists.txt
T
portersky 325923751c fix: complete wireless pairing frames
Match the upstream 802.11 management layouts for association responses,
pair responses, and reserved client commands by including the sequence
control and association capability fields. Reuse existing WCIDs for repeated
association requests and end pairing mode after a successful pair response.
Also restore the upstream radio calibration sequence needed for reliable
WLAN associations.

Co-Authored-By: openai/gpt-5.6-luna: fixed pairing frame layouts and lifecycle
2026-08-29 13:36:54 +02:00

127 lines
5.1 KiB
CMake

# CMake supports Swift only with the Ninja and Xcode generators.
if(NOT CMAKE_GENERATOR MATCHES "^(Ninja|Xcode)$")
message(FATAL_ERROR
"This project requires the Ninja or Xcode generator for Swift support.\n"
" Configure with: cmake -S . -B build -G Ninja")
endif()
cmake_minimum_required(VERSION 3.21)
project(xone_macos VERSION 0.1.13 LANGUAGES CXX Swift)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# Add the deps directory to the module path
# Required for find_package injection
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/deps")
# Platform and compiler detection
include(Platform)
include(Flags)
include(Sanitizers)
# ==============================================================================
# Module libraries (bottom-up layering, mirrors medusalix/xone structure)
# ==============================================================================
# USB transport (IOKit / IOUSBFamily)
add_library(xone_usb STATIC
"src/usb/usb_transport.cpp"
)
target_include_directories(xone_usb PUBLIC "${CMAKE_SOURCE_DIR}/include")
target_compile_features(xone_usb PRIVATE cxx_std_23)
target_compile_options(xone_usb PRIVATE ${BASE_OPTIONS})
target_compile_definitions(xone_usb PRIVATE ${BASE_DEFINITIONS})
find_library(XONE_IOKIT IOKit)
find_library(XONE_COREFOUNDATION CoreFoundation)
target_link_libraries(xone_usb PUBLIC "${XONE_IOKIT}" "${XONE_COREFOUNDATION}")
# Auth + crypto (AES-CCMP key setup, ECDH, RSA — port from auth/)
add_library(xone_auth STATIC
"src/auth/crypto.cpp"
"src/auth/auth.cpp"
)
target_include_directories(xone_auth PUBLIC "${CMAKE_SOURCE_DIR}/include")
target_compile_features(xone_auth PRIVATE cxx_std_23)
target_compile_options(xone_auth PRIVATE ${BASE_OPTIONS})
target_compile_definitions(xone_auth PRIVATE ${BASE_DEFINITIONS})
find_library(XONE_SECURITY Security)
find_library(XONE_COREFOUNDATION CoreFoundation)
target_link_libraries(xone_auth PUBLIC "${XONE_SECURITY}" "${XONE_COREFOUNDATION}")
# MT76 chip protocol (firmware load, EFUSE, radio init, beacons)
add_library(xone_mt76 STATIC
"src/mt76/mt76.cpp"
)
target_include_directories(xone_mt76 PUBLIC "${CMAKE_SOURCE_DIR}/include")
target_compile_features(xone_mt76 PRIVATE cxx_std_23)
target_compile_options(xone_mt76 PRIVATE ${BASE_OPTIONS})
target_compile_definitions(xone_mt76 PRIVATE ${BASE_DEFINITIONS})
target_link_libraries(xone_mt76 PUBLIC xone_usb)
# GIP protocol (client lifecycle, handshake, status reports)
add_library(xone_gip STATIC
"src/gip/protocol.cpp"
)
target_include_directories(xone_gip PUBLIC "${CMAKE_SOURCE_DIR}/include")
target_compile_features(xone_gip PRIVATE cxx_std_23)
target_compile_options(xone_gip PRIVATE ${BASE_OPTIONS})
target_compile_definitions(xone_gip PRIVATE ${BASE_DEFINITIONS})
target_link_libraries(xone_gip PUBLIC xone_auth xone_mt76)
# Virtual HID gamepad presentation
add_library(xone_hid STATIC
"src/hid/hid_device.cpp"
)
target_include_directories(xone_hid PUBLIC "${CMAKE_SOURCE_DIR}/include")
target_compile_features(xone_hid PRIVATE cxx_std_23)
target_compile_options(xone_hid PRIVATE ${BASE_OPTIONS})
target_compile_definitions(xone_hid PRIVATE ${BASE_DEFINITIONS})
target_link_libraries(xone_hid PUBLIC xone_gip)
# C ABI bridge consumed by the Swift app and the test suite
add_library(xone_api STATIC
"src/app/api.cpp"
)
target_include_directories(xone_api PUBLIC "${CMAKE_SOURCE_DIR}/include")
target_compile_features(xone_api PRIVATE cxx_std_23)
target_compile_options(xone_api PRIVATE ${BASE_OPTIONS})
target_compile_definitions(xone_api PRIVATE XONE_VERSION="${PROJECT_VERSION}")
target_link_libraries(xone_api PUBLIC xone_hid)
# ==============================================================================
# macOS app (Swift entry point)
# ==============================================================================
add_executable(xone_app
"src/app/main.swift"
)
target_include_directories(xone_app PRIVATE "${CMAKE_SOURCE_DIR}/include")
target_compile_definitions(xone_app PRIVATE ${BASE_DEFINITIONS})
target_compile_features(xone_app PRIVATE cxx_std_23)
target_link_libraries(xone_app PRIVATE xone_api ${BASE_LIBRARIES})
# Swift sees the C ABI via a bridging header (no module map required)
target_compile_options(xone_app PRIVATE
-import-objc-header "${CMAKE_SOURCE_DIR}/include/app/xone_api.h"
)
# ==============================================================================
# Command line tool (protocol stack debugging against hardware)
# ==============================================================================
add_executable(xone_cli
"src/cli/main.cpp"
)
target_include_directories(xone_cli PRIVATE "${CMAKE_SOURCE_DIR}/include")
target_compile_definitions(xone_cli PRIVATE ${BASE_DEFINITIONS})
target_compile_features(xone_cli PRIVATE cxx_std_23)
target_link_libraries(xone_cli PRIVATE xone_mt76)
# ==============================================================================
# Tests
# ==============================================================================
option(BUILD_TESTING OFF "Build Unity test suites")
if (BUILD_TESTING)
enable_testing()
find_package(Unity REQUIRED)
add_subdirectory(tests)
endif()