Cognition
? What is a build system
A tool to automate the process of program compilation.
It maps a set of source resources (in most cases, files) to a target (executable).
? Assumption
Each of the build actions are idempotent
? Memoization
This assumption allows the build system to memoize the actions that is has already performed, and only perform build actions on resources that have changed.
In order to correctly manage this memoization, the build system must know exactly which resources are being used for any given command. The DAG informs the system what has to be rebuilt when a change occurs. If hello.c is altered everything reachable from that node in the DAG must be rebuilt.
? Dependency
In order to do partial rebuilds, a build system must understand both explicit dependencis and implicit dependencies
? Parallelization
Modules of a modular program can compile independently, thus, prallelly.
? How does a build system relate to CI tools
CI tools trigger build whenever developer commit code, to see if project is compiling fine, to run unit tests, to create build or even deploy in production or testing environment.
Bazel
-
abstraction layer
workspace # with a WORKSPCE file
package # with a BUILD file
target # an element of package? target
files and rules? rule
relationship between a set of input files and a set of output files # the files generated by a rule always belong to the same package as the rule itself -
labels
name of a target
starts with //, then package name : target name
package name of a file is its relative path