functional makefile