80 lines
2.1 KiB
CMake
80 lines
2.1 KiB
CMake
cmake_minimum_required(VERSION 3.13)
|
|
project(lezyne-rear-light-firmware C)
|
|
|
|
# MCU and clock
|
|
set(MCU attiny202)
|
|
set(F_CPU 5000000UL)
|
|
|
|
# Toolchain
|
|
set(CMAKE_SYSTEM_NAME Generic)
|
|
set(CMAKE_C_COMPILER avr-gcc)
|
|
set(OBJCOPY avr-objcopy)
|
|
|
|
# Sources
|
|
add_executable(main.elf main.c)
|
|
|
|
# Compiler and linker flags
|
|
target_compile_options(main.elf PRIVATE -mmcu=${MCU} -DF_CPU=${F_CPU} -Os -Wall -Werror)
|
|
set_target_properties(main.elf PROPERTIES LINK_FLAGS "-mmcu=${MCU}")
|
|
|
|
# Create HEX and BIN after build
|
|
add_custom_command(TARGET main.elf POST_BUILD
|
|
COMMAND ${OBJCOPY} -O ihex -R .eeprom main.elf main.hex
|
|
COMMAND ${OBJCOPY} -O binary -R .eeprom main.elf main.bin
|
|
)
|
|
|
|
# Optional: show size
|
|
find_program(SIZE_TOOL avr-size)
|
|
if(SIZE_TOOL)
|
|
add_custom_command(TARGET main.elf POST_BUILD
|
|
COMMAND ${SIZE_TOOL} --mcu=${MCU} --format=avr main.elf
|
|
)
|
|
endif()
|
|
|
|
# Flash target using pymcuprog
|
|
find_program(PYMCUPROG pymcuprog)
|
|
set(UPDI_PORT "/dev/ttyUSB0" CACHE STRING "Serial port for UPDI programming")
|
|
|
|
if(PYMCUPROG)
|
|
add_custom_target(flash
|
|
COMMAND ${PYMCUPROG} -t uart -u ${UPDI_PORT} -d ${MCU} write -f main.hex
|
|
DEPENDS main.hex
|
|
COMMENT "Flashing ${MCU} with pymcuprog..."
|
|
)
|
|
else()
|
|
message(WARNING "pymcuprog not found in PATH. 'make flash' will not be available.")
|
|
endif()
|
|
|
|
# --- SBOM Generation (SPDX JSON) ---
|
|
find_package(Git REQUIRED)
|
|
|
|
# Generate current timestamp in ISO 8601 format (UTC)
|
|
string(TIMESTAMP CMAKE_TIMESTAMP "%Y-%m-%dT%H:%M:%SZ" UTC)
|
|
|
|
# Get current git hash
|
|
execute_process(
|
|
COMMAND ${GIT_EXECUTABLE} rev-parse HEAD
|
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
OUTPUT_VARIABLE GIT_HASH
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
)
|
|
|
|
# Get avr-gcc version
|
|
execute_process(
|
|
COMMAND ${CMAKE_C_COMPILER} --version
|
|
OUTPUT_VARIABLE AVR_GCC_VERSION
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
)
|
|
|
|
# Where to write SBOM
|
|
set(SBOM_FILE ${CMAKE_SOURCE_DIR}/sbom.spdx.json)
|
|
|
|
# Generate from template
|
|
configure_file(${CMAKE_SOURCE_DIR}/sbom.template.json ${SBOM_FILE} @ONLY)
|
|
|
|
# Always regenerate on build
|
|
add_custom_target(sbom ALL
|
|
DEPENDS ${SBOM_FILE}
|
|
COMMENT "Generating SPDX SBOM..."
|
|
)
|