describe compilation process