I think the ````TOOLS_DIR````, ````BUILD_DIR```` and ````DL_DIR```` belong in the top-level makefile.

I can see why you want ````ROOT_DIR```` here since you want to use uname-specific variations to grab it.  That provides the abstraction so that the main makefile can just count on ````ROOT_DIR```` being set properly.  That makes the other paths easily handled in the main makefile where they stay more visible.