In the case where the difference is simply which code sequence is executed, the cleanest solution is to use Boolean constants to control which code is executed.
FP_Initialize_Required : constant Boolean := True; ... if FP_Initialize_Required then ... end if;
Not only will the code inside the if statement not be executed if the constant Boolean is False, but it will also be completely deleted from the program. However, the code is only deleted after the if statement has been checked for syntactic and semantic correctness. (In contrast, with preprocessors the code is deleted before the compiler ever gets to see it, so it is not checked until the switch is turned on.)
Typically the Boolean constants will be in a separate package, something like:
package Config is FP_Initialize_Required : constant Boolean := True; Reset_Available : constant Boolean := False; ... end Config;
The Config package exists in multiple forms for the various targets, with an appropriate script selecting the version of Config needed. Then any other unit requiring conditional compilation can do a `with' of Config to make the constants visible.