Generalize build system