Streamline build and add more processor variants

- CMakeLists.txt, src/CMakeLists.txt: user ARCH for the actual
processor, and ARCH_FAMILY to specify the arch_*.[ch] files.

- generic-gcc-avr.cmake: fix optimizations to O1 or O0

- make-targets.sh: simplify cmake invocation, eliminate mkdir+cd,
instead use cmake flags to specify directory names and source dir.
This commit is contained in:
Dave 2022-12-30 02:31:02 -06:00
parent 27f2616d22
commit ca8cff670a
4 changed files with 66 additions and 25 deletions

View File

@ -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)

View File

@ -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)
##########################################################################

View File

@ -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() {

View File

@ -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)