setup cmake for avr

This commit is contained in:
2025-05-16 19:12:22 +02:00
parent b84c1dfe5b
commit 910bf1419e
4 changed files with 105 additions and 0 deletions

38
CMakeLists.txt Normal file
View File

@@ -0,0 +1,38 @@
cmake_minimum_required(VERSION 3.15)
# Project name and version
project(tool_probe VERSION 1.0)
# enable_language(C ASM)
# toolchain file for AVR
# set(CMAKE_TOOLCHAIN_FILE ${CMAKE_SOURCE_DIR}/avr-gcc-toolchain.cmake)
# Set executable name
add_executable(${PROJECT_NAME})
# generate hex file
add_custom_command(
TARGET ${PROJECT_NAME} POST_BUILD
COMMAND avr-objcopy -O ihex -R .eeprom ${PROJECT_NAME}.elf ${PROJECT_NAME}.hex
COMMAND avr-size ${PROJECT_NAME}.elf
COMMENT "Generating HEX file"
)
# add custom target for uploading
add_custom_target(flash
COMMAND avrdude -p ${AVR_MCU} -c ${AVR_PROGRAMMER} -U flash:w:${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.hex:i
DEPENDS ${PROJECT_NAME}
COMMENT "Uploading HEX file to microcontroller"
)
# Link directories setup
target_link_directories(${PROJECT_NAME} PRIVATE
src
)
# Add sources to executable
target_sources(${PROJECT_NAME} PRIVATE
src/main.c
)

26
CMakePresets.json Normal file
View File

@@ -0,0 +1,26 @@
{
"version": 3,
"configurePresets": [
{
"name": "default",
"hidden": true,
"generator": "Ninja",
"binaryDir": "${sourceDir}/build/${presetName}",
"toolchainFile": "${sourceDir}/avr-gcc-toolchain.cmake",
"cacheVariables": {}
},
{
"name": "Release",
"inherits": "default",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
}
],
"buildPresets": [
{
"name": "Release",
"configurePreset": "Release"
}
]
}

30
avr-gcc-toolchain.cmake Normal file
View File

@@ -0,0 +1,30 @@
# CMake toolchain file for AVR microcontrollers
set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_PROCESSOR avr)
set(AVR_MCU "ATtiny24")
set(AVR_PROGRAMMER "usbasp")
# compiler and linker settings
set(CMAKE_C_COMPILER avr-gcc)
set(CMAKE_CXX_COMPILER avr-g++)
set(CMAKE_OBJCOPY avr-objcopy)
set(CMAKE_SIZE_UTIL avr-size)
set(CMAKE_EXECUTABLE_SUFFIX_ASM ".elf")
set(CMAKE_EXECUTABLE_SUFFIX_C ".elf")
set(CMAKE_EXECUTABLE_SUFFIX_CXX ".elf")
# compiler flags
# set(CMAKE_C_FLAGS "-mmcu=${AVR_MCU} -Wall -Os" CACHE STRING "")
set(CMAKE_C_FLAGS "-mmcu=${AVR_MCU} -Wall -Os -DF_CPU=8000000UL" CACHE STRING "")
# compiler flags
set(CMAKE_EXE_LINKER_FLAGS "-mmcu=${AVR_MCU}" CACHE STRING "")
#
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
####

11
src/main.c Normal file
View File

@@ -0,0 +1,11 @@
#include <avr/io.h>
int main(void)
{
// Main loop
while (1)
{
// Do nothing
}
return 0;
}