Decide on a minimum CMake version (e.g. 3.10, as included by Ubuntu 18.04) and then make use of all the new features available to simplify our build system.
Make it easier to use of Walberla as a library in external projects.
Rewrite the whole build system according to current CMake best practices.
Eliminate all the hacks for library detection on old systems.
Make each submodule either header-only or completely compiled into a library (e.g. using explicit template instantiation if the set of possible types is small). The current state where most submodules are like 10% compiled just combines the downsides of both (long compile times, requirement of linking).