all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Alex Griffin via Guix-patches via <guix-patches@gnu.org>
To: "42014@debbugs.gnu.org" <42014@debbugs.gnu.org>
Subject: [bug#42014] [PATCH] WIP: gnu: ghc@8.4: Support 32- and 64-bit ARM systems.
Date: Sat, 27 Jun 2020 21:16:10 +0000	[thread overview]
Message-ID: <EgF-edHWbrDu8UYMbyn1KhCeRxYHaUvcBNFI7sIlRoe3a0hZocEhHwwP0U-KvxzxK9ZoD0ueb2q72nkxbXsZXAWxNwIRoP5Fos_NmLQyaOU=@ajgrf.com> (raw)
In-Reply-To: <iqxuLyt2f_ck_2DTkqr6jKDaFGhsrSuEQQA8frhOSY4s2mymb9NgH2csILFrwNHi0mxHMNKYFBsshhyhXiKkHUgNqKI4yrmwfKixnISeU6Q=@ajgrf.com>

[-- Attachment #1: Type: text/plain, Size: 306 bytes --]

Here's the second patch. I'm making some progress on bootstrapping Haskell on ARM. Currently it builds the stage1 compiler just fine, then panics while building the stage2 compiler.

Progress is super slow, mainly because long compilation times mean I can only try 1 change per day.
--
Alex Griffin


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0002-gnu-ghc-8.4-Support-32-and-64-bit-ARM-systems.patch --]
[-- Type: text/x-patch; name=0002-gnu-ghc-8.4-Support-32-and-64-bit-ARM-systems.patch, Size: 5919 bytes --]

From 405cf569abeaa583ddf6ea3639d9f74853fee36a Mon Sep 17 00:00:00 2001
From: Alex Griffin <a@ajgrf.com>
Date: Sat, 27 Jun 2020 16:01:14 -0500
Subject: [PATCH 2/2] gnu: ghc@8.4: Support 32- and 64-bit ARM systems.

* gnu/packages/haskell.scm (ghc-bootstrap-aarch64-8.2.2,
ghc-bootstrap-armhf-8.2.2): New variables.
(ghc-8.4)[supported-systems]: Add armhf-linux and aarch64-linux.
[inputs, native-inputs]: Add extra dependencies for ARM builds.
[arguments]: Use gold linker, add libgcc_s to LD_LIBRARY_PATH, and
don't call patchelf on non-existent files.
---
 gnu/packages/haskell.scm | 52 +++++++++++++++++++++++++++++++++++-----
 1 file changed, 46 insertions(+), 6 deletions(-)

diff --git a/gnu/packages/haskell.scm b/gnu/packages/haskell.scm
index ac5ad14320..533d82ae44 100644
--- a/gnu/packages/haskell.scm
+++ b/gnu/packages/haskell.scm
@@ -39,11 +39,14 @@
 
 (define-module (gnu packages haskell)
   #:use-module (gnu packages)
+  #:use-module (gnu packages base)
   #:use-module (gnu packages bootstrap)
   #:use-module (gnu packages elf)
+  #:use-module (gnu packages gcc)
   #:use-module (gnu packages ghostscript)
   #:use-module (gnu packages libffi)
   #:use-module (gnu packages lisp)
+  #:use-module (gnu packages llvm)
   #:use-module (gnu packages multiprecision)
   #:use-module (gnu packages ncurses)
   #:use-module (gnu packages perl)
@@ -115,6 +118,24 @@ top of CLISP.")
      (base32
       "08w2ik55dp3n95qikmrflc91lsiq01xp53ki3jlhnbj8fqnxfrwy"))))
 
+(define ghc-bootstrap-aarch64-8.2.2
+  (origin
+    (method url-fetch)
+    (uri
+     "https://www.haskell.org/ghc/dist/8.2.2/ghc-8.2.2-aarch64-deb8-linux.tar.xz")
+    (sha256
+     (base32
+      "1k2amylcp1ad67c75h1pqf7czf9m0zj1i7hdc45ghjklnfq9hrk7"))))
+
+(define ghc-bootstrap-armhf-8.2.2
+  (origin
+    (method url-fetch)
+    (uri
+     "https://www.haskell.org/ghc/dist/8.2.2/ghc-8.2.2-armv7-deb8-linux.tar.xz")
+    (sha256
+     (base32
+      "1jmv8qmnh5bn324fivbwdcaj55kvw7cb2zq9pafmlmv3qwwx7s46"))))
+
 (define-public ghc-8.4
   (package
     (name "ghc")
@@ -127,12 +148,21 @@ top of CLISP.")
        (sha256
         (base32 "1ch4j2asg7pr52ai1hwzykxyj553wndg7wq93i47ql4fllspf48i"))))
     (build-system gnu-build-system)
