gnu: hurd: Build fixes for the 64bit Hurd.

* gnu/packages/patches/hurd-64bit.patch: New file.
* gnu/local.mk (dist_patch_DATA): Register it.
* gnu/packages/hurd.scm (hurd)[source]: Use it.
[arguments]: When building for the 64bit Hurd, add "create-machine-symlink"
phase.  In phases "build-libdde-linux" and "install-goodies", do not assume
x86, rather use actual ARCH, and follow upstream's "amd64" symlinking voodoo.

Change-Id: If264a91b2433add13f9121c482f0abe67ae5f1e9
This commit is contained in:
Janneke Nieuwenhuizen 2024-11-07 20:29:22 +01:00
parent de8196f571
commit f21fb53a8d
No known key found for this signature in database
GPG key ID: F3C1A0D9C1D65273
3 changed files with 135 additions and 48 deletions

View file

@ -317,7 +317,8 @@ Hurd-minimal package which are needed for both glibc and GCC.")
(source (origin
(inherit (package-source hurd-headers))
(patches (search-patches "hurd-rumpdisk-no-hd.patch"
"hurd-startup.patch"))))
"hurd-startup.patch"
"hurd-64bit.patch"))))
(version (package-version hurd-headers))
(arguments
`(#:tests? #f ;no "check" target
@ -467,54 +468,84 @@ exec ${system}/rc \"$@\"
(find-files (string-append out "/libexec")))
#t)))
(add-after 'build 'build-libdde-linux
(lambda* (#:key inputs native-inputs #:allow-other-keys)
(invoke (string-append (assoc-ref (or native-inputs inputs) "make")
"/bin/make")
;; XXX There can be a race condition because subdirs
;; aren't interdependent targets in the Makefile.
"-j1" "-C" "libdde_linux26"
(string-append "SHELL="
(assoc-ref (or native-inputs inputs) "bash")
"/bin/bash")
(string-append "CC="
,(cc-for-target))
(string-append "WARNINGS="
" -Wno-declaration-missing-parameter-type"
" -Wno-implicit-function-declaration"
" -Wno-implicit-int"
" -Wno-int-conversion"
" -Wno-strict-prototypes")
"ARCH=x86")))
(lambda* (#:key inputs native-inputs #:allow-other-keys)
(let ((arch ,(match (or (%current-target-system)
(%current-system))
((? target-x86-32?)
"x86")
((? target-x86-64?)
"amd64"))))
(when ,(target-hurd64?)
(let ((dir "libdde_linux26/build/include"))
(mkdir-p (string-append dir "/x86"))
(format #t "symlink ~a -> ~a\n"
(string-append dir "/x86/amd64") "x86")
(symlink "x86" (string-append dir "/amd64"))
(format #t "symlink ~a -> ~a\n"
(string-append dir "/amd64/asm-x86_64") "asm-x86")
(symlink "asm-x86" (string-append dir "/amd64/asm-x86_64"))))
(invoke (string-append (assoc-ref (or native-inputs inputs) "make")
"/bin/make")
;; XXX There can be a race condition because subdirs
;; aren't interdependent targets in the Makefile.
"-j1" "-C" "libdde_linux26"
(string-append "SHELL="
(assoc-ref (or native-inputs inputs) "bash")
"/bin/bash")
(string-append "CC="
,(cc-for-target))
(string-append "WARNINGS="
" -Wno-declaration-missing-parameter-type"
" -Wno-implicit-function-declaration"
" -Wno-implicit-int"
" -Wno-int-conversion"
" -Wno-strict-prototypes")
(string-append "ARCH=" arch)))))
(add-after 'install 'install-goodies
(lambda* (#:key inputs native-inputs outputs #:allow-other-keys)
;; Install additional goodies.
;; TODO: Build & install *.msgids for rpctrace.
(let* ((out (assoc-ref outputs "out"))
(datadir (string-append out "/share/hurd")))
;; Install libdde_linux26.
(invoke (string-append (assoc-ref (or native-inputs inputs) "make")
"/bin/make")
"-C" "libdde_linux26" "install"
(string-append "SHELL="
(assoc-ref (or native-inputs inputs) "bash")
"/bin/bash")
(string-append "INSTALLDIR="
out
"/share/libdde_linux26/build/include")
"ARCH=x86")
;; Install the fancy UTF-8 motd.
(mkdir-p (string-append out "/etc"))
(copy-file "console/motd.UTF8"
(string-append out "/etc/motd"))
(lambda* (#:key inputs native-inputs outputs #:allow-other-keys)
;; Install additional goodies.
;; TODO: Build & install *.msgids for rpctrace.
(let* ((out (assoc-ref outputs "out"))
(datadir (string-append out "/share/hurd"))
(arch ,(match (or (%current-target-system)
(%current-system))
((? target-x86-32?)
"x86")
((? target-x86-64?)
"amd64")))
(dir (string-append out "/share/libdde_linux26/build/include")))
(mkdir-p dir)
(when ,(target-hurd64?)
(mkdir-p (string-append dir "/amd64"))
(format #t "symlink ~a -> ~a\n"
(string-append dir "/amd64/asm-x86_64")
"x86")
(symlink "x86" (string-append dir "/amd46")))
(invoke (string-append (assoc-ref (or native-inputs inputs) "make")
"/bin/make")
"-C" "libdde_linux26" "install"
(string-append "SHELL="
(assoc-ref (or native-inputs inputs) "bash")
"/bin/bash")
(string-append "INSTALLDIR=" dir)
(string-append "ARCH=" arch))
(when ,(target-hurd64?)
(format #t "symlink ~a -> ~a\n"
(string-append dir "/amd64/asm-x86_64")
"asm-x86")
(symlink "asm-x86" (string-append dir "/amd64/asm-x86_64")))
;; Install the fancy UTF-8 motd.
(mkdir-p (string-append out "/etc"))
(copy-file "console/motd.UTF8"
(string-append out "/etc/motd"))
;; Install the BDF font for use by the console client.
(copy-file (assoc-ref inputs "unifont")
"unifont.gz")
(invoke "gunzip" "unifont.gz")
(mkdir-p datadir)
(copy-file "unifont"
(string-append datadir "/vga-system.bdf"))
#t))))
;; Install the BDF font for use by the console client.
(copy-file (assoc-ref inputs "unifont")
"unifont.gz")
(invoke "gunzip" "unifont.gz")
(mkdir-p datadir)
(copy-file "unifont"
(string-append datadir "/vga-system.bdf"))))))
#:configure-flags
,#~(list (string-append "LDFLAGS=-Wl,-rpath="
#$output "/lib")
@ -599,7 +630,6 @@ implementing them.")
" -Wno-implicit-int"
" -Wno-int-conversion"
" -Wno-strict-prototypes")
"ARCH=x86")
(let ((arch ,(match (or (%current-target-system)
(%current-system))
((? target-x86-32?)