Native versus cross-compilers
With a native compiler, all the associated run-time libraries, default memory locations and loading software are supplied, allowing the software engineer to concentrate on writing software. It is possible to use a native compiler to write software for a target board, provided it is running the same processor. For example, it is possible to use an IBM PC compiler to write code for an embedded 80386 design or an Apple MAC compiler to create code for an M68000 target. The problem is that all the support libraries and so on must be replaced and this can be a considerable amount of work.
This is beginning to change and many compiler suppli-ers have realised that it is advantageous to provide many different libraries or the ability to support their development through the provision of a library source. For example, the MetroWorks compilers for the MC68000 and PowerPC for the Apple MAC support cross-compilation for Windows, Win-dows 95 and Windows NT environments as well as embedded systems.
This is where the processed source code is turned into assembler modules ready for the linker to combine them with the run-time libraries. There are several ways this can be done. The first may be to generate object files directly without going through a separate assembler stage. The usual approach is to create an assembler source listing which is then run through an assembler to create an object file. During this process, it is sometimes possible to switch on automatic code optimisers which examine the code and modify it to produce higher performance.