Buck (software)


Buck is a multy-language build system developed and used by Facebook. It was designed for building small, reusable modules consisting of code and resources within a monorepo, and supports C++, Shell, Java, Python, Lua, OCaml, Rust, Go and others source codes as inputs for binary target on respective target platforms such as IOS, Android,.NET and Java VM runtimes. Buck is licensed under the Apache License 2.0.
Buck requires explicit declaration of dependencies and enforces that by use of a symbolic link tree. Since all dependencies are explicit and Buck has a directed acyclic graph of all source files and build targets, Buck can perform incremental recompilation only building targets downstream of files that have changed. Buck computes a key for each target that is a hash of the contents all the files it depends on. It stores a mapping from that key to the built target in a build cache. Assuming that all targets are deterministic functions of the contents of their dependencies you can share this build cache between developers and continuous integration as Buck supports a .