diff --git a/pkgs/development/compilers/llvm/18/llvm/backport-darwin-triple-parsing.patch b/pkgs/development/compilers/llvm/18/llvm/backport-darwin-triple-parsing.patch new file mode 100644 index 000000000000..9426f99512b7 --- /dev/null +++ b/pkgs/development/compilers/llvm/18/llvm/backport-darwin-triple-parsing.patch @@ -0,0 +1,34 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Randy Eckenrode +Date: Tue, 11 Aug 2026 20:12:42 -0400 +Subject: [PATCH] backport-darwin-triple-parsing + +--- + lib/TargetParser/Triple.cpp | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +diff --git a/lib/TargetParser/Triple.cpp b/lib/TargetParser/Triple.cpp +index 0bbe8a3cedfd..4143c3eac05d 100644 +--- a/lib/TargetParser/Triple.cpp ++++ b/lib/TargetParser/Triple.cpp +@@ -1253,9 +1253,15 @@ bool Triple::getMacOSXVersion(VersionTuple &Version) const { + } + if (Version.getMajor() <= 19) { + Version = VersionTuple(10, Version.getMajor() - 4); +- } else { +- // darwin20+ corresponds to macOS 11+. ++ } else if (Version.getMajor() < 25) { ++ // darwin20-24 corresponds to macOS 11-15. + Version = VersionTuple(11 + Version.getMajor() - 20); ++ } else if ((Version.getMajor() == 25) || (Version.getMajor() == 26)) { ++ // darwin25-26 corresponds to macOS 26-27. ++ Version = VersionTuple(Version.getMajor() + 1); ++ } else { ++ // Starting with darwin27, it naturally corresponds to the same macOS ++ // version. + } + break; + case MacOSX: +-- +2.54.0 + diff --git a/pkgs/development/compilers/llvm/21/llvm/backport-darwin-triple-parsing.patch b/pkgs/development/compilers/llvm/21/llvm/backport-darwin-triple-parsing.patch new file mode 100644 index 000000000000..7f2cc06b51d4 --- /dev/null +++ b/pkgs/development/compilers/llvm/21/llvm/backport-darwin-triple-parsing.patch @@ -0,0 +1,31 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Randy Eckenrode +Date: Tue, 11 Aug 2026 20:19:29 -0400 +Subject: [PATCH] backport-darwin-triple-parsing + +--- + lib/TargetParser/Triple.cpp | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/lib/TargetParser/Triple.cpp b/lib/TargetParser/Triple.cpp +index 0584c941d2e6..30cf78dbaabc 100644 +--- a/lib/TargetParser/Triple.cpp ++++ b/lib/TargetParser/Triple.cpp +@@ -1449,9 +1449,12 @@ bool Triple::getMacOSXVersion(VersionTuple &Version) const { + } else if (Version.getMajor() < 25) { + // darwin20-24 corresponds to macOS 11-15. + Version = VersionTuple(11 + Version.getMajor() - 20); +- } else { +- // darwin25 corresponds with macOS26+. ++ } else if ((Version.getMajor() == 25) || (Version.getMajor() == 26)) { ++ // darwin25-26 corresponds to macOS 26-27. + Version = VersionTuple(Version.getMajor() + 1); ++ } else { ++ // Starting with darwin27, it naturally corresponds to the same macOS ++ // version. + } + break; + case MacOSX: +-- +2.54.0 + diff --git a/pkgs/development/compilers/llvm/common/llvm/default.nix b/pkgs/development/compilers/llvm/common/llvm/default.nix index d5dcd4d58cce..222f7fb6e54d 100644 --- a/pkgs/development/compilers/llvm/common/llvm/default.nix +++ b/pkgs/development/compilers/llvm/common/llvm/default.nix @@ -222,7 +222,14 @@ stdenv.mkDerivation ( hash = "sha256-3hkbYPUVRAtWpo5qBmc2jLZLivURMx8T0GQomvNZesc="; stripLen = 1; } - ); + ) + ++ lib.optionals (lib.versionOlder release_version "23") [ + # As of macOS 27 (and iOS 27, etc), the Darwin version number is the same as the OS version number. + # This change breaks target parsing because `darwin27` is incorrectly interpreted as macOS 28. + # This patch is a backport of the target parsing changes in LLVM 23, which fixes the problem. + # Hopefully, Apple does not change the version number scheme again any time soon. + (getVersionFile "llvm/backport-darwin-triple-parsing.patch") + ]; nativeBuildInputs = [ cmake diff --git a/pkgs/development/compilers/llvm/common/patches.nix b/pkgs/development/compilers/llvm/common/patches.nix index 76ae90c3aaa7..5ea9faa3d2e2 100644 --- a/pkgs/development/compilers/llvm/common/patches.nix +++ b/pkgs/development/compilers/llvm/common/patches.nix @@ -20,6 +20,17 @@ path = ../18; } ]; + "llvm/backport-darwin-triple-parsing.patch" = [ + { + after = "18"; + before = "21"; + path = ../18; + } + { + after = "21"; + path = ../21; + } + ]; "llvm/gnu-install-dirs.patch" = [ { after = "23";