We're also very successfully using CMake as our build system, as opposed to Make itself. It lets you organise your build system & support different configurations & dependencies in a much easier way than e.g. Makefiles & Git submodules, which we've tried in the past. When combined with the Ninja generator we're also seeing ~20% faster compilation times.
Regarding code size: the common pitfall is -Os for GCC and -Oz for Clang based compilers to optimise for minimum code size.
For example any improvements that may reveal NDA stuff from their consoles never gets upstream.
And then we were always using IAR in a way that disabled all and every optimization; if enabling them did not lead to a compiler imploding, the compiler would produce invalid machine code even for trivial examples. This defeated any possible code size benefits that IAR may have had over GCC/Clang.
To top if off, I had an impression that reports of that nature weren’t really considered critical.
(Building bare metal code with a lot of DSP and MATMUL)
You can try it : https://github.com/powturbo/Turbo-Base64