In certain situations you might need to generate real object files with -ipo. To force the compiler to produce real object files instead of "mock" ones with IPO, you must specify -ipo_obj in addition to -ipo.
Use of -ipo_obj is necessary under the following conditions:
The objects produced by the compilation phase of -ipo will be placed in a static library without the use of xild or xild -lib. The compiler does not support multifile IPO for static libraries, so all static libraries are passed to the linker. Linking with a static library that contains "mock" object files will result in linkage errors because the objects do not contain real code or data. Specifying -ipo_obj causes the compiler to generate object files that can be used in static libraries.
Alternatively, if you create the static library using xild or xild -lib, then the resulting static library will work as a normal library.
The objects produced by the compilation phase of -ipo might be linked without the -ipo option and without the use of xild.
You want to generate an assembly listing for each
source file (using -S) while compiling with -ipo. If you use
-ipo with -S, but without -ipo_obj,
the compiler issues a warning and an empty assembly file is produced for
each compiled source file.