{"id":47296543,"url":"https://github.com/wild-linker/wild","last_synced_at":"2026-08-04T05:00:26.771Z","repository":{"id":220955646,"uuid":"752839399","full_name":"wild-linker/wild","owner":"wild-linker","description":"A very fast linker for Linux","archived":false,"fork":false,"pushed_at":"2026-07-30T01:35:04.000Z","size":7081,"stargazers_count":3801,"open_issues_count":69,"forks_count":130,"subscribers_count":25,"default_branch":"main","last_synced_at":"2026-07-30T02:15:24.505Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","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/wild-linker.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE-APACHE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":"GOVERNANCE.md","roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"davidlattimore"}},"created_at":"2024-02-04T23:33:54.000Z","updated_at":"2026-07-30T00:55:17.000Z","dependencies_parsed_at":"2024-04-24T00:24:19.354Z","dependency_job_id":"77b522ec-de72-4b18-a0f5-ea25afbe0851","html_url":"https://github.com/wild-linker/wild","commit_stats":null,"previous_names":["davidlattimore/wild","wild-linker/wild"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/wild-linker/wild","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wild-linker%2Fwild","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wild-linker%2Fwild/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wild-linker%2Fwild/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wild-linker%2Fwild/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wild-linker","download_url":"https://codeload.github.com/wild-linker/wild/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wild-linker%2Fwild/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":36202887,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-08-02T02:00:06.915Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2026-03-16T17:00:22.269Z","updated_at":"2026-08-04T05:00:26.756Z","avatar_url":"https://github.com/wild-linker.png","language":"Rust","funding_links":["https://github.com/sponsors/davidlattimore"],"categories":["Rust","others","Linkers \u0026 Build Speed"],"sub_categories":["[mold](https://github.com/rui314/mold) `C++` `15K ` · [benchmarks](https://github.com/rui314/mold#benchmarks)"],"readme":"# Wild linker\n\n![Wild logo - drawing of rusty chain links with vines](/images/wild.png)\n\nWild is a linker with the goal of being very fast for iterative development.\n\nThe plan is to eventually make it incremental, however that isn't yet implemented. It is however\nalready pretty fast even without incremental linking.\n\n## Installation\n\n### From GitHub releases\n\nDownload a tarball from the [releases page](https://github.com/wild-linker/wild/releases). Unpack\nit and copy the `wild` binary somewhere on your path.\n\n### Cargo binstall\n\nIf you have [cargo-binstall](https://github.com/cargo-bins/cargo-binstall), you can install wild as\nfollows:\n\n```sh\ncargo binstall wild-linker\n```\n\n### Brew\n\n```sh\nbrew install wild-linker/wild/wild\n```\n\n### Build latest release from crates.io\n\n```sh\ncargo install --locked wild-linker\n```\n\n### Build from git head\n\nTo build and install the latest, unreleased code:\n\n```sh\ncargo install --locked --bin wild --git https://github.com/wild-linker/wild.git wild-linker\n```\n\n### Nix\n\nTo use a stable Wild from Nixpkgs:\n\n```nix\nlet\n wildStdenv = pkgs.useWildLinker pkgs.stdenv;\nin\npkgs.callPackage ./package { stdenv = wildStdenv; }\n```\n\nto use the latest unstable git revision of wild, see [the nix documentation](./nix/nix.md)\n\n## Using as your default linker\n\nBeing a drop-in replacement, Wild can be used similarly to other linkers by being invoked by GCC or\nClang. Meaning you have several options:\n\n* Clang's exclusive option `--ld-path=wild`\n* GCC 16.1+ and Clang's option `-fuse-ld=wild` (note that Clang requires `ld.wild` binary/symlink)\n* Generally supported `-B \u003cpath\u003e`, where `\u003cpath\u003e` is the directory containing `ld` that points to\n  `wild`\n\nBelow are examples of integrating Wild with various build systems.\n\n### Rust (Cargo)\n\nYou can use one of the options mentioned above in `~/.cargo/config.toml`:\n\n```toml\n[target.x86_64-unknown-linux-gnu]\nlinker = \"clang\"\nrustflags = [\"-Clink-arg=--ld-path=wild\"]\n```\n\nOr:\n\n```toml\n[target.x86_64-unknown-linux-gnu]\n# linker = \"clang\" # Uncomment this line if your GCC is older than version 16.\nrustflags = [\"-Clink-arg=-fuse-ld=wild\"]\n```\n\n### CMake\n\nCMake 4.4 or later supports Wild directly when used with Clang or GCC 16 or later. You can select\nWild as the linker by adding `-DCMAKE_LINKER_TYPE=WILD` to the cmake command-line.\n\nFor older versions of cmake, see the generic instructions below.\n\n### C/C++ (autotools, meson, old CMake etc.)\n\nUsually setting `LDFLAGS` is enough, but there are projects that implement their own solutions:\n\n```sh\nexport LDFLAGS=\"${LDFLAGS} -fuse-ld=wild\"\n```\n\nOr (especially useful for older GCC versions), create a symlink `ld` pointing to `wild` and pass the\ndirectory to GCC:\n\n```sh\nln -s /usr/bin/wild /tmp/ld\n\nexport CFLAGS=\"${CFLAGS} -B/tmp\"\nexport CXXFLAGS=\"${CXXFLAGS} -B/tmp\"\nexport LDFLAGS=\"${LDFLAGS} -B/tmp\"\n```\n\nThen configure the project (you might need to remove the configuration cache first) and run your\nusual build steps.\n\nDue to the complexity of these build systems, you might want to verify that Wild was used to link a\nbinary with [readelf](#how-can-i-verify-that-wild-was-used-to-link-a-binary).\n\n### Illumos specific Cargo configuration:\n\n```toml\n[target.x86_64-unknown-illumos]\n# Absolute path to clang - on OmniOS this is likely something like /opt/ooce/bin/clang.\nlinker = \"/usr/bin/clang\"\n\nrustflags = [\n    # Will silently delegate to GNU ld or Sun ld unless the absolute path to Wild is provided.\n    \"-Clink-arg=-fuse-ld=/absolute/path/to/wild\"\n]\n```\n\n## Using wild in CI\n\nIf you'd like to use Wild as your linker for Rust code in CI, see\n[wild-action](https://github.com/wild-linker/action).\n\n## Q\u0026A\n\n### Why another linker?\n\nMold is already very fast, however it doesn't do incremental linking and the author has stated that\nthey don't intend to. Wild doesn't do incremental linking yet, but that is the end-goal. By writing\nWild in Rust, it's hoped that the complexity of incremental linking will be achievable.\n\n### What's working?\n\nThe following platforms / architectures are currently supported:\n\n* x86-64 on Linux\n* ARM64 on Linux\n* RISC-V (riscv64gc) on Linux\n* LoongArch64 on Linux (initial support)\n* PPC64LE on Linux (initial support)\n\nThe following is working with the caveat that there may be bugs:\n\n* Output to statically linked, non-relocatable binaries\n* Output to statically linked, position-independent binaries (static-PIE)\n* Output to dynamically linked binaries\n* Output to shared objects (.so files)\n* Rust proc-macros, when linked with Wild work\n* Most of the top downloaded crates on crates.io have been tested with Wild and pass their tests\n* Debug info\n* GNU jobserver support\n* Partial linker script support. See the [linker script support matrix](LINKER_SCRIPT_SUPPORT.md) for details.\n* Linker plugin LTO - [known issues](https://github.com/wild-linker/wild/issues?q=is%3Aissue%20state%3Aopen%20label%3ALTO)\n\n### What isn't yet supported?\n\nHere are some of the larger things that aren't yet done, roughly sorted by current priority:\n\n* Incremental linking\n* More complex linker scripts\n* Mach-O support\n* Windows support\n\n### How can I verify that Wild was used to link a binary?\n\nInstall `readelf` (available from binutils package), then run:\n\n```sh\nreadelf --string-dump .comment my-executable\n```\n\nLook for a line like:\n\n```\nLinker: Wild version 0.1.0\n```\n\nYou can probably also get away with `strings` (also available from binutils package):\n\n```sh\nstrings my-executable | grep 'Linker:'\n```\n\n### Where did the name come from?\n\nIt's somewhat of a tradition for linkers to end with the letters \"ld\". e.g. \"GNU ld, \"gold\", \"lld\",\n\"mold\". Since the end-goal is for the linker to be incremental, an \"I\" is added. Let's say the \"W\"\nstands for \"Wild\", since recursive acronyms are popular in open-source projects.\n\n## Benchmarks\n\nThe goal of Wild is to eventually be very fast via incremental linking. However, we also want to be\nas fast as we can be for non-incremental linking and for the initial link when incremental linking\nis enabled.\n\nAll benchmarks are run with output to a tmpfs. See [BENCHMARKING.md](BENCHMARKING.md) for details on\nrunning benchmarks.\n\nWe run benchmarks on a few different systems:\n\n* [Ryzen 9 9955HX (16 core, 32 thread)](benchmarks/ryzen-9955hx.md)\n* [2020 era Intel-based laptop with 4 cores and 8 threads](benchmarks/lemp9.md)\n* [Raspberry Pi 5](benchmarks/raspberrypi.md)\n\nHere's a few highlights.\n\n### Ryzen 9955HX (16 core, 32 thread)\n\nFirst, we link the Chrome web browser (or technically, Chromium).\n\n![Benchmark of linking chrome-crel](benchmarks/images/ryzen-9955hx/chrome-crel-time.svg)\n\nMemory consumption when linking Chromium:\n\n![Benchmark of linking chrome-crel](benchmarks/images/ryzen-9955hx/chrome-crel-memory.svg)\n\nlibrustc-driver is the shared object where most of the code in the Rust compiler lives. This\nbenchmark shows the time to link it.\n\n![Benchmark of linking librustc-driver](benchmarks/images/ryzen-9955hx/librustc-driver-time.svg)\n\nFor something much smaller, this is the time to link Wild itself. This also shows a few different\nWild versions, so you can see how the link time has been tracking over releases.\n\n![Benchmark of linking wild](benchmarks/images/ryzen-9955hx/wild-time.svg)\n\n### Raspberry Pi 5\n\nHere's linking rust-analyzer on a Raspberry Pi 5.\n\n![Time to link rust-analyzer-no-debug](benchmarks/images/raspberrypi/rust-analyzer-no-debug-time.svg)\n\n## Linking Rust code\n\nThe following is a `cargo test` command-line that can be used to build and test a crate using Wild.\nThis has been run successfully on a few popular crates (e.g. ripgrep, serde, tokio, rand, bitflags).\nIt assumes that the \"wild\" binary is on your path. It also depends on the Clang compiler being\ninstalled, since GCC doesn't allow using an arbitrary linker.\n\n```sh\nRUSTFLAGS=\"-Clinker=clang -Clink-args=--ld-path=wild\" cargo test\n```\n\nAlternatively, with `ld.wild` symlink pointing at `wild`:\n```sh\nRUSTFLAGS=\"-Clinker=clang -Clink-args=-fuse-ld=wild\" cargo test\n```\n\n## Contributing\n\nFor more information on contributing to `wild` see [CONTRIBUTING.md](CONTRIBUTING.md).\n\nFor a high-level overview of Wild's design, see [DESIGN.md](DESIGN.md).\n\n## Chat server\n\nWe have a Zulip server for Wild-related chat. You can join\n[here](https://wild.zulipchat.com/join/bbopdeg6howwjpaiyowngyde/).\n\n## Further reading\n\nMany of the posts on [David's blog](https://davidlattimore.github.io/) are about various aspects of\nthe Wild linker.\n\n## Sponsorship\n\nIf you'd like to [sponsor this work](https://github.com/sponsors/davidlattimore), that would be very\nmuch appreciated. The more sponsorship I get the longer I can continue to work on this project full\ntime.\n\n# Code of Conduct\n\nThe Wild project adheres to the [Rust code of\nconduct](https://rust-lang.org/policies/code-of-conduct/). If you have any moderation concerns or\nqueries, please email wild-mod@googlegroups.com.\n\n## License\n\nLicensed under either of [Apache License, Version 2.0](LICENSE-APACHE) or [MIT license](LICENSE-MIT)\nat your option.\n\nUnless you explicitly state otherwise, any contribution intentionally submitted for inclusion in\nWild by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any\nadditional terms or conditions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwild-linker%2Fwild","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwild-linker%2Fwild","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwild-linker%2Fwild/lists"}