generated from TDD-Templates/cmake_cpputest_template
Copied over the AVR branch from the original template.
This commit is contained in:
parent
a1a866a849
commit
8d5342f4fb
|
@ -1,7 +1,7 @@
|
|||
cmake_minimum_required(VERSION 3.20)
|
||||
|
||||
# Use the fancy version substitution
|
||||
project(cmake-cpputest-template
|
||||
project(main
|
||||
VERSION 1.0
|
||||
DESCRIPTION "template for cmake + cpputest"
|
||||
LANGUAGES C CXX
|
||||
|
@ -22,17 +22,16 @@ endif()
|
|||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
|
||||
# Request C 17 standard features
|
||||
set(CMAKE_C_STANDARD 17)
|
||||
set(CMAKE_C_STANDARD 11)
|
||||
set(CMAKE_C_STANDARD_REQUIRED True)
|
||||
set(CMAKE_C_FLAGS "-Wall -Werror -Wpedantic")
|
||||
# set(CMAKE_C_FLAGS "-Wall -Werror -Wpedantic")
|
||||
|
||||
# SETUP THE CXX flags for .cpp
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED True)
|
||||
set(CMAKE_CXX_FLAGS "-Wall -Werror -Wpedantic")
|
||||
|
||||
|
||||
|
||||
# #######################################
|
||||
# TESTING STUFF
|
||||
# #######################################
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
# ###############################
|
||||
# AVR-GCC toolchain file
|
||||
# ###############################
|
||||
|
||||
# Specify the cross-compiler
|
||||
set(CMAKE_SYSTEM_NAME Generic)
|
||||
set(CMAKE_SYSTEM_VERSION 1)
|
||||
set(CMAKE_SYSTEM_PROCESSOR avr)
|
||||
|
||||
# Specify the compiler and linker
|
||||
set(AVR_MCU atmega328p) # The old Classic
|
||||
#set(AVR_MCU attiny85) # The older ATtiny series, avr25
|
||||
#set(AVR_MCU attiny404) # this is the avrxmega3 series
|
||||
#set(AVR_MCU avr64dd28) # Newer DX series, avrxmega2
|
||||
|
||||
# The default frequency of an 328p devboard using the external crystal.
|
||||
set(F_CPU 16000000UL)
|
||||
#set(F_CPU 8000000)
|
||||
add_compile_definitions(F_CPU=${F_CPU})
|
||||
# add_compile_definitions(MCU=atmega328p)
|
||||
add_compile_definitions(__AVR_ATmega328P__)
|
||||
|
||||
# Set up the programmer for it
|
||||
#set(PROGRAMMER usbasp-clone)
|
||||
set(PROGRAMMER arduino)
|
||||
|
||||
# Set the Port for the programmer
|
||||
set(PORT /dev/ttyUSB0)
|
||||
|
||||
|
||||
# Define the toolchain executables
|
||||
set(CMAKE_C_COMPILER avr-gcc)
|
||||
set(CMAKE_CXX_COMPILER avr-g++)
|
||||
set(CMAKE_ASM_COMPILER avr-gcc)
|
||||
set(CMAKE_LINKER avr-ld)
|
||||
set(CMAKE_OBJCOPY avr-objcopy)
|
||||
set(CMAKE_SIZE avr-size)
|
||||
|
||||
|
||||
# Define compile options
|
||||
set(CMAKE_C_FLAGS " -Os -mmcu=${AVR_MCU} -DF_CPU=${F_CPU}")
|
||||
set(CMAKE_CXX_FLAGS "-mmcu=${AVR_MCU} -DF_CPU=${F_CPU}")
|
||||
set(CMAKE_EXE_LINKER_FLAGS_INIT "-mmcu=${AVR_MCU}")
|
||||
|
||||
|
||||
# Define the archiver and other tools
|
||||
set(CMAKE_AR avr-ar)
|
||||
set(CMAKE_RANLIB avr-ranlib)
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
# CMAKE generated file: DO NOT EDIT!
|
||||
# Generated by "Unix Makefiles" Generator, CMake Version 3.22
|
||||
|
||||
# Relative path conversion top directories.
|
||||
set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/ronin/Documents/projects/templates/cpputest_template_worktrees/avr")
|
||||
set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/ronin/Documents/projects/templates/cpputest_template_worktrees/avr/build")
|
||||
|
||||
# Force unix paths in dependencies.
|
||||
set(CMAKE_FORCE_UNIX_PATHS 1)
|
||||
|
||||
|
||||
# The C and CXX include file regular expressions for this directory.
|
||||
set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$")
|
||||
set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$")
|
||||
set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN})
|
||||
set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN})
|
|
@ -0,0 +1 @@
|
|||
0
|
|
@ -0,0 +1,6 @@
|
|||
# CMake generated Testfile for
|
||||
# Source directory: /home/ronin/Documents/projects/templates/cpputest_template_worktrees/avr/mocks
|
||||
# Build directory: /home/ronin/Documents/projects/templates/cpputest_template_worktrees/avr/build/mocks
|
||||
#
|
||||
# This file includes the relevant testing commands required for
|
||||
# testing this directory and lists subdirectories to be tested as well.
|
|
@ -0,0 +1,154 @@
|
|||
# CMAKE generated file: DO NOT EDIT!
|
||||
# Generated by "Unix Makefiles" Generator, CMake Version 3.22
|
||||
|
||||
# Default target executed when no arguments are given to make.
|
||||
default_target: all
|
||||
.PHONY : default_target
|
||||
|
||||
# Allow only one "make -f Makefile2" at a time, but pass parallelism.
|
||||
.NOTPARALLEL:
|
||||
|
||||
#=============================================================================
|
||||
# Special targets provided by cmake.
|
||||
|
||||
# Disable implicit rules so canonical targets will work.
|
||||
.SUFFIXES:
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : %,v
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : RCS/%
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : RCS/%,v
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : SCCS/s.%
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : s.%
|
||||
|
||||
.SUFFIXES: .hpux_make_needs_suffix_list
|
||||
|
||||
# Produce verbose output by default.
|
||||
VERBOSE = 1
|
||||
|
||||
# Command-line flag to silence nested $(MAKE).
|
||||
$(VERBOSE)MAKESILENT = -s
|
||||
|
||||
#Suppress display of executed commands.
|
||||
$(VERBOSE).SILENT:
|
||||
|
||||
# A target that is always out of date.
|
||||
cmake_force:
|
||||
.PHONY : cmake_force
|
||||
|
||||
#=============================================================================
|
||||
# Set environment variables for the build.
|
||||
|
||||
# The shell in which to execute make rules.
|
||||
SHELL = /bin/sh
|
||||
|
||||
# The CMake executable.
|
||||
CMAKE_COMMAND = /usr/bin/cmake
|
||||
|
||||
# The command to remove a file.
|
||||
RM = /usr/bin/cmake -E rm -f
|
||||
|
||||
# Escaping for special characters.
|
||||
EQUALS = =
|
||||
|
||||
# The top-level source directory on which CMake was run.
|
||||
CMAKE_SOURCE_DIR = /home/ronin/Documents/projects/templates/cpputest_template_worktrees/avr
|
||||
|
||||
# The top-level build directory on which CMake was run.
|
||||
CMAKE_BINARY_DIR = /home/ronin/Documents/projects/templates/cpputest_template_worktrees/avr/build
|
||||
|
||||
#=============================================================================
|
||||
# Targets provided globally by CMake.
|
||||
|
||||
# Special rule for the target test
|
||||
test:
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running tests..."
|
||||
/usr/bin/ctest --force-new-ctest-process $(ARGS)
|
||||
.PHONY : test
|
||||
|
||||
# Special rule for the target test
|
||||
test/fast: test
|
||||
.PHONY : test/fast
|
||||
|
||||
# Special rule for the target edit_cache
|
||||
edit_cache:
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..."
|
||||
/usr/bin/cmake-gui -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
|
||||
.PHONY : edit_cache
|
||||
|
||||
# Special rule for the target edit_cache
|
||||
edit_cache/fast: edit_cache
|
||||
.PHONY : edit_cache/fast
|
||||
|
||||
# Special rule for the target rebuild_cache
|
||||
rebuild_cache:
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
|
||||
/usr/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
|
||||
.PHONY : rebuild_cache
|
||||
|
||||
# Special rule for the target rebuild_cache
|
||||
rebuild_cache/fast: rebuild_cache
|
||||
.PHONY : rebuild_cache/fast
|
||||
|
||||
# The main all target
|
||||
all: cmake_check_build_system
|
||||
cd /home/ronin/Documents/projects/templates/cpputest_template_worktrees/avr/build && $(CMAKE_COMMAND) -E cmake_progress_start /home/ronin/Documents/projects/templates/cpputest_template_worktrees/avr/build/CMakeFiles /home/ronin/Documents/projects/templates/cpputest_template_worktrees/avr/build/mocks//CMakeFiles/progress.marks
|
||||
cd /home/ronin/Documents/projects/templates/cpputest_template_worktrees/avr/build && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 mocks/all
|
||||
$(CMAKE_COMMAND) -E cmake_progress_start /home/ronin/Documents/projects/templates/cpputest_template_worktrees/avr/build/CMakeFiles 0
|
||||
.PHONY : all
|
||||
|
||||
# The main clean target
|
||||
clean:
|
||||
cd /home/ronin/Documents/projects/templates/cpputest_template_worktrees/avr/build && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 mocks/clean
|
||||
.PHONY : clean
|
||||
|
||||
# The main clean target
|
||||
clean/fast: clean
|
||||
.PHONY : clean/fast
|
||||
|
||||
# Prepare targets for installation.
|
||||
preinstall: all
|
||||
cd /home/ronin/Documents/projects/templates/cpputest_template_worktrees/avr/build && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 mocks/preinstall
|
||||
.PHONY : preinstall
|
||||
|
||||
# Prepare targets for installation.
|
||||
preinstall/fast:
|
||||
cd /home/ronin/Documents/projects/templates/cpputest_template_worktrees/avr/build && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 mocks/preinstall
|
||||
.PHONY : preinstall/fast
|
||||
|
||||
# clear depends
|
||||
depend:
|
||||
cd /home/ronin/Documents/projects/templates/cpputest_template_worktrees/avr/build && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
|
||||
.PHONY : depend
|
||||
|
||||
# Help Target
|
||||
help:
|
||||
@echo "The following are some of the valid targets for this Makefile:"
|
||||
@echo "... all (the default if no target is provided)"
|
||||
@echo "... clean"
|
||||
@echo "... depend"
|
||||
@echo "... edit_cache"
|
||||
@echo "... rebuild_cache"
|
||||
@echo "... test"
|
||||
.PHONY : help
|
||||
|
||||
|
||||
|
||||
#=============================================================================
|
||||
# Special targets to cleanup operation of make.
|
||||
|
||||
# Special rule to run CMake to check the build system integrity.
|
||||
# No rule that depends on this can have commands that come from listfiles
|
||||
# because they might be regenerated.
|
||||
cmake_check_build_system:
|
||||
cd /home/ronin/Documents/projects/templates/cpputest_template_worktrees/avr/build && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
|
||||
.PHONY : cmake_check_build_system
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
# Install script for directory: /home/ronin/Documents/projects/templates/cpputest_template_worktrees/avr/mocks
|
||||
|
||||
# Set the install prefix
|
||||
if(NOT DEFINED CMAKE_INSTALL_PREFIX)
|
||||
set(CMAKE_INSTALL_PREFIX "/usr/local")
|
||||
endif()
|
||||
string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
|
||||
|
||||
# Set the install configuration name.
|
||||
if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
|
||||
if(BUILD_TYPE)
|
||||
string(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
|
||||
CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
|
||||
else()
|
||||
set(CMAKE_INSTALL_CONFIG_NAME "")
|
||||
endif()
|
||||
message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
|
||||
endif()
|
||||
|
||||
# Set the component getting installed.
|
||||
if(NOT CMAKE_INSTALL_COMPONENT)
|
||||
if(COMPONENT)
|
||||
message(STATUS "Install component: \"${COMPONENT}\"")
|
||||
set(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
|
||||
else()
|
||||
set(CMAKE_INSTALL_COMPONENT)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Install shared libraries without execute permission?
|
||||
if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
|
||||
set(CMAKE_INSTALL_SO_NO_EXE "1")
|
||||
endif()
|
||||
|
||||
# Is this installation the result of a crosscompile?
|
||||
if(NOT DEFINED CMAKE_CROSSCOMPILING)
|
||||
set(CMAKE_CROSSCOMPILING "FALSE")
|
||||
endif()
|
||||
|
||||
# Set default install directory permissions.
|
||||
if(NOT DEFINED CMAKE_OBJDUMP)
|
||||
set(CMAKE_OBJDUMP "/usr/bin/objdump")
|
||||
endif()
|
||||
|
42
otto.sh
42
otto.sh
|
@ -3,7 +3,7 @@
|
|||
# Date: 2024
|
||||
# Filename: otto.sh
|
||||
|
||||
CROSS_TC_WIN="$(pwd)/i686-w64-mingw32_toolchain.cmake"
|
||||
AVR_TC="$(pwd)/avr-gcc-toolchain.cmake"
|
||||
CMAKE_VERBOSE="ON"
|
||||
CROSS_COMPILE=1
|
||||
TEMPLATE_FILES=".template_files"
|
||||
|
@ -166,11 +166,37 @@ build_release() {
|
|||
|
||||
build_main () {
|
||||
clear_cmake_cache
|
||||
|
||||
cmake -DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE} ../
|
||||
make main
|
||||
}
|
||||
|
||||
build_hex () {
|
||||
clear_cmake_cache
|
||||
|
||||
CMAKE_ARGS="-DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE}"
|
||||
CMAKE_ARGS="${CMAKE_ARGS} -DCMAKE_TOOLCHAIN_FILE=${AVR_TC}"
|
||||
|
||||
cmake ${CMAKE_ARGS} ../
|
||||
make all
|
||||
make hex
|
||||
}
|
||||
|
||||
build_hex_optimized () {
|
||||
clear_cmake_cache
|
||||
|
||||
CMAKE_ARGS="-DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE}"
|
||||
CMAKE_ARGS="${CMAKE_ARGS} -DCMAKE_TOOLCHAIN_FILE=${AVR_TC}"
|
||||
|
||||
cmake ${CMAKE_ARGS} ../
|
||||
make all
|
||||
make hex-release
|
||||
}
|
||||
|
||||
flash_avr () {
|
||||
build_hex_optimized
|
||||
make upload
|
||||
}
|
||||
|
||||
run_c_tests () {
|
||||
clear_cmake_cache
|
||||
cmake -DUNIT_TESTING=ON -DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE} ../
|
||||
|
@ -180,9 +206,9 @@ run_c_tests () {
|
|||
print_menu () {
|
||||
echo "BUILD MENU:"
|
||||
echo "1. Run Tests"
|
||||
echo "2. Build Project"
|
||||
echo "3. Build for release"
|
||||
echo "4. cross compile for XXXXXX"
|
||||
echo "2. Build Project(hex)"
|
||||
echo "3. Build for release(hex)"
|
||||
echo "4. Flash to AVR"
|
||||
echo "5. Add new module to project"
|
||||
echo "6. Delete module from project"
|
||||
echo "7. Exit"
|
||||
|
@ -206,17 +232,17 @@ main() {
|
|||
2)
|
||||
echo "You selected Option 2"
|
||||
valid_choice=true
|
||||
build_main
|
||||
build_hex
|
||||
;;
|
||||
3)
|
||||
echo "You selected Option 3"
|
||||
valid_choice=true
|
||||
build_release
|
||||
build_hex_optimized
|
||||
;;
|
||||
4)
|
||||
echo "You selected Option 4"
|
||||
valid_choice=true
|
||||
cross_compile
|
||||
flash_avr
|
||||
;;
|
||||
5)
|
||||
echo "You selected Option 5"
|
||||
|
|
|
@ -1,3 +1,40 @@
|
|||
add_executable(main
|
||||
add_executable(${PROJECT_NAME}
|
||||
main.c
|
||||
)
|
||||
|
||||
# Ensure the build rules are defined
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES SUFFIX ".elf")
|
||||
|
||||
if(NOT TARGET size)
|
||||
# Set the size utility to display the size of the final binary
|
||||
add_custom_target(size ALL
|
||||
COMMAND ${CMAKE_SIZE} --format=avr --mcu=${AVR_MCU} ${CMAKE_PROJECT_NAME}.elf
|
||||
DEPENDS ${CMAKE_PROJECT_NAME}.elf
|
||||
)
|
||||
endif()
|
||||
|
||||
|
||||
if(NOT TARGET hex)
|
||||
# Define how to convert ELF to HEX
|
||||
add_custom_target(hex ALL
|
||||
COMMAND ${CMAKE_OBJCOPY} -O ihex -R .eeprom ${CMAKE_PROJECT_NAME}.elf ${CMAKE_PROJECT_NAME}.hex
|
||||
DEPENDS ${CMAKE_PROJECT_NAME}.elf
|
||||
)
|
||||
endif()
|
||||
|
||||
if(NOT TARGET bin)
|
||||
# Define how to convert ELF to BIN
|
||||
add_custom_target(bin ALL
|
||||
COMMAND ${CMAKE_OBJCOPY} -O binary -R .eeprom ${CMAKE_PROJECT_NAME}.elf ${CMAKE_PROJECT_NAME}.bin
|
||||
DEPENDS ${CMAKE_PROJECT_NAME}.elf
|
||||
)
|
||||
endif()
|
||||
|
||||
|
||||
if(NOT TARGET upload)
|
||||
# Upload command (adjust according to your programmer)
|
||||
add_custom_target(upload ALL
|
||||
COMMAND avrdude -c ${PROGRAMMER} -P ${PORT} -p ${AVR_MCU} -U flash:w:${CMAKE_PROJECT_NAME}.hex
|
||||
DEPENDS hex
|
||||
)
|
||||
endif()
|
||||
|
|
53
src/main.c
53
src/main.c
|
@ -1,8 +1,59 @@
|
|||
#include "stdio.h"
|
||||
|
||||
#include <avr/io.h>
|
||||
#include <util/delay.h>
|
||||
|
||||
|
||||
//#############################
|
||||
//Globals
|
||||
//#############################
|
||||
|
||||
#define LED_PORT (1<<5)
|
||||
#define LED_PIN PB5
|
||||
#define BLINK_DELAY_MS 5000
|
||||
|
||||
//#############################
|
||||
//Prototypes
|
||||
//#############################
|
||||
|
||||
void led_blink(void);
|
||||
|
||||
|
||||
|
||||
//#############################
|
||||
//MAIN
|
||||
//#############################
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
printf("Hello!\n");
|
||||
led_blink();
|
||||
|
||||
while(1) {
|
||||
led_blink();
|
||||
_delay_ms(500);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//#############################
|
||||
//FUNCTIONS
|
||||
//#############################
|
||||
|
||||
/*
|
||||
* Input: None
|
||||
* Output: None
|
||||
* Description: Toggles the pin for the LED indicator.
|
||||
*/
|
||||
void led_blink(void) {
|
||||
//Set the DDR for output.
|
||||
DDRB |= LED_PORT;
|
||||
|
||||
PORTB ^= (1<<LED_PIN);
|
||||
_delay_ms(500);
|
||||
PORTB ^= (1<<LED_PIN);
|
||||
_delay_ms(500);
|
||||
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue