Buck (software)

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search
Buck
Developer(s)Facebook, Inc.
Initial releaseApril 17, 2013; 8 years ago (2013-04-17)[1]
Stable release
2021.01.12.01 / January 12, 2021; 10 months ago (2021-01-12)[2]
Repository
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, Inc.. It was designed for building small, reusable modules consisting of code and resources within a monorepo.[4] It supports C++ (Objective-C, Swift), Shell, Java (Kotlin, Groovy), Python, Lua, OCaml, Rust, Go and other languages as source code input. It can produce binary outputs for a variety of target platforms including IOS, Android, .NET and Java VM runtimes. Buck is licensed under the Apache License 2.0.[3]

Buck requires the explicit declaration of dependencies and enforces this using a symbolic link tree. Because all dependencies are explicit and Buck has a directed acyclic graph of all source files and build targets, Buck can perform incremental recompilation, only rebuilding targets downstream of files that have changed. Buck computes a key for each target that is a hash of the contents of the files it depends on. It stores a mapping from that key to the build target in a build cache. If targets are deterministic functions of the contents of their dependencies, then this build cache can be shared 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]