-
Notifications
You must be signed in to change notification settings - Fork 62
Description
If we build with the verbose output we can see it at the end of each file compilation:
$ python build.py --verbose
...
[ 89%] Building CXX object CMakeFiles/MICROBIT.dir/source/main.cpp.obj
/Users/microbit-carlos/opt/gcc-arm-none-eabi-10.3-2021.10/bin/arm-none-eabi-g++ -DMICROBIT_EXPORTS -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/source/samples" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-v2/inc" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-v2/inc/bluetooth" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-v2/inc/compat" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-v2/model" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-nrf52/inc" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-nrf52/inc/cmsis" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-nrf52/nrfx/mdk" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-nrf52/nrfx" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-nrf52/nrfx/templates" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-nrf52/nrfx/templates/nRF52833" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-nrf52/nrfx/drivers/include" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-nrf52/nrfx/drivers/src" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-core/./inc/core" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-core/./inc/driver-models" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-core/./inc/drivers" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-core/./inc/streams" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-core/./inc/types" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/../codal-nrf52/nrfx/hal" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/sdk_config" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK_mods" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/libraries/pwr_mgmt" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/libraries/sortlist" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/libraries/strerror" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/softdevice/common" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/libraries/crc32" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/libraries/bootloader/dfu" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/libraries/util" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/ble/common" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/libraries/balloc" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/ble/peer_manager" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/libraries/ringbuf" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/libraries/timer" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/libraries/log" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/ble/nrf_ble_gatt" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/libraries/bootloader" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/libraries/fstorage" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/libraries/experimental_section_vars" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/softdevice/s113/headers" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/libraries/mutex" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/libraries/delay" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/libraries/bootloader/ble_dfu" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/libraries/atomic_fifo" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/libraries/atomic" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/libraries/memobj" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/libraries/fds" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/libraries/atomic_flags" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/softdevice/s113/headers/nrf52" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/ble/ble_services/ble_dfu" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/external/fprintf" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/libraries/svc" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/libraries/log/src" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/libraries/codal-microbit-nrf5sdk/nRF5SDK/components/ble/ble_services/ble_dis" -Wno-expansion-to-defined -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=softfp -fno-exceptions -fno-unwind-tables -ffunction-sections -fdata-sections -Wall -Wextra -Wno-unused-parameter -std=c++11 -fwrapv -fno-rtti -fno-threadsafe-statics -fno-exceptions -fno-unwind-tables -Wl,--gc-sections -Wl,--sort-common -Wl,--sort-section=alignment -Wno-array-bounds -include "/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/build/codal_extra_definitions.h" -I"/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/utils/cmake/toolchains/ARM_GCC" -O2 -g -DNDEBUG -DAPP_TIMER_V2 -DAPP_TIMER_V2_RTC1_ENABLED -DNRF_DFU_TRANSPORT_BLE=1 -DNRF52833_XXAA -DNRF52833 -DTARGET_MCU_NRF52833 -DNRF5 -DNRF52833 -D__CORTEX_M4 -DS113 -DTOOLCHAIN_GCC -D__START=target_start -MMD -MT CMakeFiles/MICROBIT.dir/source/main.cpp.obj -MF DEPFILE -o CMakeFiles/MICROBIT.dir/source/main.cpp.obj -c "/Users/microbit-carlos/workspace/tmp/untitled folder/microbit-v2-samples/source/main.cpp"
The interesting part is this bit:
-O2 -g -DNDEBUG
Which I believe is the CMake flags configured for the RelWithDebInfo
CMake build type (the default). To test this, we can add these messages at the top of the CMakefile.txt file and see the result:
message("!!!! CMAKE_BUILD_TYPE is ${CMAKE_BUILD_TYPE}")
message("!!!! CMAKE_CXX_FLAGS_DEBUG default value is ${CMAKE_CXX_FLAGS_DEBUG}")
message("!!!! CMAKE_CXX_FLAGS_RELEASE default value is ${CMAKE_CXX_FLAGS_RELEASE}")
message("!!!! CMAKE_CXX_FLAGS_RELWITHDEBINFO default value is ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
message("!!!! CMAKE_CXX_FLAGS_MINSIZEREL default value is ${CMAKE_CXX_FLAGS_MINSIZEREL}")
Output:
!!!! CMAKE_BUILD_TYPE is RelWithDebInfo
!!!! CMAKE_CXX_FLAGS_DEBUG default value is -g
!!!! CMAKE_CXX_FLAGS_RELEASE default value is -O3 -DNDEBUG
!!!! CMAKE_CXX_FLAGS_RELWITHDEBINFO default value is -O2 -g -DNDEBUG
!!!! CMAKE_CXX_FLAGS_MINSIZEREL default value is -Os -DNDEBUG
The microbit-v2-samples repo is meant to be setting this value with CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT
:
lancaster-university/microbit-v2-samples/utils/cmake/toolchains/ARM_GCC/compiler-flags.cmake#L42
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "-Os -g -gdwarf-3 -DNDEBUG")
But we have two issues:
CMAKE_<lang>_FLAGS_<config>_INIT
was only introduced in CMake 3.11, and we support 3.6+, so in those versionsCMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT
is not doing anything- It doesn't seem to be working anyway, as proven by this bug report
- Also mentioned by Rob Moran in this comment that changing the values in that variable didn't work Configure debug info to DWARF v4. microbit-v2-samples#82 (comment)
So we should probably explicitly set the build type to RelWithDebInfo
(while still being configurable via CMake flag) and correctly configure optimisation flags by using CMAKE_<lang>_FLAGS_<config>
instead of CMAKE_<lang>_FLAGS_<config>_INIT
, but the question might be:
Do we want to move to -Os
, if it might change the memory footprint?
Usually the tradeoffs for flash might be performance (less inlining and things like that), but is it possible it might increase RAM usage at this stage?