280 lines
8.9 KiB
CMake
280 lines
8.9 KiB
CMake
cmake_minimum_required(VERSION 3.20)
|
|
project(RadiantWave VERSION 0.1.0 LANGUAGES CXX)
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
|
|
# App version string shown at the top of the Home footer. Defaults to the
|
|
# project version; override at configure time with:
|
|
# cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug -DAPP_VERSION="1.2.3"
|
|
set(APP_VERSION "${PROJECT_VERSION}" CACHE STRING
|
|
"Version string shown in the Home footer (override at configure time)")
|
|
|
|
# API bearer key baked into the binary and sent as `Authorization: Bearer <key>`
|
|
# on every portal request. Leave empty to send no auth header. Never commit the
|
|
# real value — inject it at CI build time from a secret, e.g.:
|
|
# cmake ... -DAPI_KEY="${{ secrets.PORTAL_API_KEY }}"
|
|
set(API_KEY "" CACHE STRING
|
|
"Portal API key baked into the binary (leave empty to skip auth)")
|
|
|
|
find_package(SDL3 REQUIRED)
|
|
find_package(SDL3_ttf REQUIRED)
|
|
find_package(SDL3_image REQUIRED)
|
|
find_package(SDL3_mixer REQUIRED)
|
|
find_package(SDL3_net REQUIRED)
|
|
find_package(SQLite3 REQUIRED)
|
|
find_package(CURL REQUIRED)
|
|
find_package(OpenSSL REQUIRED)
|
|
find_package(GTest REQUIRED)
|
|
include(GoogleTest)
|
|
|
|
# Network manager dependencies (Linux only)
|
|
if(UNIX AND NOT APPLE)
|
|
find_package(PkgConfig REQUIRED)
|
|
pkg_check_modules(SDBUS REQUIRED libsystemd)
|
|
endif()
|
|
|
|
add_executable(radiantwave
|
|
src/main.cpp
|
|
src/page_manager.cpp
|
|
src/home.cpp
|
|
src/settings.cpp
|
|
src/wifi_setup_page.cpp
|
|
src/audio_settings_page.cpp
|
|
src/audio/audio_manager.cpp
|
|
src/audio/audio_downloader.cpp
|
|
src/timezone_page.cpp
|
|
src/timezone_helper.cpp
|
|
src/log_viewer_page.cpp
|
|
src/logger/logger.cpp
|
|
src/keybind_manager.cpp
|
|
src/provisioning.cpp
|
|
src/network/nm_connection.cpp
|
|
src/network/nm_device.cpp
|
|
src/network/network_manager.cpp
|
|
src/network/json.cpp
|
|
src/network/api_client.cpp
|
|
src/network/license_service.cpp
|
|
src/network/license_status.cpp
|
|
src/config/yaml_parser.cpp
|
|
src/config/config_manager.cpp
|
|
src/db/database_manager.cpp
|
|
src/network/proclamation_sync.cpp
|
|
src/proclamation_options_page.cpp
|
|
src/email_address_page.cpp
|
|
src/license_key_page.cpp
|
|
src/license_blocked_page.cpp
|
|
src/validation.cpp
|
|
src/date_format.cpp
|
|
src/date_format_page.cpp
|
|
src/fibonacci_line_pattern.cpp
|
|
src/scroller_streams.cpp
|
|
src/scroller_page.cpp
|
|
src/scramble/fibonacci_scrambler.cpp
|
|
)
|
|
|
|
target_compile_definitions(radiantwave PRIVATE
|
|
APP_VERSION="${APP_VERSION}"
|
|
API_KEY="${API_KEY}"
|
|
)
|
|
|
|
target_include_directories(radiantwave PRIVATE src)
|
|
target_link_libraries(radiantwave PRIVATE
|
|
SDL3::SDL3
|
|
SDL3_ttf::SDL3_ttf
|
|
SDL3_image::SDL3_image
|
|
SDL3_mixer::SDL3_mixer
|
|
SDL3_net::SDL3_net
|
|
SQLite3::SQLite3
|
|
CURL::libcurl
|
|
OpenSSL::Crypto
|
|
)
|
|
|
|
if(UNIX AND NOT APPLE)
|
|
target_link_libraries(radiantwave PRIVATE ${SDBUS_LIBRARIES} resolv)
|
|
target_include_directories(radiantwave PRIVATE ${SDBUS_INCLUDE_DIRS})
|
|
target_compile_definitions(radiantwave PRIVATE HAS_DBUS=1)
|
|
endif()
|
|
|
|
install(TARGETS radiantwave RUNTIME DESTINATION bin)
|
|
|
|
add_executable(tests
|
|
tests/test_page_manager.cpp
|
|
tests/test_keybind_manager.cpp
|
|
src/page_manager.cpp
|
|
src/keybind_manager.cpp
|
|
)
|
|
target_include_directories(tests PRIVATE src)
|
|
target_link_libraries(tests PRIVATE SDL3::SDL3)
|
|
|
|
# Provisioning walkthrough logic tests (pure functions, no app linkage)
|
|
add_executable(test_provisioning
|
|
tests/test_provisioning.cpp
|
|
)
|
|
target_include_directories(test_provisioning PRIVATE src)
|
|
target_link_libraries(test_provisioning PRIVATE SDL3::SDL3)
|
|
|
|
add_executable(test_assets
|
|
tests/test_assets.cpp
|
|
)
|
|
target_include_directories(test_assets PRIVATE src)
|
|
|
|
# Network manager unit tests
|
|
add_executable(test_network_unit
|
|
tests/network/test_nm_connection.cpp
|
|
src/network/nm_connection.cpp
|
|
)
|
|
target_include_directories(test_network_unit PRIVATE src)
|
|
target_link_libraries(test_network_unit PRIVATE GTest::gtest_main)
|
|
|
|
# Config unit tests
|
|
add_executable(test_config
|
|
tests/test_config.cpp
|
|
src/config/yaml_parser.cpp
|
|
src/config/config_manager.cpp
|
|
)
|
|
target_include_directories(test_config PRIVATE src)
|
|
target_link_libraries(test_config PRIVATE GTest::gtest_main)
|
|
|
|
# Database unit tests
|
|
add_executable(test_db
|
|
tests/test_db.cpp
|
|
src/db/database_manager.cpp
|
|
)
|
|
target_include_directories(test_db PRIVATE src)
|
|
target_link_libraries(test_db PRIVATE GTest::gtest_main SQLite3::SQLite3)
|
|
|
|
# Proclamation sync unit tests
|
|
add_executable(test_proclamation_sync
|
|
tests/test_proclamation_sync.cpp
|
|
src/db/database_manager.cpp
|
|
src/network/proclamation_sync.cpp
|
|
src/network/json.cpp
|
|
src/network/api_client.cpp
|
|
)
|
|
target_include_directories(test_proclamation_sync PRIVATE src)
|
|
target_link_libraries(test_proclamation_sync PRIVATE GTest::gtest_main SQLite3::SQLite3 CURL::libcurl)
|
|
|
|
# Portal API client unit tests (offline parse tests + live-API tests)
|
|
add_executable(test_api_client
|
|
tests/test_api_client.cpp
|
|
src/network/api_client.cpp
|
|
src/network/json.cpp
|
|
src/network/proclamation_sync.cpp
|
|
src/db/database_manager.cpp
|
|
)
|
|
target_include_directories(test_api_client PRIVATE src)
|
|
target_link_libraries(test_api_client PRIVATE GTest::gtest_main CURL::libcurl SQLite3::SQLite3)
|
|
|
|
# License validation service unit tests (offline + live-API tests)
|
|
add_executable(test_license_service
|
|
tests/test_license_service.cpp
|
|
src/network/license_service.cpp
|
|
src/network/api_client.cpp
|
|
src/network/json.cpp
|
|
src/db/database_manager.cpp
|
|
)
|
|
target_include_directories(test_license_service PRIVATE src)
|
|
target_link_libraries(test_license_service PRIVATE GTest::gtest_main CURL::libcurl SQLite3::SQLite3)
|
|
|
|
# License status tracker unit tests (offline mapping + worker lifecycle)
|
|
add_executable(test_license_status
|
|
tests/test_license_status.cpp
|
|
src/network/license_status.cpp
|
|
src/network/license_service.cpp
|
|
src/network/api_client.cpp
|
|
src/network/json.cpp
|
|
src/db/database_manager.cpp
|
|
)
|
|
target_include_directories(test_license_status PRIVATE src)
|
|
target_link_libraries(test_license_status PRIVATE GTest::gtest_main CURL::libcurl SQLite3::SQLite3)
|
|
|
|
# Validation/format unit tests
|
|
add_executable(test_validation
|
|
tests/test_validation.cpp
|
|
src/validation.cpp
|
|
)
|
|
target_include_directories(test_validation PRIVATE src)
|
|
target_link_libraries(test_validation PRIVATE GTest::gtest_main)
|
|
|
|
# Date/time format unit tests
|
|
add_executable(test_date_format
|
|
tests/test_date_format.cpp
|
|
src/date_format.cpp
|
|
)
|
|
target_include_directories(test_date_format PRIVATE src)
|
|
target_link_libraries(test_date_format PRIVATE GTest::gtest_main)
|
|
|
|
# TimeZone unit tests
|
|
add_executable(test_timezone
|
|
tests/test_timezone.cpp
|
|
src/timezone_helper.cpp
|
|
)
|
|
target_include_directories(test_timezone PRIVATE src)
|
|
target_link_libraries(test_timezone PRIVATE GTest::gtest_main)
|
|
|
|
# Logger unit tests
|
|
add_executable(test_logger
|
|
tests/test_logger.cpp
|
|
src/logger/logger.cpp
|
|
)
|
|
target_include_directories(test_logger PRIVATE src)
|
|
target_link_libraries(test_logger PRIVATE GTest::gtest_main)
|
|
|
|
# Audio unit tests
|
|
add_executable(test_audio
|
|
tests/test_audio.cpp
|
|
src/audio/audio_manager.cpp
|
|
src/config/yaml_parser.cpp
|
|
src/config/config_manager.cpp
|
|
src/logger/logger.cpp
|
|
)
|
|
target_include_directories(test_audio PRIVATE src)
|
|
target_link_libraries(test_audio PRIVATE GTest::gtest_main SDL3_mixer::SDL3_mixer SDL3::SDL3)
|
|
|
|
# Audio downloader unit tests
|
|
add_executable(test_audio_downloader
|
|
tests/test_audio_downloader.cpp
|
|
src/audio/audio_downloader.cpp
|
|
src/db/database_manager.cpp
|
|
src/logger/logger.cpp
|
|
)
|
|
target_include_directories(test_audio_downloader PRIVATE src)
|
|
target_link_libraries(test_audio_downloader PRIVATE GTest::gtest_main CURL::libcurl OpenSSL::Crypto SQLite3::SQLite3)
|
|
|
|
# Scroller Fibonacci pattern unit tests
|
|
add_executable(test_fibonacci_pattern
|
|
tests/test_fibonacci_pattern.cpp
|
|
src/fibonacci_line_pattern.cpp
|
|
)
|
|
target_include_directories(test_fibonacci_pattern PRIVATE src)
|
|
target_link_libraries(test_fibonacci_pattern PRIVATE GTest::gtest_main)
|
|
|
|
# Scroller streams unit tests
|
|
add_executable(test_scroller_streams
|
|
tests/test_scroller_streams.cpp
|
|
src/scroller_streams.cpp
|
|
)
|
|
target_include_directories(test_scroller_streams PRIVATE src)
|
|
target_link_libraries(test_scroller_streams PRIVATE GTest::gtest_main SQLite3::SQLite3)
|
|
|
|
# Fibonacci affine image scrambler unit tests
|
|
add_executable(test_fibonacci_scrambler
|
|
tests/test_fibonacci_scrambler.cpp
|
|
src/scramble/fibonacci_scrambler.cpp
|
|
)
|
|
target_include_directories(test_fibonacci_scrambler PRIVATE src)
|
|
target_link_libraries(test_fibonacci_scrambler PRIVATE GTest::gtest_main)
|
|
|
|
# Color palette API + storage unit tests (readiness: not wired into the app yet)
|
|
add_executable(test_color_palettes
|
|
tests/test_color_palettes.cpp
|
|
src/network/api_client.cpp
|
|
src/network/json.cpp
|
|
src/network/proclamation_sync.cpp
|
|
src/db/database_manager.cpp
|
|
)
|
|
target_include_directories(test_color_palettes PRIVATE src)
|
|
target_link_libraries(test_color_palettes PRIVATE GTest::gtest_main CURL::libcurl SQLite3::SQLite3)
|