{"id":19883274,"url":"https://github.com/elfshaker/manyclangs","last_synced_at":"2026-03-16T03:33:45.489Z","repository":{"id":45650580,"uuid":"422504652","full_name":"elfshaker/manyclangs","owner":"elfshaker","description":"Repository hosting unofficial binary pack files for many commits of LLVM","archived":false,"fork":false,"pushed_at":"2023-08-18T21:36:18.000Z","size":32,"stargazers_count":129,"open_issues_count":2,"forks_count":3,"subscribers_count":6,"default_branch":"main","last_synced_at":"2023-11-07T16:17:40.777Z","etag":null,"topics":["elfshaker","llvm"],"latest_commit_sha":null,"homepage":"","language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/elfshaker.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null}},"created_at":"2021-10-29T08:47:03.000Z","updated_at":"2023-09-05T11:35:34.000Z","dependencies_parsed_at":"2023-01-31T08:30:16.757Z","dependency_job_id":null,"html_url":"https://github.com/elfshaker/manyclangs","commit_stats":null,"previous_names":[],"tags_count":2,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elfshaker%2Fmanyclangs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elfshaker%2Fmanyclangs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elfshaker%2Fmanyclangs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elfshaker%2Fmanyclangs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/elfshaker","download_url":"https://codeload.github.com/elfshaker/manyclangs/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224315892,"owners_count":17291135,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["elfshaker","llvm"],"created_at":"2024-11-12T17:19:46.493Z","updated_at":"2026-03-16T03:33:45.418Z","avatar_url":"https://github.com/elfshaker.png","language":"Dockerfile","readme":"# manyclangs \u003cimg src=\"https://llvm.org/img/DragonSmall.png\" width=\"auto\" height=\"72\"\u003e\nmanyclangs is a project enabling you to run any commit of clang within a few seconds, without having to build it.\n\nIt provides [elfshaker](https://github.com/elfshaker/elfshaker) pack files, each containing ~2000 builds of LLVM packed into ~100MiB. Running any particular build takes about 4s.\n\n## Quickstart\n\n### AArch64\nRequirements: Ubuntu 20.04, `elfshaker`, `wget`, `git`, `lld-12`, `clang-12`\n\nReplace `YYYYMM` below with the month and year for which you wish to fetch builds.\n```bash\nmkdir -p manyclangs/elfshaker_data/packs manyclangs/bin\ncd ./manyclangs\nYYYYMM=202109\nwget https://github.com/elfshaker/manyclangs/releases/download/v0.9.0/aarch64-ubuntu2004-manyclangs-$YYYYMM.pack{,.idx} -P elfshaker_data/packs\nelfshaker find ''\n```\n\nYou will see a list of all available snapshots in the pack.\nRun any one of them using:\n```bash\nelfshaker extract $SNAPSHOT\nbash ./link.sh --and-run clang --version\n```\n\n### x86-64\nRequirements: `elfshaker`, `wget`, `git`, `docker`, `binfmt-support`, `qemu-user-static`\n\nPlease note, that so far, packs are only published for aarch64 binaries.\nHowever, these binaries can run under QEMU with some performance impact. For\nsmall code fragments, or some use cases, the impact may be tolerable.\n\nReplace `YYYYMM` below with the month and year for which you wish to fetch builds.\n```bash\nmkdir -p manyclangs/elfshaker_data/packs manyclangs/bin\ncd ./manyclangs\nYYYYMM=202109\nwget https://github.com/elfshaker/manyclangs/releases/download/v0.9.0/aarch64-ubuntu2004-manyclangs-$YYYYMM.pack{,.idx} -P elfshaker_data/packs\nwget https://raw.githubusercontent.com/elfshaker/manyclangs/main/docker-qemu-aarch64/Dockerfile\ndocker build -t manyclangs-qemu-aarch64 .\nelfshaker find ''\n```\n\nYou will see a list of all available snapshots in the pack.\nRun any one of them using:\n```bash\nelfshaker extract $SNAPSHOT # e. g. 20210930-02593T202653-2df2b27d94f9268\ndocker run --rm -it  --mount type=bind,source=\"$(pwd)\",target=/elfshaker manyclangs-qemu-aarch64  bash -c 'bash ./link.sh --and-run clang --version'\n```\n\nIf you get an error similar to `/usr/bin/clang++-12: cannot execute binary file: Exec format error`, be sure you've installed the packages `binfmt-support` and `qemu-user-static` and try again.\n\n## User Guide\n\n- [1. Create a repository for manyclangs](#1-create-a-repository-for-manyclangs)\n- [2. Install manyclangs pack files](#2-install-manyclangs-pack-files)\n- [3. Run LLVM tools](#3-run-llvm-tools)\n- [More on linking](#more-on-linking)\n- [Running manyclangs on other platforms](#running-manyclangs-on-other-platforms)\n- [Our build configuration](#our-build-configuration)\n- [See also](#see-also)\n\nYou need an elfshaker repository to extract the binaries into. An elfshaker repository is simply a directory with an `elfshaker_data` subdirectory.\n\n### 1. Create a repository for manyclangs\nYou can grab the `.pack` *and* `.pack.idx` files for the releases of interest and put them in the `elfshaker_data/packs` directory.\n\nYou can create all directories you need like so:\n```bash\nmkdir -p manyclangs/elfshaker_data/packs\n```\n\n### 2. Install manyclangs pack files\nPut the `.pack` and `.pack.idx` files in `manyclangs/elfshaker_data/packs`. Verify that elfshaker can see them by running the following command in `manyclangs/`:\n```bash\nelfshaker list\n```\n\n### 3. Run LLVM tools\nNow try extracting a snapshot by running:\n```bash\nelfshaker list\n# Pick a pack file, e.g. aarch64-ubuntu2004-manyclangs-202005.pack\nelfshaker list aarch64-ubuntu2004-manyclangs-202005\n# Pick a snapshot, e.g. 20200531-02712T150722-dfbfdc96f9e15be\nelfshaker extract 20200531-02712T150722-dfbfdc96f9e15be\n```\n\nThe extraction should only take 1-2s. You will then notice that the `manyclangs/` directory contains a number of other files and directories, including `link.sh`, `COMMIT_SHA` and `lib/` among others.\n\nThe `elfshaker extract` step extracted the pre-built `.o` files for commit `dfbfdc96f9e15be` of the LLVM repo. You now need to run `link.sh` to link these into an executable.\n```bash\nbash ./link.sh --and-run clang --version\n```\n\n### More on linking\nAs of writing this, `./link.sh` can link 99 separate executables. To link everything, use:\n```bash\nbash ./link.sh\n```\n\n`./link.sh` can also link several dynamic libraries.\n\n\u003cdetails\u003e\n  \u003csummary\u003eList of executables shipped in manyclangs\u003c/summary\u003e\n\n    - FileCheck\n    - arcmt-test\n    - bugpoint\n    - c-arcmt-test\n    - c-index-test\n    - clang\n    - clang++\n    - clang-$VER\n    - clang-check\n    - clang-cl\n    - clang-cpp\n    - clang-diff\n    - clang-extdef-mapping\n    - clang-format\n    - clang-import-test\n    - clang-offload-bundler\n    - clang-offload-wrapper\n    - clang-refactor\n    - clang-rename\n    - clang-scan-deps\n    - clang-tblgen\n    - count\n    - diagtool\n    - dsymutil\n    - llc\n    - lli\n    - lli-child-target\n    - llvm-PerfectShuffle\n    - llvm-addr2line\n    - llvm-ar\n    - llvm-as\n    - llvm-bcanalyzer\n    - llvm-c-test\n    - llvm-cat\n    - llvm-cfi-verify\n    - llvm-config\n    - llvm-cov\n    - llvm-cvtres\n    - llvm-cxxdump\n    - llvm-cxxfilt\n    - llvm-cxxmap\n    - llvm-diff\n    - llvm-dis\n    - llvm-dlltool\n    - llvm-dwarfdump\n    - llvm-dwp\n    - llvm-elfabi\n    - llvm-exegesis\n    - llvm-extract\n    - llvm-gsymutil\n    - llvm-ifs\n    - llvm-install-name-tool\n    - llvm-isel-fuzzer\n    - llvm-itanium-demangle-fuzzer\n    - llvm-jitlink\n    - llvm-lib\n    - llvm-link\n    - llvm-lipo\n    - llvm-lto\n    - llvm-lto2\n    - llvm-mc\n    - llvm-mca\n    - llvm-microsoft-demangle-fuzzer\n    - llvm-ml\n    - llvm-modextract\n    - llvm-mt\n    - llvm-nm\n    - llvm-objcopy\n    - llvm-objdump\n    - llvm-opt-fuzzer\n    - llvm-opt-report\n    - llvm-pdbutil\n    - llvm-profdata\n    - llvm-ranlib\n    - llvm-rc\n    - llvm-readelf\n    - llvm-readobj\n    - llvm-reduce\n    - llvm-rtdyld\n    - llvm-size\n    - llvm-special-case-list-fuzzer\n    - llvm-split\n    - llvm-stress\n    - llvm-strings\n    - llvm-strip\n    - llvm-symbolizer\n    - llvm-tblgen\n    - llvm-undname\n    - llvm-xray\n    - llvm-yaml-numeric-parser-fuzzer\n    - not\n    - obj2yaml\n    - opt\n    - sancov\n    - sanstats\n    - verify-uselistorder\n    - yaml-bench\n    - yaml2obj\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eList of dynamic libraries shipped in manyclangs\u003c/summary\u003e\n\n    - libLTO.so\n    - libLTO.so.$VERgit\n    - libRemarks.so\n    - libRemarks.so.$VERgit\n    - libclang-cpp.so\n    - libclang-cpp.so.$VERgit\n    - libclang.so\n    - libclang.so.$VER\n    - libclang.so.$VERgit\n\u003c/details\u003e\n\n### Running manyclangs on other platforms\n\nThe [manyclangs-qemu-aarch64](https://github.com/elfshaker/manyclangs/tree/main/docker-qemu-aarch64) docker image allows you to run the AArch64 packs on x86-64 platforms via QEMU.\n\n### Our build configuration\nWe use the [`manyclangs-cmake`](https://github.com/elfshaker/elfshaker/blob/main/contrib/manyclangs-cmake) script to configure our LLVM builds.\n\nImportant highlghts:\n- Release w/ Assertions\n- All stable targets are included\n\n### See also\n- [manyclangs-run](https://github.com/elfshaker/elfshaker/blob/main/contrib/manyclangs-run) can be used to seamlessly run any commit of LLVM from your source code repo.\n- Talk from the 2021 LLVM Developers' Meeting\n\n  \u003ca href=\"https://www.youtube.com/watch?v=l2KWOqEGRwg\"\u003e\n    \u003cimg src=\"https://img.youtube.com/vi/l2KWOqEGRwg/0.jpg\" width=\"240\" alt=\"2021 LLVM Dev Mtg “Manyclangs: Fast bisection with a small storage cost\"\u003e\n  \u003c/a\u003e\n\n## Contact\n\nThe best way to reach us to join the [elfshaker/community](https://gitter.im/elfshaker/community) on Gitter.\nThe original authors of elfshaker are Peter Waller ([@peterwaller-arm](https://github.com/peterwaller-arm)) \\\u003cpeter.waller@arm.com\\\u003e and Veselin Karaganev ([@veselink1](https://github.com/veselink1)) \\\u003cveselin.karaganev@arm.com\\\u003e and you may also contact us via email.\n\n## Security\n\nRefer to our [Security policy](SECURITY.md).\n\n## License\n\nmanyclangs is licensed under the [Apache License 2.0](LICENSE).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felfshaker%2Fmanyclangs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Felfshaker%2Fmanyclangs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felfshaker%2Fmanyclangs/lists"}