as many as needed.
in general, all compilers do the same things. how many steps are required will depend on your code and the number of iterations needed to resolve the token with it.
1 – identify tokens
2 – resolve tokens
3 – generate code
4 – resolve external references
5 – generate external linkages
oops – forgot to expand any /copy references – iteratively, since they can be nested.. .
Binding is a separate step, commonly called in-line with the compilation.