diff --git a/firmware/asdf/CMakeLists.txt b/firmware/asdf/CMakeLists.txt index 01011e4..e7521c0 100644 --- a/firmware/asdf/CMakeLists.txt +++ b/firmware/asdf/CMakeLists.txt @@ -4,23 +4,60 @@ set(KEYMAPFILE keymaps.txt) # Set up the toolchain and other architecture specific details -if(ARCH MATCHES atmega328p) - message(STATUS "setting up for atmega328p") - set(AVF_H_FUSE 0xd9) +set(ARCH_FAMILY_ATMEGA328P atmega328p) +set(ARCH_FAMILY_ATMEGA2560 atmega2560) + +if(ARCH MATCHES atmega328p OR ARCH MATCHES atmega168p OR ARCH MATCHES atmega88p) + set(FUSE_NOTES "Setting up for ${ARCH}: \n\n\ + Fuses: EXTENDED = 0xFF, HIGH = 0xdf, LOW = 0xd2\n\n\ + Brownout detect level: 111 (disabled) \n\ + Debug Wire (DWEN): 0 (disabled) \n\ + SPIEN: 1 (enabled) \n\ + Watchdog (WDTON): 0 (disabled) \n\ + Save EEPROM (EESAVE): 0 (disabled) \n\ + Boot section / size (BOOTZ): 11 (size=128[88p,168p]/256[328p])) \n\ + Boot Reset Vector (BOOTRST): 0 (disabled) \n\ + Divide Clock by 8 (CKDIV8): 0 (disabled) \n\ + Clock out B0 (CKOUT) 0 (disabled) \n\ + Clock select (CKSEL3:0): 0010 (Ext Crystal 8.0 MHz) \n\ + Startup time (SUT): 01 (4.1 ms)\n\n") + + set(AVR_X_FUSE 0xff) + set(AVR_H_FUSE 0xdf) set(AVR_L_FUSE 0xd2) + set(AVR_MCU ${ARCH}) - + set(ARCH_FAMILY ${ARCH_FAMILY_ATMEGA328P}) + set(ARCH_TYPE AVR) set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/cmake/generic-gcc-avr.cmake) - set (PROJECT_OUT_TARGET ${PROJECT_TARGET}.elf) + set (FINAL_TARGET ${TARGET}.elf) -elseif(ARCH MATCHES atmega2560) - message(STATUS "setting up for atmega2560") - set(AVF_H_FUSE 0x99) +elseif(ARCH MATCHES atmega640 OR ARCH MATCHES atmega1280 OR ARCH MATCHES atmega2560) + set(FUSE_NOTES "Setting up for ${ARCH}: \n\n\ + Fuses: EXTENDED = 0xFD, HIGH = 0x98, LOW = 0xFD\n\n\ + Brownout detect level: 111 (disabled) \n\ + On-chip Debug (OCD): 0 (disabled) \n\ + JTAGEN: 1 (enabled) \n\ + SPIEN: 1 (enabled) \n\ + Watchdog (WDTON): 0 (disabled) \n\ + Save EEPROM (EESAVE): 0 (disabled) \n\ + Boot section / size (BOOTZ): 00 (size=4096/start=$1F000) \n\ + Boot Reset Vector (BOOTRST): 0 (enabled) \n\ + Divide Clock by 8 (CKDIV8): 0 (disabled) \n\ + Clock out E7 (CKOUT) 0 (disabled) \n\ + Clock select (CKSEL0:3): 0111 (Full Swing Osc.) \n\ + Startup time (SUT): 10 (4.1 ms)\n\n") + + set(AVR_X_FUSE 0xff) + set(AVR_H_FUSE 0x99) set(AVR_L_FUSE 0xe7) + set(AVR_MCU ${ARCH}) + set(ARCH_FAMILY ${ARCH_FAMILY_ATMEGA2560}) + set(ARCH_TYPE AVR) set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/cmake/generic-gcc-avr.cmake) - set (PROJECT_OUT_TARGET ${PROJECT_TARGET}.elf) + set (FINAL_TARGET ${TARGET}.elf) endif() @@ -46,7 +83,7 @@ set (PROJECT_EXECUTABLE_TARGET_NAME ${PROJECT_TARGET_NAME}) if(ARCH MATCHES test) add_subdirectory(test) else() - if((ARCH MATCHES atmega328p) OR (ARCH MATCHES atmega2560)) + if(ARCH_TYPE MATCHES AVR) set (PROJECT_EXECUTABLE_TARGET_NAME ${PROJECT_TARGET_NAME}.elf) function(custom_add_library EXECUTABLE_NAME) diff --git a/firmware/asdf/cmake/generic-gcc-avr.cmake b/firmware/asdf/cmake/generic-gcc-avr.cmake index 064c14b..2ceaa6b 100644 --- a/firmware/asdf/cmake/generic-gcc-avr.cmake +++ b/firmware/asdf/cmake/generic-gcc-avr.cmake @@ -50,6 +50,15 @@ set(CMAKE_SYSTEM_PROCESSOR avr) set(CMAKE_C_COMPILER ${AVR_CC}) set(CMAKE_CXX_COMPILER ${AVR_CXX}) +#Flags used by the C compiler during DEBUG builds. +set(CMAKE_C_FLAGS_DEBUG "-O0 -g") +#Flags used by the C compiler during MINSIZEREL builds. +set(CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG") +#Flags used by the C compiler during RELEASE builds. +set(CMAKE_C_FLAGS_RELEASE "-O1 -DNDEBUG") +#Flags used by the C compiler during RELWITHDEBINFO builds. +set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O1 -g -DNDEBUG") + ########################################################################## # c_toolchain_flags # - Adds a list of compiler-specific flags to the CFLAGS variable in the @@ -68,7 +77,6 @@ function(c_toolchain_flags) -fdata-sections -fpack-struct -fshort-enums - -O2 -Wall -Wextra -Wpointer-arith @@ -106,8 +114,8 @@ endmacro(optimization_off) macro(optimization_full) - set(CMAKE_CFLAGS_RELEASE "-O3" "-NDEBUG") - set(CMAKE_CFLAGS "-O3" "-NDEBUG") + set(CMAKE_CFLAGS_RELEASE "-O1" "-NDEBUG") + set(CMAKE_CFLAGS "-O1" "-NDEBUG") endmacro(optimization_full) ########################################################################## diff --git a/firmware/asdf/make-targets.sh b/firmware/asdf/make-targets.sh index 13b713c..7a3403d 100755 --- a/firmware/asdf/make-targets.sh +++ b/firmware/asdf/make-targets.sh @@ -16,7 +16,11 @@ add_valid_target() { add_valid_target test add_valid_target atmega328p +add_valid_target atmega168p +add_valid_target atmega88p add_valid_target atmega2560 +add_valid_target atmega1280 +add_valid_target atmega640 check_valid_target() { @@ -58,17 +62,9 @@ build_arch() { local target_arch="$1" local hardware_sig="$2" - if [[ ! -d "build-$target_arch" ]] - then - mkdir "build-$target_arch" - fi + cmake -S . -B "build-$target_arch" -G "$GENERATOR" -DCMAKE_INSTALL_PREFIX=".." -DARCH="$target_arch" \ + -DCMAKE_BUILD_TYPE="$BUILD_TYPE" - if [[ -d "build-$target_arch" ]] - then - (cd "build-$target_arch" \ - && cmake -G "$GENERATOR" -DCMAKE_INSTALL_PREFIX=".." -DARCH="$target_arch" \ - -DCMAKE_BUILD_TYPE="$BUILD_TYPE" ..) - fi } deploy_arch() { diff --git a/firmware/asdf/src/CMakeLists.txt b/firmware/asdf/src/CMakeLists.txt index 99cda5b..fc96365 100644 --- a/firmware/asdf/src/CMakeLists.txt +++ b/firmware/asdf/src/CMakeLists.txt @@ -46,8 +46,8 @@ message("**********************\n\n") set (PROJECT_BIN_DIR ${CMAKE_CURRENT_BINARY_DIR}) -configure_file(${PROJECT_SRC_DIR}/Arch/asdf_arch_${ARCH}.h ${CMAKE_CURRENT_BINARY_DIR}/asdf_arch.h COPYONLY) -configure_file(${PROJECT_SRC_DIR}/Arch/asdf_arch_${ARCH}.c ${CMAKE_CURRENT_BINARY_DIR}/asdf_arch.c COPYONLY) +configure_file(${PROJECT_SRC_DIR}/Arch/asdf_arch_${ARCH_FAMILY}.h ${CMAKE_CURRENT_BINARY_DIR}/asdf_arch.h COPYONLY) +configure_file(${PROJECT_SRC_DIR}/Arch/asdf_arch_${ARCH_FAMILY}.c ${CMAKE_CURRENT_BINARY_DIR}/asdf_arch.c COPYONLY) configure_file(${PROJECT_SRC_DIR}/asdf_keymap_setup.c.in ${CMAKE_CURRENT_BINARY_DIR}/asdf_keymap_setup.c) configure_file(${PROJECT_SRC_DIR}/asdf_keymap_setup.h.in ${CMAKE_CURRENT_BINARY_DIR}/asdf_keymap_setup.h)