This makefile system follows the structuring conventions recommended by Peter Miller in his excellent paper: Recursive Make Considered Harmful
Essentially one Makefile, with includes at various places in the project directory
GNUmakefile is the root Makefile
Included bits are called Makefrag.
No special magic here - this is simply direct expansion of the file contents.
Means all Makefrag contents are still relative to the working directory of the make invocation (which there is only one of in this style of build system).
One can refer to the working directory of make via $(TOP) which is declared in the top level Makefile
Keep in mind
There is no scoping here, if you declare something in a Makefrag that conflicts with something in another Makefrag or something in the GNUmakefile collisions are resolved just as they would be in a single Makefile (i.e. one definition will override the other depending on the order in which they are included.
Interesting Targets
make - build the RAMCloud server and client software