add smart-compile