0
0
Fork 0
mirror of https://github.com/NixOS/nixpkgs.git synced 2025-07-13 21:50:33 +03:00

llvmPackages: document adding a patch

The `getVersionFile` function in the LLVM packaging is a bit confusing.
Clarify its use by making a step-by-step instruction for adding new
patches.
This commit is contained in:
Alexander Bantyev 2025-05-17 14:21:53 +04:00 committed by GitHub
parent 506bec1d86
commit 941751e8cc
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -77,3 +77,22 @@ Instead of applying the patches to the worktree per the above instructions, one
For newer LLVM versions, enough has has been upstreamed,
(see https://reviews.llvm.org/differential/query/5UAfpj_9zHwY/ for my progress upstreaming),
that I have just assembled new gnu-install-dirs patches from the remaining unmerged patches instead of rebasing from the prior LLVM's gnu install dirs patch.
## Adding a patch
To add an LLVM patch in the Nixpkgs tree,
1. Put the patch in the corresponding directory (`<VERSION>/<PACKAGE>`).
_Example_: If you want your patch to apply to clang version 12 (and, optionally, later versions), put it in `./12/clang`.
2. Add the patch to the `patches` argument of the corresponding package in `./common`, guarded by a `lib.optionals` with the desired version constraints, passed through the `getVersionFile` function.
_Example_: If you want the patch `./12/llvm/fix-llvm-issue-49955.patch` to apply to LLVM 12, add `lib.optional (lib.versions.major release_version == "12") (getVersionFile "llvm/fix-llvm-issue-49955.patch")` to `./common/llvm/default.nix`.
3. If you wish for this single patch to apply to multiple versions of the package, extend the conditions in the `lib.optional` guard and add the corresponding constraints to `./common/patches.nix`; note that `after` is inclusive and `before` is exclusive.
_Example_:
If you want the patch `./12/clang/purity.patch` to apply to versions 12, 13 and 14, you have to
- Modify the guard in `./common/clang/default.nix` as follows: `lib.optional (lib.versionAtLeast release_version "12" && lib.versionOlder release_version "15")`
- Add `{ "clang/purity.patch" = [ { after = 12; before = 15; path = ../12; } ]; }` to `common/patches.nix`.
You may have multiple different patches with the same name that would apply to different versions; in that case, add the necessary constraints to `common/patches.nix`.