{"id":13642580,"url":"https://github.com/firebuild/firebuild","last_synced_at":"2026-01-14T21:56:54.726Z","repository":{"id":65318182,"uuid":"220720881","full_name":"firebuild/firebuild","owner":"firebuild","description":"Automatic build cache","archived":false,"fork":false,"pushed_at":"2025-11-30T11:36:54.000Z","size":3070,"stargazers_count":145,"open_issues_count":129,"forks_count":6,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-12-01T17:56:20.562Z","etag":null,"topics":["acceleration","build","cache","cargo","clang","cmake","compile","cpp","fortran","java","make","ninja","parallel","python","rust","rustc","scala"],"latest_commit_sha":null,"homepage":"https://firebuild.com","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/firebuild.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-11-10T00:20:07.000Z","updated_at":"2025-11-30T11:36:58.000Z","dependencies_parsed_at":"2023-12-02T10:31:43.104Z","dependency_job_id":"c998dc4b-8cd5-4b61-9ab3-6fbc161d905f","html_url":"https://github.com/firebuild/firebuild","commit_stats":{"total_commits":1646,"total_committers":6,"mean_commits":274.3333333333333,"dds":0.2600243013365735,"last_synced_commit":"79127fbcee9145b87c0818d9b409ae1332470450"},"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/firebuild/firebuild","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firebuild%2Ffirebuild","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firebuild%2Ffirebuild/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firebuild%2Ffirebuild/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firebuild%2Ffirebuild/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/firebuild","download_url":"https://codeload.github.com/firebuild/firebuild/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/firebuild%2Ffirebuild/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28436249,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T21:32:52.117Z","status":"ssl_error","status_checked_at":"2026-01-14T21:32:33.442Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["acceleration","build","cache","cargo","clang","cmake","compile","cpp","fortran","java","make","ninja","parallel","python","rust","rustc","scala"],"created_at":"2024-08-02T01:01:33.403Z","updated_at":"2026-01-14T21:56:54.718Z","avatar_url":"https://github.com/firebuild.png","language":"C++","readme":"# Firebuild\n\n\u003cimg alt=\"Firebuild logo\" src=\"data/firebuild-logo.svg\" width=15%\u003e\n\n## Introduction\n\nFirebuild is an automatic build accelerator. It works by caching the outputs of executed commands\nand replaying the results when the same commands are executed with the same parameters within the\nsame environment.\n\nThe commands can be compilation or other build artifact generation steps, tests, or any command that\nproduces predictable output. The commands to cache and replay from the cache are determined\nautomatically based on `firebuild`'s [configuration](etc/firebuild.conf) and each command's and its\nchildren's observed behavior.\n\n\u003cimg align=\"center\" alt=\"Firebuild accelerates cc and ld with LTO\" src=\"doc/parallel-make-acceleration.svg\"\u003e\n\n## Usage\n\nPrefix your build command with `firebuild`:\n\n    firebuild \u003cbuild command\u003e\n\nThe first build is typically a 5-10% slower due to the overhead of analyzing the build and populating\nthe cache. Successive builds can be 5-20 times or even faster depending on the project and the changes\nbetween the builds.\n\n### Improving hit rate\n\nIf the hit rate (check with `firebuild -s`) is not at the expected levels run firebuild with `-d proc`\nto see why particular commands can't be stored to the cache or with `-d shortcut` to see what prevents\nshortcutting of particular commands.\n\nFirebuild can also generate a report about the whole build process with `firebuild -r \u003cbuild command\u003e`\nthat helps finding the slowest parts of the build and also helps finding what could not be shortcut.\n\n## How it compares to other build accelerators?\n\n### Ccache, sccache and other compiler wrappers\n\nCcache works by having an understanding of how the C/C++ compiler works and it supports only the\nC/C++/Obj-C family of languages. Sccache adds Rust on top of those, and the concept is the same.\n\nFirebuild supports accelerating any command that behaves reasonably well, like not downloading\nfiles from the network to produce output. As a result you can accelerate the linker (even with LTO)\n, or the configure and code generation steps of C/C++ project builds, which together made it\nconsistently beat ccache in [our testing](https://github.com/firebuild/firebuild-infra/pull/59).\n\nFirebuild also supports many other compilers, such as Fortran, Java (including Javadoc\ngeneration) and Scala compilers which are not accelerated by ccache.\n\n### Bazel and similar build systems\n\nBazel requires maintaining the Bazel build system, while Firebuilds works with any\nbuild system that does not implement its own caching. You just need to prefix your build command\nwith firebuild, like it is done for accelerating bash's build in the autopkgtest:\n[debian/tests/recompile-bash](debian/tests/recompile-bash)\n\n```\n...\nBuild times:\nreal1=88.28\nuser1=113.08\nsys1=26.20\nreal2=12.38\nuser2=8.31\nsys2=5.67\nCPU time of the second build was 10% of the first build\nautopkgtest [14:24:12]: test recompile-bash: -----------------------]\nrecompile-bash       PASS\n```\nYou can even accelerate a single command without any build system: `firebuild \u003ccommand\u003e`.\n\n### Cache compression\n\nFirebuild can compress cache entries using zstd compression. This can be controlled with the `compress_cache` setting in the configuration file. Compression is disabled by default for maximal performance.\n\nThe compression level can be adjusted using the `compression_level` setting (values 1-22). Level 1 provides fast compression suitable for build caches, while higher levels provide better compression at the cost of speed.\n\n```conf\ncompress_cache = false\ncompression_level = 1  // Fast compression (default)\n```\n\nEnabling compression may be beneficial when:\n- Disk space is a concern\n- Disk speed is a concern and retrieving compressed files from the cache is faster\n- The underlying filesystem does not compress files\n- The cache is not compressed externally (e.g., in CI pipelines the entire cache directory is compressed as a single archive)\n\nCompression setting only affects the creation of files in the cache. Previously compressed cache\nentries can still be used, when `compress_cache` is set to false.\n\n### Firebuild shortcomings\n\nFirebuild does not support [remote caches](https://github.com/firebuild/firebuild/issues/19) yet.\n\n## Installation\n\nFirebuild is available in [Arch Linux (AUR)](https://aur.archlinux.org/packages/firebuild),\n[Debian](https://tracker.debian.org/pkg/firebuild),\n[Ubuntu](https://launchpad.net/ubuntu/+source/firebuild),\nand other Debian derivatives.\n\nBack-ported packages for supported Ubuntu releases can be downloaded from the [official PPA](https://launchpad.net/~firebuild/+archive/ubuntu/stable):\n\n    sudo add-apt-repository ppa:firebuild/stable\n    sudo apt install firebuild\n\nTo intercept static binaries Firebuild requires a Qemu version that supports the -libc-syscalls option. Prebuilt `qemu-user-interposable` packages are available from the `firebuild/stable` PPA, too.\n\nIf you would like to use `firebuild` in your GitHub pipeline there is a [GitHub Action](https://github.com/marketplace/actions/firebuild-for-github-actions) to do just that.\n\n## Building from source\n\n### On Linux\n\nFor Ubuntu earlier than 21.04 (xxhash earlier than 0.8.0 or Valgrind earlier than 3.17.0):\n\n    sudo apt-add-repository ppa:firebuild/build-deps\n    \nInstall the build dependencies:\n\n    sudo apt update\n    sudo apt install clang cmake bats bc libconfig++-dev libelf-dev node-d3 libxxhash-dev libjemalloc-dev libtsl-hopscotch-map-dev moreutils python3-jinja2 fakeroot\n\nIf you have qemu-user installed you also need a version that supports the -libc-syscalls option:\n\n    sudo apt-add-repository ppa:firebuild/qemu-backports\n    sudo apt install qemu-user\n\nBuild:\n\n    cmake . \u0026\u0026 make check\n\nInstall:\n\n    sudo make install\n\n### On Mac\n\nInstall the build dependencies:\n\n    brew bundle\n\nBuild:\n\n    cmake -DCMAKE_OSX_SYSROOT=macosx .\n    HOMEBREW_PREFIX=$(ls -d /opt/homebrew /usr/local 2\u003e /dev/null| head -n1)\n    export XML_CATALOG_FILES=${HOMEBREW_PREFIX}/etc/xml/catalog\n    export PYTHONPATH=$(ls -d ${HOMEBREW_PREFIX}/Cellar/jinja2-cli/*/libexec/lib/*/site-packages | tail -n1)\n    make check\n\nInstall:\n\n    sudo make install\n\nSet up the system to allow intercepting builds: https://firebuild.com/setup-macos\n","funding_links":[],"categories":["C++"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffirebuild%2Ffirebuild","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffirebuild%2Ffirebuild","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffirebuild%2Ffirebuild/lists"}