Files
fantemp/CMakeLists.txt
T
BlackMarkandClaude Opus 5.5 f8e136e8ad docs: comments state what is, not how it came to be
The loader build, the gate script and the line-ending rule each carried the
story of their arrival - a measurement off the bench, a loop got wrong by
hand, a checkout reached from two hosts - where a sentence of what holds now
is enough. .gitattributes loses two patterns for files this repository does
not have, .clangd its two non-ASCII dashes, two headers a "per C" that read
as a stripped degree sign, and the README a "(new)" and the port's own
first attempt at stopping monitor.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 21:50:31 +02:00

50 lines
2.3 KiB
CMake

cmake_minimum_required(VERSION 3.28)
project(fantemp LANGUAGES CXX)
# libavr rides as the pinned submodule; LIBAVR_ROOT (cache or environment)
# overrides it for tandem development against a working tree. The toolchain
# file comes from the submodule via CMakePresets.json either way.
if(NOT LIBAVR_ROOT AND DEFINED ENV{LIBAVR_ROOT})
set(LIBAVR_ROOT $ENV{LIBAVR_ROOT})
endif()
if(NOT LIBAVR_ROOT)
set(LIBAVR_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/libavr)
endif()
if(NOT EXISTS ${LIBAVR_ROOT}/CMakeLists.txt)
message(FATAL_ERROR "libavr not found at ${LIBAVR_ROOT} - run: git submodule update --init libavr")
endif()
# pureboot rides as a pinned submodule too: this board's only way in is its
# resident loader, so the commit that names this firmware names the loader it
# has to hand over to. Consumed for the geometry it exports - the loader links
# the libavr target above, so pureboot's own libavr submodule stays
# uninitialised.
if(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/pureboot/CMakeLists.txt)
message(FATAL_ERROR "pureboot not found - run: git submodule update --init pureboot")
endif()
add_subdirectory(${LIBAVR_ROOT} libavr-build)
add_subdirectory(pureboot pureboot-build)
include(${LIBAVR_ROOT}/cmake/checks.cmake)
add_executable(fantemp src/main.cpp)
target_link_libraries(fantemp PRIVATE libavr)
# The raw image is what the loader takes, and what the reachability check
# measures the boot-section clearance against.
add_custom_command(TARGET fantemp POST_BUILD
COMMAND ${CMAKE_SIZE} $<TARGET_FILE:fantemp>
COMMAND ${CMAKE_OBJCOPY} -O binary -R .eeprom
$<TARGET_FILE:fantemp> $<TARGET_FILE_DIR:fantemp>/fantemp.bin
COMMAND ${CMAKE_OBJCOPY} -O ihex -R .eeprom
$<TARGET_FILE:fantemp> $<TARGET_FILE_DIR:fantemp>/fantemp.hex)
# The board's loader, built from the pin, so the one image this deployment
# cannot be recovered without is rebuilt by the commit that names it. Every
# parameter is pureboot's own default for this chip - USART0 at 115200 on the
# 16 MHz crystal `src/board.hpp` declares. It goes on over the wire
# (`--update-loader`), which is why there is no flash target beside it: the
# board has no programming header.
pureboot_add_loader(pureboot)
enable_testing()
add_subdirectory(test)