Skip to content

LLVM needs additional maintainers (mainly for updates) #171047

Open
@primeos

Description

Note: I'll edit this post to keep it up-to-date.

We do have LLVM maintainers that improve the Nix expressions, handle PRs, etc. but we do severely lack maintainers to package new LLVM versions. Adding new LLVM versions is currently handled by me but I neither have enough time nor motivation to handle LLVM (which is also why I often (have to) take some shortcuts, e.g.: https://github.com/NixOS/nixpkgs/pull/162423/files). I'm basically only doing that work because Chromium requires bleeding-edge LLVM versions to compile (it's currently already difficult to compile Chromium with LLVM 14 even tough there isn't even a RC for LLVM 15 out - Google simply chooses to pick Git commits from the main branch...).

The most relevant tasks that need help are:

  1. Keeping llvmPackages_git up-to-date (this is mostly important to enable us to quickly package new LLVM versions as soon as the first RC is out without having to put in too much work at once). This requires most of the time. It currently requires resolving a lot of merge conflicts due to our GNU install dirs patches (it wasn't really difficult so far and didn't require knowing the code but it takes a fair bit of time as there are a lot of those patches and often a few other build failures that require fixing).
    • llvmPackages_git is currently severely out-of-date and it would probably be best to replace it with the content of llvmPackages_14 first (rm -r pkgs/development/compilers/llvm/git/ && cp -r pkgs/development/compilers/llvm/14/ pkgs/development/compilers/llvm/git but one needs to check the Git log first)
  2. Packaging new LLVM versions as soon as the first RC is out (that's pretty simple/straightforward as it's basically just copying llvmPackages_git and switching to the right version, e.g.: llvmPackages_14: init at 2022-01-07 #162104 (I prefer doing it in two commits but one could also diff it against llvmPackages_git)).
    • LLVM recently switched to a bi-weekly release schedule (vs. just 1-2 additional releases per major version) so this will also require more time/effort. But we might not even want to package every bi-weekly release (especially since our staging workflow is probably to slow for that and it should cause quite a few rebuilds if llvmPackages_latest points to it).
  3. Updating llvmPackages_latest a super easy change (just one line) but testing is challenging (a full nixpkgs-review might be doable but one needs to exclude the transient dependencies from Mesa - using Hydra might be easier).
  4. And of course we could also really need testers/maintainers for other platforms (AArch64, Darwin, etc.).
  5. Remove old LLVM versions from Nixpkgs. We currently package everything from version 5 (released in 2017) up to version 14 (i.e., 10 different versions - and that number is likely growing).

LLVM is one of currently five release critical packages and some notable packages that depend on recent versions are:

  • Chromium (often even requires RCs - currently it would require an unreleased LLVM version for PGO and some build flags)
  • Mesa (uses llvmPackages_latest and is responsible for most of the rebuilds)
  • Rust (already depends on llvmPackages_14)

And for documentation:

  • We currently have two update scripts
    • pkgs/development/compilers/llvm/update.sh
    • pkgs/development/compilers/llvm/update-git.py

I'll try to answer questions / help during the transition but tbh I don't know that much about LLVM (just enough to update it without too much breakage).

cc existing LLVM maintainers: @lovek323 @7c6f434c @dtzWill @primeos
And (AFAIK) @sternenseemann and @Ericson2314 do most of the Nix expression maintenance (refactorings/improvements/cleanups/cross-fixes/etc.)

Metadata

Assignees

No one assigned

    Labels

    6.topic: llvm/clangIssues related to llvmPackages, clangStdenv and related9.needs: maintainerPackage or module needs active maintainers

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions