From patchwork Tue May 23 15:47:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Janneke Nieuwenhuizen X-Patchwork-Id: 50262 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 6789727BBE2; Tue, 23 May 2023 16:49:15 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-3.7 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id D243627BBEC for ; Tue, 23 May 2023 16:49:02 +0100 (BST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q1UF9-0007As-Gv; Tue, 23 May 2023 11:48:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1UF2-0006wu-Bu for guix-patches@gnu.org; Tue, 23 May 2023 11:48:05 -0400 Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q1UF2-0006CR-3S for guix-patches@gnu.org; Tue, 23 May 2023 11:48:04 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1q1UF1-0007sT-VT for guix-patches@gnu.org; Tue, 23 May 2023 11:48:03 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#63527] [PATCH v5 03/11] gnu: Add rumpkernel. Resent-From: Janneke Nieuwenhuizen Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Tue, 23 May 2023 15:48:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 63527 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 63527@debbugs.gnu.org Received: via spool by 63527-submit@debbugs.gnu.org id=B63527.168485687430176 (code B ref 63527); Tue, 23 May 2023 15:48:03 +0000 Received: (at 63527) by debbugs.gnu.org; 23 May 2023 15:47:54 +0000 Received: from localhost ([127.0.0.1]:40224 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1q1UEr-0007qW-0r for submit@debbugs.gnu.org; Tue, 23 May 2023 11:47:53 -0400 Received: from eggs.gnu.org ([209.51.188.92]:34386) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1q1UEg-0007o6-Mb for 63527@debbugs.gnu.org; Tue, 23 May 2023 11:47:43 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q1UEb-00063I-F6; Tue, 23 May 2023 11:47:37 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-Version:References:In-Reply-To:Date:Subject:To: From; bh=hukt6ZD+CWCs/RFSS3WwhaKtRyvuFawWotXzel7Vz2w=; b=F5ZMqtZCf7FLlMzOuj8q ZCn8zdIWULsRlZuopixNcBD7lTR7v8uLEfTdl5VPQlyKvjL3LNwM6osKhUQ5g+MHqPvoPak76a8Kk T0vM6sqEq0fDfNKOXSGIQDyfzcyaGrPdv5hLMzHYuanSbbWZ1EdSqb8MOmCToqMTqW0yxToBeApPQ tThALu7sjAHZuCpGgnWOr9n5q9evIpzfysaYU/CI76fYQ51tr3HC5Uuiuqy8wCnPhVlGu99cTWbwn 7SlvmMU77LsKryOCKQknppBD+qd8QCBbyZPsr8BRJsp3UgL+0MM4VWI5SpXpmoOrsB+69G8PEgsi+ HL8Ug1kIOzySVQ==; Received: from 2a02-a462-da03-1-2701-7f81-a736-4607.fixed6.kpn.net ([2a02:a462:da03:1:2701:7f81:a736:4607] helo=drakenpad.fritz.box) by fencepost.gnu.org with esmtpa (Exim 4.90_1) (envelope-from ) id 1q1UEb-0002jp-2G; Tue, 23 May 2023 11:47:37 -0400 From: Janneke Nieuwenhuizen Date: Tue, 23 May 2023 17:47:24 +0200 Message-Id: <4c2e940870b39b16d69a7855a5724e37e78bfbdd.1684855847.git.janneke@gnu.org> X-Mailer: git-send-email 2.40.1 In-Reply-To: References: MIME-Version: 1.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches This uses the Debian Salsa rumpkernel package git as upstream as that is where delopment happens. Once things have stabalized upstream may change to the NetBSD git from where Debian takes their snapshots. * gnu/packages/hurd.scm (rumpkernel): New variable. (hurd-headers)[native-inputs]: Use cross-mig directly. (gnumach)[native-inputs]: Likewise. (hurd)[native-inputs]: Likewise. --- gnu/packages/hurd.scm | 246 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 234 insertions(+), 12 deletions(-) diff --git a/gnu/packages/hurd.scm b/gnu/packages/hurd.scm index d8b4dcaf4f..ff925eed75 100644 --- a/gnu/packages/hurd.scm +++ b/gnu/packages/hurd.scm @@ -33,6 +33,7 @@ (define-module (gnu packages hurd) #:use-module (guix build-system trivial) #:use-module (gnu packages autotools) #:use-module (gnu packages compression) + #:use-module (gnu packages cross-base) #:use-module (gnu packages flex) #:use-module (gnu packages gawk) #:use-module (gnu packages gnupg) @@ -162,9 +163,7 @@ (define-public hurd-headers (list autoconf automake (if (%current-target-system) - (let* ((cross-base (resolve-interface '(gnu packages cross-base))) - (cross-mig (module-ref cross-base 'cross-mig))) - (cross-mig (%current-target-system))) + (cross-mig (%current-target-system)) mig))) (arguments `(#:phases @@ -296,10 +295,8 @@ (define-public gnumach (list autoconf automake (if (%current-target-system) - (let* ((cross-base (resolve-interface '(gnu packages cross-base))) - (cross-mig (module-ref cross-base 'cross-mig))) - (cross-mig (%current-target-system))) - mig) + (cross-mig (%current-target-system)) + mig) perl texinfo-4)) (supported-systems %hurd-systems) @@ -551,11 +548,9 @@ (define-public hurd `(("autoconf" ,autoconf) ("automake" ,automake) ("libgcrypt" ,libgcrypt) ;for 'libgcrypt-config' - ("mig" ,(if (%current-target-system) - (let* ((cross-base (resolve-interface '(gnu packages cross-base))) - (cross-mig (module-ref cross-base 'cross-mig))) - (cross-mig (%current-target-system))) - mig)) + ("mig" , (if (%current-target-system) + (cross-mig (%current-target-system)) + mig)) ("pkg-config" ,pkg-config) ("perl" ,perl) ("texinfo" ,texinfo-4) @@ -651,3 +646,230 @@ (define-public netdde ;; Some drivers are dually licensed with the options being GPLv2 or one ;; of MPL/Expat/BSD-3 (dependent on the driver). (license gpl2)))) + +(define-public rumpkernel + (let ((commit "ec2ab9612be4dc48a316a21a0c96d3388478a064") + (revision "2")) + (package + (name "rumpkernel") + (version (git-version "0-20211031" revision commit)) + ;; This uses the Debian Salsa rumpkernel package git as upstream as that + ;; is where delopment happens. Once things have stabalized, upstream + ;; may change to the NetBSD git from where Debian takes their snapshots. + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://salsa.debian.org/hurd-team/rumpkernel.git") + (commit commit))) + (sha256 + (base32 + "1ypjg3jyzhh3gnanmk6fh76dwl5ml78n311nbi0hw7f7hygzn7vk")) + (file-name (git-file-name name commit)))) + (build-system gnu-build-system) + (arguments + (list + #:tests? #f + #:modules '((srfi srfi-26) + (ice-9 match) + (ice-9 rdelim) + (guix build utils) + (guix build gnu-build-system)) + ;; As we are using the Debian package as upstream, we follow their + ;; build: + ;; * apply patches in debian/patches taken from the + ;; debian/patches/series file + ;; * for the configure, make, and install stages, follow + ;; the code in debian/rules + ;; The Debian patchset includes a cross build feature that we + ;; use with two differences + ;; * Debian uses a multiarch toolchain + ;; * we use cross-mig + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'apply-patches + (lambda* (#:key target #:allow-other-keys) + (let* ((patch-directory "debian/patches/") + (series (string-append patch-directory "series")) + (text (with-input-from-file series read-string)) + (lines (string-split (string-trim-right text) #\newline)) + (patches (filter (negate (cute string-prefix? "#" <>)) + lines)) + (patch-files (map + (cute string-append patch-directory <>) + patches))) + (for-each + (cute invoke "patch" "--force" "-p1" "-i" <>) + patch-files) + ;; Somewhere in the build.sh/make process MIG is not being + ;; exported, apparently. + (when target + (substitute* "pci-userspace/src-gnu/Makefile.inc" + (("MIG=mig") + (string-append "MIG=" target "-mig"))))))) + (add-before 'configure 'setenv + (lambda* (#:key build target #:allow-other-keys) + (define (noisy-setenv name value) + (setenv name value) + (format (current-error-port) "set ~a=~s\n" name value)) + (noisy-setenv "HOST_CC" "gcc") + (when target + (noisy-setenv "MIG" (string-append target "-mig"))) + (let ((target (or target build))) + (noisy-setenv "TARGET_AR" (string-append target "-ar")) + (noisy-setenv "TARGET_CC" (string-append target "-gcc")) + (noisy-setenv "TARGET_CXX" (string-append target "-g++")) + (noisy-setenv "TARGET_LD" (string-append target "-ld")) + (noisy-setenv "TARGET_MIG" (string-append target "-mig")) + (noisy-setenv "TARGET_NM" (string-append target "-nm"))) + (setenv "PAWD" "pwd") + (for-each + (cute noisy-setenv <> "") + '("_GCC_CRTENDS" + "_GCC_CRTEND" + "_GCC_CRTBEGINS" + "_GCC_CRTBEGIN" + "_GCC_CRTI" + "_GCC_CRTN")) + (noisy-setenv "BSDOBJDIR=" (string-append (getcwd) "/obj")))) + (replace 'configure + (lambda args + (let ((configure (assoc-ref %standard-phases 'configure))) + (with-directory-excursion "buildrump.sh/src/lib/librumpuser" + (apply configure args))))) + ;; The build has three toplevel entry points + ;; * buildrump.sh/src/build.sh: create a NetBSD-compatible + ;; toolchain and supports cross-compiling + ;; * buildrump.sh/src/lib/librumpuser: the librump* libraries + ;; * pci-userspace/src-gnu: the librumpdev_pci* libraries + (replace 'build + (lambda* (#:key parallel-build? #:allow-other-keys) + (let* ((jobs (if parallel-build? (parallel-job-count) 1)) + (host-cpu (match #$(or (%current-target-system + (%current-system))) + ("i586-pc-gnu" "i386") + ("i686-linux" "i386") + ("x86_64-linux" "amd64"))) + (toprump (string-append + (getcwd) + "/buildrump.sh/src/sys/rump")) + (rump-make (string-append + (getcwd) + "/buildrump.sh/src/obj/tooldir/bin/nbmake-" + host-cpu))) + (mkdir "obj") + (with-directory-excursion "buildrump.sh/src" + (invoke + "sh" "build.sh" + "-V" "TOOLS_BUILDRUMP=yes" + "-V" "MKBINUTILS=no" + "-V" "MKGDB=no" + "-V" "MKGROFF=no" + "-V" (string-append "TOPRUMP=" toprump) + "-V" "BUILDRUMP_CPPFLAGS=-Wno-error=stringop-overread" + "-V" "RUMPUSER_EXTERNAL_DPLIBS=pthread" + "-V" (string-append + "CPPFLAGS=" + " -I../../obj/destdir." host-cpu "/usr/include" + " -D_FILE_OFFSET_BITS=64" + " -DRUMP_REGISTER_T=int" + " -DRUMPUSER_CONFIG=yes" + " -DNO_PCI_MSI_MSIX=yes" + " -DNUSB_DMA=1") + "-V" (string-append + "CWARNFLAGS=" + " -Wno-error=maybe-uninitialized" + " -Wno-error=address-of-packed-member" + " -Wno-error=unused-variable" + " -Wno-error=stack-protector" + " -Wno-error=array-parameter" + " -Wno-error=array-bounds" + " -Wno-error=stringop-overflow") + "-V" "LIBCRTBEGIN=" + "-V" "LIBCRTEND=" + "-V" "LIBCRT0=" + "-V" "LIBCRTI=" + "-V" "_GCC_CRTENDS=" + "-V" "_GCC_CRTEND=" + "-V" "_GCC_CRTBEGINS=" + "-V" "_GCC_CRTBEGIN=" + "-V" "_GCC_CRTI=" + "-V" "_GCC_CRTN=" + "-U" + "-u" + "-T" "./obj/tooldir" + "-m" host-cpu + "-j" (number->string jobs) + "tools" + "rump")) + (with-directory-excursion "buildrump.sh/src/lib/librumpuser" + (setenv "RUMPRUN" "true") + (invoke rump-make "dependall")) + (with-directory-excursion "pci-userspace/src-gnu" + (invoke rump-make "dependall"))))) + (replace 'install + (lambda _ + (define (install-file file target) + (let ((dest (string-append target (basename file)))) + (format (current-output-port) "`~a' -> `~a'~%" file dest) + (mkdir-p (dirname dest)) + ;; Some libraries are duplicated/copied around in the + ;; build system, do not fail trying to install one + ;; a second time. + (if (file-exists? dest) + (format (current-error-port) + "warning: skipping: ~a\n" file) + (let ((stat (lstat file))) + (case (stat:type stat) + ((symlink) + (let ((target (readlink file))) + (symlink target dest))) + (else + (copy-file file dest))))))) + (let ((header (string-append #$output "/include/rump")) + (lib (string-append #$output "/lib/"))) + (mkdir-p header) + (copy-recursively "buildrump.sh/src/sys/rump/include/rump" + header) + (mkdir-p lib) + (for-each + (cute install-file <> lib) + (append (find-files "buildrump.sh/src" "librump.*[.](a|so.*)") + (find-files "obj" "librump.*[.](a|so.*)"))))))))) + (inputs + (list gnumach-headers libpciaccess-0.17)) + (native-inputs + (list autoconf + automake + libgcrypt + (if (%current-target-system) + (cross-mig (%current-target-system)) + mig) + zlib)) + (supported-systems %hurd-systems) + (home-page "https://wiki.netbsd.org/rumpkernel") + (synopsis "NetBSD as rumpkernel for the GNU/Hurd") + (description + "This package provides NetBSD as rumpkernel for the GNU/Hurd, so that +the Hurd may be installed on iron. Using this rumpkernel package, the hurd +package's rumpdisk can be built which provides the pci.arbiter and rumpdisk +servers.") + (license + ;; The NetBSD rumpkernel code is a big hodgepodge of softwares many of + ;; which have their own different licensing terms, see also + ;; https://salsa.debian.org/hurd-team/rumpkernel/-/blob/master/debian/copyright + (list asl2.0 + boost1.0 + bsd-2 + bsd-3 + bsd-4 + cddl1.0 + expat + gpl1 + gpl2+ + gpl3+ + isc + lgpl2.0+ + public-domain + (@ (guix licenses) zlib) + (non-copyleft "file://src/lib/libc/hash/hashhl.c" + "See debian/copyright in the distribution."))))))