make compilation better

This commit is contained in:
2026-08-08 09:49:25 +02:00
parent 66bdf9327a
commit 6ac93f0a5b
7 changed files with 90 additions and 52 deletions
+27 -50
View File
@@ -1,6 +1,13 @@
cmake_minimum_required(VERSION 3.13)
option(BUILD_FOR_PICO "Build for Raspberry Pi Pico" ON)
set(BUILD_PLATFORM "Linux" CACHE STRING "Target platform: Pico or Linux")
set_property(CACHE BUILD_PLATFORM PROPERTY STRINGS Pico Linux)
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/platform_${BUILD_PLATFORM}_pre.cmake")
message(FATAL_ERROR "Unknown BUILD_PLATFORM '${BUILD_PLATFORM}' (no cmake/platform_${BUILD_PLATFORM}_pre.cmake found)")
endif()
string(TOLOWER ${BUILD_PLATFORM} BUILD_PLATFORM_LOWER)
set(GEOGRAPHICLIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/geographiclib)
@@ -10,55 +17,25 @@ set(BUILD_DOCUMENTATION OFF CACHE BOOL "" FORCE)
set(BUILD_BOTH_LIBRARIES OFF CACHE BOOL "" FORCE)
set(PACKAGE_DEBIAN OFF CACHE BOOL "" FORCE)
# Automatically collect core sources and platform-specific HAL files
# Pre-project platform setup (e.g. Pico's pico_sdk_import.cmake must run
# before project(), and it must set PROJECT_LANGUAGES).
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/platform_${BUILD_PLATFORM}_pre.cmake)
project(p-rad ${PROJECT_LANGUAGES})
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# NOTE: don't use add_link_options/add_compile_options here - they apply to
# every target including pico-sdk's bs2_default, whose binary gets fully
# garbage-collected. Scope them to the p-rad target instead (see platform files).
# Automatically collect core sources and platform-specific HAL files.
# HAL files are matched by suffix convention: src/hal/*_<platform>.cpp
file(GLOB CORE_SOURCES CONFIGURE_DEPENDS "src/core/*.cpp" "src/core/*.c")
file(GLOB HAL_PICO_SOURCES CONFIGURE_DEPENDS "src/hal/*_pico.cpp")
file(GLOB HAL_LINUX_SOURCES CONFIGURE_DEPENDS "src/hal/*_linux.cpp")
file(GLOB HAL_SOURCES CONFIGURE_DEPENDS "src/hal/*_${BUILD_PLATFORM_LOWER}.cpp")
if(BUILD_FOR_PICO)
set(PICO_BOARD pico_w CACHE STRING "Board type")
include(pico_sdk_import.cmake)
project(p-rad C CXX ASM)
add_subdirectory(${GEOGRAPHICLIB_DIR} EXCLUDE_FROM_ALL)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
pico_sdk_init()
add_subdirectory(${GEOGRAPHICLIB_DIR} EXCLUDE_FROM_ALL)
target_compile_options(GeographicLib INTERFACE -fexceptions -frtti)
add_executable(p-rad
src/main.cpp
${CORE_SOURCES}
${HAL_PICO_SOURCES}
)
target_compile_definitions(p-rad PRIVATE PICO_BUILD)
target_include_directories(p-rad PRIVATE src)
target_link_libraries(p-rad pico_stdlib pico_cyw43_arch_lwip_threadsafe_background hardware_rtc GeographicLib)
pico_enable_stdio_usb(p-rad 1)
pico_enable_stdio_uart(p-rad 0)
pico_add_extra_outputs(p-rad)
else()
project(p-rad CXX)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_subdirectory(${GEOGRAPHICLIB_DIR} EXCLUDE_FROM_ALL)
add_executable(p-rad
src/main.cpp
${CORE_SOURCES}
${HAL_LINUX_SOURCES}
)
target_include_directories(p-rad PRIVATE src)
find_package(Threads REQUIRED)
find_package(SDL3 REQUIRED CONFIG)
find_package(CURL REQUIRED)
target_link_libraries(p-rad Threads::Threads SDL3::SDL3 CURL::libcurl GeographicLib)
endif()
# Post-project platform setup: add_executable, link libraries, platform-specific calls.
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/platform_${BUILD_PLATFORM}.cmake)