diff --git a/utils/cmake/buildtools/codal.cmake b/utils/cmake/buildtools/codal.cmake index ea8b23c5..99377392 100644 --- a/utils/cmake/buildtools/codal.cmake +++ b/utils/cmake/buildtools/codal.cmake @@ -25,6 +25,11 @@ if(${device.generate_hex}) include(${TOOLCHAIN_FOLDER}/hex-generator.cmake) endif() +# import toolchain show build size command +if(${device.show_size}) + include(${TOOLCHAIN_FOLDER}/size-info.cmake) +endif() + # post process command hook, depends on the hex file generated by the build system. if("${device.post_process.command}" STRGREATER "" OR "${device.post_process}" STRGREATER "") diff --git a/utils/cmake/toolchains/ARM_GCC/compiler-flags.cmake b/utils/cmake/toolchains/ARM_GCC/compiler-flags.cmake index 16aacaa8..4360ede4 100644 --- a/utils/cmake/toolchains/ARM_GCC/compiler-flags.cmake +++ b/utils/cmake/toolchains/ARM_GCC/compiler-flags.cmake @@ -36,6 +36,10 @@ set(CMAKE_CXX_CREATE_STATIC_LIBRARY " -cr -Wl,-Map,.map -Wl,--start-group -lnosys -lstdc++ -lsupc++ -lm -lc -lgcc -lstdc++ -lsupc++ -lm -lc -lgcc -Wl,--end-group --specs=nano.specs -o ") +if(${device.show_size}) + set(CMAKE_CXX_LINK_EXECUTABLE "${CMAKE_CXX_LINK_EXECUTABLE} -Wl,--print-memory-usage") +endif() + set(CMAKE_CXX_FLAGS_DEBUG_INIT "-g -gdwarf-3") set(CMAKE_CXX_FLAGS_MINSIZEREL_INIT "-Os -DNDEBUG") set(CMAKE_CXX_FLAGS_RELEASE_INIT "-Os -DNDEBUG") diff --git a/utils/cmake/toolchains/ARM_GCC/size-info.cmake b/utils/cmake/toolchains/ARM_GCC/size-info.cmake new file mode 100644 index 00000000..a2922c97 --- /dev/null +++ b/utils/cmake/toolchains/ARM_GCC/size-info.cmake @@ -0,0 +1,6 @@ +add_custom_command( + TARGET ${device.device} + COMMAND "${ARM_NONE_EABI_SIZE}" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${device.device}" + DEPENDS ${device.device} + COMMENT "Print total size info:" +) diff --git a/utils/cmake/toolchains/ARM_GCC/toolchain.cmake b/utils/cmake/toolchains/ARM_GCC/toolchain.cmake index ad68a6ac..7859e799 100644 --- a/utils/cmake/toolchains/ARM_GCC/toolchain.cmake +++ b/utils/cmake/toolchains/ARM_GCC/toolchain.cmake @@ -3,6 +3,7 @@ find_program(ARM_NONE_EABI_AR arm-none-eabi-ar) find_program(ARM_NONE_EABI_GCC arm-none-eabi-gcc) find_program(ARM_NONE_EABI_GPP arm-none-eabi-g++) find_program(ARM_NONE_EABI_OBJCOPY arm-none-eabi-objcopy) +find_program(ARM_NONE_EABI_SIZE arm-none-eabi-size) set(CMAKE_OSX_SYSROOT "/") set(CMAKE_OSX_DEPLOYMENT_TARGET "") @@ -19,7 +20,7 @@ if(CMAKE_VERSION VERSION_LESS "3.5.0") else() # from 3.5 the force_compiler macro is deprecated: CMake can detect # arm-none-eabi-gcc as being a GNU compiler automatically - set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY") + set(CMAKE_TRY_COMPILE_TARGET_TYPE "STATIC_LIBRARY") set(CMAKE_C_COMPILER "${ARM_NONE_EABI_GCC}") set(CMAKE_CXX_COMPILER "${ARM_NONE_EABI_GPP}") endif() diff --git a/utils/cmake/toolchains/AVR_GCC/size-info.cmake b/utils/cmake/toolchains/AVR_GCC/size-info.cmake new file mode 100644 index 00000000..e57f00e2 --- /dev/null +++ b/utils/cmake/toolchains/AVR_GCC/size-info.cmake @@ -0,0 +1 @@ +message(WARNING "The 'show size' CODAL target option hasn't been implemented for AVR_GCC.") diff --git a/utils/cmake/toolchains/XTENSA_GCC/size-info.cmake b/utils/cmake/toolchains/XTENSA_GCC/size-info.cmake new file mode 100644 index 00000000..5c20285c --- /dev/null +++ b/utils/cmake/toolchains/XTENSA_GCC/size-info.cmake @@ -0,0 +1 @@ +message(WARNING "The 'show size' CODAL target option hasn't been implemented for XTENSA_GCC.")