Pds - Makefiles and TOML files based build system



pds is my own build system. It can be installed by doing:

opam install pds

pds is a build system which takes a TOML files and a directory of Ocaml code and produces Makefiles which will build the code and can be used to run tests.


When I created pds I surveyed the existing build tools and I found them either too complicated and/or required a learning a new configuration or build language. The configuration/build language was also difficult to consume with other tools. I decided I wanted something that would take a simple configuration file in a fairly standard language and build the software.


  • Configuration language is TOML, a pretty straight forward language. This means the build config can be easily read by other tools. For example, hll is used to takes a pds configuration and generates an opam package. merlin-of-pds creates a .merlin file from a pds configuration.
  • Supports different kinds of builds existing at the same time. pds produces output in the build directory, which is broken up into release, and debug builds. Just do make or make debug to make the different kinds. Both can co-exist.
  • It builds in parallel, both across projects and within (if possible).
  • It knows how to build Ocaml projects but it also supports third-party project which can be in any language, they just require a Makefile that implements some predefined targets.
  • Is capable of building some complicated builds, so far it’s been tested with some wild Ctypes builds which require compiling C code as an intermediate.
  • pds solves the 80% of builds issue simply and allows more complicated builds via extension with Makefiles.


  • It has only been tested for my needs so I don’t know how generic it is. But for simple builds it should be good enough.
  • It uses Makefiles with multiple invocations underneath so large projects can be slower than desired (but still not so bad, IMO). One repository I have has 11056 lines of code (wc -l) over 26 projects. On my laptop a make -j1 builds in 31 seconds, a make -j4 builds in 20 seconds. Part of that is dependencies between projects and some of it is make overhead.
  • It uses Makefiles as its extension language, which is used for more interesting/complicated builds, which can be non-trivial. This was decided to keep pds simple for the 80% case and let power users do more complicated builds as needed.

To read more about pds see the following blog post: