|
@@ -1,7 +1,7 @@
|
|
|
cmake_minimum_required(VERSION 3.15)
|
|
|
include(cmake/Utilities.cmake)
|
|
|
|
|
|
-set (CMAKE_CXX_STANDARD 11)
|
|
|
+set (CMAKE_CXX_STANDARD 17)
|
|
|
|
|
|
MESSAGE(WARNING "
|
|
|
***************** YOUR ATTENTION PLEASE *****************
|
|
@@ -54,6 +54,23 @@ endif()
|
|
|
# include symbols
|
|
|
add_compile_options(-g)
|
|
|
|
|
|
+#
|
|
|
+# Firmware - get file lists.
|
|
|
+#
|
|
|
+file(GLOB FW_SOURCES RELATIVE ${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/Firmware/*.c*)
|
|
|
+file(GLOB FW_HEADERS RELATIVE ${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/Firmware/*.h*)
|
|
|
+foreach(_FILE ${FW_SOURCES})
|
|
|
+ get_filename_component(_BASE ${_FILE} NAME)
|
|
|
+ set_property(SOURCE ${_FILE} APPEND_STRING PROPERTY COMPILE_FLAGS "-frandom-seed=${_BASE}.o")
|
|
|
+endforeach()
|
|
|
+
|
|
|
+file(GLOB AVR_SOURCES RELATIVE ${PROJECT_SOURCE_DIR} ${PRUSA_BOARDS_DIR}/cores/prusa_einsy_rambo/*.c*)
|
|
|
+
|
|
|
+foreach(_FILE ${AVR_SOURCES})
|
|
|
+ get_filename_component(_BASE ${_FILE} NAME)
|
|
|
+ set_property(SOURCE ${_FILE} APPEND_STRING PROPERTY COMPILE_FLAGS "-frandom-seed=core/${_BASE}.o")
|
|
|
+endforeach()
|
|
|
+
|
|
|
# optimizations
|
|
|
if(CMAKE_CROSSCOMPILING)
|
|
|
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
@@ -63,17 +80,28 @@ if(CMAKE_CROSSCOMPILING)
|
|
|
endif()
|
|
|
|
|
|
# mcu related settings
|
|
|
- set(MCU_FLAGS -mmcu=atmega2560 -DF_CPU=16000000L)
|
|
|
+ set(MCU_FLAGS -mmcu=atmega2560 -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_PRUSA_EINSY_RAMBO -DARDUINO_ARCH_AVR)
|
|
|
add_compile_options(${MCU_FLAGS})
|
|
|
- add_link_options(${MCU_FLAGS})
|
|
|
|
|
|
- # split and gc sections
|
|
|
- add_compile_options(-ffunction-sections -fdata-sections)
|
|
|
- add_link_options(-Wl,--gc-sections)
|
|
|
+ add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fno-exceptions>)
|
|
|
+ add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fno-threadsafe-statics>)
|
|
|
+ add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fno-rtti>)
|
|
|
+ add_compile_options(-Wall -Wextra -Wno-expansion-to-defined -ffunction-sections -fdata-sections -MMD -flto -fno-fat-lto-objects)
|
|
|
+
|
|
|
+ # split and gc sections
|
|
|
+ add_link_options(-Os -g -flto -Wl,--gc-sections -mmcu=atmega2560 -Wl,-u,vfprintf -lprintf_flt -lm )
|
|
|
+
|
|
|
+ # Create this target before we apply the GC options
|
|
|
+ add_library(avr_core STATIC ${AVR_SOURCES})
|
|
|
+ target_include_directories(avr_core PRIVATE
|
|
|
+ ${PRUSA_BOARDS_DIR}/cores/prusa_einsy_rambo/
|
|
|
+ ${PRUSA_BOARDS_DIR}/variants/prusa_einsy_rambo/
|
|
|
+ )
|
|
|
+
|
|
|
+
|
|
|
|
|
|
# disable exceptions and related metadata
|
|
|
- add_compile_options(-fno-exceptions -fno-unwind-tables)
|
|
|
- add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-fno-rtti>)
|
|
|
+ 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")
|
|
@@ -84,20 +112,16 @@ else()
|
|
|
endif()
|
|
|
|
|
|
# enable all warnings (well, not all, but some)
|
|
|
-add_compile_options(-Wall -Wsign-compare)
|
|
|
-add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-std=c++14>)
|
|
|
+add_compile_options(-Wsign-compare)
|
|
|
+add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-std=gnu++17>)
|
|
|
+add_compile_options($<$<COMPILE_LANGUAGE:C>:-std=gnu11>)
|
|
|
|
|
|
# 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.
|
|
|
-#
|
|
|
-file(GLOB FW_SOURCES RELATIVE ${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/Firmware/*.c*)
|
|
|
-file(GLOB FW_HEADERS RELATIVE ${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/Firmware/*.h*)
|
|
|
-file(GLOB AVR_SOURCES RELATIVE ${PROJECT_SOURCE_DIR} ${PRUSA_BOARDS_DIR}/cores/prusa_einsy_rambo/*.c*)
|
|
|
+
|
|
|
|
|
|
# Setup language resources:
|
|
|
# file(GLOB LANG_VARIANTS RELATIVE ${PROJECT_SOURCE_DIR}/lang/po ${PROJECT_SOURCE_DIR}/lang/po/Firmware_??.po)
|
|
@@ -106,12 +130,6 @@ file(GLOB AVR_SOURCES RELATIVE ${PROJECT_SOURCE_DIR} ${PRUSA_BOARDS_DIR}/cores/p
|
|
|
# list(SORT LANG_VARIANTS)
|
|
|
# message("Languages found: ${LANG_VARIANTS}")
|
|
|
|
|
|
-add_library(avr_core STATIC ${AVR_SOURCES})
|
|
|
-target_include_directories(avr_core PRIVATE
|
|
|
- ${PRUSA_BOARDS_DIR}/cores/prusa_einsy_rambo/
|
|
|
- ${PRUSA_BOARDS_DIR}/variants/prusa_einsy_rambo/
|
|
|
-)
|
|
|
-target_compile_options(avr_core PUBLIC -mmcu=atmega2560)
|
|
|
|
|
|
# Meta target to build absolutely everything
|
|
|
add_custom_target(ALL_FIRMWARE)
|
|
@@ -131,7 +149,7 @@ function(fw_add_variant variant_name)
|
|
|
|
|
|
add_executable(${variant_name} ${FW_SOURCES} ${FW_HEADERS} ${VARIANT_CFG_FILE})
|
|
|
|
|
|
- set_target_properties(${variant_name} PROPERTIES CXX_STANDARD 14)
|
|
|
+ set_target_properties(${variant_name} PROPERTIES CXX_STANDARD 17)
|
|
|
|
|
|
target_include_directories(${variant_name} PRIVATE Firmware
|
|
|
${PRUSA_BOARDS_DIR}/cores/prusa_einsy_rambo/
|
|
@@ -139,6 +157,8 @@ function(fw_add_variant variant_name)
|
|
|
${VARIANT_CFG_DIR} # Include the header for this variant.
|
|
|
)
|
|
|
|
|
|
+ target_link_libraries(${variant_name} avr_core)
|
|
|
+
|
|
|
# # configure linker script
|
|
|
set(LINKER_SCRIPT ${PRUSA_BOARDS_DIR}/ldscripts/avr6.xn)
|
|
|
target_link_options(${variant_name} PUBLIC -Wl,-T,${LINKER_SCRIPT})
|
|
@@ -167,15 +187,19 @@ function(fw_add_variant variant_name)
|
|
|
|
|
|
target_compile_options(${variant_name} PRIVATE) # turn this on for lolz -Wdouble-promotion)
|
|
|
target_compile_definitions(${variant_name} PRIVATE
|
|
|
- ARDUINO=10600
|
|
|
- __AVR_ATmega2560__
|
|
|
CMAKE_LANG_CONTROL
|
|
|
)
|
|
|
- target_link_libraries(${variant_name} avr_core)
|
|
|
+
|
|
|
if (SECONDARY_LANGUAGES)
|
|
|
target_compile_definitions(${variant_name} PUBLIC LANG_MODE=1)
|
|
|
else()
|
|
|
target_compile_definitions(${variant_name} PUBLIC LANG_MODE=0)
|
|
|
+ add_custom_command(
|
|
|
+ TARGET ${variant_name}
|
|
|
+ POST_BUILD
|
|
|
+ COMMAND ${CMAKE_OBJCOPY} -O ihex ${CMAKE_BINARY_DIR}/${variant_name} ${CMAKE_BINARY_DIR}/${variant_name}-EN_ONLY.hex
|
|
|
+ COMMENT "Generating ${variant_name} hex"
|
|
|
+ )
|
|
|
add_dependencies(ALL_FIRMWARE "${variant_name}")
|
|
|
return() #Done, if no languages there's nothing else to do.
|
|
|
endif()
|
|
@@ -218,20 +242,11 @@ function(fw_add_variant variant_name)
|
|
|
endforeach()
|
|
|
string(FIND ${variant_name} "MK3" HAS_XFLASH)
|
|
|
if (${HAS_XFLASH} GREATER_EQUAL 0)
|
|
|
- if (WIN32)
|
|
|
- STRING(REPLACE ";" " + " LANG_CMD_TMP "${LANG_BINS}")
|
|
|
- add_custom_command( OUTPUT ${LANG_FINAL_BIN}
|
|
|
- COMMAND copy /b ${LANG_CMD_TMP} ${LANG_FINAL_BIN}
|
|
|
- DEPENDS ${LANG_BINS}
|
|
|
- COMMENT "Merging language binaries (W32)"
|
|
|
- )
|
|
|
- else()
|
|
|
- add_custom_command( OUTPUT ${LANG_FINAL_BIN}
|
|
|
- COMMAND cat ${LANG_BINS} > ${LANG_FINAL_BIN}
|
|
|
- DEPENDS ${LANG_BINS}
|
|
|
- COMMENT "Merging language binaries (Non-W32)"
|
|
|
- )
|
|
|
- endif()
|
|
|
+ add_custom_command( OUTPUT ${LANG_FINAL_BIN}
|
|
|
+ COMMAND ${CMAKE_COMMEAND} -E cat ${LANG_BINS} > ${LANG_FINAL_BIN}
|
|
|
+ DEPENDS ${LANG_BINS}
|
|
|
+ COMMENT "Merging language binaries (Non-W32)"
|
|
|
+ )
|
|
|
add_custom_command( OUTPUT ${LANG_FINAL_BIN}
|
|
|
COMMAND ${CMAKE_COMMAND} -DLANG_MAX_SIZE=${LANG_BIN_MAX}
|
|
|
-DLANG_FILE=${LANG_FINAL_BIN}
|
|
@@ -244,14 +259,10 @@ function(fw_add_variant variant_name)
|
|
|
COMMENT "Generating Hex for language data"
|
|
|
)
|
|
|
set(LANG_HEX ${CMAKE_BINARY_DIR}/${variant_name}-lang.hex)
|
|
|
- if (WIN32)
|
|
|
- SET(TEXT_MERGE_CMD "type")
|
|
|
- else()
|
|
|
- SET(TEXT_MERGE_CMD "cat")
|
|
|
- endif()
|
|
|
+
|
|
|
add_custom_target(${variant_name}-languages
|
|
|
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/${variant_name}.hex ${LANG_HEX}
|
|
|
- COMMAND ${TEXT_MERGE_CMD} ${LANG_FINAL_HEX} >> ${LANG_HEX}
|
|
|
+ COMMAND ${CMAKE_COMMAND} -E cat ${LANG_FINAL_HEX} >> ${LANG_HEX}
|
|
|
COMMENT "Generating final ${variant_name}-lang.hex"
|
|
|
BYPRODUCTS ${LANG_HEX}
|
|
|
DEPENDS ${LANG_FINAL_HEX}
|