Build System Structure

Build System Structure

Makefile

  • Located in ramcloud/GNUmakefile

  • 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

    • Output obj.master/client/client, obj.master/server/server

    • Replace 'master' with the git local branch name you are on if it is not 'master'

  • make unit-test - build and run RAMCloud unit tests (requires CppUnit)

  • make test - a simple smoke test that runs unit-test and builds a simple application to ensure the install information is sufficient

  • make check - currently runs Google style checker against files in the src directory; subject to check as style evolves

Unit Testing

  • Run via make unit-test

  • Builds and runs the tests in a single shot

Simple Style/Static Checking

  • Run via make check

  • Uses cpplint.py to check that the style is the agreed-upon style.