This is the entry point to actually building the modules in a package. It doesn't actually do much itself, most of the work is delegated to compiler-specific actions. It does do some non-compiler specific bits like running pre-processors.
Mostly information from the .cabal file
Flags that the user passed to build
preprocessors to run before compiling
|-> IO ()|
Build the libraries and executables in this package.