# Justbuild

*justbuild* is a generic build system supporting multi-repository
builds. A peculiarity of the tool is the separation between global
names and physical location on the one hand, and logical paths
used for actions and installation on the other hand (sometimes referred to as
"staging"). The language-specific information to translate high-level
concepts (libraries, binaries) into individual compile actions is
taken from user-defined rules described by functional expressions.

Designated targets are taken entirely from cache, if the repositories
transitively involved have not changed. So, by making good use of
the multi-repository structure, the action graph can be kept small.
Remote build execution is supported and the remote-building of
cachable targets can be fully delegated to a service (provided by
the tool itself); when doing so, it is not necessary to have the
dependencies locally (neither as source nor as binary).

## Getting Started

* The most simple way to build the `just` binary from scratch
  is `python3 ./bin/bootstrap.py`. For more details see the
  [installation guide](INSTALL.md).

* Tutorial
  - [Getting Started](doc/tutorial/getting-started.md)
  - [Hello World](doc/tutorial/hello-world.md)
  - [Third-party dependencies](doc/tutorial/third-party-software.md)
  - [Tests](doc/tutorial/tests.md)
  - [Debugging](doc/tutorial/debugging.md)
  - [Targets versus `FILE`, `GLOB`, and `TREE`](doc/tutorial/target-file-glob-tree.md)
  - [Ensuring reproducibility](doc/tutorial/rebuild.md)
  - [Running linters](doc/tutorial/lint.md)
  - [Dependency management using Target-level Cache as a Service](doc/tutorial/just-serve.md)
  - [Cross compiling and testing cross-compiled targets](doc/tutorial/cross-compiling.md)
  - [Multi-repository configuration management](doc/tutorial/just-lock.md)

* Advanced Topics
  - [Using protobuf](doc/tutorial/proto.md)
  - [How to create a single-node remote execution service](doc/tutorial/just-execute.org)
  - [Computed roots](doc/tutorial/computed.md)
  - [More build delegation through a serve endpoint](doc/tutorial/build-delegation.md)
  - [Invocation logging and profiling](doc/tutorial/invocation-logging.md)
  - [Tree overlays](doc/tutorial/tree-overlay.md)

## Documentation

- [Overview](doc/concepts/overview.md)
- [Build Configurations](doc/concepts/configuration.md)
- [Multi-Repository Builds](doc/concepts/multi-repo.md)
- [Expression Language](doc/concepts/expressions.md)
- [Built-in Rules](doc/concepts/built-in-rules.md)
- [User-Defined Rules](doc/concepts/rules.md)
- [Documentation Strings](doc/concepts/doc-strings.md)
- [Cache Pragma and Testing](doc/concepts/cache-pragma.md)
- [Anonymous Targets](doc/concepts/anonymous-targets.md)
- [Target-Level Caching](doc/concepts/target-cache.md)
- [Target-Level Caching as a Service](doc/concepts/service-target-cache.md)
- [Garbage Collection](doc/concepts/garbage.md)
- [Symbolic links](doc/concepts/symlinks.md)
- [Tree overlays](doc/concepts/tree-overlay.md)
- [Execution properties](doc/concepts/execution-properties.md)
- [Computed roots](doc/concepts/computed-roots.md)
- [Profiling and Invocation Logging](doc/concepts/profiling.md)