-    (supported-systems '("i686-linux" "x86_64-linux"))
+    (supported-systems '("i686-linux" "x86_64-linux"
+                         "armhf-linux" "aarch64-linux"))
     (outputs '("out" "doc"))
     (inputs
      `(("gmp" ,gmp)
        ("ncurses" ,ncurses)
-       ("libffi" ,libffi)))
+       ("libffi" ,libffi)
+       ,@(match (or (%current-target-system) (%current-system))
+           ((or "aarch64-linux" "armhf-linux")
+            `(("gcc:lib" ,gcc "lib")
+              ("gold-wrapper"
+               ,(make-ld-wrapper "gold-wrapper"
+                                 #:binutils binutils-gold))
+              ("llvm" ,llvm)))
+           (_ '()))))
     (native-inputs
      `(("perl" ,perl)
        ("python" ,python)               ; for tests
@@ -142,7 +172,9 @@ top of CLISP.")
        ("ghc-binary"
         ,(match (or (%current-target-system) (%current-system))
            ("x86_64-linux" ghc-bootstrap-x86_64-8.2.2)
-           ("i686-linux" ghc-bootstrap-i686-8.2.2)))
+           ("i686-linux" ghc-bootstrap-i686-8.2.2)
+           ("aarch64-linux" ghc-bootstrap-aarch64-8.2.2)
+           ("armhf-linux" ghc-bootstrap-armhf-8.2.2)))
        ("ghc-testsuite"
         ,(origin
            (method url-fetch)
@@ -226,7 +258,8 @@ top of CLISP.")
            (lambda* (#:key inputs #:allow-other-keys)
              (let ((binutils (assoc-ref inputs "binutils"))
                    (gcc (assoc-ref inputs "gcc"))
-                   (ld-wrapper (assoc-ref inputs "ld-wrapper")))
+                   (ld-wrapper (or (assoc-ref inputs "gold-wrapper")
+                                   (assoc-ref inputs "ld-wrapper"))))
                (setenv "CC" (string-append gcc "/bin/gcc"))
                (setenv "CXX" (string-append gcc "/bin/g++"))
                (setenv "LD" (string-append ld-wrapper "/bin/ld"))
@@ -271,11 +304,16 @@ top of CLISP.")
                        "./utils/ghc-pkg/dist-install/build/tmp/ghc-pkg"
                        "./utils/unlit/dist/build/tmp/unlit"
                        "./ghc/stage2/build/tmp/ghc-stage2"))
+                    (gcclib (assoc-ref inputs "gcc:lib"))
                     (gmp (assoc-ref inputs "gmp"))
                     (gmp-lib (string-append gmp "/lib"))
                     (gmp-include (string-append gmp "/include"))
                     (ncurses-lib
                      (string-append (assoc-ref inputs "ncurses") "/lib"))
+                    (ld-lib-path (cons gmp-lib
+                                       (if gcclib
+                                           (list (string-append gcclib "/lib"))
+                                           '())))
                     (ld-so (string-append (assoc-ref inputs "libc")
                                           ,(glibc-dynamic-linker)))
                     (libtinfo-dir
@@ -283,10 +321,12 @@ top of CLISP.")
                                     "/lib/ghc-8.2.2/terminfo-0.4.1.0")))
                (with-directory-excursion
                    (string-append ghc-bootstrap-path "/ghc-8.2.2")
-                 (setenv "LD_LIBRARY_PATH" gmp-lib)
+                 (setenv "LD_LIBRARY_PATH" (string-join ld-lib-path ":"))
                  ;; The binaries have "/lib64/ld-linux-x86-64.so.2" hardcoded.
                  (for-each
-                  (cut invoke "patchelf" "--set-interpreter" ld-so <>)
+                  (lambda (binary)
+                    (when (file-exists? binary)
+                      (invoke "patchelf" "--set-interpreter" ld-so binary)))
                   binaries)
                  ;; The binaries include a reference to libtinfo.so.5 which
                  ;; is a subset of libncurses.so.5.  We create a symlink in a
-- 
2.26.2


  reply	other threads:[~2020-06-27 21:17 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-06-23  1:48 [bug#42014] [PATCH] WIP: gnu: Re-bootstrap Haskell with GHC 8.2.2 binaries Alex Griffin via Guix-patches via
2020-06-27 21:16 ` Alex Griffin via Guix-patches via [this message]
2020-06-27 21:21 ` Ricardo Wurmus
2020-06-27 22:09   ` Alex Griffin via Guix-patches via

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='EgF-edHWbrDu8UYMbyn1KhCeRxYHaUvcBNFI7sIlRoe3a0hZocEhHwwP0U-KvxzxK9ZoD0ueb2q72nkxbXsZXAWxNwIRoP5Fos_NmLQyaOU=@ajgrf.com' \
    --to=guix-patches@gnu.org \
    --cc=42014@debbugs.gnu.org \
    --cc=a@ajgrf.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.