Unverified Commit 3bd79718 authored by sternenseemann's avatar sternenseemann Committed by GitHub
Browse files

haskell.compiler.ghc{948,967,984,9102,9103,9121,9122}: backport patches for LLVM support (#440774)

parents 64c3d763 b6be8a03
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -274,7 +274,9 @@
      # Missing ELF symbols
      ++ lib.optionals stdenv.targetPlatform.isAndroid [
        ./ghc-define-undefined-elf-st-visibility.patch
      ];
      ]

      ++ (import ./common-llvm-patches.nix { inherit lib version fetchpatch; });

    stdenv = stdenvNoCC;
  },
@@ -865,8 +867,6 @@ stdenv.mkDerivation (
      timeout = 24 * 3600;
      platforms = lib.platforms.all;
      inherit (bootPkgs.ghc.meta) license;
      # To be fixed by <https://github.com/NixOS/nixpkgs/pull/440774>.
      broken = useLLVM;
    };

    dontStrip = targetPlatform.useAndroidPrebuilt || targetPlatform.isWasm;
+126 −0
Original line number Diff line number Diff line
{
  lib,
  version,
  fetchpatch,
}:

# Backports for LLVM support.
#
# These primarily focus on backporting patches that are relevant to
# supporting newer LLVM versions, rather than aiming to backport every
# LLVM backend bug fix or improvement from newer GHC releases.
#
# Potentially of interest for cross‐compiling GHC 9.4.8 to LoongArch64:
#
# * <https://gitlab.haskell.org/ghc/ghc/-/merge_requests/9292>
# * <https://gitlab.haskell.org/ghc/ghc/-/merge_requests/13620>

[ ]

++ lib.optionals (lib.versionOlder version "9.6") [
  # <https://gitlab.haskell.org/ghc/ghc/-/merge_requests/9857>
  (fetchpatch {
    name = "ghc-9.4-llvm-support-15.patch";
    url = "https://gitlab.haskell.org/ghc/ghc/-/commit/0cc16aaf89d7dc3963764b7193ceac73e4e3329b.patch";
    hash = "sha256-G0gqrj5iPuQ5JuC2+d151yka72XZMbrqMWPZd4EuT04=";
  })

  # <https://gitlab.haskell.org/ghc/ghc/-/merge_requests/13763>
  ./ghc-9.4-llvm-fix-version-detection.patch
]

++ lib.optionals (lib.versionOlder version "9.8") [
  (
    # The upstream backport of !13763 in 9.6.7 removed an unused import
    # that is required by the next series.
    if lib.versionOlder version "9.6" then null else ./ghc-9.6-llvm-restore-import.patch
  )
]

++ lib.optionals (lib.versionOlder version "9.10") [
  # <https://gitlab.haskell.org/ghc/ghc/-/merge_requests/11124>
  (
    if lib.versionOlder version "9.8" then
      ./ghc-9.4-llvm-add-metadata-exports.patch
    else
      fetchpatch {
        name = "ghc-9.8-llvm-add-metadata-exports.patch";
        url = "https://gitlab.haskell.org/ghc/ghc/-/commit/fcfc1777c22ad47613256c3c5e7304cfd29bc761.patch";
        hash = "sha256-9rpyeH8TUVeKoW4PA6qn7DG2+P9MhBCywmbi1O/NsTQ=";
      }
  )
  (
    if lib.versionOlder version "9.8" then
      ./ghc-9.4-llvm-allow-llvmlits-in-metaexprs.patch
    else
      fetchpatch {
        name = "ghc-9.8-llvm-allow-llvmlits-in-metaexprs.patch";
        url = "https://gitlab.haskell.org/ghc/ghc/-/commit/5880fff6d353a14785c457999fded5a7100c9514.patch";
        hash = "sha256-NDMGNc0PYpWJUW+nI2YvMsBOWRIfNix4oWHQZAIxrVY=";
      }
  )
  (
    # `GHC.Driver.DynFlags` was not split out until 9.8, so this can be
    # omitted with no functional effect on the rest of the series on
    # earlier versions.
    if lib.versionOlder version "9.8" then
      null
    else
      fetchpatch {
        name = "ghc-9.8-move-feature-predicates-to-dynflags.patch";
        url = "https://gitlab.haskell.org/ghc/ghc/-/commit/86ce92a2f81a04aa980da2891d0e300cb3cb7efd.patch";
        hash = "sha256-SzJgzq4b5wAMPz+/QSa67iSOxB2enqejvV0lsF0+9L8=";
      }
  )
  (fetchpatch {
    name = "ghc-9.4-llvm-add-module-flag-metadata-infra.patch";
    url = "https://gitlab.haskell.org/ghc/ghc/-/commit/a6a3874276ced1b037365c059dcd0a758e813a5b.patch";
    hash = "sha256-tAYDRNXmpp5cZtyONpO8vlsDmnNEBbh4J3oSCy/uWWc=";
  })
  (
    if lib.versionOlder version "9.8" then
      ./ghc-9.4-llvm-fix-stack-alignment.patch
    else
      fetchpatch {
        name = "ghc-9.8-llvm-fix-stack-alignment.patch";
        url = "https://gitlab.haskell.org/ghc/ghc/-/commit/e9af2cf3f16ab60b5c79ed91df95359b11784df6.patch";
        hash = "sha256-RmYwFN3c3AgJxF9KXWQLdwOgugzepCW1wcTdJX1h0C4=";
      }
  )

  # <https://gitlab.haskell.org/ghc/ghc/-/merge_requests/8999>
  (
    if lib.versionOlder version "9.6" then
      ./ghc-9.4-llvm-use-new-pass-manager.patch
    else if lib.versionOlder version "9.8" then
      ./ghc-9.6-llvm-use-new-pass-manager.patch
    else
      ./ghc-9.8-llvm-use-new-pass-manager.patch
  )
]

