We need one toolchain that is similar for all modules. This includes compiler and linker flags. Only that way, we can ensure interoperability between modules.
Therefore the manual configuration of the toolchain per module should not be required (gcc.extra_features(), gcc.warning_flags()).
Instead, the toolchain should come with a finished and complete configuration.
Still, a module should have the capability to disable certain compiler or linker flags via bazle features like treat_warnings_as_errors to work around limitations such as third_party libraries, bugs without clear fix,...