compile as need