recursive build