Surely this is a problem of source code organisation not multi-platform support? A better model would be having clearly articulated platform/arch specific files doing all the per-platform/arch defines, which then get included for the target specific build. However, reorganising a code-base this way when it wasn't like that at the outset is can be a fraught (and hard to justify) exercise.
A good example of source code organisation that does a decent job of separating per-platform concerns, is the Nethack code base.
A good example of source code organisation that does a decent job of separating per-platform concerns, is the Nethack code base.