From 655b403c140f8b648639502140d465c31e85236f Mon Sep 17 00:00:00 2001 From: Yuri D'Elia Date: Sat, 1 Oct 2022 19:01:32 +0200 Subject: [PATCH] cmake: Uniform target compile/link flags --- CMakeLists.txt | 73 +++++++++++++++++++++++--------------------------- 1 file changed, 34 insertions(+), 39 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6223959ef..a3813e149 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -94,8 +94,18 @@ endif() # Global Compiler & Linker Configuration # -# include symbols -add_compile_options(-g) +# enable warnings +add_compile_options(-Wall -Wextra -Wno-expansion-to-defined -Wsign-compare) + +# default standards for all targets +set(CMAKE_C_STANDARD 11) +set(CMAKE_CXX_STANDARD 17) + +# support _DEBUG macro (some code uses to recognize debug builds) +if(CMAKE_BUILD_TYPE STREQUAL "Debug") + add_compile_definitions(_DEBUG) +endif() + # # Firmware - get file lists. @@ -213,25 +223,35 @@ foreach(_FILE ${AVR_SOURCES}) set_property(SOURCE ${_FILE} APPEND_STRING PROPERTY COMPILE_FLAGS "-frandom-seed=core/${_BASE}.o") endforeach() -# optimizations +# +# Target configuration +# if(CMAKE_CROSSCOMPILING) - if(CMAKE_BUILD_TYPE STREQUAL "Debug") - add_compile_options(-Og) - else() - add_compile_options(-Os) - endif() + # default optimization flags + set(CMAKE_CXX_FLAGS_DEBUG "-Og -g") + set(CMAKE_CXX_FLAGS_RELEASE "-Os -g -DNDEBUG") + set(CMAKE_C_FLAGS_DEBUG ${CMAKE_CXX_FLAGS_DEBUG}) + set(CMAKE_C_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE}) - # mcu related settings - set(MCU_FLAGS -mmcu=atmega2560 -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_PRUSA_EINSY_RAMBO -DARDUINO_ARCH_AVR) - add_compile_options(${MCU_FLAGS}) + # mcu and target-related settings + add_compile_options(-mmcu=atmega2560 -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_PRUSA_EINSY_RAMBO -DARDUINO_ARCH_AVR) + add_link_options(-mmcu=atmega2560 -Wl,-u,vfprintf -lprintf_flt -lm) - add_compile_options($<$:-fno-exceptions>) + # disable some C++ language features add_compile_options($<$:-fno-threadsafe-statics>) add_compile_options($<$:-fno-rtti>) - add_compile_options(-Wall -Wextra -Wno-expansion-to-defined -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects) + + # disable exceptions + add_compile_options($<$:-fno-exceptions>) + add_compile_options($<$:-fno-unwind-tables>) # split and gc sections - add_link_options(-Os -g -flto -Wl,--gc-sections -mmcu=atmega2560 -Wl,-u,vfprintf -lprintf_flt -lm ) + add_compile_options(-ffunction-sections -fdata-sections) + add_link_options(-Wl,--gc-sections) + + # LTO (with custom options) + add_compile_options(-flto -fno-fat-lto-objects) + add_link_options(-flto) # Create this target before we apply the GC options add_library(avr_core STATIC ${AVR_SOURCES}) @@ -239,31 +259,8 @@ if(CMAKE_CROSSCOMPILING) ${PRUSA_BOARDS_DIR}/cores/prusa_einsy_rambo/ ${PRUSA_BOARDS_DIR}/variants/prusa_einsy_rambo/ ) - - - - # disable exceptions and related metadata - add_compile_options(-fno-unwind-tables) - add_link_options(-Wl,--defsym,__exidx_start=0,--defsym,__exidx_end=0) -else() - if(CMAKE_BUILD_TYPE STREQUAL "Debug") - add_compile_options(-O0) - else() - add_compile_options(-O2) - endif() endif() -# enable all warnings (well, not all, but some) -add_compile_options(-Wsign-compare) -add_compile_options($<$:-std=gnu11>) - -# support _DEBUG macro (some code uses to recognize debug builds) -if(CMAKE_BUILD_TYPE STREQUAL "Debug") - add_compile_definitions(_DEBUG) -endif() - - - # Setup language resources: # file(GLOB LANG_VARIANTS RELATIVE ${PROJECT_SOURCE_DIR}/lang/po ${PROJECT_SOURCE_DIR}/lang/po/Firmware_??.po) # string(REPLACE "Firmware_" "" LANG_VARIANTS "${LANG_VARIANTS}") @@ -281,8 +278,6 @@ add_dependencies(ALL_FIRMWARE ALL_ENGLISH ALL_MULTILANG) function(add_base_binary variant_name) add_executable(${variant_name} ${FW_SOURCES} ${FW_HEADERS} ${VARIANT_CFG_FILE}) - set_target_properties(${variant_name} PROPERTIES CXX_STANDARD 17) - target_include_directories(${variant_name} PRIVATE ${PRUSA_BOARDS_DIR}/cores/prusa_einsy_rambo/ ${PRUSA_BOARDS_DIR}/variants/prusa_einsy_rambo/