separated compilation stages