Свежак!на этот раз 9 версия GCC для cortex-m* arm-kgp-eabi-gcc хост linux64
http://www.klen.or …_64-...0513_PETUNIA.7z
0. как бы 9 версия GCC из транка... ктобы что не говорил но LTO работает надежнее. компиллер на моих проектах ни разу не упал, что раньше на 7 и 8 версии часто случалось
чего новго я тут накрутил...
1. все тулсы собраны с оптимизацией LTO, и под CPU sandy bridge, вроде бы стало быстрее компилять линковать.
2. отдельные заведенные через mulilib arm-таргеты libc,libstdc++, итд (лежат arm-kgp-eabi/arm-kgp-eabi/lib/thumb/... arm-kgp-eabi/lib/gcc/arm-kgp-eabi/9.0.0/thumb... )
cortex-m3 ( линкуются )
cortex-m3 + Ofast
cortex-m3 + Os
cortex-m4 + hard_float
cortex-m4 + hard_float + Ofast
cortex-m4 + hard_float + Os
cortex-m7 + hard_float_sp
cortex-m7 + hard_float_sp + Ofast
cortex-m7 + hard_float_sp + Os
cortex-m7 + hard_float_dp
cortex-m7 + hard_float_dp + Ofast
cortex-m7 + hard_float_dp + Os
3. Все таргеты собраны с LTO секциями и готовы к этой оптимизации при линковке
3. для таргетов cortex-m4 + hard_float + *, cortex-m7 + hard_float_sp + *, cortex-m7 + hard_float_dp + * добавлена отмодифицированная до "базовый операнд - float" библиотека математических вычислений GSL ( почитать
https://ru.wikiped …GNU_Scientific_Library ),
базовый тип всех функций - float!
4. binutils собран с поддержкой плагинов, утилитки ar, nm, ranlib автоматом поднимают liblto-plugin.so ( arm-kgp-eabi/lib/bfd-plugins/liblto-plugin.so -> arm-kgp-eabi/libexec/gcc/arm-kgp-eabi/9.0.0/liblto-plugin.so ), это функционал необходим ar, nm, ranlib изготовилть "правильную" статическую либу с поддержкой LTO секций, а линкеру ее правильно прилинковать с LTO оптимизацией.
советую начать эксперименты с компиляцие с ключами для компиляции (пример для cortex-m4):
выжимаем скорость:
-gdwarf-4 -g3 -gno-strict-dwarf -fvar-tracking-assignments -fverbose-asm -mfloat-abi=hard -mcpu=cortex-m4 -mtune=cortex-m4 -mfpu=fpv4-sp-d16 -Ofast -ffunction-sections -fdata-sections -fgraphite -funroll-loops -f -funroll-all-loops -fvariable-expansion-in-unroller
выжимаем размер:
-gdwarf-4 -g3 -gno-strict-dwarf -fvar-tracking-assignments -fverbose-asm -mfloat-abi=hard -mcpu=cortex-m4 -mtune=cortex-m4 -mfpu=fpv4-sp-d16 -Os -ffunction-sections -fdata-sections -fgraphite
и для линковы то что выше плюс -fuse-linker-plugin -Wl,-gc-sections
если все проканает, то можно попробовать добавить к ключам компиляции и линковки -flto или -flto -ffat-lto-objects - и пробывать LTO оптимизацию. у меня надежно линкуются все проекты и работают в железе. прошивка уменьшается в среднем на 30% и работает быстрее.
если будут проблемы - телеграфируйте, поможем.