++ lib.optionals (lib.versionOlder version "9.12") [
  # <https://gitlab.haskell.org/ghc/ghc/-/merge_requests/12726>
  (fetchpatch {
    name = "ghc-9.4-llvm-support-16-17-18.patch";
    url = "https://gitlab.haskell.org/ghc/ghc/-/commit/ae170155e82f1e5f78882f7a682d02a8e46a5823.patch";
    hash = "sha256-U1znWqXZTORmAg480p5TjTL53T2Zn+1+9Fnk2V1Drfs=";
  })

  # <https://gitlab.haskell.org/ghc/ghc/-/merge_requests/13311>
  (fetchpatch {
    name = "ghc-9.4-llvm-support-19.patch";
    url = "https://gitlab.haskell.org/ghc/ghc/-/commit/36bbb167f354a2fbc6c4842755f2b1e374e3580e.patch";
    excludes = [ ".gitlab-ci.yml" ];
    hash = "sha256-v8T/FtriDPbibcIDZmU2yotBoDVo+wU2+gw+CCdQlm0=";
  })
]

++ lib.optionals (lib.versionOlder version "9.14") [
  # <https://gitlab.haskell.org/ghc/ghc/-/merge_requests/14600>
  (fetchpatch {
    name = "ghc-9.4-llvm-support-20.patch";
    url = "https://gitlab.haskell.org/ghc/ghc/-/commit/ca03226db2db2696460bfcb8035dd3268d546706.patch";
    hash = "sha256-7cO049DQtJHUAhwPujoFO+zQtXsMg6VFTHtMDwenrKs=";
  })
]
+6 −12
Original line number Diff line number Diff line
@@ -14,14 +14,12 @@

  # build-tools
  bootPkgs,
  autoconf,
  automake,
  autoreconfHook,
  coreutils,
  fetchpatch,
  fetchurl,
  perl,
  python3,
  m4,
  sphinx,
  xattr,
  autoSignDarwinBinariesHook,
@@ -388,7 +386,9 @@ stdenv.mkDerivation (
      # elimination on aarch64-darwin. (see
      # https://github.com/NixOS/nixpkgs/issues/140774 for details). krank:ignore-line
      ./Cabal-at-least-3.6-paths-fix-cycle-aarch64-darwin.patch
    ];
    ]

    ++ (import ./common-llvm-patches.nix { inherit lib version fetchpatch; });

    postPatch = "patchShebangs .";

