compilation pipeline