From 910bf1419ead219021e19aeba8e1ef9dc134a4c2 Mon Sep 17 00:00:00 2001 From: bartool Date: Fri, 16 May 2025 19:12:22 +0200 Subject: [PATCH] setup cmake for avr --- CMakeLists.txt | 38 ++++++++++++++++++++++++++++++++++++++ CMakePresets.json | 26 ++++++++++++++++++++++++++ avr-gcc-toolchain.cmake | 30 ++++++++++++++++++++++++++++++ src/main.c | 11 +++++++++++ 4 files changed, 105 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 CMakePresets.json create mode 100644 avr-gcc-toolchain.cmake create mode 100644 src/main.c diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..c6da744 --- /dev/null +++ b/CMakeLists.txt @@ -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 +) diff --git a/CMakePresets.json b/CMakePresets.json new file mode 100644 index 0000000..3accd26 --- /dev/null +++ b/CMakePresets.json @@ -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" + } + ] +} \ No newline at end of file diff --git a/avr-gcc-toolchain.cmake b/avr-gcc-toolchain.cmake new file mode 100644 index 0000000..27ac326 --- /dev/null +++ b/avr-gcc-toolchain.cmake @@ -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) + +#### + + diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..1199e48 --- /dev/null +++ b/src/main.c @@ -0,0 +1,11 @@ +#include + +int main(void) +{ + // Main loop + while (1) + { + // Do nothing + } + return 0; +} \ No newline at end of file