@@ -444,7 +444,6 @@ stdenv.mkDerivation (
      export AR_STAGE0="$AR_FOR_BUILD"

      echo -n "${buildMK}" > mk/build.mk
      sed -i -e 's|-isysroot /Developer/SDKs/MacOSX10.5.sdk||' configure
    ''
    # Haddock and sphinx need a working locale
    + lib.optionalString (enableDocs || enableHaddockProgram) (
@@ -479,8 +478,7 @@ stdenv.mkDerivation (
      grep linux-musl llvm-targets | sed 's/^/  /'

      echo "And now patching to preserve '-musleabi' as done with '-gnueabi'"
      # (aclocal.m4 is actual source, but patch configure as well since we don't re-gen)
      for x in configure aclocal.m4; do
      for x in aclocal.m4; do
        substituteInPlace $x \
          --replace '*-android*|*-gnueabi*)' \
                    '*-android*|*-gnueabi*|*-musleabi*)'
@@ -547,10 +545,8 @@ stdenv.mkDerivation (
    dontAddExtraLibs = true;

    nativeBuildInputs = [
      autoreconfHook
      perl
      autoconf
      automake
      m4
      python3
      bootPkgs.alex
      bootPkgs.happy
@@ -677,8 +673,6 @@ stdenv.mkDerivation (
      timeout = 24 * 3600;
      platforms = lib.platforms.all;
      inherit (bootPkgs.ghc.meta) license;
      # To be fixed by <https://github.com/NixOS/nixpkgs/pull/440774>.
      broken = useLLVM;
    };

  }
+31 −0
Original line number Diff line number Diff line
From 701154fdbceff2edb121768eb660713a98580af8 Mon Sep 17 00:00:00 2001
From: Ben Gamari <ben@smart-cactus.org>
Date: Tue, 22 Aug 2023 12:23:26 -0400
Subject: [PATCH] llvmGen: Add export list to GHC.Llvm.MetaData

(cherry picked from commit fcfc1777c22ad47613256c3c5e7304cfd29bc761)
---
 compiler/GHC/Llvm/MetaData.hs | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/compiler/GHC/Llvm/MetaData.hs b/compiler/GHC/Llvm/MetaData.hs
index f46ae0a101..3526c11bc3 100644
--- a/compiler/GHC/Llvm/MetaData.hs
+++ b/compiler/GHC/Llvm/MetaData.hs
@@ -1,6 +1,12 @@
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 
-module GHC.Llvm.MetaData where
+module GHC.Llvm.MetaData
+  ( MetaId(..)
+  , ppr
+  , MetaExpr(..)
+  , MetaAnnot(..)
+  , MetaDecl(..)
+  ) where
 
 import GHC.Prelude
 
-- 
2.50.1
+40 −0
Original line number Diff line number Diff line
From 51765e343e9829f1d3e95d1d7303fa3594ae91cc Mon Sep 17 00:00:00 2001
From: Ben Gamari <ben@smart-cactus.org>
Date: Tue, 22 Aug 2023 12:24:53 -0400
Subject: [PATCH] llvmGen: Allow LlvmLits in MetaExprs

This omission appears to be an oversight.

(cherry picked from commit 5880fff6d353a14785c457999fded5a7100c9514)
---
 compiler/GHC/Llvm/MetaData.hs | 1 +
 compiler/GHC/Llvm/Ppr.hs      | 1 +
 2 files changed, 2 insertions(+)

diff --git a/compiler/GHC/Llvm/MetaData.hs b/compiler/GHC/Llvm/MetaData.hs
index f46ae0a101..121cdd5788 100644
--- a/compiler/GHC/Llvm/MetaData.hs
+++ b/compiler/GHC/Llvm/MetaData.hs
@@ -68,6 +68,7 @@ instance Outputable MetaId where
 
 -- | LLVM metadata expressions
 data MetaExpr = MetaStr !LMString
+              | MetaLit !LlvmLit
               | MetaNode !MetaId
               | MetaVar !LlvmVar
               | MetaStruct [MetaExpr]
diff --git a/compiler/GHC/Llvm/Ppr.hs b/compiler/GHC/Llvm/Ppr.hs
index f48e7aa034..bc88a13439 100644
--- a/compiler/GHC/Llvm/Ppr.hs
+++ b/compiler/GHC/Llvm/Ppr.hs
@@ -256,6 +256,7 @@ ppMetaExpr :: LlvmCgConfig -> MetaExpr -> SDoc
 ppMetaExpr opts = \case
   MetaVar (LMLitVar (LMNullLit _)) -> text "null"
   MetaStr    s                     -> char '!' <> doubleQuotes (ftext s)
+  MetaLit    l                     -> ppTypeLit opts l
   MetaNode   n                     -> ppr n
   MetaVar    v                     -> ppVar opts v
   MetaStruct es                    -> char '!' <> braces (ppCommaJoin (map (ppMetaExpr opts) es))
-- 
2.50.1
Loading