Buck (software)

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search
Buck
Developer(s)Facebook
Initial releaseApril 17, 2013; 7 years ago (2013-04-17)[1]
Stable release
2019.10.17.01 / October 17, 2019; 10 months ago (2019-10-17)[2]
Repository Edit this at Wikidata
Written inJava
Operating systemCross-platform
LicenseApache License 2.0[3]
Websitebuck.build/ Edit this on Wikidata

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]

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.

See also[edit]

References[edit]

  1. ^ Bolin, Michael (May 14, 2013). "Buck: How we build Android apps at Facebook". Notes. Facebook. Facebook Engineering. Retrieved 2019-07-16.
  2. ^ "Releases · facebook/buck". GitHub.
  3. ^ a b "buck/license". April 29, 2013. Retrieved 2017-10-20.
  4. ^ "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

External links[edit]