Buck (software)
Buck is a multi-language build system developed and used by Facebook. It was designed for building small, reusable modules consisting of code and resources within a monorepo,[4] and supports C++ (Objective-C, Swift), Shell, Java (Kotlin, Groovy), 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.[3]
Developer(s) | |
---|---|
Initial release | April 17, 2013[1] |
Stable release | 2019.10.17.01
/ October 17, 2019[2] |
Repository | |
Written in | Java |
Operating system | Cross-platform |
License | Apache License 2.0[3] |
Website | buck |
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 (CI) as Buck supports a HTTP Cache API.
References
- Bolin, Michael (May 14, 2013). "Buck: How we build Android apps at Facebook". Notes. Facebook. Facebook Engineering. Retrieved 2019-07-16.
- "Releases · facebook/buck". GitHub.
- "buck/license". April 29, 2013. Retrieved 2017-10-20.
- "Overview". Buck: a build tool. Retrieved 2018-07-16.
Buck is designed to build multiple deliverables from a single repository—that is, a monorepo—rather than from multiple repositories