add source generation