Open microbit-carlos opened 10 months ago
The -O2 flag can be seen in CI as well simply by building with the --verbose
flag as well:
-O2
Changing for
and using bloaty to checkout the size diff, we might be able to get 13 KBs of flash:
$ docker run --rm -v $(pwd):/home ghcr.io/carlosperate/bloaty -d sections --domain=vm -s vm -n 0 build/MICROBIT -- build-02/MICROBIT
VM SIZE
--------------
-1.2% -4 .data
-10.9% -13.3Ki .text
-3.5% -13.3Ki TOTAL
$ docker run --rm -v $(pwd):/home ghcr.io/carlosperate/bloaty -d compileunits --domain=vm -s vm -n 0 build/MICROBIT -- build-02/MICROBIT
VM SIZE
--------------
+20e2% +2.75Ki ./microbit-v2-samples/source/samples/OOB.cpp
+1.4% +76 ./microbit-v2-samples/source/main.cpp
+28% +20 ./microbit-v2-samples/libraries/codal-microbit-v2/source/bluetooth/MicroBitBLEServices.cpp
+16% +18 ./microbit-v2-samples/libraries/codal-microbit-v2/source/PacketBuffer.cpp
+1.4% +4 ./microbit-v2-samples/libraries/codal-core/source/streams/MemorySource.cpp
+3.0% +2 [section .bss]
-0.3% -2 ./microbit-v2-samples/libraries/codal-core/source/streams/StreamNormalizer.cpp
-1.2% -2 ./microbit-v2-samples/libraries/codal-microbit-v2/source/MicroBitCompass.cpp
-2.5% -4 [section .data]
-0.5% -6 ./microbit-v2-samples/libraries/codal-core/source/streams/Synthesizer.cpp
-11.5% -6 ./microbit-v2-samples/libraries/codal-microbit-v2/source/MicroBitCompat.cpp
-1.7% -6 ./microbit-v2-samples/libraries/codal-microbit-v2/source/MicroBitLog.cpp
-7.7% -6 ./microbit-v2-samples/libraries/codal-microbit-v2/source/MicroBitRadioDatagram.cpp
-0.6% -8 ./microbit-v2-samples/libraries/codal-microbit-v2/source/MicroBitAudio.cpp
-3.3% -8 ./microbit-v2-samples/libraries/codal-microbit-v2/source/MicroBitThermometer.cpp
-1.3% -8 ./microbit-v2-samples/libraries/codal-nrf52/source/peripheral_alloc.cpp
[DEL] -8 ./microbit-v2-samples/source/samples/MicrophoneTest.cpp
-7.7% -10 ./microbit-v2-samples/libraries/codal-core/source/types/RefCounted.cpp
-19.2% -10 ./microbit-v2-samples/libraries/codal-microbit-v2/source/FSCache.cpp
-5.2% -12 ./microbit-v2-samples/libraries/codal-core/source/core/CodalCompat.cpp
-14.0% -12 ./microbit-v2-samples/libraries/codal-core/source/core/MemberFunctionCallback.cpp
-13.5% -14 ./microbit-v2-samples/libraries/codal-core/source/driver-models/AbstractButton.cpp
-2.9% -14 ./microbit-v2-samples/libraries/codal-microbit-v2/source/MicroBitAccelerometer.cpp
-5.9% -16 ./microbit-v2-samples/libraries/codal-microbit-v2/source/MicroBitFlash.cpp
-1.6% -16 ./microbit-v2-samples/libraries/codal-microbit-v2/source/SoundSynthesizerEffects.cpp
-4.3% -18 ./microbit-v2-samples/libraries/codal-core/source/types/ManagedBuffer.cpp
-10.7% -18 ./microbit-v2-samples/libraries/codal-microbit-v2/source/MicroBitDisplay.cpp
-13.1% -28 ./microbit-v2-samples/libraries/codal-core/source/core/CodalListener.cpp
-15.5% -32 ./microbit-v2-samples/libraries/codal-core/source/driver-models/Display.cpp
-3.2% -32 ./microbit-v2-samples/libraries/codal-microbit-v2/source/MicroBitRadio.cpp
-7.9% -34 ./microbit-v2-samples/libraries/codal-nrf52/source/NRF52TouchSensor.cpp
-37.3% -38 ./microbit-v2-samples/libraries/codal-core/source/driver-models/PinPeripheral.cpp
-6.5% -38 ./microbit-v2-samples/libraries/codal-core/source/streams/StreamRecording.cpp
-17.8% -38 ./microbit-v2-samples/libraries/codal-core/source/types/CoordinateSystem.cpp
-9.6% -38 ./microbit-v2-samples/libraries/codal-core/source/types/ManagedString.cpp
-5.2% -40 ./microbit-v2-samples/libraries/codal-core/source/streams/DataStream.cpp
-16.7% -44 ./microbit-v2-samples/libraries/codal-microbit-v2/source/bluetooth/MicroBitPartialFlashingService.cpp
-6.5% -46 ./microbit-v2-samples/libraries/codal-core/source/drivers/LSM303Accelerometer.cpp
-2.5% -46 ./microbit-v2-samples/libraries/codal-microbit-v2/model/MicroBit.cpp
-9.5% -48 ./microbit-v2-samples/libraries/codal-core/source/drivers/LSM303Magnetometer.cpp
-12.3% -52 ./microbit-v2-samples/libraries/codal-microbit-v2/source/NRF52FlashManager.cpp
-14.3% -58 ./microbit-v2-samples/libraries/codal-core/source/core/CodalHeapAllocator.cpp
-13.3% -58 ./microbit-v2-samples/libraries/codal-core/source/driver-models/Compass.cpp
-9.2% -60 ./microbit-v2-samples/libraries/codal-core/source/drivers/TouchSensor.cpp
-6.6% -64 ./microbit-v2-samples/libraries/codal-core/source/drivers/MultiButton.cpp
-6.3% -86 ./microbit-v2-samples/libraries/codal-microbit-v2/source/bluetooth/MicroBitBLEManager.cpp
-4.6% -96 ./microbit-v2-samples/source/samples/OOB_v3.cpp
-58.1% -100 ./microbit-v2-samples/libraries/codal-core/source/core/CodalUtil.cpp
-20.9% -106 ./microbit-v2-samples/libraries/codal-core/source/drivers/TouchButton.cpp
-4.3% -106 ./microbit-v2-samples/libraries/codal-microbit-v2/source/MicroBitPowerManager.cpp
-7.5% -114 ./microbit-v2-samples/libraries/codal-core/source/drivers/MessageBus.cpp
-9.1% -114 ./microbit-v2-samples/libraries/codal-core/source/streams/LevelDetectorSPL.cpp
-42.8% -118 ./microbit-v2-samples/libraries/codal-core/source/types/Event.cpp
-6.9% -126 ./microbit-v2-samples/libraries/codal-core/source/driver-models/Timer.cpp
-11.1% -128 ./microbit-v2-samples/libraries/codal-core/source/streams/StreamSplitter.cpp
-18.8% -168 ./microbit-v2-samples/libraries/codal-core/source/core/CodalComponent.cpp
-7.9% -170 ./microbit-v2-samples/libraries/codal-microbit-v2/source/MicroBitUSBFlashManager.cpp
-11.4% -180 ./microbit-v2-samples/libraries/codal-microbit-v2/source/Mixer2.cpp
-16.7% -182 ./microbit-v2-samples/libraries/codal-core/source/driver-models/Accelerometer.cpp
-25.0% -192 ./microbit-v2-samples/libraries/codal-core/source/drivers/Button.cpp
-35.2% -200 ./microbit-v2-samples/libraries/codal-core/source/driver-models/I2C.cpp
-15.9% -206 ./microbit-v2-samples/libraries/codal-nrf52/source/NRF52I2C.cpp
-13.3% -216 ./microbit-v2-samples/libraries/codal-microbit-v2/model/MicroBitIO.cpp
-12.2% -220 ./microbit-v2-samples/libraries/codal-core/source/driver-models/Serial.cpp
-14.1% -222 ./microbit-v2-samples/libraries/codal-microbit-v2/source/SoundEmojiSynthesizer.cpp
-16.6% -228 ./microbit-v2-samples/libraries/codal-core/source/drivers/AnimatedDisplay.cpp
-20.4% -228 ./microbit-v2-samples/libraries/codal-core/source/drivers/PulseIn.cpp
-17.6% -232 ./microbit-v2-samples/libraries/codal-core/source/types/Image.cpp
-14.8% -238 ./microbit-v2-samples/libraries/codal-nrf52/source/NRF52Serial.cpp
-25.8% -268 ./microbit-v2-samples/libraries/codal-core/source/drivers/KeyValueStorage.cpp
-27.2% -270 ./microbit-v2-samples/libraries/codal-microbit-v2/source/MicroBitDevice.cpp
-21.5% -270 ./microbit-v2-samples/libraries/codal-microbit-v2/source/SoundOutputPin.cpp
-25.6% -414 ./microbit-v2-samples/libraries/codal-nrf52/source/NRF52PWM.cpp
-36.9% -532 ./microbit-v2-samples/libraries/codal-nrf52/source/NRFLowLevelTimer.cpp
-30.3% -538 ./microbit-v2-samples/libraries/codal-microbit-v2/source/NRF52LedMatrix.cpp
-23.5% -598 ./microbit-v2-samples/libraries/codal-microbit-v2/source/MicroBitCompassCalibrator.cpp
-17.7% -624 ./microbit-v2-samples/libraries/codal-nrf52/source/NRF52Pin.cpp
-32.7% -1.10Ki ./microbit-v2-samples/libraries/codal-nrf52/source/NRF52ADC.cpp
-34.1% -1.12Ki ./microbit-v2-samples/libraries/codal-core/source/core/CodalFiber.cpp
-42.7% -1.46Ki ./microbit-v2-samples/libraries/codal-microbit-v2/source/SoundExpressions.cpp
-4.8% -1.46Ki [section .text]
[DEL] -2.76Ki ./microbit-v2-samples/source/samples/AudioTest.cpp
-3.5% -13.3Ki TOTAL
If we build with the verbose output we can see it at the end of each file compilation:
The interesting part is this bit:
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:Output:
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#L42But 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 anythingSo we should probably explicitly set the build type to
RelWithDebInfo
(while still being configurable via CMake flag) and correctly configure optimisation flags by usingCMAKE_<lang>_FLAGS_<config>
instead ofCMAKE_<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?